以太坊源码分析 - 交易到打包流程概述

时间:2022-01-11 09:30:54

区块链,能推开信任的大门吗?

有个朋友问我一个以太坊的问题:以太坊如何保证交易的执行结果的一致性的? 为了回答这个问题,把以太坊的源代码翻了一下:

http://www.300gu.com/supermarket.html  

简单的画一张图,描述以太坊的从一个交易到打包的流程:

以太坊源码分析 - 交易到打包流程概述

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)树。树根会被保存到该区块的区块头中。也就是说,逻辑上,在区块中,保存了交易“执行列表”。这样所有的节点,就可以验证这些交易的“执行列表”,并由这些“执行列表”,更新状态。