此版本修复了一些重要但不太可能出现的错误,并进一步完善了 ABIEncoderV2、SMTChecker 和 Yul,以及优化了编译器。
值得注意的是,如果启用了 ABIEncoderV2,ABI 解码器现在将在输入数据的高位存在脏数据时回滚,而不是忽略这些位。
重要错误修复
- 代码生成器:修复构造函数上下文中未初始化的内部函数指针的初始化例程。
- 类型系统:在库中使用事件参数时,为合约使用正确的类型名称。这影响了代码生成。
- Yul 优化器:修复多重赋值的 SSA 变换。
语言特性
- ABIEncoderV2:实现 calldata 数组和结构体的编码。
- 代码生成:实现从存储到内存的递归结构体的复制。
- Yul:不允许在 for 循环初始化块内定义函数。
编译器特性
- ABI 解码器:在使用实验性解码器时,对于脏输入引发运行时错误。
- 优化器:为 Constantinople 添加了针对大于 255 的常数移位的规则。
- 优化器:添加规则以简化某些 AND 和 SHL 组合。
- SMTChecker:支持算术复合赋值运算符。
- SMTChecker:支持数组和映射访问的单目递增和递减。
- SMTChecker:对内联汇编块显示不支持的警告。
- SMTChecker:支持取模运算。
- SMTChecker:支持合约 类型。
- SMTChecker:支持 this 作为地址。
- SMTChecker:支持地址成员。
- 标准 JSON 接口:元数据设置现在会重新生成编译输入中的原始 "useLiteralContent" 设置。
- Yul:为 for 循环语法添加了 break 和 continue 关键字。
- Yul:支持 . 作为标识符的一部分。
- Yul 优化器:添加了检测和删除死代码的步骤。
错误修复
- SMTChecker:实现布尔短路。
- SMTChecker:SSA 控制流没有考虑到在分支内部调用的内联函数内部修改的状态变量。
- 类型系统:允许直接调用具有重载的基类函数。
- Yul:正确注册函数,并在函数变量和外部作用域中的变量之间禁止遮蔽。
构建系统
- Soltest:添加命令行选项 test / -t 到 isoltest,它接受一个字符串,允许过滤单元测试。
- soltest.sh:允许环境变量 SOLIDITY_BUILD_DIR 指定构建文件夹并添加 help 用法。
非常感谢所有帮助使此版本成为可能的贡献者!
下载 Solidity 的新版本这里.