区块链,能推开信任的大门吗?
有个朋友问我一个以太坊的问题:以太坊如何保证交易的执行结果的一致性的? 为了回答这个问题,把以太坊的源代码翻了一下:
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)树。树根会被保存到该区块的区块头中。也就是说,逻辑上,在区块中,保存了交易“执行列表”。这样所有的节点,就可以验证这些交易的“执行列表”,并由这些“执行列表”,更新状态。