You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用useWriteContracts搭配Coinbase Paymaster时如何获取交易哈希

解决方法

1. 从返回的长ID中提取UserOp哈希并查询交易哈希

你拿到的长ID是UserOperation哈希 + 索引的组合,前66个字符(0x开头加32字节)就是UserOp哈希。通过这个哈希可以查询到对应的交易收据,进而获取交易哈希:

// 截取前66位得到UserOp哈希
const userOpHash = id.slice(0, 66);

使用wagmi的useWaitForUserOperationReceipt hook获取交易收据:

import { useWaitForUserOperationReceipt } from 'wagmi';

// 在组件内使用
const { data: receipt } = useWaitForUserOperationReceipt({
  hash: userOpHash,
  chainId: account.chainId,
});

// 收据加载完成后,即可获取交易哈希
if (receipt) {
  console.log('真实交易哈希:', receipt.transactionHash);
}

2. 利用onSuccess的上下文参数获取UserOp哈希

useWriteContracts的onSuccess回调支持第二个参数context,其中直接包含UserOp哈希,无需手动截取:

const { writeContracts } = useWriteContracts({
  mutation: {
    onSuccess: async (id, context) => {
      const userOpHash = context.userOpHash;
      // 后续同样用useWaitForUserOperationReceipt查询交易哈希
    },
    onError: (err) => {
      console.log("Transaction Error", err);
    },
  },
});

3. 监听合约事件获取交易哈希

如果你的合约在交易执行后会触发自定义事件,可以通过useContractEvent监听该事件,事件对象中会附带交易哈希:

import { useContractEvent } from 'wagmi';

useContractEvent({
  address: contractAddress,
  abi: contractAbi,
  eventName: '你的合约事件名', // 替换为实际事件名
  listener: (args, event) => {
    console.log('交易哈希:', event.transactionHash);
  },
});

内容的提问来源于stack exchange,提问作者vishwajeet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 08:27:46