{ 跳至内容 }

Solidity 0.8.1 版本发布公告

发布于 2021年1月27日 由 Solidity 团队

版本发布

Solidity v0.8.1 引入了许多 SMTChecker 的新功能(见下文),将用于构建 soljson.js 的 emscripten 版本更新至 2.0.12,允许捕获 panic 错误并添加其他小的改进。

值得注意的新功能

SMTChecker 反例和外部函数的合成

SMTChecker 已经将交易跟踪作为失败验证目标的反例进行报告,但是 0.8.1 添加了内部调用,msg.value 和以重入调用形式对外部调用的未知代码的合成,作为反例。一篇最近的博文更详细地介绍了该主题。

如何选择 SMTChecker 目标

在 0.8.1 之前,SMTChecker 会自动为所有类型创建验证目标。现在用户可以通过 CLI 选项 --model-checker-targets 或标准 JSON 设置 modelCheckerSettings.targets 选择要检查的验证目标。有效的目标字符串为 underflowoverflowdivByZeroconstantConditionbalancepopEmptyArrayassert。可以同时选择多个目标,目标之间用逗号分隔,不使用空格:underflow,overflow,assert。有关验证目标的详细说明,请参阅SMTChecker 文档.

捕获 Panic

Panic(uint) 回退错误是在 0.8.0 中引入的,但还没有办法在 try/catch 语句中捕获和解码此类错误。现在已经添加了此功能。

try otherContract.f() { }
catch Panic(uint _code) {
  if (_code == 0x01) { revert("Assertion failed"); }
  else if (_code == 0x11) { revert ("Underflow/overflow"); }
  // We ignore the other errors.
}

如果您的 try/catch 语句中既没有 catch Panic(uint) 子句,也没有没有错误类型的 catch 子句,则回退将“冒泡”,即调用合约将回退。

无论您是否捕获错误,调用的效果始终会被回退。

请注意,您无法知道错误是在被调用合约 (otherContract) 本身还是在从 otherContract 调用的合约中发生的。

代码长度快捷方式

从 v0.8.0 开始,可以通过使用 a.code.length 访问地址 a 处的代码大小。但是,这涉及将代码复制到内存中,即使您没有使用 a.code。在此版本中,实现了一个快捷方式,它直接返回 extcodesize(<address>) 的值,并避免将代码复制到内存中。

完整变更日志

语言特性

  • 可以使用 catch Panic(uint code) 来捕获来自外部调用的 panic 失败。

编译器特性

  • 代码生成器:通过直接使用 extcodesize 来降低 <address>.code.length 的成本。
  • 命令行界面:允许在 --libraries 命令行选项中使用 = 作为库名称和地址之间的分隔符。
  • 命令行界面:新的选项 --model-checker-targets 允许指定要检查的目标。有效选项为 allconstantConditionunderflowoverflowdivByZerobalanceassertpopEmptyArray,其中默认值为 all。可以同时选择多个目标,目标之间用逗号分隔,不使用空格:underflow,overflow,assert
  • 命令行界面:在 --libraries 命令行选项中,仅接受以 0x 为前缀的库地址。
  • 优化器:添加规则以将 iszero(sub(x,y)) 替换为 eq(x,y)
  • 解析器:如果解析版本 pragma 失败,则报告有意义的错误。
  • SMTChecker:在反例的交易跟踪中输出内部和受信任的外部函数调用。
  • SMTChecker:当 msg.value 大于 0 时,在反例交易跟踪中显示它。
  • SMTChecker:在反例函数调用中显示合约名称。
  • SMTChecker:支持 ABI 函数作为未解释函数。
  • SMTChecker:支持 try/catch 语句。
  • SMTChecker:合成外部调用的不受信任的函数。
  • SMTChecker:默认使用已检查的算术运算,并支持 unchecked 块。
  • 标准 JSON:新的选项 modelCheckerSettings.targets 允许指定要检查的目标。有效选项为 allconstantConditionunderflowoverflowdivByZerobalanceassertpopEmptyArray,其中默认值为 all。可以同时选择多个目标,目标之间用逗号分隔,不使用空格:underflow,overflow,assert

错误修复

  • 代码生成器:修复在 catch 子句中解码格式错误的错误数据时的长度检查。
  • 控制流图:修复由读取/写入未初始化变量引起的缺失错误。
  • SMTChecker:修复覆盖修饰符和函数时的假阴性。
  • SMTChecker:修复在存在内联汇编时的假阴性。
  • SMTChecker:修复分析外部函数调用时的假阴性。
  • SMTChecker:修复 block.chainid 上的内部错误。
  • SMTChecker:修复将字符串字面量推送到 bytes 数组上的内部错误。
  • SMTChecker:修复块变量缺少类型约束。
  • 类型检查器:修复从内联汇编访问循环常量时的无限循环。
  • 类型检查器:修复由包含映射的常量结构体引起的内部错误。
  • 类型系统:当 M > N 时,不允许从 uintN 隐式转换为 intM,并且由此,不允许在相同类型之间进行显式转换。

构建系统

  • 将 soljson.js 构建更新到 emscripten 2.0.12 和 boost 1.75.0。

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

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

上一篇

下一篇

参与进来

GitHub

Twitter

Mastodon

Matrix

了解更多

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

2024Solidity 团队

安全策略

行为准则