Go-Ethereum
如何跳過私有乙太坊鏈的交易隨機數
我們在 geth 上使用私有 ehtereum 鏈。它主要用於將值儲存為交易的一部分並在我們的專用網路中分發。但是,當我們發送多個交易時,我們會面臨“已知交易”或“隨機數太低”等隨機數問題
我們也在鏈下簽署交易並發送原始交易。在這種情況下,我們有時會失去 nonce 序列,並且事務被移動到排隊狀態。
我們是否可以選擇調整 geth 以刪除 nonce 的驗證,並通過進行 nonce 以外的驗證來處理髮送到 geth 的所有交易。
您可以通過以下方式傳遞這些錯誤
- 等待一筆交易完成
- 維護一個隨機數索引並嘗試下一個隨機數的新事務
不要改變 geth 來改變它對 nonce 的行為,否則你將永久改變防止雙重支出的能力,但不僅如此:因為 Ether 沒有 UTXO(它是一個依賴於保存狀態的令牌),沒有 nonce 它會不可能跟踪餘額、交易、ecc。
但是,我知道對於在很短的時間內進行大量交易的 dapp 來說,nonce 可能是一件多麼痛苦的事情。
首先,您是否嘗試讓客戶端在第二個參數上掛起的隨機數?
web3.eth.getTransactionCount(address,"pending")
在 Python 或 Rust 中
use web3::types::{BlockNumber}; web3.eth().transaction_count(address,serde::export::Some(BlockNumber::Pending))
它還會將已送出但尚未開采的交易計入您的 nonce。
這將解決您的許多“nonce too low”錯誤,但是,即使這樣,如果您不等待它們被探勘,您將無法處理失敗的交易。發生在您身上的是,在交易失敗後,以下內容將不會掛起,而是在您節點的 txpool 狀態的隊列中。所以你要麼
- 確保您的交易不會失敗並保留您的 nonce 或
- 等待每筆交易完成後再輸入另一筆交易