{ 跳至内容 }

Solidity 0.8.12 版本发布公告

发布于 2022年2月16日,作者:Solidity 团队

版本发布

Solidity v0.8.12 改善了 JavaScript / Wasm 二进制文件并修复了若干 bug。

值得注意的新特性

Emscripten 构建 / solc-js

我们成功将 JavaScript / WebAssembly 二进制文件的大小从 27 MB 减少到略高于 8 MB。最初二进制文件如此之大的原因是,我们包含了 SMT 求解器 Z3。

尺寸缩减是通过使用 LZ4 压缩二进制文件并在加载时解压缩来实现的,这对用户来说应该是完全透明的。我们最初担心这可能会对那些经常切换编译器版本或始终在全新的 Node.js 环境中运行编译器的人产生负面影响,但我们的基准测试表明,解压缩速度快于 base64 解码,因此应该不是问题。

solc-js 的 TypeScript 迁移

编译器 JavaScript 包装器的代码已部分移植到 TypeScript,这应该不会影响 npm 包的用户。如果您自己构建包或在没有 npm 包的情况下使用存储库,如果您遇到任何问题,请联系我们。

完整变更日志

语言特性

  • 通用:为外部函数类型添加相等比较运算符。
  • 通用:支持ContractName.functionName 用于 abi.encodeCall,除了外部函数指针。

编译器特性

  • 命令行界面:使用 --hashes 时,也会返回事件和错误签名。
  • Yul 优化器:如果插槽已包含相同的值,则删除 mstoresstore 操作。
  • Yul:在请求时为纯 Yul 代码发出不可变引用。

Bug 修复

  • Antlr 语法:允许 yulPath 中使用内置名称以支持函数指针中的 .address
  • 代码生成器:修复访问占用两个以上堆栈插槽的外部函数成员时的内部错误。
  • 代码生成器:修复从 string calldatabytes 进行显式转换时的内部错误。
  • 控制流图:对修饰符执行正确的虚拟查找,以进行未初始化变量和不可达代码分析。
  • 通用:string.concat 现在正确地将字符串作为参数并返回 string memory。之前它意外地被引入为 bytes.concat 的副本。
  • 不可变变量:修复基类合约的构造函数使用 return 且派生合约包含不可变变量时出现的错误。
  • 继承:在覆盖分析期间考虑所有祖先中的函数。
  • IR 生成器:在将固定字节类型转换为较小的固定字节类型期间添加缺失的清理。
  • IR 生成器:为值类型的索引事件参数添加缺失的清理。
  • IR 生成器:修复在将 calldata 和存储中的引用类型复制到内存中的结构或数组成员时的内部错误。
  • IR 生成器:修复复制包含函数的结构的存储数组时的 IR 语法错误。
  • Natspec:修复覆盖具有 Natspec 文档化返回值的结构 getter 且结构中的名称不同的情况下的内部错误。
  • 类型检查器:修复常量变量声明前向引用结构时的内部错误。
  • Yul EVM 代码转换:在极端情况下改进了堆栈洗牌。

Solc-Js

  • 包装器现在至少需要 nodejs v10。
  • 代码已移植到 TypeScript。

构建系统

  • Emscripten 构建将嵌入的 WebAssembly 二进制文件存储在 LZ4 压缩格式中,并在加载时透明地解压缩。

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

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

上一篇

下一篇

参与进来

GitHub

Twitter

Mastodon

矩阵

了解更多

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

2024Solidity 团队

安全策略

行为准则