Solidity v0.8.17 修复了一个重要的错误,使乘法的溢出检查更高效,并添加了一个 LSP 功能,始终分析项目中的所有文件。
重要错误
条件提前终止时存储写入移除错误
此错误可能导致存储写入被错误地视为冗余并被优化器移除。问题出现在存在可能使用以下操作码有条件地终止外部 EVM 调用的汇编函数时:return() 或 stop() 操作码。
有关更多信息,请参阅安全警报帖子:条件提前终止时存储写入移除错误
完整变更日志
重要错误修复
- Yul 优化器:防止在调用有条件地终止外部 EVM 调用的 Yul 函数之前,错误地移除存储写入。
编译器功能
- 代码生成器:更有效的乘法溢出检查。
- 语言服务器:默认情况下分析项目中的所有文件(可以通过在 LSP 设置对象中将 'file-load-strategy' 设置为 'directly-opened-and-on-import' 来自定义)。
- Yul 优化器:将零长度操作的起始偏移量简化为零。
错误修复
- 类型检查器:修复在使用无效左边的元组赋值时发生的内部编译器错误。
- Yul IR 代码生成:修复在内联汇编中通过存储引用访问映射的 .slot 成员时发生的内部编译器错误。
构建系统
- 允许在将 -DPEDANTIC=OFF 标志传递给 CMake 时,禁用严格警告,并且在编译器构建过程中不将警告视为错误。
- 将 emscripten 更新到 3.1.19 版本。
衷心感谢所有帮助实现此版本的贡献者!您可以在此处下载新版本的 Solidity:v0.8.17.