等待隊列
當一筆交易被提交到以太坊網絡時,它首先進入待處理狀態,等待節點執行。
如果交易中的 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