Skip to content

Commit 1aeb0a2

Browse files
committed
feat: contracts getter for Viem
1 parent c132303 commit 1aeb0a2

File tree

3 files changed

+456
-27
lines changed

3 files changed

+456
-27
lines changed

contracts/deployments/contractsEthers.ts

-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import {
1717
sortitionModuleUniversityConfig as devnetSortitionUniversityConfig,
1818
disputeKitClassicUniversityConfig as devnetDkcUniversityConfig,
1919
disputeResolverUniversityConfig as devnetDrUniversityConfig,
20-
klerosCoreUniversityProxyConfig as devnetCoreUniversityProxyConfig,
2120
} from "./devnet.viem";
2221
import {
2322
klerosCoreConfig as testnetCoreConfig,

contracts/deployments/contractsViem.ts

+236-26
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,36 @@ import {
1616
sortitionModuleUniversityConfig as devnetSortitionUniversityConfig,
1717
disputeKitClassicUniversityConfig as devnetDkcUniversityConfig,
1818
disputeResolverUniversityConfig as devnetDrUniversityConfig,
19-
klerosCoreUniversityProxyConfig as devnetCoreUniversityProxyConfig,
2019
} from "./devnet.viem";
20+
import {
21+
klerosCoreConfig as testnetCoreConfig,
22+
sortitionModuleConfig as testnetSortitionConfig,
23+
disputeKitClassicConfig as testnetDkcConfig,
24+
disputeResolverConfig as testnetDrConfig,
25+
disputeTemplateRegistryConfig as testnetDtrConfig,
26+
evidenceModuleConfig as testnetEvidenceConfig,
27+
policyRegistryConfig as testnetPolicyRegistryConfig,
28+
transactionBatcherConfig as testnetBatcherConfig,
29+
chainlinkRngConfig as testnetChainlinkRngConfig,
30+
blockHashRngConfig as testnetBlockHashRngConfig,
31+
pnkConfig as testnetPnkConfig,
32+
klerosCoreSnapshotProxyConfig as testnetSnapshotProxyConfig,
33+
} from "./testnet.viem";
34+
import {
35+
klerosCoreNeoConfig as mainnetCoreConfig,
36+
sortitionModuleNeoConfig as mainnetSortitionConfig,
37+
disputeKitClassicNeoConfig as mainnetDkcConfig,
38+
disputeResolverNeoConfig as mainnetDrConfig,
39+
disputeTemplateRegistryConfig as mainnetDtrConfig,
40+
evidenceModuleConfig as mainnetEvidenceConfig,
41+
policyRegistryConfig as mainnetPolicyRegistryConfig,
42+
transactionBatcherConfig as mainnetBatcherConfig,
43+
chainlinkRngConfig as mainnetChainlinkRngConfig,
44+
randomizerRngConfig as mainnetRandomizerRngConfig,
45+
blockHashRngConfig as mainnetBlockHashRngConfig,
46+
pnkConfig as mainnetPnkConfig,
47+
klerosCoreSnapshotProxyConfig as mainnetSnapshotProxyConfig,
48+
} from "./mainnet.viem";
2149
import { type PublicClient, type WalletClient, getContract } from "viem";
2250

2351
const deployments = {
@@ -42,11 +70,25 @@ type ContractConfig = {
4270
abi: readonly any[];
4371
};
4472

45-
type ContractConfigs = {
46-
klerosCore?: {
47-
address: `0x${string}`;
48-
abi: readonly any[];
49-
};
73+
type ContractInstance = {
74+
address: `0x${string}`;
75+
abi: readonly any[];
76+
};
77+
78+
type ContractInstances = {
79+
klerosCore: ContractInstance;
80+
sortition: ContractInstance;
81+
disputeKitClassic: ContractInstance;
82+
disputeResolver: ContractInstance;
83+
disputeTemplateRegistry: ContractInstance;
84+
evidence: ContractInstance;
85+
policyRegistry: ContractInstance;
86+
transactionBatcher: ContractInstance;
87+
chainlinkRng?: ContractInstance;
88+
randomizerRng?: ContractInstance;
89+
blockHashRng: ContractInstance;
90+
pnk: ContractInstance;
91+
klerosCoreSnapshotProxy: ContractInstance;
5092
};
5193

5294
function getAddress(config: ContractConfig, chainId: number): `0x${string}` {
@@ -55,22 +97,134 @@ function getAddress(config: ContractConfig, chainId: number): `0x${string}` {
5597
return address;
5698
}
5799

58-
export const getConfigs = ({ deployment }: { deployment: DeploymentName }): ContractConfigs => {
100+
function getContractConfig({ config, chainId }: { config: ContractConfig; chainId: number }): ContractInstance {
101+
return {
102+
address: getAddress(config, chainId),
103+
abi: config.abi,
104+
};
105+
}
106+
107+
function getCommonConfigs({
108+
chainId,
109+
configs,
110+
}: {
111+
chainId: number;
112+
configs: {
113+
klerosCore: ContractConfig;
114+
sortition: ContractConfig;
115+
disputeKitClassic: ContractConfig;
116+
disputeResolver: ContractConfig;
117+
disputeTemplateRegistry: ContractConfig;
118+
evidence: ContractConfig;
119+
policyRegistry: ContractConfig;
120+
transactionBatcher: ContractConfig;
121+
blockHashRng: ContractConfig;
122+
pnk: ContractConfig;
123+
klerosCoreSnapshotProxy: ContractConfig;
124+
chainlinkRng?: ContractConfig;
125+
randomizerRng?: ContractConfig;
126+
};
127+
}): ContractInstances {
128+
const base: ContractInstances = {
129+
klerosCore: getContractConfig({ config: configs.klerosCore, chainId }),
130+
sortition: getContractConfig({ config: configs.sortition, chainId }),
131+
disputeKitClassic: getContractConfig({ config: configs.disputeKitClassic, chainId }),
132+
disputeResolver: getContractConfig({ config: configs.disputeResolver, chainId }),
133+
disputeTemplateRegistry: getContractConfig({ config: configs.disputeTemplateRegistry, chainId }),
134+
evidence: getContractConfig({ config: configs.evidence, chainId }),
135+
policyRegistry: getContractConfig({ config: configs.policyRegistry, chainId }),
136+
transactionBatcher: getContractConfig({ config: configs.transactionBatcher, chainId }),
137+
blockHashRng: getContractConfig({ config: configs.blockHashRng, chainId }),
138+
pnk: getContractConfig({ config: configs.pnk, chainId }),
139+
klerosCoreSnapshotProxy: getContractConfig({ config: configs.klerosCoreSnapshotProxy, chainId }),
140+
};
141+
142+
if (configs.chainlinkRng) base.chainlinkRng = getContractConfig({ config: configs.chainlinkRng, chainId });
143+
144+
if (configs.randomizerRng) base.randomizerRng = getContractConfig({ config: configs.randomizerRng, chainId });
145+
146+
return base;
147+
}
148+
149+
export const getConfigs = ({ deployment }: { deployment: DeploymentName }): ContractInstances => {
59150
const { chainId } = deployments[deployment];
60-
let contractConfigs: ContractConfigs = {};
61151
switch (deployment) {
62152
case "devnet":
63-
contractConfigs = {
64-
klerosCore: {
65-
address: getAddress(devnetCoreConfig, chainId),
66-
abi: devnetCoreConfig.abi,
153+
return getCommonConfigs({
154+
chainId,
155+
configs: {
156+
klerosCore: devnetCoreConfig,
157+
sortition: devnetSortitionConfig,
158+
disputeKitClassic: devnetDkcConfig,
159+
disputeResolver: devnetDrConfig,
160+
disputeTemplateRegistry: devnetDtrConfig,
161+
evidence: devnetEvidenceConfig,
162+
policyRegistry: devnetPolicyRegistryConfig,
163+
transactionBatcher: devnetBatcherConfig,
164+
blockHashRng: devnetBlockHashRngConfig,
165+
pnk: devnetPnkConfig,
166+
klerosCoreSnapshotProxy: devnetSnapshotProxyConfig,
167+
chainlinkRng: devnetChainlinkRngConfig,
67168
},
169+
});
170+
171+
case "university":
172+
return {
173+
klerosCore: getContractConfig({ config: devnetCoreUniversityConfig, chainId }),
174+
sortition: getContractConfig({ config: devnetSortitionUniversityConfig, chainId }),
175+
disputeKitClassic: getContractConfig({ config: devnetDkcUniversityConfig, chainId }),
176+
disputeResolver: getContractConfig({ config: devnetDrUniversityConfig, chainId }),
177+
disputeTemplateRegistry: getContractConfig({ config: devnetDtrConfig, chainId }), // FIXME: should not be shared with devnet
178+
evidence: getContractConfig({ config: devnetEvidenceConfig, chainId }), // Not arbitrator specific
179+
policyRegistry: getContractConfig({ config: devnetPolicyRegistryConfig, chainId }), // Not arbitrator specific
180+
transactionBatcher: getContractConfig({ config: devnetBatcherConfig, chainId }), // Not arbitrator specific
181+
blockHashRng: getContractConfig({ config: devnetBlockHashRngConfig, chainId }), // Not used in university
182+
pnk: getContractConfig({ config: devnetPnkConfig, chainId }), // Not arbitrator specific
183+
klerosCoreSnapshotProxy: getContractConfig({ config: devnetSnapshotProxyConfig, chainId }), // Not used in university
68184
};
69-
break;
185+
186+
case "testnet":
187+
return getCommonConfigs({
188+
chainId,
189+
configs: {
190+
klerosCore: testnetCoreConfig,
191+
sortition: testnetSortitionConfig,
192+
disputeKitClassic: testnetDkcConfig,
193+
disputeResolver: testnetDrConfig,
194+
disputeTemplateRegistry: testnetDtrConfig,
195+
evidence: testnetEvidenceConfig,
196+
policyRegistry: testnetPolicyRegistryConfig,
197+
transactionBatcher: testnetBatcherConfig,
198+
blockHashRng: testnetBlockHashRngConfig,
199+
pnk: testnetPnkConfig,
200+
klerosCoreSnapshotProxy: testnetSnapshotProxyConfig,
201+
chainlinkRng: testnetChainlinkRngConfig,
202+
},
203+
});
204+
205+
case "mainnetNeo":
206+
return getCommonConfigs({
207+
chainId,
208+
configs: {
209+
klerosCore: mainnetCoreConfig,
210+
sortition: mainnetSortitionConfig,
211+
disputeKitClassic: mainnetDkcConfig,
212+
disputeResolver: mainnetDrConfig,
213+
disputeTemplateRegistry: mainnetDtrConfig,
214+
evidence: mainnetEvidenceConfig,
215+
policyRegistry: mainnetPolicyRegistryConfig,
216+
transactionBatcher: mainnetBatcherConfig,
217+
blockHashRng: mainnetBlockHashRngConfig,
218+
pnk: mainnetPnkConfig,
219+
klerosCoreSnapshotProxy: mainnetSnapshotProxyConfig,
220+
chainlinkRng: mainnetChainlinkRngConfig,
221+
randomizerRng: mainnetRandomizerRngConfig,
222+
},
223+
});
224+
70225
default:
71226
throw new Error(`Unsupported deployment: ${deployment}`);
72227
}
73-
return contractConfigs;
74228
};
75229

76230
export const getContracts = ({
@@ -88,20 +242,76 @@ export const getContracts = ({
88242
wallet: walletClient,
89243
},
90244
};
91-
let klerosCore;
92-
switch (deployment) {
93-
case "devnet":
94-
const contractConfigs = getConfigs({ deployment });
95-
if (!contractConfigs.klerosCore) throw new Error("KlerosCore config not found");
96-
klerosCore = getContract({
97-
...contractConfigs.klerosCore,
245+
const contractConfigs = getConfigs({ deployment });
246+
const klerosCore = getContract({
247+
...contractConfigs.klerosCore,
248+
...clientConfig,
249+
});
250+
const sortition = getContract({
251+
...contractConfigs.sortition,
252+
...clientConfig,
253+
});
254+
const disputeKitClassic = getContract({
255+
...contractConfigs.disputeKitClassic,
256+
...clientConfig,
257+
});
258+
const disputeResolver = getContract({
259+
...contractConfigs.disputeResolver,
260+
...clientConfig,
261+
});
262+
const disputeTemplateRegistry = getContract({
263+
...contractConfigs.disputeTemplateRegistry,
264+
...clientConfig,
265+
});
266+
const evidence = getContract({
267+
...contractConfigs.evidence,
268+
...clientConfig,
269+
});
270+
const policyRegistry = getContract({
271+
...contractConfigs.policyRegistry,
272+
...clientConfig,
273+
});
274+
const transactionBatcher = getContract({
275+
...contractConfigs.transactionBatcher,
276+
...clientConfig,
277+
});
278+
const chainlinkRng = contractConfigs.chainlinkRng
279+
? getContract({
280+
...contractConfigs.chainlinkRng,
98281
...clientConfig,
99-
});
100-
break;
101-
default:
102-
throw new Error(`Unsupported deployment: ${deployment}`);
103-
}
282+
})
283+
: undefined;
284+
const randomizerRng = contractConfigs.randomizerRng
285+
? getContract({
286+
...contractConfigs.randomizerRng,
287+
...clientConfig,
288+
})
289+
: undefined;
290+
const blockHashRng = getContract({
291+
...contractConfigs.blockHashRng,
292+
...clientConfig,
293+
});
294+
const pnk = getContract({
295+
...contractConfigs.pnk,
296+
...clientConfig,
297+
});
298+
const klerosCoreSnapshotProxy = getContract({
299+
...contractConfigs.klerosCoreSnapshotProxy,
300+
...clientConfig,
301+
});
104302
return {
105303
klerosCore,
304+
sortition,
305+
disputeKitClassic,
306+
disputeResolver,
307+
disputeTemplateRegistry,
308+
evidence,
309+
policyRegistry,
310+
transactionBatcher,
311+
chainlinkRng,
312+
randomizerRng,
313+
blockHashRng,
314+
pnk,
315+
klerosCoreSnapshotProxy,
106316
};
107317
};

0 commit comments

Comments
 (0)