{ 跳至内容 }

Solidity 0.7.0 版本发布公告

发布者:Solidity 团队 于 2020年7月28日

版本发布

Solidity 0.7.0 是 Solidity 编译器和语言的一个重大版本发布。

此版本没有包含很多新功能,而是进行了一些更改,这些更改需要在语法或语义上进行向后不兼容的调整。有关详细说明,请参阅文档

最值得注意的是,我们对可见性和状态可变性进行了进一步清理,并删除了几个不受欢迎的关键字。内存中包含映射的类型被禁止,移位和指数运算使用更合理的类型。

由于我们通常不向后移植错误修复,因此建议将所有代码升级为与 Solidity v.0.7.0 兼容。 solidity-upgrade 工具 可以帮助您将合约半自动升级到重大语言更改。虽然solidity-upgrade 承担了大部分工作,但您的合约很可能需要进一步的手动调整。

您可以在此处找到有关如何更新代码的指南。

请注意,下面列出的更改是**0.6.12 和 0.7.0 之间的更改**。对于在 0.6.x 系列期间引入的更改,请参阅此博客上的各个更改日志或版本发布公告。

重大更改

  • 内联汇编:不允许在用户定义的函数和变量名中使用.
  • 内联汇编:存储指针变量x 的槽和偏移量分别通过x.slotx.offset 访问,而不是x_slotx_offset
  • JSON AST:使用kind: "hexString" 标记十六进制字符串字面量。
  • JSON AST:从 JSON 输出中删除值为null 的成员。
  • 解析器:不允许使用gwei 作为标识符。
  • 解析器:不允许对valuegas 使用点语法。
  • 解析器:不允许在字符串字面量中使用不可打印字符。
  • 解析器:引入 Unicode 字符串字面量:unicode"😃"
  • 解析器:变量上的 NatSpec 注释仅允许用于公共状态变量。
  • 解析器:删除finneyszabo 单位。
  • 解析器:删除标识符now(替换为block.timestamp)。
  • 引用解析器:using A for B 仅影响其所在的合约,而不影响所有派生合约。
  • 类型检查器:不允许对库函数使用virtual
  • 类型检查器:不允许对包含嵌套映射的状态变量进行赋值。
  • 类型检查器:不允许在继承层次结构中使用相同名称和参数类型的事件。
  • 类型检查器:不允许使用有符号类型进行移位。
  • 类型检查器:如果结构体和数组在内存或 calldata 中包含嵌套映射,则不允许使用。
  • 类型检查器:字面量对非字面量的指数运算和移位将始终使用uint256int256 作为类型。
  • Yul:不允许在标识符中使用连续和尾随的点。开头点已被禁止。
  • Yul:不允许使用 EVM 指令pc()

语言特性

  • 继承:允许覆盖具有更严格的状态可变性:view 可以覆盖nonpayablepure 可以覆盖view
  • 解析器:弃用构造函数的可见性。
  • 状态可变性:不要对虚拟函数发出更严格的可变性建议,但对覆盖的函数发出建议。

编译器特性

  • SMTChecker:报告多事务反例,包括发起事务的函数调用。这并不包括引用类型和重入调用的具体值。
  • 不再识别使用var 关键字的变量声明。

错误修复

  • 继承:不允许公共状态变量覆盖pure 函数。
  • NatSpec:构造函数和函数具有一致的用户文档输出。
  • SMTChecker:修复分配给 1 元组时的内部错误。
  • SMTChecker:修复元组具有额外无效果括号时的内部错误。
  • 状态可变性:常量公共状态变量被视为pure 函数。
  • 类型检查器:修复函数调用具有命名参数时函数类型的推导问题。
  • 不可变变量:修复不可变变量未赋值时的内部编译器错误。

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

此处下载 Solidity 的新版本。

上一篇

下一篇

参与进来

GitHub

推特

Mastodon

矩阵

了解更多

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

2024Solidity 团队

安全策略

行为准则