Skip to content

等待隊列

當一筆交易被提交到以太坊網絡時,它首先進入待處理狀態,等待節點執行。

如果交易中的 gas 價格設置得非常低並且節點正忙於處理其他更高 gas 價格的交易,則交易可能會在更長的時間內處於待處理狀態。

在掛起狀態期間,允許交易發起者隨時更改交易字段。

他們可以通過發送具有相同隨機數的另一筆交易來做到這一點。

先決條件閱讀

Daodst 對比 Ethereum

在以太坊中,待處理的區塊是在礦工排隊等待生產時生成的。

這些未決區塊包括礦工根據支付的最高 gas 獎勵挑選出的未決交易。

這種機制的存在是因為在以太坊網絡上不可能實現區塊最終性。

塊以概率確定性提交,這意味著隨著時間(和塊)的流逝,交易和塊變得不太可能被還原。

Daodst 在這方面的設計完全不同,因為沒有“待定狀態”的概念。

Daodst 使用 Tendermint Core BFT 共識,為交易提供即時終結性。

出於這個原因,Ethermint 不需要掛起狀態機制,因為所有(如果不是大多數)交易都將提交到下一個區塊(Cosmos 鏈上的平均區塊時間約為 8 秒)。

然而,這會導致一些與以太坊 Web3 兼容的查詢出現問題,這些查詢可能會進入掛起狀態。

與以太坊的另一個顯著區別是,區塊是由驗證者或區塊生產者生成的,他們以先進先出 (FIFO) 的方式將本地內存池中的交易包含到區塊中。

Daodst 上的交易不能從 Tendermint 節點 mempool 中排序或挑選出來。

Pending 狀態隊列

Daodst 將進行查詢,以說明節點交易內存池中存在的任何未確認交易。

進行的掛起狀態查詢將是主觀的,並且將在目標節點的內存池上進行查詢。

因此,對於兩個不同節點的相同查詢,掛起狀態將不相同。

** JSON-RPC Calls on Pending Transactions **

  • eth_getBalance
  • eth_getTransactionCount
  • eth_getBlockTransactionCountByNumber
  • eth_getBlockByNumber
  • eth_getTransactionByHash
  • eth_getTransactionByBlockNumberAndIndex
  • eth_sendTransaction