{ 跳至内容 }

Solidity 0.8.7 版本发布公告

发布于 2021年8月11日 由 Solidity 团队

发布

Solidity v0.8.7 引入了对 伦敦升级 的支持,包括对 Yul 到 EVM 代码转换、SMTChecker 的各种改进以及一些错误修复。

请注意:不幸的是,此版本的 npm 包已损坏。solc-js 存储库直接拉取将可以正常工作。

伦敦升级支持

Solidity 添加了对 BASEFEE 操作码 (EIP-3198EIP-1559) 的支持,它公开了区块的基本费用。这可以通过全局变量 block.basefee 访问,或者在内联汇编或 Yul 中使用 basefee() 访问。

以下合约演示了一个示例

contract Basefee {
    function basefee_global() external view returns (uint) {
        return block.basefee;
    }
    function basefee_inline_assembly() external view returns (uint ret) {
        assembly {
            ret := basefee()
        }
    }
}

SMTChecker

SMTChecker 现在将所有未经证明的目标报告捆绑在一个消息中,从而简化了工具的输出,并希望使任何重要信息更易于查看。命令行选项 --model-checker-show-unproved 和 JSON 选项 settings.modelChecker.showUnproved=true 可用于列出所有未经证明的目标。

除法和取模运算的 SMT 编码实际上使用乘法和松弛变量的等效编码来提高求解器的性能。但是,一些非默认求解器在使用这些运算的精确编码时效果更好。命令行选项 --model-checker-div-mod-no-slacks 和 JSON 选项 settings.modelChecker.divModNoSlacks 允许用户选择除法和取模的精确编码。预计此选项仅在使用 z3 以外的其他求解器时有用。

最后,下溢和上溢目标不再默认检查。这遵循编译器生成的检查的广泛使用,这些检查预计将在 Solidity >=0.8.0 中发生。仍然可以通过命令行选项 --model-checker-targets 或 JSON 选项 settings.modelChecker.targets 选择它们来执行下溢和上溢检查。

请参阅Solidity 文档中的 SMTChecker 文档,以获取有关这些选项和其他模型检查器选项的更多详细信息。

完整变更日志

语言特性

  • 引入全局变量 block.basefee 用于检索当前区块的基本费用。
  • Yul:引入内置函数 basefee() 用于检索当前区块的基本费用。

编译器特性

  • AssemblyStack:在编译 Yul 代码时也运行基于操作码的优化器。
  • 命令行界面:选项 --pretty-json 也适用于 --standard--json
  • EVM:将默认 EVM 版本设置为“London”。
  • SMTChecker:默认情况下不检查下溢和上溢。
  • SMTChecker:默认情况下隐藏未经证明的目标,并且 SMTChecker 仅说明有多少个未经证明的目标。可以使用命令行选项 --model-checker-show-unproved 或 JSON 选项 settings.modelChecker.showUnproved 列出它们。
  • SMTChecker:新的设置用于启用/禁用使用松弛变量的除法和取模编码。命令行选项为 --model-checker-div-mod-slacks,JSON 选项为 settings.modelChecker.divModWithSlacks
  • Yul EVM 代码转换:对于没有返回值的函数,也弹出未使用的参数槽(在与有返回值的函数相同的限制下)。
  • Yul EVM 代码转换:不要重用立即变得不可访问的堆栈槽。
  • Yul 优化器:使用实验性的堆栈限制规避器(默认情况下未启用)将函数参数和返回值移动到内存中。

错误修复

  • 代码生成器:修复将空字符串字面量传递给 bytes.concat() 时发生的崩溃。
  • 代码生成器:修复调用绑定到 calldata 结构体和数组的函数时发生的内部编译器错误。
  • 代码生成器:修复将 32 字节十六进制字面量或零字面量传递给 bytes.concat() 时发生的内部编译器错误,方法是禁止使用此类字面量。
  • 命令行界面:在汇编/yul 模式下应用 --optimizer-runs 选项。
  • 命令行界面:修复将目录路径传递给 --standard-json 时发生的崩溃。
  • 命令行界面:当 --standard-json 获取 - 作为文件名时,从标准输入读取 JSON。
  • 标准 JSON:包含文件名为空的文件中错误的源位置。
  • 类型检查器:修复内部错误并防止对未实现的修饰符进行静态调用。
  • Yul 代码生成器:修复使用带按位取反的长字面量时发生的内部编译器错误。
  • Yul 代码生成器:修复对内置函数调用的源位置引用。
  • Yul 解析器:修复 if 语句的源位置引用。

非常感谢所有帮助使此版本发布成为可能的贡献者!

从此处下载 Solidity 的新版本 此处

上一篇

下一篇

参与进来

GitHub

推特

Mastodon

矩阵

了解更多

博客文档使用案例贡献关于论坛

2024Solidity 团队

安全策略

行为准则