以太坊 - 深入理解智能合约汇编指令
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位。
总结:智能合约的汇编代码由两部分组成:初始函数和功能函数。
初始函数只在智能合约创建时调用。
功能函数在智能合约创建后调用。
以上是关于以太坊 - 深入理解智能合约汇编指令的主要内容,如果未能解决你的问题,请参考以下文章
第一行代码:以太坊-使用Solidity语言开发和测试智能合约