解释以太坊和其他区块链上不同事务状态的含义,以及如何处理每个状态,以确保您的交易及时被挖掘。


什么是内存池?

内存池是指一个节点中等待验证的未确认交易的集合,这些交易在提交给区块链上的新块之前必须经过验证。简单来说,内存池是节点中未确认交易的暂存区。网络中的每个区块链节点都有一个内存池,并相互通信以共享有关最新待处理交易的信息。

内存池存在的原因是每个区块只能确认约200个交易,而每15秒左右才能挖掘一个新的区块。

因此,未确认交易会通过网络中所有内存池广播,并附带一个关联的燃气价格(即发送方愿意支付的燃气费用,以完成其交易)。当一个新块被挖掘时,拥有最高燃气价格的约200个未确认交易将被挖掘该块的节点确认到区块链上。

如果交易未能通过一系列验证检查或提交的燃气过少,这些交易将最终从内存池中删除。

什么是 nonce?

Nonce 是一个 0 索引数字,对应于特定地址发送的已确认交易数量。也就是说,如果一个地址没有已确认的交易,它会将第一笔交易标记为 0 的 nonce,并将希望发送的后续交易标记为 1 的 nonce。

特定发送地址的每个已确认交易都必须具有唯一的 nonce 值。例如,如果发送者提交两个 nonce 值为 1 的交易,只有一个可以成功。

为什么需要设置nonce?

Nonce存在的目的是为了防止重放攻击。

例如,如果没有nonce,A向B发送20个硬币的交易可以被B一遍又一遍地重放,以持续耗尽A的余额。因为交易被提交为哈希值,所以B可以简单地复制发布到区块链的哈希交易并反复运行它。

然而,如果在创建哈希事务之前设置唯一的nonce,它将防止重放攻击,因为每个确认的交易必须具有唯一的nonce值,随后的相同交易将失败。

发送方正确设置nonce值非常重要,以确保交易有机会得到确认,因为使用无序或重复nonce值提交的交易将从内存池中删除。

Nonce还有助于保证交易的顺序。例如,如果发送方可以提交5个nonce从0-4的交易,他们可以期望交易将严格按照它们的nonce顺序执行。

一个内存池交易可以处于哪些交易生命周期状态?

传统上,mem池交易可以分为以下三类:

未确认交易

已提交到mem池中,等待被矿工包含在下一个块中。了解更多有关调试未确认以太坊交易的信息。

已挖掘交易

已被选择并包含在最新的块中。然后将这些交易的结果广播到整个网络。已挖掘的交易可以有两种状态:

成功

这些交易已成功执行并修改了链上的状态。成功交易的status字段为0x1

失败/执行被撤销

这些交易未成功执行,但仍包含在块中。如果执行过程出错、用光gas或遇到其他问题,就会发生这种情况。失败交易的status字段为0x0

要检查挖掘的交易是成功还是失败,可以调用eth_getTransactionReceipt并传递您的交易哈希。在有效载荷中,您将找到一个status字段,对于失败交易,该字段为0x0,对于成功交易,该字段为0x1

已删除交易

未能确认的交易。这可能是因为交易未通过某些验证测试、nonce不正确、提交的gas价格太低并超时,或发生了许多其他错误。已删除的交易将其资产和gas费退还给发送方,就像交易从未发生过一样。

需要帮助解决已删除交易吗?观看我们的教程,了解如何使用Alchemy的Mempool监视器来修复未确认或挂起的交易。

什么是Dropped & Replaced交易?

这是开发者们普遍请求的一个新类别。当一个交易被拒绝时,发送者通常会发送一个具有相同nonce值的替代交易来“替换”失败的交易。

如果第二个交易被确认到区块链上(例如通过发送一个具有相同nonce和更高gas价格的新交易),那么“被拒绝”的交易将被移动到新的交易状态类别,即“Dropped & Replaced”。

同样地,如果同时发送多个具有相同nonce值的交易,通常具有更高交易费的交易将被选择确认到一个块上。其他交易将进入“Dropped & Replaced”类别。

这个交易状态对于智能合约开发者非常有用,因为它允许他们跟踪哪些交易已经成功地重新广播到区块链网络(“被拒绝和替换”),哪些被拒绝的交易仍然需要重新广播(“被拒绝”)。

如何追踪已放弃和替换的交易

如果您通过Alchemy提交交易,我们提供了一个方便的web3开发工具来快速过滤和探索您最近提交的交易:Mempool Watcher。

在发布Mempool Watcher工具之前,开发人员必须通过Etherscan(通常不可靠)或手动查询其节点来检索mempool的当前状态并解析响应以获取相关交易状态详细信息。

使用Mempool Watcher,使用Alchemy的web3开发人员现在可以在单个UI中看到所有交易,并按已挖掘、待处理、已放弃和已放弃并替换的交易进行过滤。构建者还可以按以下过滤器搜索交易:

  • 提交日期
  • 发送方地址
  • 相关交易哈希

Web3开发人员还可以使用Alchemy Notify API(交易活动的Webhook警报):

  • 创建已放弃和已挖掘交易的通知
  • 使用Zapier发送交易状态通知
  • 将交易通知与dApp集成

如何开始使用 Mempool Watcher?

立即注册免费的 Alchemy 帐户 以访问 Mempool Watcher,开始跟踪您的丢弃和替换交易,并访问一系列强大的区块链开发工具!根据我们目前的定价,您将能够在我们的免费层级中每月向 mempool 发送 120 万笔交易 – 这是 Web3 生态系统中最慷慨的。

本文由 mdnice 多平台发布