Solidity v0.7.5 添加了通过以下方式选择 ABI 编码器 的功能pragma abicoder v1 和 pragma abicoder v2,为将 ABI 编码器 v2 设为 0.8.0 的默认值做准备,并引入了 --experimental-via-ir,它通过新的实验性的基于 Yul 的编译器管道进行编译。
完整变更日志
语言特性
- 可以使用 pragma abicoder v1 和 pragma abicoder v2 选择 abi 编码器。
- 内联汇编:对于动态数组类型的 calldata 变量,使用 .offset 和 .length 来访问它们的 calldata 偏移量和长度(元素数量)。两者都可以被赋值。
- 具有字面数字值的不可变变量被视为纯函数。
编译器特性
- 汇编器:当提供库地址时,在汇编模式下执行链接。
- 命令行接口:新选项 --experimental-via-ir 允许切换编译过程以通过 Yul 中间表示形式进行。这是高度实验性的,用于开发目的。
- 命令行接口:新选项 --model-checker-timeout 设置 SMTChecker 执行的每个单独查询的超时时间(毫秒)。
- 命令行接口:如果在 --standard-json 模式下无法读取文件,则报告错误。
- 命令行接口:为每个无法写入的输出文件报告正确的错误。以前在第一个错误时会抛出异常并终止执行。
- SMTChecker:在 CHC 引擎中添加除以零检查。
- SMTChecker:使用 this 对外部调用进行更精确的分析。
- SMTChecker:支持在编译时已知值的表达式中使用 selector。
- 标准 JSON:新选项 modelCheckerSettings.timeout 设置 SMTChecker 执行的每个单独查询的超时时间(毫秒)。
- 标准 JSON:新选项 settings.viaIR 允许与命令行上的 --experimental-via-ir 相同的切换。
错误修复
- 代码生成器:修复抽象合约缺少创建依赖项跟踪的问题。
- 命令行接口:修复传递给 --output-dir 的目录以斜杠结尾时的写入错误。
- 命令行接口:拒绝 --libraries 选项中的重复库,而不是任意选择一个。
- NatSpec:修复继承返回值文档但参数名称在基类和继承类之间不同的内部错误。
- SMTChecker:修复在修饰符内部使用分支时的 CHC 假阳性问题。
- SMTChecker:修复多次应用修饰符时的假阴性问题。
- SMTChecker:修复 CHC 引擎报告不正确的反例。
- SMTChecker:修复 BMC 引擎在从不同源单元继承的合约具有私有状态变量时的内部错误。
- SMTChecker:修复从字符串字面量到字节的转换时的内部错误。
- SMTChecker:修复 array.push() 用作赋值的 LHS 时的内部错误。
- SMTChecker:修复通过合约名称赋值状态变量时的内部错误。
- SMTChecker:修复在条件运算符内部使用有理数字面量元组时的内部错误。
- SMTChecker:修复仅使用 CHC 引擎时缺少潜在违规报告的问题。
- 标准 JSON:修复即使文件名不匹配,也会使用 libraries 中指定的库地址进行链接的问题。
AST 变更
- 内联汇编标识符的新成员 suffix。当前支持的值为 "slot"、"offset" 和 "length",用于访问 Solidity 变量的组件。
非常感谢所有帮助使本次发布成为可能的贡献者!
在此处下载 Solidity 的新版本 此处。