evm-opcodes完全指南:以太坊虚拟机指令从入门到精通

【免费下载链接】evm-opcodes 【免费下载链接】evm-opcodes 项目地址: https://gitcode.com/gh_mirrors/ev/evm-opcodes

以太坊虚拟机(EVM)是以太坊区块链的核心组件,而EVM指令(opcodes)则是智能合约运行的基础。本指南将带你从入门到精通,全面了解EVM指令的奥秘,掌握这些强大工具的使用方法。

什么是EVM指令?

EVM指令是以太坊虚拟机执行的基本操作单元,类似于计算机的汇编语言。每个指令都有特定的操作码(opcode)和功能,它们共同构成了智能合约的运行逻辑。理解这些指令对于编写高效、安全的智能合约至关重要。

EVM指令基础

EVM数据单位

在EVM中,一个"字"(word)的大小是256位,这是EVM中数据处理的基本单位。所有指令操作都围绕这个基本单位展开。

核心指令分类

EVM指令可以分为以下几大类:

  • 算术运算指令:如ADD、SUB、MUL等
  • 比较指令:如LT、GT、EQ等
  • 位运算指令:如AND、OR、XOR等
  • 栈操作指令:如PUSH、POP、DUP等
  • 内存操作指令:如MLOAD、MSTORE等
  • 存储操作指令:如SLOAD、SSTORE等
  • 控制流指令:如JUMP、JUMPI、JUMPDEST等
  • 环境指令:如ADDRESS、BALANCE、BLOCKHASH等
  • 日志和创建指令:如LOG0-LOG4、CREATE等
  • 调用指令:如CALL、CALLCODE、DELEGATECALL等

常用EVM指令详解

算术运算指令

ADD (0x01)

ADD指令用于执行加法操作。它从栈中取出两个元素,将它们相加,然后将结果推回栈中。

伪代码:push(s[0]+s[1])

Gas消耗:3

MUL (0x02)

MUL指令用于执行乘法操作。它从栈中取出两个元素,将它们相乘,然后将结果推回栈中。

Gas消耗:5

栈操作指令

PUSH系列 (0x60-0x7f)

PUSH系列指令用于将数据压入栈中。根据后面跟随的字节数不同,分为PUSH1到PUSH32。例如,PUSH1会将接下来的1个字节的数据压入栈中,而PUSH32则会将接下来的32个字节(完整的字)压入栈中。

Gas消耗:3

DUP系列 (0x80-0x8f)

DUP系列指令用于复制栈中的元素。DUP1复制栈顶元素,DUP2复制栈中第二个元素,依此类推,最高到DUP16。

Gas消耗:3

控制流指令

JUMP (0x56)

JUMP指令用于修改程序计数器,实现无条件跳转。它从栈中取出一个值作为目标位置,然后跳转到该位置执行。

Gas消耗:8

JUMPI (0x57)

JUMPI指令用于条件跳转。它从栈中取出两个值,第一个作为条件,第二个作为目标位置。如果条件为真(非零),则跳转到目标位置执行。

Gas消耗:10

JUMPDEST (0x5b)

JUMPDEST指令用于标记有效的跳转目标位置。只有标记为JUMPDEST的位置才能作为JUMP或JUMPI的目标。

Gas消耗:1

EVM指令表

以下是EVM主要指令的汇总表:

OpcodeNameDescriptionGas
0x00STOP停止执行0
0x01ADD加法操作3
0x02MUL乘法操作5
0x03SUB减法操作3
0x04DIV整数除法操作5
0x05SDIV有符号整数除法操作5
0x10LT小于比较3
0x11GT大于比较3
0x14EQ等于比较3
0x20KECCAK256计算Keccak-256哈希30*
0x30ADDRESS获取当前执行账户地址2
0x31BALANCE获取指定账户余额700
0x50POP从栈中移除元素2
0x51MLOAD从内存加载数据3*
0x52MSTORE保存数据到内存3*
0x54SLOAD从存储加载数据800
0x55SSTORE保存数据到存储20000**
0x60PUSH1将1字节数据压入栈3
0x80DUP1复制栈顶元素3
0x90SWAP1交换栈顶两个元素3
0xf0CREATE创建新账户32000
0xf1CALL调用其他合约复杂
0xf3RETURN返回数据0
0xfdREVERT回滚状态0
0xffSELFDESTRUCT自毁合约5000*

注:带*的Gas成本可能会根据参数有所变化,**表示SSTORE的Gas成本在不同情况下会有很大差异。

如何使用本项目

要开始使用evm-opcodes项目,首先需要克隆仓库:

git clone https://gitcode.com/gh_mirrors/ev/evm-opcodes

项目中的README.md文件提供了完整的EVM指令参考,包括操作码、名称、描述和Gas成本等信息。

总结

EVM指令是以太坊智能合约的基础,掌握这些指令对于理解和编写智能合约至关重要。本指南介绍了EVM指令的基本概念、分类和常用指令的详细说明,希望能帮助你更好地理解和使用EVM指令。

无论是区块链开发者、智能合约审计师,还是对以太坊技术感兴趣的爱好者,深入了解EVM指令都将为你的区块链之旅提供强大的助力。

参考资料

项目的完整EVM指令参考可以在README.md中找到,其中包含了所有EVM指令的详细信息和最新更新。

【免费下载链接】evm-opcodes 【免费下载链接】evm-opcodes 项目地址: https://gitcode.com/gh_mirrors/ev/evm-opcodes

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