此版本引入了几个新功能,其中一些需要使用以下代码显式激活:pragma experimental <feature name>;.
我们将函数的 constant 关键字拆分为 pure(既不读取也不写入状态)和 view(不修改状态)。目前尚未强制执行这些规则,但很可能在 Metropolis 之后利用新的 STATIC_CALL 功能。
此外,ABI 编码器使用我们新的中间语言进行了更简洁的重新实现。它可以编码任意嵌套的数组,并且从下一个版本开始还可以编码结构体。请使用 pragma experimental ABIEncoderV2; 进行尝试,并检查编码器是否存在任何问题。目前,它生成的代码比旧编码器更大,但我们希望很快解决这个问题。
最后,solc 现在包含对使用 SMT 求解器 Z3 在编译时进行自动溢出和断言检查的实验性支持。如果您使用 pragma experimental SMTChecker; 并且 solc 是使用 Z3 支持编译的,则此功能处于激活状态。目前,只有 PPA 版本支持(或者您从源代码构建并在系统中安装了 libz3-dev),但我们也正在开发一项解决方案,使其适用于 solc-js(以及 remix)。
功能
- ABI JSON:包含一个新字段 stateMutability,其值分别为 pure、view、nonpayable 和 payable。
- 分析器:对 Z3 SMT 检查器(“SMTChecker”)的实验性部分支持。
- 构建系统:共享库(libdevcore、libevmasm、libsolidity 和 liblll)不再在构建过程中生成。
- 代码生成器:ABI 编码器的实验性新实现,可以编码任意嵌套的数组(“ABIEncoderV2”)。
- 元数据:将实验性标志存储在元数据 CBOR 中。
- 解析器:如果找到多个可见性说明符,则在错误消息中显示之前的可见性说明符。
- 解析器:为函数引入 pure 和 view 关键字,constant 仍然是 view 的别名,纯度目前尚未强制执行,因此请谨慎使用。
- 静态分析器:警告大型存储结构。
- 语法检查器:支持 pragma experimental <feature>; 来开启实验性功能。
- 类型检查器:针对无效覆盖提供更详细的错误消息。
- 类型检查器:警告对字面量进行移位操作。
错误修复
- 汇编解析器:对数字字面量更严格。
- 汇编解析器:限制最大递归深度。
- 解析器:在数组和元组元素之间强制使用逗号。
- 解析器:限制最大递归深度。
- 类型检查器:修复与 using 相关的崩溃问题。
- 类型检查器:禁止在库中使用构造函数。
- 类型检查器:拒绝使用 new 语句创建接口合约。
衷心感谢所有为本版本发布做出贡献的贡献者!
下载 Solidity 的新版本这里.