Skip to content

Commit 1c54fec

Browse files
committed
feat: meaning proxy contract names on the chain explorers
1 parent bbd9dba commit 1c54fec

File tree

5 files changed

+118
-18
lines changed

5 files changed

+118
-18
lines changed

contracts/deploy/utils/deployUpgradable.ts

+31-13
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,47 @@ import {
77
} from "hardhat-deploy/types";
88

99
// Rationale: https://github.com/kleros/kleros-v2/pull/1214#issue-1879116629
10-
const PROXY_OPTIONS: ProxyOptions = {
11-
proxyContract: "UUPSProxy",
12-
proxyArgs: ["{implementation}", "{data}"],
13-
checkProxyAdmin: false, // Not relevant for UUPSProxy
14-
checkABIConflict: false, // Not relevant for UUPSProxy
15-
upgradeFunction: {
16-
methodName: "upgradeToAndCall",
17-
upgradeArgs: ["{implementation}", "{data}"],
18-
},
19-
};
10+
function proxyOptions(proxyContract: string): ProxyOptions {
11+
return {
12+
proxyContract,
13+
proxyArgs: ["{implementation}", "{data}"],
14+
checkProxyAdmin: false, // Not relevant for UUPSProxy
15+
checkABIConflict: false, // Not relevant for UUPSProxy
16+
upgradeFunction: {
17+
methodName: "upgradeToAndCall",
18+
upgradeArgs: ["{implementation}", "{data}"],
19+
},
20+
};
21+
}
2022

21-
type DeployUpgradableOptions = {
23+
export type DeployUpgradableOptions = {
2224
newImplementation?: string;
2325
initializer?: string;
26+
proxyAlias?: string;
2427
} & DeployOptionsBase;
2528

29+
/**
30+
* Deploy a contract with an upgradable proxy
31+
* NOTE: This function assumes the existence of a proxy contract with the name `${proxy}Proxy`, if there is none add the option `proxyAlias: "UUPSProxy"`
32+
* @param deployments - The deployments extension
33+
* @param proxy - The name of the proxy contract
34+
* @param options - The options for the deployment
35+
* @returns The deployment result
36+
*/
2637
export const deployUpgradable = async (
2738
deployments: DeploymentsExtension,
2839
proxy: string,
2940
options: DeployUpgradableOptions
3041
): Promise<DeployResult> => {
3142
const { deploy } = deployments;
32-
const { newImplementation, initializer, args: initializerArgs, proxy: proxyOverrides, ...otherOptions } = options;
43+
const {
44+
newImplementation,
45+
initializer,
46+
args: initializerArgs,
47+
proxy: proxyOverrides,
48+
proxyAlias,
49+
...otherOptions
50+
} = options;
3351

3452
const methodName = initializer ?? "initialize";
3553
const args = initializerArgs ?? [];
@@ -50,7 +68,7 @@ export const deployUpgradable = async (
5068
...otherOptions,
5169
...contract,
5270
proxy: {
53-
...PROXY_OPTIONS,
71+
...proxyOptions(proxyAlias ?? `${proxy}Proxy`),
5472
...implementationName,
5573
...((proxyOverrides as ProxyOptions) ?? {}),
5674
execute: {

contracts/src/proxy/KlerosProxies.sol

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
//SPDX-License-Identifier: MIT
2+
3+
pragma solidity 0.8.24;
4+
5+
import "./UUPSProxy.sol";
6+
7+
/// Workaround to get meaningful names for the proxy contracts
8+
/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers
9+
10+
contract DisputeKitClassicNeoProxy is UUPSProxy {
11+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
12+
}
13+
14+
contract DisputeKitClassicUniversityProxy is UUPSProxy {
15+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
16+
}
17+
18+
contract DisputeKitClassicProxy is UUPSProxy {
19+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
20+
}
21+
22+
contract DisputeTemplateRegistryProxy is UUPSProxy {
23+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
24+
}
25+
26+
contract EvidenceModuleProxy is UUPSProxy {
27+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
28+
}
29+
30+
contract ForeignGatewayOnEthereumProxy is UUPSProxy {
31+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
32+
}
33+
34+
contract HomeGatewayToEthereumProxy is UUPSProxy {
35+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
36+
}
37+
38+
contract KlerosCoreNeoProxy is UUPSProxy {
39+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
40+
}
41+
42+
contract KlerosCoreRulerProxy is UUPSProxy {
43+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
44+
}
45+
46+
contract KlerosCoreUniversityProxy is UUPSProxy {
47+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
48+
}
49+
50+
contract KlerosCoreProxy is UUPSProxy {
51+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
52+
}
53+
54+
contract PolicyRegistryProxy is UUPSProxy {
55+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
56+
}
57+
58+
contract RandomizerRNGProxy is UUPSProxy {
59+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
60+
}
61+
62+
contract SortitionModuleNeoProxy is UUPSProxy {
63+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
64+
}
65+
66+
contract SortitionModuleUniversityProxy is UUPSProxy {
67+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
68+
}
69+
70+
contract SortitionModuleProxy is UUPSProxy {
71+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
72+
}

contracts/src/proxy/mock/by-inheritance/UpgradedByInheritance.sol

+5
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@
44
pragma solidity 0.8.24;
55

66
import "../../UUPSProxiable.sol";
7+
import "../../UUPSProxy.sol";
78
import "../../Initializable.sol";
89

10+
contract UpgradedByInheritanceV1Proxy is UUPSProxy {
11+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
12+
}
13+
914
contract UpgradedByInheritanceV1 is UUPSProxiable, Initializable {
1015
address public governor;
1116
uint256 public counter;

contracts/src/proxy/mock/by-rewrite/UpgradedByRewrite.sol

+5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ pragma solidity 0.8.24;
55

66
import "../../UUPSProxiable.sol";
77
import "../../Initializable.sol";
8+
import "../../UUPSProxy.sol";
9+
10+
contract UpgradedByRewriteProxy is UUPSProxy {
11+
constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}
12+
}
813

914
contract UpgradedByRewrite is UUPSProxiable, Initializable {
1015
//------------------------

contracts/test/proxy/index.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import { expect } from "chai";
2-
import { log } from "console";
32
import { ethers, deployments } from "hardhat";
43
import { DeployResult } from "hardhat-deploy/types";
4+
import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers";
55
import { deployUpgradable } from "../../deploy/utils/deployUpgradable";
66
import { UpgradedByInheritanceV1, UpgradedByInheritanceV2 } from "../../typechain-types";
77
import { UpgradedByRewrite as UpgradedByRewriteV1 } from "../../typechain-types/src/proxy/mock/by-rewrite";
88
import { UpgradedByRewrite as UpgradedByRewriteV2 } from "../../typechain-types/src/proxy/mock/by-rewrite/UpgradedByRewriteV2.sol";
99

10-
let deployer;
11-
let user1;
10+
let deployer: HardhatEthersSigner;
11+
let user1: HardhatEthersSigner;
1212

1313
let proxyDeployment: DeployResult;
14-
let proxy;
15-
let implementation;
14+
let proxy: any;
15+
let implementation: any;
1616

1717
describe("Upgradability", async () => {
1818
describe("Upgradability Permissions", async () => {

0 commit comments

Comments
 (0)