以太坊源碼分析-交易到打包流程概述
最新
04-20
有個朋友問我一個以太坊的問題:以太坊如何保證交易的執行結果的一致性的? 為了回答這個問題,把以太坊的源代碼翻了一下:
https://github.com/ethereum/go-ethereum
簡單的畫一張圖,描述以太坊的從一個交易到打包的流程:
1)TxPool從網路上接收到一個交易,發送TxPreEvent事件。
2)worker在接收到TxPreEvent事件後,調用update->commitTransactions提交目前收到的交易。
3)Work中的commitTransaction負責調用EVM虛擬機執行交易,並返回給Work有關此次交易的Receipt(執行列表)。
4)Miner調用Work的commitNewWork,從交易列表中選擇交易,組裝區塊結構。
5)Work調用CpuAgent,完成POW工作量證明(打包)。
6)一旦區塊打包成功,worker廣播NewMinedBlockEvent事件。
回答問題:以太坊如何保證交易的執行結果的一致性的?
每個交易在EVM虛擬機中執行後會生成「執行列表」。區塊中所有交易的「執行列表」組成Merkle-PatriciaTrie(MPT)樹。樹根會被保存到該區塊的區塊頭中。也就是說,邏輯上,在區塊中,保存了交易「執行列表」。這樣所有的節點,就可以驗證這些交易的「執行列表」,並由這些「執行列表」,更新狀態。
TAG:星想法 |