EVM流程图
2016-09-01 11:00:47 0 举报
EVM(以太坊虚拟机)是一种智能合约的运行环境,它的流程图描述了智能合约的执行过程。首先,用户通过交易发起对智能合约的调用,交易被矿工打包并添加到区块链中。然后,EVM从区块链中获取交易数据,包括调用的智能合约、参数和调用者的身份。接下来,EVM执行智能合约的代码,根据代码逻辑处理参数并生成新的数据。最后,EVM将执行结果写入区块链中,并将新的区块添加到区块链中。这个过程是去中心化的,由网络中的多个节点共同完成,确保了数据的透明性和安全性。
作者其他创作
大纲/内容
miner/worker.CommitTransactions(...)
1.判断该合约是否已经预编译,若是直接查找该代码块并运行,否则进入下一步2;
这里我们要调用的是core/vm_env的Call或Create方法
core/vm/vm.Run()
直接运行
我们在这里会新建一个StateTransition并调用里面的TransitionDb方法
2.判断EVM是否设置了JIT运行时编译,如果是,判断程序是否已经准备OK,是则直接运行程序,否则编译后执行
miner/worker.update(...)
执行程序
否
我们从worker的update开始,这一步会将事件中所有的Txs都更新
miner/worker.CommitTransaction(...)
在这一步把所有Txs foreach提交
core/state_transition.TransitionDb()
是
合约是否预编译
core/vm_env.Call/Create()
core/state_transition.ApplyMessage()
End
以Call方法为例,此时我们调用的是execution里的Call方法,继续跳转下一步
此时我们调用core/vm/vm.Run方法,此处是整个EVM代码核心逻辑:
程序是否准备OK
core/execution.Call()
非常重要的一部分逻辑,此处我们需要调用之前生成的EVM环境中的EVM虚拟机实例,然后调用其Run方法
core/state_processor.ApplyTransaction(new ...)
是否设置JIT
这一步主要是生成EVM的环境并且作为参数传入到state_transition.ApplyMessage中执行
编译后执行
core/execution.exec()
Ethereum Start
这一步提交Tx给state_processor的ApplyTransaction方法进行处理,得到收据receipts
这一步首先判断Tx的to地址是否为空,若为空则该笔Tx是为了创建合约,否则是调用合约
0 条评论
回复 删除
下一页