以太坊源码分析
以太坊 启动流程 以太坊 命令行库 以太坊 RPC 以太坊 账户管理 以太坊 交易 以太坊 共识引擎 以太坊 stateObject 以太坊 挖矿 以太坊 MPT 以太坊 数据存储 以太坊 Ethash算法 以太坊 控制台 以太坊 EVM 以太坊 地址算法 以太坊 keystore 以太坊 go-bindata 以太坊 RLP编码 以太坊 Transaction 以太坊 区块存储 以太坊 清除交易 以太坊 txpool 以太坊 交易、存储 以太坊 难度计算 以太坊 每年产量 以太坊 共识算法 以太坊 新区块流程 以太坊 blockchain以太坊资料
以太坊 面试题 以太坊 撤销交易 以太坊 加速交易 以太坊 节点 以太坊 state 以太坊 搭建私链 以太坊 genesis 以太坊 genesis处理 以太坊 ChainId NetworkId 以太坊 区块存储和查找 以太坊 RLP编码 以太坊 区块大小 以太坊 空块 以太坊 挖矿奖励 以太坊 Basefee 以太坊 EIP-1559协议 以太坊 MEV 以太坊 gas 以太坊 指标测量与监控 以太坊 ABI是什么以太坊源码分析
以太坊 启动流程 以太坊 命令行库 以太坊 RPC 以太坊 账户管理 以太坊 交易 以太坊 共识引擎 以太坊 stateObject 以太坊 挖矿 以太坊 MPT 以太坊 数据存储 以太坊 Ethash算法 以太坊 控制台 以太坊 EVM 以太坊 地址算法 以太坊 keystore 以太坊 go-bindata 以太坊 RLP编码 以太坊 Transaction 以太坊 区块存储 以太坊 清除交易 以太坊 txpool 以太坊 交易、存储 以太坊 难度计算 以太坊 每年产量 以太坊 共识算法 以太坊 新区块流程 以太坊 blockchain以太坊资料
以太坊 面试题 以太坊 撤销交易 以太坊 加速交易 以太坊 节点 以太坊 state 以太坊 搭建私链 以太坊 genesis 以太坊 genesis处理 以太坊 ChainId NetworkId 以太坊 区块存储和查找 以太坊 RLP编码 以太坊 区块大小 以太坊 空块 以太坊 挖矿奖励 以太坊 Basefee 以太坊 EIP-1559协议 以太坊 MEV 以太坊 gas 以太坊 指标测量与监控 以太坊 ABI是什么以太坊如何清除已发出未打包的交易
当我们发出的交易迟迟不被打包,就想把它给取消了,应该怎么做呢?解决此类问题,主要分两种情况,分别有两种不同的解决方案。
1. nonce覆盖
以太坊中的 nonce 真是让人又爱又恨,恨它是因为它可以让简单的问题复杂话,在某些情况下需要自己去维护 nonce 值的递增性,然而它又为大家提供了一些便利的操作,比如因为较低导致交易迟迟违背打包,那么我们可以通过 nonce 进行覆盖。
解决方案
当我们发送一笔交易时,支付的手续费较低,导致矿工不愿意打包交易,那么此时我们该怎么办呢?这里就用到了 nonce 覆盖特性,同样的交易我们把手续费提高再次发送即可。需要注意的前提条件是 nonce 值由自己维护。
如果 nonce 值是让 geth 节点自动生成,那么再次发送时就需要构造之前交易所使用的 nonce 进行发送,才能达到覆盖的效果。
2. 队列失效
问题场景
如果我们发出一笔交易,当交易迟迟未被打包,此时不想再发次笔交易,或者说想使此笔交易失效,那么该如何操作呢?比如由于程序调用导致 nonce 错乱,很多交易都处于队列中无法被打包,一个个进行重新发送或许不是最好的方法。
解决方案
此时如果单纯的重启节点,并不能达到清楚队列的效果,那么我们该如何操作呢?这里 geth 节点为我们提供了一个解决方案,那就是设置队列失效时间。
-- txpool.lifetime value Maximum amount of time non -executable transaction are queued (default: 3h0m0s)
我们知道队列是存在于 txpool 里面的,不指定此参数值时,默认为 3 小时失效。那么,解决问题的方案就显而易见了,我们可以将此参数设置较小,然后重启参数,等待失效,等待 txpool 中交易失效之后,再改会此参数正常值,再重启项目即可。
源代码
下面我们看一下默认配置的源代码,其中包含一些其他参数的配置项:
var DefaultTxPoolConfig = TxPoolConfig {
Journal: "transactions.rlp",
Rejournal: time.Hour,
PriceLimit: 1,
PriceBump: 10,
AccountSlots: 16,
GlobalSlots: 4096,
AccountQueue: 64,
GlobalQueue: 1024,
Lifetime: 3 * time.Hour,
}
最后一行,明确说明了 Lifetime 为 3 小时。
下一章:以太坊 交易池(txpool)
本文讲解交易 tx 从发出到被打包都经历了哪些过程?txpool在这个过程中又起到什么作用?1. txpool 启动参数--txpool.nolocals 为本地提交交易禁用价格豁免--txpool.j ...
AI 中文社