Skip to content

Commit 692c83f

Browse files
committed
feat: deployment files exported, added a getter of Ethers contracts
1 parent d574ce8 commit 692c83f

File tree

9 files changed

+749
-9
lines changed

9 files changed

+749
-9
lines changed
Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
import { ethers } from "ethers";
2+
import { arbitrum, arbitrumSepolia } from "viem/chains";
3+
import {
4+
klerosCoreConfig as devnetCoreConfig,
5+
sortitionModuleConfig as devnetSortitionConfig,
6+
disputeKitClassicConfig as devnetDkcConfig,
7+
disputeResolverConfig as devnetDrConfig,
8+
disputeTemplateRegistryConfig as devnetDtrConfig,
9+
evidenceModuleConfig as devnetEvidenceConfig,
10+
policyRegistryConfig as devnetPolicyRegistryConfig,
11+
transactionBatcherConfig as devnetBatcherConfig,
12+
chainlinkRngConfig as devnetChainlinkRngConfig,
13+
blockHashRngConfig as devnetBlockHashRngConfig,
14+
pnkConfig as devnetPnkConfig,
15+
klerosCoreSnapshotProxyConfig as devnetSnapshotProxyConfig,
16+
klerosCoreUniversityConfig as devnetCoreUniversityConfig,
17+
sortitionModuleUniversityConfig as devnetSortitionUniversityConfig,
18+
disputeKitClassicUniversityConfig as devnetDkcUniversityConfig,
19+
disputeResolverUniversityConfig as devnetDrUniversityConfig,
20+
klerosCoreUniversityProxyConfig as devnetCoreUniversityProxyConfig,
21+
} from "./devnet.viem";
22+
import {
23+
klerosCoreConfig as testnetCoreConfig,
24+
sortitionModuleConfig as testnetSortitionConfig,
25+
disputeKitClassicConfig as testnetDkcConfig,
26+
disputeResolverConfig as testnetDrConfig,
27+
disputeTemplateRegistryConfig as testnetDtrConfig,
28+
evidenceModuleConfig as testnetEvidenceConfig,
29+
policyRegistryConfig as testnetPolicyRegistryConfig,
30+
transactionBatcherConfig as testnetBatcherConfig,
31+
chainlinkRngConfig as testnetChainlinkRngConfig,
32+
blockHashRngConfig as testnetBlockHashRngConfig,
33+
pnkConfig as testnetPnkConfig,
34+
klerosCoreSnapshotProxyConfig as testnetSnapshotProxyConfig,
35+
} from "./testnet.viem";
36+
import {
37+
klerosCoreNeoConfig as mainnetCoreConfig,
38+
sortitionModuleNeoConfig as mainnetSortitionConfig,
39+
disputeKitClassicNeoConfig as mainnetDkcConfig,
40+
disputeResolverNeoConfig as mainnetDrConfig,
41+
disputeTemplateRegistryConfig as mainnetDtrConfig,
42+
evidenceModuleConfig as mainnetEvidenceConfig,
43+
policyRegistryConfig as mainnetPolicyRegistryConfig,
44+
transactionBatcherConfig as mainnetBatcherConfig,
45+
chainlinkRngConfig as mainnetChainlinkRngConfig,
46+
randomizerRngConfig as mainnetRandomizerRngConfig,
47+
blockHashRngConfig as mainnetBlockHashRngConfig,
48+
pnkConfig as mainnetPnkConfig,
49+
klerosCoreSnapshotProxyConfig as mainnetSnapshotProxyConfig,
50+
} from "./mainnet.viem";
51+
import {
52+
KlerosCore,
53+
KlerosCore__factory,
54+
SortitionModule,
55+
SortitionModule__factory,
56+
DisputeKitClassic,
57+
DisputeKitClassic__factory,
58+
DisputeResolver,
59+
DisputeResolver__factory,
60+
DisputeTemplateRegistry,
61+
DisputeTemplateRegistry__factory,
62+
EvidenceModule,
63+
EvidenceModule__factory,
64+
PolicyRegistry,
65+
PolicyRegistry__factory,
66+
TransactionBatcher,
67+
TransactionBatcher__factory,
68+
ChainlinkRNG,
69+
ChainlinkRNG__factory,
70+
RandomizerRNG,
71+
RandomizerRNG__factory,
72+
BlockHashRNG,
73+
BlockHashRNG__factory,
74+
PNK,
75+
PNK__factory,
76+
KlerosCoreSnapshotProxy,
77+
KlerosCoreSnapshotProxy__factory,
78+
KlerosCoreUniversity,
79+
KlerosCoreUniversity__factory,
80+
SortitionModuleUniversity,
81+
SortitionModuleUniversity__factory,
82+
KlerosCoreNeo,
83+
KlerosCoreNeo__factory,
84+
SortitionModuleNeo,
85+
SortitionModuleNeo__factory,
86+
} from "../typechain-types";
87+
88+
const deployments = {
89+
devnet: {
90+
chainId: arbitrumSepolia.id,
91+
},
92+
university: {
93+
chainId: arbitrumSepolia.id,
94+
},
95+
testnet: {
96+
chainId: arbitrumSepolia.id,
97+
},
98+
mainnetNeo: {
99+
chainId: arbitrum.id,
100+
},
101+
} as const;
102+
103+
type DeploymentName = keyof typeof deployments;
104+
105+
type ContractConfig = {
106+
address: Record<number, `0x${string}`>;
107+
abi: readonly any[];
108+
};
109+
110+
function getAddress(config: ContractConfig, chainId: number): `0x${string}` {
111+
const address = config.address[chainId];
112+
if (!address) throw new Error(`No address found for chainId ${chainId}`);
113+
return address;
114+
}
115+
116+
type CommonFactoriesConfigs = {
117+
dkcConfig: ContractConfig;
118+
drConfig: ContractConfig;
119+
dtrConfig: ContractConfig;
120+
evidenceConfig: ContractConfig;
121+
policyRegistryConfig: ContractConfig;
122+
batcherConfig: ContractConfig;
123+
chainlinkRngConfig?: ContractConfig;
124+
randomizerRngConfig?: ContractConfig;
125+
blockHashRngConfig: ContractConfig;
126+
pnkConfig: ContractConfig;
127+
snapshotProxyConfig: ContractConfig;
128+
};
129+
130+
type CommonFactories = {
131+
disputeKitClassic: DisputeKitClassic;
132+
disputeResolver: DisputeResolver;
133+
disputeTemplateRegistry: DisputeTemplateRegistry;
134+
evidence: EvidenceModule;
135+
policyRegistry: PolicyRegistry;
136+
transactionBatcher: TransactionBatcher;
137+
chainlinkRng: ChainlinkRNG | null;
138+
randomizerRng: RandomizerRNG | null;
139+
blockHashRng: BlockHashRNG;
140+
pnk: PNK;
141+
klerosCoreSnapshotProxy: KlerosCoreSnapshotProxy;
142+
};
143+
144+
function getCommonFactories(
145+
configs: CommonFactoriesConfigs,
146+
provider: ethers.Provider,
147+
chainId: number
148+
): CommonFactories {
149+
return {
150+
disputeKitClassic: DisputeKitClassic__factory.connect(getAddress(configs.dkcConfig, chainId), provider),
151+
disputeResolver: DisputeResolver__factory.connect(getAddress(configs.drConfig, chainId), provider),
152+
disputeTemplateRegistry: DisputeTemplateRegistry__factory.connect(getAddress(configs.dtrConfig, chainId), provider),
153+
evidence: EvidenceModule__factory.connect(getAddress(configs.evidenceConfig, chainId), provider),
154+
policyRegistry: PolicyRegistry__factory.connect(getAddress(configs.policyRegistryConfig, chainId), provider),
155+
transactionBatcher: TransactionBatcher__factory.connect(getAddress(configs.batcherConfig, chainId), provider),
156+
chainlinkRng: configs.chainlinkRngConfig
157+
? ChainlinkRNG__factory.connect(getAddress(configs.chainlinkRngConfig, chainId), provider)
158+
: null,
159+
randomizerRng: configs.randomizerRngConfig
160+
? RandomizerRNG__factory.connect(getAddress(configs.randomizerRngConfig, chainId), provider)
161+
: null,
162+
blockHashRng: BlockHashRNG__factory.connect(getAddress(configs.blockHashRngConfig, chainId), provider),
163+
pnk: PNK__factory.connect(getAddress(configs.pnkConfig, chainId), provider),
164+
klerosCoreSnapshotProxy: KlerosCoreSnapshotProxy__factory.connect(
165+
getAddress(configs.snapshotProxyConfig, chainId),
166+
provider
167+
),
168+
};
169+
}
170+
171+
export const getContracts = async (provider: ethers.Provider, deployment: DeploymentName) => {
172+
const { chainId } = deployments[deployment];
173+
let klerosCore: KlerosCore | KlerosCoreNeo | KlerosCoreUniversity;
174+
let sortition: SortitionModule | SortitionModuleNeo | SortitionModuleUniversity;
175+
let commonFactories: CommonFactories;
176+
177+
switch (deployment) {
178+
case "devnet": {
179+
klerosCore = KlerosCore__factory.connect(getAddress(devnetCoreConfig, chainId), provider);
180+
sortition = SortitionModule__factory.connect(getAddress(devnetSortitionConfig, chainId), provider);
181+
commonFactories = getCommonFactories(
182+
{
183+
dkcConfig: devnetDkcConfig,
184+
drConfig: devnetDrConfig,
185+
dtrConfig: devnetDtrConfig,
186+
evidenceConfig: devnetEvidenceConfig,
187+
policyRegistryConfig: devnetPolicyRegistryConfig,
188+
batcherConfig: devnetBatcherConfig,
189+
chainlinkRngConfig: devnetChainlinkRngConfig,
190+
blockHashRngConfig: devnetBlockHashRngConfig,
191+
pnkConfig: devnetPnkConfig,
192+
snapshotProxyConfig: devnetSnapshotProxyConfig,
193+
},
194+
provider,
195+
chainId
196+
);
197+
break;
198+
}
199+
case "university": {
200+
klerosCore = KlerosCoreUniversity__factory.connect(getAddress(devnetCoreUniversityConfig, chainId), provider);
201+
sortition = SortitionModuleUniversity__factory.connect(
202+
getAddress(devnetSortitionUniversityConfig, chainId),
203+
provider
204+
);
205+
commonFactories = getCommonFactories(
206+
{
207+
dkcConfig: devnetDkcUniversityConfig,
208+
drConfig: devnetDrUniversityConfig,
209+
dtrConfig: devnetDtrConfig,
210+
evidenceConfig: devnetEvidenceConfig,
211+
policyRegistryConfig: devnetPolicyRegistryConfig,
212+
batcherConfig: devnetBatcherConfig,
213+
chainlinkRngConfig: devnetChainlinkRngConfig,
214+
blockHashRngConfig: devnetBlockHashRngConfig,
215+
pnkConfig: devnetPnkConfig,
216+
snapshotProxyConfig: devnetSnapshotProxyConfig,
217+
},
218+
provider,
219+
chainId
220+
);
221+
break;
222+
}
223+
case "testnet":
224+
klerosCore = KlerosCore__factory.connect(getAddress(testnetCoreConfig, chainId), provider);
225+
sortition = SortitionModule__factory.connect(getAddress(testnetSortitionConfig, chainId), provider);
226+
commonFactories = getCommonFactories(
227+
{
228+
dkcConfig: testnetDkcConfig,
229+
drConfig: testnetDrConfig,
230+
dtrConfig: testnetDtrConfig,
231+
evidenceConfig: testnetEvidenceConfig,
232+
policyRegistryConfig: testnetPolicyRegistryConfig,
233+
batcherConfig: testnetBatcherConfig,
234+
chainlinkRngConfig: testnetChainlinkRngConfig,
235+
blockHashRngConfig: testnetBlockHashRngConfig,
236+
pnkConfig: testnetPnkConfig,
237+
snapshotProxyConfig: testnetSnapshotProxyConfig,
238+
},
239+
provider,
240+
chainId
241+
);
242+
break;
243+
case "mainnetNeo":
244+
klerosCore = KlerosCoreNeo__factory.connect(getAddress(mainnetCoreConfig, chainId), provider);
245+
sortition = SortitionModuleNeo__factory.connect(getAddress(mainnetSortitionConfig, chainId), provider);
246+
commonFactories = getCommonFactories(
247+
{
248+
dkcConfig: mainnetDkcConfig,
249+
drConfig: mainnetDrConfig,
250+
dtrConfig: mainnetDtrConfig,
251+
evidenceConfig: mainnetEvidenceConfig,
252+
policyRegistryConfig: mainnetPolicyRegistryConfig,
253+
batcherConfig: mainnetBatcherConfig,
254+
chainlinkRngConfig: mainnetChainlinkRngConfig,
255+
randomizerRngConfig: mainnetRandomizerRngConfig,
256+
blockHashRngConfig: mainnetBlockHashRngConfig,
257+
pnkConfig: mainnetPnkConfig,
258+
snapshotProxyConfig: mainnetSnapshotProxyConfig,
259+
},
260+
provider,
261+
chainId
262+
);
263+
break;
264+
default:
265+
throw new Error(`Unsupported deployment: ${deployment}`);
266+
}
267+
return { klerosCore, sortition, ...commonFactories };
268+
};
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import { arbitrum, arbitrumSepolia } from "viem/chains";
2+
import { disputeTemplateRegistryConfig as devnetDtrConfig, klerosCoreConfig as devnetCoreConfig } from "./devnet.viem";
3+
import {
4+
disputeTemplateRegistryConfig as mainnetDtrConfig,
5+
klerosCoreNeoConfig as mainnetCoreConfig,
6+
} from "./mainnet.viem";
7+
import { type PublicClient, type WalletClient } from "viem";
8+
9+
export const Cores = {
10+
BASE: "BASE",
11+
NEO: "NEO",
12+
UNIVERSITY: "UNIVERSITY",
13+
} as const;
14+
15+
export type Core = (typeof Cores)[keyof typeof Cores];
16+
17+
export const getContracts = ({
18+
publicClient,
19+
walletClient,
20+
chainId,
21+
coreType,
22+
}: {
23+
publicClient: PublicClient;
24+
walletClient?: WalletClient;
25+
chainId: number;
26+
coreType: Core;
27+
}) => {
28+
throw new Error("Not implemented");
29+
switch (chainId) {
30+
case arbitrum.id:
31+
return {
32+
disputeTemplateRegistry: {
33+
address: mainnetDtrConfig.address[chainId],
34+
publicClient,
35+
walletClient,
36+
abi: mainnetDtrConfig.abi,
37+
},
38+
klerosCore: {
39+
address: mainnetCoreConfig.address[chainId],
40+
publicClient,
41+
walletClient,
42+
abi: mainnetCoreConfig.abi,
43+
},
44+
};
45+
case arbitrumSepolia.id:
46+
return {
47+
disputeTemplateRegistry: {
48+
address: devnetDtrConfig.address[chainId],
49+
publicClient,
50+
walletClient,
51+
abi: devnetDtrConfig.abi,
52+
},
53+
klerosCore: {
54+
address: devnetCoreConfig.address[chainId],
55+
publicClient,
56+
walletClient,
57+
abi: devnetCoreConfig.abi,
58+
},
59+
};
60+
default:
61+
throw new Error(`Unsupported chainId: ${chainId}`);
62+
}
63+
};
64+
65+
// TODO: do the same for Viem ?

