Nonce

關於高於目前 nonce 的交易

  • October 25, 2019

我正在嘗試建構一個乙太坊交換服務,因此需要並發計劃,並且 nonce 管理是最大的問題(關於它的另一個話題)。在特定的時刻,我有大量的事務(txs)請求,所以我使用redis和物理數據庫來儲存目前的nonce並在結束時更新它+1(經常從redis獲取nonce,如果redis死了,切換到物理數據庫)。

測試時,redis的nonce偶爾高於目前有效nonce( getTransactionCount),會被標記為成功交易(tx),返回有效hash:

範例目前nonce為50,創建51、52等nonce較高的txs列表,… 都是有效的並返回有效的雜湊值。

那裡的問題是,如果 nonce 50 沒有被指定的 tx 填充,則列出 nonce 高於 50 的 txs 將等待一段時間,我不知道它什麼時候會過期。我已經測試了半天到一整天,但它們沒有過期。當我創建一個 nonce 為 50 的 tx 時,在很短的時間後,list txs Higher none +50 將自動廣播並成功。我知道我可以通過創建一個更高gas的自我交易來取消這些交易,但這不是我面臨的問題。

所以,我有 2 個問題,我在哪裡可以找到比目前有效隨機數更高的隨機數列表,例如 etherscan.io 或我的節點,儘管我已經將它們儲存在物理數據庫上。第二個問題是,如果我不填寫失去的 nonce 到鏈上,列出的 txs 是否會過期一段時間(多長時間)或者它們會永久儲存,如果我想取消它們,我必須創建具有更高 gas 的自我交易?謝謝你聽我這麼多,祝你有美好的一天。

//我正在創建一個計劃,它檢查節點的隨機數和redis是否不同,使用節點的隨機數創建一個自我事務,但我認為這不是一個好的解決方案……

所以,我有 2 個問題,我在哪裡可以找到比目前有效隨機數更高的隨機數列表,例如 etherscan.io 或我的節點,儘管我已經將它們儲存在物理數據庫上。

這是很多人都有的問題,也有很多人提供了答案。一般來說,這裡有兩個主要選項。

  1. 自己跟踪您的待處理交易。當您廣播交易時,您可以保存它們,包括它們的 nonce。nonce然後您可以使用>=查找交易current valid nonce
  2. 使用eth_pendingTransactions查詢全節點。然後,您可以對這些交易進行分類以查找來自您錢包的交易。這不是萬無一失的,因為節點可能缺少一些待處理的交易,因為它的待處理交易池可能已滿,或者它還沒有看到你的所有交易。

如果我不填寫缺失的 nonce 到鏈上,列表 tx 是否會過期一段時間(多長時間)或者它們會永久儲存,如果我想取消它們,我必須創建具有更高 gas 的自我交易?

ETH 交易不會根據時間過期。只要它們以正常方式有效(即 nonce 有效,發送方有足夠的 ETH 用於 gas),交易將繼續有效。如果您想加快交易速度,您始終可以創建一個具有相同參數但汽油價格更高的新交易。

引用自:https://ethereum.stackexchange.com/questions/76855