虚拟机的执行结果

以太坊虚拟机执行分为两大类,只读操作和写操作。 仅获取区块链状态的操作为只读操作。

只读操作并不修改区块链状态,在链式调用合约的时候也不会触发任何状态变更,所以较为迅速。

写操作则会改变区块链的状态。例如一个更改账户状态的操作。

下图显示了一次更改账户状态的操作。

http://static.codebaoku.com/pics/ea/5e/ea5e695e58adb2269becf8055f87d8b8.png

虚拟机的执行结果即为更改了账户存储空间值

写操作则是需要花费以太币的操作,因为它更改了某一个或者数个账户的存储空间。 存储空间是区块链的一部分,是要被全世界的计算机永久同步存储的,这个更改的过程代价昂贵: 例如将一个值从 0 变为非零值需要耗费 20000 单位的gas;修改一个 非0 值需要消耗 5000 单位gas; 将一个值从 非0 赋值为 0 可以回收 15000 单位的gas;读取一个变量值需要 200 gas。而相对比,从内存中读取变量值仅需 3 gas。

以太坊虚拟机在接收到一条交易包含的调用消息后,会将合约账户的代码和存储区的变量一起装载入内存,执行方法调用后,修改存储区的变量值并持久化保存。合约代码在整个过程中是只读的。

以太坊的虚拟机经常被拿来与x86台式机的结构作对比,它们有相同点也有很大的不同点。相比于台式机或者手机,以太坊的虚拟机更加紧凑,资源更加匮乏。 它并不包含正常的CPU 所具备的硬件寄存器(Register),所以执行速度没 ...