解释以太坊和其他区块链上不同事务状态的含义,以及如何处理每个状态,以确保您的交易及时被挖掘。
什么是内存池?
内存池是指一个节点中等待验证的未确认交易的集合,这些交易在提交给区块链上的新块之前必须经过验证。简单来说,内存池是节点中未确认交易的暂存区。网络中的每个区块链节点都有一个内存池,并相互通信以共享有关最新待处理交易的信息。
内存池存在的原因是每个区块只能确认约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多平台发布
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 如何在Spring初始化Bean或销毁Bean前执行某些操作
阅读文本大概需要3分钟。 0x01:通过在Bean中定义init-method 和 destory-method方法 1. public class Car { 2. 3. 4. public Car() { 5. System.out.println(“Ca…