{ 跳至内容 }

Solidity 0.7.2 版本发布公告

发布于 2020年9月28日 由 Solidity 团队

版本发布

Solidity v0.7.2 修复了 v0.7.1 中引入的自由函数中的一个错误,并添加了编译器生成的实用程序文件导出。此外,它还大大扩展了 SMTChecker 的语言支持。

重要错误修复

自由函数重载检查

自由函数在之前的版本 (Solidity v0.7.1) 中引入。事实证明,可以多次定义具有相同名称的函数,即使包含相同的参数类型。允许两个具有相同名称但不同参数类型的函数称为“重载”,当为不同类型实现本质上相同的功能时,这很有用。但是,不允许两个具有相同名称和相同参数类型的函数。

在 v0.7.1 中,编译器会静默生成调用第一个定义的代码。

为了修复此错误,已添加了缺少的检查。

值得注意的新功能

实用程序文件导出

对于 ABI 编码器和解码器等例程,编译器会生成无法直接归因于源代码中特定位置的其他代码。一段时间以来,这些例程作为 Yul 代码生成,该代码应该易于阅读和审计。Solidity 0.7.2 提供了输出生成代码的功能,包括其优化形式和非优化形式。

生成的可在标准 JSON 中的以下键下找到:evm.bytecode.generatedSourcesevm.deployedBytecode.generatedSources。目前,只有一个始终名为 #utility.yul 的文件,但这在将来可能会发生变化。

完整变更日志

重要错误修复

  • 类型检查器:不允许两个或多个具有相同名称(可能导入和别名)和参数类型的自由函数。

编译器功能

  • 通过标准 JSON 或组合 JSON 导出编译器生成的实用程序源代码。
  • 优化器:当底数为 0、1 或 2 时,优化 exp
  • SMTChecker:即使通过赋值,也保留有关字符串字面量的信息,从而正确支持 .length 属性。
  • SMTChecker:支持 address 类型与字面量的转换,例如 address(0)
  • SMTChecker:支持 revert()
  • SMTChecker:支持 type(T).mintype(T).maxtype(I).interfaceId
  • SMTChecker:支持复合 and、or 和 xor 运算符。
  • SMTChecker:支持事件和低级日志。
  • SMTChecker:支持固定字节索引访问。
  • SMTChecker:支持内存分配,例如 new bytes(123)
  • SMTChecker:支持移位。
  • SMTChecker:支持结构体。
  • 类型检查器:解释为什么超大的十六进制字符串字面量不能显式转换为较短的 bytesNN 类型。
  • 类型检查器:更详细的错误消息说明隐式转换失败的原因。
  • 类型检查器:报告 unicode"" 字面量中第一个无效 UTF-8 序列的位置。
  • Yul IR 生成器:报告与未实现的功能相关的源位置。
  • Yul 优化器:首先内联到调用图中较低位置的函数。
  • Yul 优化器:修剪函数中未使用的参数。
  • Yul 优化器:尝试简化函数名称。

错误修复

  • 代码生成器:修复在从返回值参数中剥离动态类型时,在没有 RETURNDATACOPY 的 EVM 版本上出现的内部错误。
  • 类型检查器:在禁用 ABIEncoderV2 时,添加对 ABI 编码函数中嵌套动态数组的缺失检查。
  • 类型检查器:更正调用中无效命名参数的错误消息,使其引用正确的参数。
  • 类型检查器:更正同名但未隐藏声明的警告。
  • 类型检查器:不允许库中的修饰符使用 virtual
  • 类型系统:修复将合约实例隐式转换为其 super 类型的内部错误。
  • 类型系统:修复将字符串字面量隐式转换为 calldata 字符串的内部错误。
  • 类型系统:修复如果顺序与声明不同,则重载函数和事件调用中的命名参数匹配不正确的问题。
  • ViewPureChecker:防止对构造函数执行可见性检查。

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

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

上一篇

下一篇

参与进来

GitHub

推特

Mastodon

矩阵

了解更多

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

2024Solidity 团队

安全策略

行为准则