具有低 gasPrice 的交易使所有其他交易掛在掛起狀態
geth-clique
我有一個小型私有網路,它有一個通過using創建的權威證明引擎Geth Version: 1.8.3-unstable
,目前有三個簽名者節點和兩個其他非簽名者節點(讓我們稱之為peer-A
和peer-B
)。peer-A
並peer-B
連接到三個簽名者節點。首先,我發送了一個非常低的交易,
gasPrice
例如 200,peer-A
如下所示。eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value: web3.toWei(0,0000, "ether"), gasPrice: 200})
稍後,當我發送更多交易時,
peer-A
即使更大gasPrice
,所有這些交易都將保持在掛起狀態。據我了解,送出的事務作為 FIFO 隊列工作,並且我即將到來的事務自第一個發送事務以非常低的gasPrice
鎖定其他事務以來被卡住。範例:(首先發送了一個低價格的 Tx,
peer-A
然後他們的另一個高 gasPrice 的 Tx 停留在其掛起狀態。)peer-B``gasPrice
我已經通過清理我
chaindata
的 on解決了這種情況peer-A
,這也清理了所有待處理的事務: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.
**$$ Q $$**我怎麼能解決這個問題,我怎麼能刪除系統上具有低gasPrice的待處理交易或拒絕它們或更新它們的
gasPrice
價值和resend()
它們?Github 問題:https ://github.com/ethereum/go-ethereum/issues/16284
Péter Szilágyi 在 ( https://github.com/ethereum/go-ethereum/issues/16284 ) 上的回答幫助我解決了這個問題。
乙太坊中的每個賬戶和交易都有一個隨機數。在任何給定時間,只有具有正確隨機數的交易才能被執行。如果您送出的交易價格較低,這將阻止所有後續交易,因為它們不可執行隨機數,只有下一個隨機數是可執行的。
您無需清除您的鏈數據文件夾,待處理的交易不會儲存在那裡。有一個 transactions.rlp 文件保存本地交易。
我正在使用
eth.resend()
兩個參數。**=>**添加
gasLimit
為第三個參數解決了它,例如:eth.resend(eth.pendingTransactions[0], web3.toWei(20, 'gwei'), 2000000)
**=>**或者停止節點,刪除
transactions.rlp
文件(rm ~/examplePOA/private/geth/transactions.rlp
)並重新啟動。