深入理解智能合约汇编指令,简单的办法就是查看Solidity编译出的“汇编”指令。

使用Remix可以很容易查看智能合约对应的汇编指令。

以太坊 - 深入理解智能合约汇编指令_汇编指令

上图编写了一个最简单的名叫MyContract的智能合约,合约中包括一个构造函数和一个test函数。点击右边的“Detail”按钮,可以查看对应的”汇编”指令。

1)智能合约整体框架

智能合约汇编代码由两部分组成:初始函数以及功能函数部分。

以太坊 - 深入理解智能合约汇编指令_区块链_02

2)初始函数头以及初始函数

初始函数头功能很简单,跳转到初始函数执行。初始函数实现了两个功能:

a)调用智能合约的构造函数

b)拷贝功能函数部分并返回。

初始函数只是在智能合约创建是执行,执行后,智能合约的调用是功能函数部分。

具体的逻辑可以查看以太坊源代码 - EVM和智能合约执行。

拷贝功能函数的代码如下图:

以太坊 - 深入理解智能合约汇编指令_区块链_03

CODECOPY指令进行代码复制,从偏移0x1e拷贝,长度为0x86。

3)功能函数头以及功能函数

功能函数头主要是读取输入参数,跳转到具体的功能函数进行执行。

以太坊 - 深入理解智能合约汇编指令_h5_04

每个函数,会生成一个函数ID,如果上图中的“test”函数的ID为0xF8A8FD6D。

函数ID的计算:

1)计算(函数名+(+“参数列表名称"+))的sha3的hash

2)函数ID是上述hash的前32位。

 

总结:智能合约的汇编代码由两部分组成:初始函数和功能函数。

初始函数只在智能合约创建时调用。

功能函数在智能合约创建后调用。