此版本专注于 ABIEncoderV2 和优化器的稳定性。我们还为 Petersburg 版本(现为默认 EVM)做好了准备,并改进了 SMT 检查器,使其在使用时报告更少的误报SafeMath。您现在可以使用 settings: {optimizer: {enabled: true, details: {yul: true}}} 或在命令行中使用 solc optimize-yul 激活实验性的 Yul 优化器。
语言特性
- 添加对使用 string 或 bytes 作为键类型的映射的 getter 的支持。
- 元编程:通过 type(C).name 提供对合约名称的访问。
编译器特性
- 支持 petersburg 作为 evmVersion 并将其设置为默认值。
- 命令行界面:使用 -optimize-yul 选项激活实验性的 yul 优化器。
- 内联汇编:将 extcodehash 视为君士坦丁堡的一部分。
- 内联汇编:当前配置的 EVM 不可用的指令现在为错误。
- SMTChecker:如果下溢/上溢始终导致回退,则不报告它们。这消除了使用 SafeMath 时的误报。
- 标准 JSON 接口:允许在不触发字节码生成的情况下检索元数据。
- 标准 JSON 接口:通过设置提供对优化器的细粒度控制。
- 静态分析器:当自定义类型的表达式没有效果时发出警告。
- 优化器:添加包含常量的新的规则,包括 LT、GT、AND 和 BYTE。
- 优化器:为君士坦丁堡添加常量移位规则。
- 优化器:将多个具有常量移位值的移位组合成一个。
- 优化器:在 CREATE 和 CREATE2 之后,不要使用 160 位掩码,因为它们保证返回地址或 0。
- 优化器:在君士坦丁堡的常量优化器中支持移位。
- Yul 优化器:添加规则以通过匹配 case 体用字面量替换 switch 语句。
错误修复
- ABIEncoderV2:修复与裸 delegatecall 相关的内部错误。
- ABIEncoderV2:修复与 ecrecover 相关的内部错误。
- ABIEncoderV2:修复与映射作为库参数相关的内部错误。
- ABIEncoderV2:修复包含在库中发出的结构体的事件的无效签名。
- 内联汇编:缺少变量的正确错误消息。
- 优化器:修复与跨汇编的未使用标签删除相关的内部错误。这从未生成任何无效代码。
- SMTChecker:修复与静态大小数组相关的崩溃。
- TypeChecker:修复内部错误并禁止对合约和库进行索引访问。
- Yul:在函数声明之前正确检测与函数的名称冲突。
- Yul:在可编译性检查器中考虑内置函数。
- Yul 优化器:在 ExpressionSimplifier 中替换时,正确考虑对子表达式中变量的重新赋值。
构建系统
- Soltest:添加对左对齐、填充的十六进制字面量的支持。
- Soltest:添加对右对齐、填充的布尔字面量的支持。
非常感谢所有帮助使此版本成为可能的贡献者!
下载 Solidity 的新版本这里.