Skip to content

Commit 8d0b613

Browse files
authored
Merge pull request #78 from kleros/fix(web)/wagmi-generate
Fix(web)/wagmi generate
2 parents 6461ba6 + 480af52 commit 8d0b613

File tree

11 files changed

+128
-116
lines changed

11 files changed

+128
-116
lines changed

contracts/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,6 @@
8686
},
8787
"dependencies": {
8888
"@kleros/curate-v2-templates": "workspace:^",
89-
"@kleros/kleros-v2-contracts": "^0.9.2"
89+
"@kleros/kleros-v2-contracts": "^0.9.3"
9090
}
9191
}

web/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"@graphql-codegen/cli": "^4.0.1",
4848
"@graphql-codegen/client-preset": "^4.2.0",
4949
"@kleros/curate-v2-tsconfig": "workspace:^",
50-
"@kleros/kleros-v2-contracts": "^0.3.2",
50+
"@kleros/kleros-v2-contracts": "^0.9.3",
5151
"@types/react": "^18.3.12",
5252
"@types/react-dom": "^18.3.1",
5353
"@types/react-modal": "^3.16.3",

web/src/components/ActionButton/Modal/ChallengeItemModal.tsx

+7-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import Header from "./Header";
44
import Buttons from "./Buttons";
55
import DepositRequired from "./DepositRequired";
66
import Info from "./Info";
7-
import { useArbitrationCost } from "hooks/useArbitrationCostFromKlerosCore";
87
import { useAccount, useBalance, usePublicClient } from "wagmi";
98
import { wrapWithToast } from "utils/wrapWithToast";
109
import { IBaseModal } from ".";
@@ -18,6 +17,7 @@ import {
1817
useSimulateCurateV2ChallengeRequest,
1918
useWriteCurateV2ChallengeRequest,
2019
} from "hooks/useContract";
20+
import { useReadKlerosCoreArbitrationCost } from "hooks/contracts/generated";
2121