contracts/deployments/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// Typechain Ethers v6 artifacts
2+
export * as arbitrum from "./arbitrum";
3+
export * as arbitrumSepolia from "./arbitrumSepolia";
4+
export * as arbitrumSepoliaDevnet from "./arbitrumSepoliaDevnet";
5+
6+
// Viem artifacts
7+
export * as devnetViem from "./devnet.viem";
8+
export * as mainnetViem from "./mainnet.viem";
9+
export * as testnetViem from "./testnet.viem";
10+
11+
export { getContracts as getContractsEthers } from "./contractsEthers";
12+
export { getContracts as getContractsViem } from "./contractsViem";

contracts/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
"@types/chai": "^4.3.20",
8585
"@types/mocha": "^10.0.10",
8686
"@types/node": "^20.17.6",
87+
"@types/sinon": "^17.0.4",
8788
"@wagmi/cli": "^2.2.0",
8889
"abitype": "^0.10.3",
8990
"chai": "^4.5.0",
@@ -109,6 +110,7 @@
109110
"prettier": "^3.3.3",
110111
"prettier-plugin-solidity": "^1.4.2",
111112
"shelljs": "^0.8.5",
113+
"sinon": "^20.0.0",
112114
"solhint-plugin-prettier": "^0.1.0",
113115
"solidity-coverage": "^0.8.13",
114116
"ts-node": "^10.9.2",

0 commit comments

Comments
 (0)