37、深入理解以太坊智能合约:从汇编到字节码

深入理解以太坊智能合约:从汇编到字节码

1. 指令风格代码与 Yul 中间语言

指令风格代码在执行过程中,栈的高度不断变化,跟踪需要引用的位置较为复杂。0.4.25 版本的编译器会警告不要使用指令风格。当函数嵌入指令风格时,由于编译器无法确定运行时是否会访问存储,因此不能使用纯修饰符。例如以下代码:

1
add
swap3
pop
// lt(i, 10)
dup1
dup3
lt
// jumpi(loop, lt(i, 10))
loop
jumpi
pop
pop

运行该函数会消耗 801 gas,比前两种实现更高效,但不如另一种特定实现。

Yul(0.5.0 版本之前称为 JULIA 或 IULIA)可编译为不同虚拟机的字节码。自 0.5.0 版本起,内联汇编的函数风格基于 Yul,这使得可以禁用之前学过的其他风格。如今,Yul 和内联汇编可视为同义词,在 Solidity 和以太坊的上下文中,Yul 用于为 EVM 编译字节码。目前,Yul 常被用于智能合约内的高级优化。

Yul 项目有以下几个目标:
- 用 Yul 编写的程序应具有可读性。
- 控制流应易于理解。
- 转换为字节码应直接明了。
- 适合进行全程序优化。

你可以在 文档 中详细了解这些目标。Yul 和内联汇编除了 u256 外没有其他数据类型,所有可用函数与 EVM 的操作码相同。Yul 支持字面量、内置函数调用、变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值