Solidity 0.6.5 版本修复了一个重要的 bug,并引入了immutable 作为主要特性。
该 bug 涉及使用例如 new uint[](...) 分配动态内存数组。该 bug 被认为严重程度为“低”,但存在于所有先前版本的 Solidity 中。因此,请阅读更多关于如何检查您的合约是否易受攻击的信息,请查看此博文.
immutable 特性支持在构造函数中设置合约级别的变量,前提是这些变量以后不会发生改变。这些变量直接存储在代码中而不是存储区,这使得它们的使用成本极低。目前,仅支持值类型。
重要 Bug 修复
- 代码生成器:在运行时创建动态内存数组时,将数组长度限制为 64 位,修复了可能发生的溢出。
语言特性
- 允许声明局部存储变量时不进行初始化,只要在访问之前对其进行赋值即可。
- 状态变量可以标记为 immutable,这使得它们成为只读的,但可以在构造函数中赋值。该值将直接存储在代码中。
编译器特性
- 命令行界面:使用 storage-layout 启用存储布局的输出。
- 元数据:添加了对需要拆分为多个块的大文件的 IPFS 哈希的支持。
Bug 修复
- 继承:允许公共状态变量覆盖其返回值为动态内存类型的函数。
- 内联汇编:修复访问无效常量变量时发生的内部错误。
- 内联汇编:修复访问函数时发生的内部错误。
- JSON AST:始终为内存引用类型添加指针后缀。
- 引用解析器:修复访问无效结构体成员时发生的内部错误。
- 类型检查器:修复分配嵌套元组时发生的内部错误。
非常感谢所有帮助使此次发布成为可能的贡献者!
下载 Solidity 的新版本此处.