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

Posted 软件工程小施同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊 - 深入理解智能合约汇编指令相关的知识,希望对你有一定的参考价值。

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

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

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

1)智能合约整体框架

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

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

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

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

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

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

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

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

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

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

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

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

函数ID的计算:

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

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

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

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

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

https://mp.weixin.qq.com/s/_Mp1r_bWVvLPlgwh5sWXjg

以上是关于以太坊 - 深入理解智能合约汇编指令的主要内容,如果未能解决你的问题,请参考以下文章

深入以太坊智能合约 ABI

第一行代码:以太坊-使用Solidity语言开发和测试智能合约

以太坊智能合约分析工具/服务

由Trust Wallet理解以太坊钱包管理和智能合约

智能合约语言 Solidity 教程系列7 - 以太单位及时间单位

智能合约语言 Solidity 教程系列7 - 以太单位及时间单位