主页 > token.im钱包下载 > 以太坊交易池逻辑分析

以太坊交易池逻辑分析

token.im钱包下载 2024-01-25 05:11:59

发送以太坊网络转账交易,除了成功之外,还会遇到各种问题,比如发送的交易在etherscan中找不到,或者发现是pending,几个小时后就消失了,这些都和处理有关节点交易池的逻辑,交易池的逻辑可以通过多种方式实现。 目前go-ethereum官方的交易池逻辑如下。

当一笔交易进入挖矿节点的交易池(tx_pool)时,节点会做如下逻辑:

通过判断交易哈希,当交易已经在节点的交易池中时以太坊元交易,当前收到的交易将被丢弃。

如果是全新的哈希,会有共识协议对这笔交易做基本的验证。 验证包括:长度、值、是否溢出当前区块的gas limit、Nonce值、转账提供的gas size是否过小等。

如果验证失败,则返回相应的错误码。

验证通过时,需要根据当前交易池的状态来判断。 如果交易池已满,则判断当前转账交易提供的gas是否高于交易池中当前提供最低gas的交易。 低的话会返回错误ErrUnderpriced,这是etherscan中经常看到的错误。 如果当前交易提供的gas值高,则淘汰提供最低gas的转账交易,为当前交易腾出空间。 发生这种情况后,在etherscan中经常会观察到挂起的交易已经消失,找不到了。 (也有很大概率仍然可以找到待处理的交易,因为etherscan连接了很多节点,每个节点的交易池状态不一样,被踢出的交易还在其他节点上处于待处理状态)

如果当前交易的Nonce已经在交易池中,说明用户想用相同的Nonce替换之前的交易。 此时节点会判断当前交易的gas是否高于具有相同Nonce的上一笔交易的gas的某个阈值(比如默认为10%)。 如果更高,则删除之前的交易,并保留新的交易。 如果不更高,则当前交易将返回失败。

如果上述逻辑通过,那么这笔交易就会成功入账交易池进行打包,当然也有可能被其他高gas转账交易拒绝。

综上所述,如果你发送一笔交易以太坊元交易,恰好赶上以太坊网络拥堵,你的交易很有可能会发送失败。 原因是所有挖矿节点都不接受这种低gas交易,或者你本来就在交易池里被淘汰了。