Transactions
挖礦過程中交易的預設順序是什麼?
我知道黃皮書沒有具體說明如何在一個區塊中對交易進行排序,這由礦工決定。但我對如何實際處理這件事很感興趣(我假設不呼叫一些 rand 函式來獲得排序)。這個對相關問題的回答表明,天然氣價格發揮了作用。例如,geth 在採礦過程中如何訂購交易?
編輯:2017 年 6 月 23 日 - 添加了奇偶校驗詳細資訊(見下文)
格思
對於 vanilla Geth 實現,worker.go
commitNewWork()
中的函式按以下方式排序://approach 2 transactions := self.eth.TxPool().GetTransactions() <--- fetch from pool types.SortByPriceAndNonce(transactions) <---------- order
即按gas價格和nonce值排序(以及按所有者帳戶-見下文)。
程式碼中還有另外兩種方法都被註釋掉了,但可能會為以前的想法提供線索(或為想要使用自己實現的礦工提供範例)。他們是:
- 方法1:僅按隨機數排序
- 方法 3:按所有者排序(以不同方式處理單所有者和多所有者交易),然後按價格和隨機數
SortByPriceAndNonce()
在transaction.go中定義:// This method first sorts the separates the list of transactions into individual // sender accounts and sorts them by nonce. After the account nonce ordering is // satisfied, the results are merged back together by price, always comparing only // the head transaction from each account. This is done via a heap to keep it fast
排序後,將進一步篩選交易
commitTransactions()
以刪除任何“低gas”的交易。平價
對於 Parity,事情要容易一些:有一個 CLI 選項。至少,這將允許以某些基本方式更改排序。
--tx-queue-strategy S Prioritization strategy used to order transactions in the queue. S may be: gas - Prioritize txs with low gas limit; gas_price - Prioritize txs with high gas price; gas_factor - Prioritize txs using gas price and gas limit ratio (default: gas_price).