我有一个小型的专用网络,它有一个通过geth-clique使用Geth Version: 1.8.3-unstable创建的授权证明引擎,目前有三个签名节点和另外两个非签名节点(让我们称它们为peer-A和peer-B)。peer-A和peer-B连接到三个签名节点。
首先,我在peer-A上发送了一个gasPrice非常低的事务,比如200,如下所示。
eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value: web3.toWei(0,0000, "ether"), gasPrice: 200})稍后,当我在peer-A上发送更多事务时,即使使用更大的gasPrice,所有这些事务都将保持挂起状态。据我所知,提交的事务作为FIFO队列工作,而我即将到来的事务被卡住了,因为第一个发送事务(带有非常低的gasPrice )锁定了其他事务。
示例:(第一个peer-A和peer-B发送了一个gasPrice较低的Tx,后来又发送了一个gasPrice较高的Tx,并将其挂起状态。)

我已经通过清除peer-A上的D17来解决这种情况,这也清除了所有挂起的事务:rm -rf private/geth,稍后我用更大的gasPrice发送事务。我想这是一个效率很低的解决方案,因为网络有一个很大的链。
所以所有发送的事务都是作为FIFO队列提供的?他们为什么不选择gasPrice最高的标准呢?
请注意,我已经尝试过:
eth.resend(eth.pendingTransactions[0], web3.toWei(1000, 'gwei'))但面临以下错误:
Error: intrinsic gas too low或Error: replacement transaction underpriced error.
<#>如何解决这个问题,如何在具有低gasPrice的系统上删除挂起的事务,或者拒绝它们,或者更新它们的gasPrice值并对它们进行resend()?
Github杂志:https://github.com/ethereum/go-ethereum/issues/16284
发布于 2018-03-09 06:31:37
Péter Szilágyi关于(https://github.com/ethereum/go-ethereum/issues/16284)的回答帮助我解决了这个问题。
在以太的每一个帐户和交易都有一个现在。在任何给定的时间,只有具有正确的nonce的事务才能被执行。如果您提交的交易具有较低的天然气价格,这将阻止所有后续事务,因为它们不能立即执行,只有下一个事务是可执行的。您不需要清除链数据文件夹,挂起的事务不会存储在那里。有一个保存本地事务的transactions.rlp文件。
我使用带有两个参数的eth.resend()。
=>添加gasLimit作为第三个参数解决了这个问题,例如:
eth.resend(eth.pendingTransactions[0], web3.toWei(20, 'gwei'), 2000000)=>或停止节点,删除transactions.rlp文件(rm ~/examplePOA/private/geth/transactions.rlp)并重新启动。
https://ethereum.stackexchange.com/questions/41999
复制相似问题