以太坊虚拟机

想必读者已经对以太坊的全局结构有一个清晰的了解,也部署了一份简单的智能合约。

在以太坊上最重要的活动除了转账以外,就是编译、运行智能合约(Smart Contract)。

智能合约代表了一个以太坊世界里的独立管家。它按照自身代码指示进行以太币的收入,支出活动,也具有一定存储空间可以存储一些数据。

在 Solidity 智能合约编程学习中,经常有一些似是而非的问题,都是因为对于以太坊虚拟机的根基理解不深而导致的,例如下面的问题。

  • 排列数据时如何做到紧凑省gas?
  • 为何数据加减法会有向上溢出和向下溢出?
  • Mapping结构在以太坊里是如何存储的?

为了在编程时做到胸有成竹,知其然并知其所以然,本章用简短的篇幅介绍智能合约的运行环境– 以太坊虚拟机 (Ethereum Virtual Machine, EVM) ,帮助读者理解智能合约运行的上下文环境。了解完这部分知识后,读者能更加理解在Solidity编程中的各种限制和意外情况。

  • 虚拟机的执行结果
  • 虚拟机的执行资源
  • 合约调用合约?
  • 虚拟机的输入输出
  • Gas 花费与退回
  • 虚拟机指令集

以太坊虚拟机执行分为两大类,只读操作和写操作。 仅获取区块链状态的操作为只读操作。只读操作并不修改区块链状态,在链式调用合约的时候也不会触发任何状态变更,所以较为迅速。写操作则会改变区块链的状态。例如一个更改账户状态的操作 ...