Contract-Development
哪個交易首先在合約上執行
我正在建構一個 ETH 錢包作為練習,以了解有關 Etheruem 區塊鏈的更多資訊。我想知道使用什麼機制來決定首先執行哪個事務。
假設如下:
- 2 筆交易同時發送到同一個智能合約
- 交易來自 2 個不同的賬戶
- 交易具有相同的氣體量
- 兩筆交易都發送到 Infura 節點
是什麼決定了這兩個交易中的哪一個首先從節點的記憶體池中廣播?此外,首先廣播的交易是否會更早地包含在下一個區塊中並始終被視為最終交易?
txs 的排序取決於節點實現(挖礦客戶端)和區塊的礦工。某些實現會以不同於其他實現的方式處理 mempool txs,這可以由礦工進一步單獨配置。
如果礦工想要,她甚至可以包含一個 0gas 的 txs,但這通常不會發生,因為大多數採礦客戶會優化利潤(最高 gasPrice)。在兩筆利潤相同的交易的情況下,客戶可能會選擇最先廣播的交易。
有關您使用的更多詳細資訊,請查看此 PR關於更改 geth 客戶端 txs 排序以獲得相同的 gas 價格 txs