以太坊 parity節點之Transaction Queue解析(txpool)

    在pariyt以太坊的客戶端中,存在一個緩衝池Transaction Queue,在geth節點上可能叫做txpool。這個緩衝池主要用來存儲準備打包的交易。一般分爲兩類。

    pendingTransactions:這類交易術語已經驗證通過了,已經廣播了,準備打包進區塊的;

    futureTransactions:這類交易是nonce值太高了,這類交易一般不會廣播的,他存放的位置和pending是不一樣的;

交易接受條件:

1、gasprice大於設置的最低值;2、gas值小於一個塊的限制;3、gas值小於隊列設置值;4、交易發起者賬戶裏有充足餘額;5、nonce值不能是使用過的;6、交易的簽名是正確的;7、交易的長度有限制,300 * 1024 bytes;

交易丟棄條件:

1、已經驗證過的狀態發生改變,如nonce和餘額;2、隊列裏交易數量超過隊列長度;3、每個賬戶能夠發送的交易數量超出限制;4、內存超了;5、如果同一個賬戶的交易,有nonce值相同的交易,且其中一個gasprice比另外一個高12.5%,則gasprice較低的會被刪除;

local trancations:

這個概念比較有趣,local trancations是已創建或提交到本地節點的事務。此類交易在隊列中具有高優先級 - 它們將首先傳播並首先包含在塊中。可以通過兩種RPC方法提交本地事務:eth_sendTransactioneth_sendRawTransaction。對於前者,節點必須管理私鑰(發送者地址),對於後者,無論發送者如何,事務都將被標記爲本地。

總結:

在以太坊開發過程中,pending的交易一直是動態變化的;這種變化主要是由於丟棄條件引起的;如果你是做交易所或者錢包,希望自己發出的交易不要因爲隊列長度或者內存大小,而被丟棄;這個時候,如果可以控制local trancations,提高優先級,然後就不會被刪除了;

開發以太坊的第一課就是,學會配置節點。