虚拟机的执行结果¶
以太坊虚拟机执行分为两大类,只读操作和写操作。 仅获取区块链状态的操作为只读操作。
只读操作并不修改区块链状态,在链式调用合约的时候也不会触发任何状态变更,所以较为迅速。
写操作则会改变区块链的状态。例如一个更改账户状态的操作。
图 7-1 显示了一次更改账户状态的操作。
写操作则是需要花费以太币的操作,因为它更改了某一个或者数个账户的存储空间。
存储空间是区块链的一部分,是要被全世界的计算机永久同步存储的,这个更改的过程代价昂贵:
例如将一个值从 0
变为非零值需要耗费 20000
单位的gas;修改一个 非0
值需要消耗 5000
单位gas;
将一个值从 非0
赋值为 0
可以回收 15000
单位的gas;读取一个变量值需要 200
gas。而相对比,从内存中读取变量值仅需 3
gas。
以太坊虚拟机在接收到一条交易包含的调用消息后,会将合约账户的代码和存储区的变量一起装载入内存,执行方法调用后,修改存储区的变量值并持久化保存。合约代码在整个过程中是只读的。