useWriteContract 有 writeContractAsync,useWaitForTransactionReceipt 有类似的,可以 wait 的 component 么?

Ric Li C Ric Li C 提出于 2024-11-21 09:59 3299 浏览

比如在代码 https://github.com/linghuccc/multi-call-test/blob/main/src/App.tsx 中, 先完成 action 1,然后再执行 action 2。

在实践中,执行 action 1 的时候, await writeContractAsync 只能保证 startDelay transaction 已经 send 了,而 startDelay 这个 function 在链上执行需要一定时间,await writeContractAsync 并不能保证这个 transaction 已经完成了,所以在执行第二步 doSomething 的时候,有时会出错。

所以我想,如果 useWaitForTransactionReceipt 有类似的 component,就可以 await 它,确定 approve transaction 已经完成了,再执行下一步。

最佳答案

2024-11-23 11:43

将等待交易确认的逻辑移到组件的最顶层,或者使用另一个自定义的Hooks来封装这个逻辑

  const [action1Hash, setAction1Hash] = useState<string | null>(null);
  const [action2Hash, setAction2Hash] = useState<string | null>(null);

  const { writeAsync: writeContractAsync } = useWriteContract({
    abi: contractAbi,
    address: contractAddress,
  });

  const { isLoading: isAction1Loading, isSuccess: isAction1Success } = useWaitForTransactionReceipt({
    hash: action1Hash,
  });

  const { isLoading: isAction2Loading, isSuccess: isAction2Success } = useWaitForTransactionReceipt({
    hash: action2Hash,
  });
Wade
Wade Footprint Analytics CTO

擅长:数据分析,GameFi,NFT · 采纳率 16% · 回答于 2024-11-22 12:10

其它 2 个回答

Wade Footprint Analytics CTO 2024-11-21 16:23

擅长:数据分析,GameFi,NFT

Ric Li C 2024-11-21 20:47

写回答

你需要登录后才可以回答问题,登录