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

如何查询ETH交易是否已被发送至以太坊网络

校验已签名ETH交易是否已发送至网络的实现方案

你只需要校验目标交易哈希是否被你发送交易对接的ETH节点接收过即可,不需要关心后续链上状态,核心实现逻辑如下:


web3.js 实现方案

方法1:通用公开接口校验(兼容公共RPC节点)

调用web3.eth.getTransaction即可,只要返回值不为null,就说明交易已经被节点成功接收(无论是暂存在节点交易池,还是已经打包上链,都满足你曾被发送的校验要求):

// 入参为你存储的交易哈希,返回布尔值表示是否已被节点接收
async function isTxSent(txHash) {
  const transaction = await web3.eth.getTransaction(txHash);
  return transaction !== null;
}

注意:如果交易发送后间隔过久(通常超过几小时),未打包的交易会被节点从交易池自动剔除,此时该接口会返回null,这种情况只能依赖你本地发送交易时的日志记录确认。

方法2:交易池精准校验(需节点开放txpool权限)

如果你对接的是自有节点,且节点开放了txpool相关的RPC调用权限,可以直接查询节点交易池内容匹配交易哈希,确认是否刚被发送还未上链:

async function isTxInNodeMempool(txHash) {
  // 调用节点原生txpool_content RPC接口
  const poolData = await web3.currentProvider.request({
    method: "txpool_content",
    params: []
  });
  // 合并pending和queued两个交易池的所有交易
  const allPoolTxs = [
    ...Object.values(poolData.pending),
    ...Object.values(poolData.queued)
  ].flat();
  // 忽略大小写匹配交易哈希
  return allPoolTxs.some(tx => tx.hash.toLowerCase() === txHash.toLowerCase());
}

补充说明

如果你调用web3.eth.sendSignedTransaction时没有抛出网络异常、节点返回的签名校验错误,本身就可以直接判定交易已经成功发送到节点。上述校验方案仅适用于发送时出现异常、或需要事后二次确认的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:15:03