2222
const ReStyledModal = styled(Modal)`
2323
gap: 32px;
@@ -66,7 +66,12 @@ const ChallengeItemModal: React.FC<IChallengeItemModal> = ({
6666
address: registryAddress,
6767
});
6868

69-
const { arbitrationCost, isLoading: isLoadingArbCost } = useArbitrationCost(arbitratorExtraData);
69+
const { data: arbitrationCost, isLoading: isLoadingArbCost } = useReadKlerosCoreArbitrationCost({
70+
query: {
71+
enabled: !isUndefined(arbitratorExtraData),
72+
},
73+
args: [arbitratorExtraData!],
74+
});
7075

7176
const depositRequired = useMemo(() => {
7277
if (!arbitrationCost || !submissionChallengeDeposit || !removalChallengeDeposit) return 0n;

web/src/components/ActionButton/Modal/RemoveModal.tsx

+8-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import DepositRequired from "./DepositRequired";
66
import Info from "./Info";
77
import { IBaseModal } from ".";
88
import { useAccount, useBalance, usePublicClient } from "wagmi";
9-
import { useArbitrationCost } from "hooks/useArbitrationCostFromKlerosCore";
9+
1010
import { wrapWithToast } from "utils/wrapWithToast";
1111
import EvidenceUpload, { Evidence } from "./EvidenceUpload";
1212
import Modal from "components/Modal";
@@ -17,6 +17,7 @@ import {
1717
useSimulateCurateV2RemoveItem,
1818
useWriteCurateV2RemoveItem,
1919
} from "hooks/useContract";
20+
import { useReadKlerosCoreArbitrationCost } from "hooks/contracts/generated";
2021

2122
const ReStyledModal = styled(Modal)`
2223
gap: 32px;
@@ -47,8 +48,12 @@ const RemoveModal: React.FC<IRemoveModal> = ({ toggleModal, isItem, registryAddr
4748
const { data: removalDeposit, isLoading: isRemovalDepositLoading } = useReadCurateV2RemovalBaseDeposit({
4849
address: registryAddress,
4950
});
50-
51-
const { arbitrationCost, isLoading: isLoadingArbCost } = useArbitrationCost(arbitratorExtraData);
51+
const { data: arbitrationCost, isLoading: isLoadingArbCost } = useReadKlerosCoreArbitrationCost({
52+
query: {
53+
enabled: !isUndefined(arbitratorExtraData),
54+
},
55+
args: [arbitratorExtraData!],
56+
});
5257

5358
const depositRequired = useMemo(() => {
5459
if (!arbitrationCost || !removalDeposit) return 0n;

web/src/components/ActionButton/Modal/ResubmitModal.tsx

+9-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import DepositRequired from "./DepositRequired";
66
import Info from "./Info";
77
import { IBaseModal } from ".";
88
import { useAccount, useBalance, usePublicClient } from "wagmi";
9-
import { useArbitrationCost } from "hooks/useArbitrationCostFromKlerosCore";
9+
1010
import { wrapWithToast } from "utils/wrapWithToast";
1111
import { useItemDetailsQuery } from "hooks/queries/useItemDetailsQuery";
1212
import Modal from "components/Modal";
@@ -16,6 +16,8 @@ import {
1616
useSimulateCurateV2AddItem,
1717
useWriteCurateV2AddItem,
1818
} from "hooks/useContract";
19+
import { useReadKlerosCoreArbitrationCost } from "hooks/contracts/generated";
20+
import { isUndefined } from "src/utils";
1921

2022
const ReStyledModal = styled(Modal)`
2123
gap: 32px;
@@ -52,7 +54,12 @@ const ResubmitModal: React.FC<ISubmitModal> = ({ toggleModal, isItem, registryAd
5254
address: registryAddress,
5355
});
5456

55-
const { arbitrationCost, isLoading: isLoadingArbCost } = useArbitrationCost(arbitratorExtraData);
57+
const { data: arbitrationCost, isLoading: isLoadingArbCost } = useReadKlerosCoreArbitrationCost({
58+
query: {
59+
enabled: !isUndefined(arbitratorExtraData),
60+
},
61+
args: [arbitratorExtraData!],
62+
});
5663

5764
const depositRequired = useMemo(() => {
5865
if (!arbitrationCost || !removalDeposit) return 0n;

web/src/hooks/useArbitrationCostFromKlerosCore.ts

-43
This file was deleted.

web/src/pages/SubmitItem/Header/index.tsx

+8-2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ import Skeleton from "react-loading-skeleton";
99
import { useParams } from "react-router-dom";
1010
import { useSubmitItemContext } from "context/SubmitItemContext";
1111
import { formatUnitsWei, formatValue } from "utils/format";
12-
import { useArbitrationCost } from "hooks/useArbitrationCostFromKlerosCore";
12+
1313
import { useReadCurateV2GetArbitratorExtraData, useReadCurateV2SubmissionBaseDeposit } from "hooks/useContract";
1414
import { isUndefined } from "src/utils";
15+
import { useReadKlerosCoreArbitrationCost } from "hooks/contracts/generated";
1516

1617
const Container = styled.div`
1718
display: flex;
@@ -97,7 +98,12 @@ const Header: React.FC<IHeader> = ({}) => {
9798
address: listAddress as `0x${string}`,
9899
});
99100

100-
const { arbitrationCost } = useArbitrationCost(arbitratorExtraData);
101+
const { data: arbitrationCost } = useReadKlerosCoreArbitrationCost({
102+
query: {
103+
enabled: !isUndefined(arbitratorExtraData),
104+
},
105+
args: [arbitratorExtraData!],
106+
});
101107

102108
useEffect(() => {
103109
if (isUndefined(deposit) || isUndefined(arbitrationCost)) return;

web/src/pages/SubmitList/AdvancedParameters/ArbitrationParameters.tsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ import Skeleton from "react-loading-skeleton";
99
import ETH from "svgs/icons/eth-round.svg";
1010
import LightButton from "components/LightButton";
1111
import { useSubmitListContext } from "context/SubmitListContext";
12-
import { useArbitrationCost } from "hooks/useArbitrationCostFromKlerosCore";
12+
1313
import { prepareArbitratorExtradata } from "utils/prepareArbitratorExtradata";
1414
import { formatEther, isAddress } from "viem";
1515
import { KLEROS_ARBITRATOR, KLEROS_GOVERNOR } from "consts/arbitration";
16+
import { useReadKlerosCoreArbitrationCost } from "hooks/contracts/generated";
1617

1718
const Container = styled.div`
1819
display: flex;
@@ -79,9 +80,9 @@ const AbritrationParameters: React.FC = () => {
7980
[listData.governor]
8081
);
8182

82-
const { arbitrationCost } = useArbitrationCost(
83-
prepareArbitratorExtradata(listData.courtId ?? "1", listData.numberOfJurors)
84-
);
83+
const { data: arbitrationCost } = useReadKlerosCoreArbitrationCost({
84+
args: [prepareArbitratorExtradata(listData.courtId ?? "1", listData.numberOfJurors)],
85+
});
8586

8687
useEffect(
8788
() => setListData({ ...listData, arbitrationCost: formatEther((arbitrationCost as bigint) ?? "") }),

web/src/pages/SubmitList/NavigationButtons/SubmitListButton.tsx

+13-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import styled from "styled-components";
88
import CheckCircle from "svgs/icons/check-circle-outline.svg";
99
import ClosedCircleIcon from "components/StyledIcons/ClosedCircleIcon";
1010
import { ListProgress, useSubmitListContext } from "context/SubmitListContext";
11-
import { useArbitrationCost } from "hooks/useArbitrationCostFromKlerosCore";
1211
import { isUndefined } from "utils/index";
1312
import { wrapWithToast } from "utils/wrapWithToast";
1413
import { formatUnitsWei } from "utils/format";
@@ -26,7 +25,12 @@ import {
2625
useReadCurateV2SubmissionBaseDeposit,
2726
useWriteCurateV2AddItem,
2827
} from "hooks/useContract";
29-
import { curateV2Abi, useSimulateCurateFactoryDeploy, useWriteCurateFactoryDeploy } from "hooks/contracts/generated";
28+
import {
29+
curateV2Abi,
30+
useReadKlerosCoreArbitrationCost,
31+
useSimulateCurateFactoryDeploy,
32+
useWriteCurateFactoryDeploy,
33+
} from "hooks/contracts/generated";
3034
import { ErrorButtonMessage } from "components/ActionButton/Modal/Buttons/ErrorButtonMessage";
3135

3236
const StyledCheckCircle = styled(CheckCircle)`
@@ -61,7 +65,13 @@ const SubmitListButton: React.FC = () => {
6165
const { data: submissionBaseDeposit } = useReadCurateV2SubmissionBaseDeposit({
6266
address: MAIN_CURATE_ADDRESS as `0x${string}`,
6367
});
64-
const { arbitrationCost, isLoading: isLoadingArbCost } = useArbitrationCost(arbitratorExtraData);
68+
69+
const { data: arbitrationCost, isLoading: isLoadingArbCost } = useReadKlerosCoreArbitrationCost({
70+
query: {
71+
enabled: !isUndefined(arbitratorExtraData),
72+
},
73+
args: [arbitratorExtraData!],
74+
});
6575

6676
const totalCostToSubmit = useMemo(() => {
6777
if (isUndefined(arbitrationCost) || isUndefined(submissionBaseDeposit)) return;

web/wagmi.config.ts

+70-24
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,69 @@ import { readdir, readFile } from "fs/promises";
44
import { parse, join } from "path";
55
import { Chain } from "wagmi/chains";
66
import dotenv from "dotenv";
7+
import {
8+
arbitrumSepoliaDevnet as arbitratorDevnet,
9+
arbitrumSepolia as arbitratorTestnet,
10+
arbitrum as arbitratorMainnet,
11+
} from "@kleros/kleros-v2-contracts/cjs/deployments";
712

813
dotenv.config();
914

10-
const readArtifacts = async (viemChainName: string, hardhatChainName?: string) => {
15+
type ArbitratorContracts = {
16+
default: {
17+
contracts: {
18+
KlerosCore: {
19+
address: `0x${string}`;
20+
abi: any[];
21+
};
22+
SortitionModule: {
23+
address: `0x${string}`;
24+
abi: any[];
25+
};
26+
EvidenceModule: {
27+
address: `0x${string}`;
28+
abi: any[];
29+
};
30+
DisputeTemplateRegistry: {
31+
address: `0x${string}`;
32+
abi: any[];
33+
};
34+
};
35+
};
36+
};
37+
38+
const addArbitratorContract = ({
39+
results,
40+
chain,
41+
name,
42+
contract,
43+
}: {
44+
results: ContractConfig[];
45+
chain: Chain;
46+
name: string;
47+
contract: { address: `0x${string}`; abi: any[] };
48+
}) => {
49+
results.push({
50+
name,
51+
address: {
52+
[chain.id]: contract.address as `0x{string}`,
53+
},
54+
abi: contract.abi,
55+
});
56+
};
57+
58+
const readArtifacts = async (
59+
viemChainName: string,
60+
hardhatChainName: string,
61+
arbitratorContracts: ArbitratorContracts
62+
) => {
1163
const chains = await import("wagmi/chains");
1264
const chain = chains[viemChainName] as Chain;
1365
if (!chain) {
1466
throw new Error(`Viem chain ${viemChainName} not found`);
1567
}
1668

17-
const directoryPath = `../contracts/deployments/${hardhatChainName ?? viemChainName}`;
69+
const directoryPath = `../contracts/deployments/${hardhatChainName}`;
1870
const files = await readdir(directoryPath);
1971

2072
const results: ContractConfig[] = [];
@@ -34,53 +86,47 @@ const readArtifacts = async (viemChainName: string, hardhatChainName?: string) =
3486
}
3587
}
3688

37-
// read external contracts, Ex :- KlerosCore, EvidenceModule
38-
const externalContractsdirectoryPath = `../node_modules/@kleros/kleros-v2-contracts/deployments/${
39-
hardhatChainName ?? viemChainName
40-
}`;
41-
const externalfiles = await readdir(externalContractsdirectoryPath);
42-
for (const file of externalfiles) {
43-
const { name, ext } = parse(file);
44-
if (ext === ".json") {
45-
const filePath = join(externalContractsdirectoryPath, file);
46-
const fileContent = await readFile(filePath, "utf-8");
47-
const jsonContent = JSON.parse(fileContent);
48-
results.push({
49-
name,
50-
address: {
51-
[chain.id]: jsonContent.address as `0x{string}`,
52-
},
53-
abi: jsonContent.abi,
54-
});
55-
}
56-
}
89+
const { KlerosCore, SortitionModule, EvidenceModule, DisputeTemplateRegistry } =
90+
arbitratorContracts.default.contracts;
91+
92+
const arbitratorContractConfigs = [
93+
{ name: "KlerosCore", contract: KlerosCore },
94+
{ name: "SortitionModule", contract: SortitionModule },
95+
{ name: "EvidenceModule", contract: EvidenceModule },
96+
{ name: "DisputeTemplateRegistry", contract: DisputeTemplateRegistry },
97+
];
98+
99+
arbitratorContractConfigs.forEach(({ name, contract }) => addArbitratorContract({ results, chain, name, contract }));
57100

58101
return results;
59102
};
60103

61104
const getConfig = async (): Promise<Config> => {
62105
const deployment = process.env.REACT_APP_DEPLOYMENT ?? "devnet";
63-
64106
let viemNetwork: string;
65107
let hardhatNetwork: string;
108+
let arbitratorContracts;
66109
switch (deployment) {
67110
case "devnet":
68111
viemNetwork = "arbitrumSepolia";
69112
hardhatNetwork = "arbitrumSepoliaDevnet";
113+
arbitratorContracts = arbitratorDevnet;
70114
break;
71115
case "testnet":
72116
viemNetwork = "arbitrumSepolia";
73117
hardhatNetwork = "arbitrumSepolia";
118+
arbitratorContracts = arbitratorTestnet;
74119
break;
75120
case "mainnet":
76121
viemNetwork = "arbitrum";
77122
hardhatNetwork = "arbitrum";
123+
arbitratorContracts = arbitratorMainnet;
78124
break;
79125
default:
80126
throw new Error(`Unknown deployment ${deployment}`);
81127
}
82128

83-
const deploymentContracts = await readArtifacts(viemNetwork, hardhatNetwork);
129+
const deploymentContracts = await readArtifacts(viemNetwork, hardhatNetwork, arbitratorContracts);
84130

85131
return {
86132
out: "src/hooks/contracts/generated.ts",

0 commit comments

Comments
 (0)