Skip to content

Commit 7cdc962

Browse files
committed
chore(web): update-transaction-batcher-hook
1 parent dd0e335 commit 7cdc962

File tree

2 files changed

+31
-62
lines changed

2 files changed

+31
-62
lines changed

web/src/hooks/useTransactionBatcher.tsx

Lines changed: 28 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,50 @@
1-
import { encodeFunctionData, type SimulateContractParameters } from "viem";
2-
import { useAccount, useWriteContract } from "wagmi";
3-
import { createUseSimulateContract, createUseWriteContract } from "wagmi/codegen";
1+
import { useCallback } from "react";
42

5-
import { DEFAULT_CHAIN } from "consts/chains";
3+
import { encodeFunctionData, type SimulateContractParameters } from "viem";
64

75
import { isUndefined } from "src/utils";
86

9-
const batcherAbi = [
10-
{
11-
inputs: [
12-
{
13-
internalType: "address[]",
14-
name: "targets",
15-
type: "address[]",
16-
},
17-
{
18-
internalType: "uint256[]",
19-
name: "values",
20-
type: "uint256[]",
21-
},
22-
{
23-
internalType: "bytes[]",
24-
name: "datas",
25-
type: "bytes[]",
26-
},
27-
],
28-
name: "batchSend",
29-
outputs: [],
30-
stateMutability: "payable",
31-
type: "function",
32-
},
33-
] as const;
34-
35-
const useBatchSimulate = createUseSimulateContract({
36-
abi: batcherAbi,
37-
functionName: "batchSend",
38-
});
39-
40-
export const useBatchWrite = createUseWriteContract({
41-
abi: batcherAbi,
42-
functionName: "batchSend",
43-
});
44-
45-
const batcherAddress = {
46-
421614: "0xe8061d185D865ce2B2FbCfDa628b5F147d8eB8Ab",
47-
42161: "0xE8f028aAc4d4B6A07E62c2C2f7B8818876a0CF2F",
48-
100: "0x5ACD2B61ad3d25fa3422f29B0636C69c70f6588f",
49-
};
7+
import { useSimulateTransactionBatcherBatchSend, useWriteTransactionBatcherBatchSend } from "./contracts/generated";
508

519
export type TransactionBatcherConfig = SimulateContractParameters[];
5210

11+
/**
12+
* @param configs SimulateContractParameters[] - an array of useWriteContract Parameters
13+
* @description This takes in multiple write calls and batches them into a single transaction
14+
* @example useTransactionBatcher([
15+
* { address : "contract one address",
16+
* abi : "contract one abi",
17+
* functionName : "...",
18+
* args: [...]
19+
* value: 0
20+
* },
21+
* { address : "contract 2 address",
22+
* abi : "contract 2 abi",
23+
* functionName : "...",
24+
* args: [...]
25+
* value: 0
26+
* },
27+
* ])
28+
*/
5329
const useTransactionBatcher = (configs?: TransactionBatcherConfig) => {
54-
const { chainId } = useAccount();
55-
56-
const validConfigs = configs ?? [];
30+
const validatedConfigs = configs ?? [];
5731
const {
5832
data: batchConfig,
5933
isLoading,
6034
isError,
61-
} = useBatchSimulate({
35+
} = useSimulateTransactionBatcherBatchSend({
6236
query: {
6337
enabled: !isUndefined(configs),
6438
},
65-
address: batcherAddress[chainId ?? DEFAULT_CHAIN],
6639
args: [
67-
validConfigs.map((config) => config?.address),
68-
validConfigs.map((config) => config?.value ?? BigInt(0)),
69-
validConfigs.map((config) => encodeFunctionData(config)),
40+
validatedConfigs.map((config) => config?.address),
41+
validatedConfigs.map((config) => config?.value ?? BigInt(0)),
42+
validatedConfigs.map((config) => encodeFunctionData(config)),
7043
],
7144
});
72-
const { writeContractAsync } = useWriteContract();
45+
const { writeContractAsync } = useWriteTransactionBatcherBatchSend();
7346

74-
const executeBatch = () => batchConfig && writeContractAsync(batchConfig.request);
47+
const executeBatch = useCallback(() => writeContractAsync(batchConfig.request), [batchConfig, writeContractAsync]);
7548
return { executeBatch, batchConfig, isError, isLoading };
7649
};
7750

web/src/pages/Cases/CaseDetails/MaintenanceButtons/DistributeRewards.tsx

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Button } from "@kleros/ui-components-library";
77

88
import { DEFAULT_CHAIN } from "consts/chains";
99
import { klerosCoreAbi, klerosCoreAddress } from "hooks/contracts/generated";
10-
import useTransactionBatcher, { type TransactionBatcherConfig, useBatchWrite } from "hooks/useTransactionBatcher";
10+
import useTransactionBatcher, { type TransactionBatcherConfig } from "hooks/useTransactionBatcher";
1111
import { wrapWithToast } from "utils/wrapWithToast";
1212

1313
import { isUndefined } from "src/utils";
@@ -51,9 +51,7 @@ const DistributeRewards: React.FC<IDistributeRewards> = ({ id, numberOfVotes, ro
5151
setContractConfigs(argsArr);
5252
}, [id, roundIndex, numberOfVotes, chainId]);
5353

54-
const { batchConfig, isLoading: isLoadingConfig, isError } = useTransactionBatcher(contractConfigs);
55-
56-
const { writeContractAsync: executeBatch } = useBatchWrite();
54+
const { executeBatch, isLoading: isLoadingConfig, isError } = useTransactionBatcher(contractConfigs);
5755

5856
const isLoading = useMemo(() => isLoadingConfig || isSending, [isLoadingConfig, isSending]);
5957
const isDisabled = useMemo(
@@ -62,11 +60,9 @@ const DistributeRewards: React.FC<IDistributeRewards> = ({ id, numberOfVotes, ro
6260
);
6361

6462
const handleClick = () => {
65-
if (!batchConfig) return;
66-
6763
setIsSending(true);
6864

69-
wrapWithToast(async () => await executeBatch(batchConfig.request), publicClient).finally(() => {
65+
wrapWithToast(async () => await executeBatch(), publicClient).finally(() => {
7066
setIsOpen(false);
7167
});
7268
};

0 commit comments

Comments
 (0)