以太坊区块链中Smart Contract存储方式及与EVM的关系问询
以太坊相关问题解答
智能合约的链上存储逻辑
你理解的区块存储交易数据是完全正确的,智能合约本质上也是通过交易触发部署上链的:
- 当你要部署智能合约时,发起的是一类特殊的合约创建交易,这笔交易的
to(接收地址)字段为空,data字段存储你编译完成的合约字节码 - 矿工将这笔交易打包进区块后,会调用EVM执行交易携带的字节码,执行完成后会生成独立的合约实例,分配专属的合约地址
- 以太坊的全局世界状态用默克尔帕特里夏树存储,每个合约地址会对应独立的状态条目:包含合约字节码哈希、合约存储根哈希、余额、nonce四个字段,合约的原始字节码、合约运行产生的状态数据都会永久存在链上的状态存储中,状态的根哈希会锚定在区块头里,保证不可篡改
- 区块体中不会直接存储完整的合约代码,只会存储触发合约部署、合约调用的原始交易和交易收据,所有合约相关的数据通过状态根和区块绑定,本质上属于链上数据的一部分。
以太坊区块链与EVM的关联逻辑
EVM(以太坊虚拟机)是以太坊的核心状态执行引擎,和区块链的运行完全绑定:
- 出块阶段:矿工整理完待打包的交易列表后,必须通过EVM逐个执行所有交易,不管是普通转账、合约调用还是合约创建,所有的状态变更逻辑全部由EVM完成,执行完成后得到最新的世界状态根、交易收据根、Gas使用量等数据,将这些数据写入区块头后才能完成区块的构造
- 验证阶段:全网其他节点收到新广播的区块后,会在本地用自己的EVM重新执行区块内的所有交易,将自己执行得到的状态根、收据根等数据和区块头内的记录做对比,只有完全一致才会认可该区块的合法性,完成共识同步
- 以太坊的链规则升级如果涉及到EVM的操作码调整、Gas计费规则修改、执行逻辑变更,都需要全网节点同步升级EVM实现,否则会出现链分叉。
内容的提问来源于stack exchange,提问作者NicoleZ
相关产品推荐
相关产品推荐

