注意:0.4.0 版本无法编译库。请升级到 0.4.1 版本。
此版本有意打破向后兼容性,主要是为了强制执行一些安全特性。最重要的变化是您必须显式指定函数是否可以通过 payable 修饰符接收以太坊。此外,更多情况会导致抛出异常。
升级所需的最少更改
- 将 payable 添加到所有想要接收以太坊的函数(包括构造函数和回退函数)。
- 将修饰符中的 _ 更改为 _;。
- 向每个文件添加版本限定符:pragma solidity ^0.4.0;
重大更改
- 源文件必须指定其兼容的编译器版本,例如:pragma solidity ^0.4.0; 或 pragma solidity >=0.4.0 <0.4.8;
- 想要接收以太坊的函数必须指定新的 payable 修饰符(否则它们将抛出异常)。
- 想要使用普通 "send" 接收以太坊的合约必须实现一个带有 payable 修饰符的回退函数。如果未定义可支付的回退函数且没有函数与签名匹配,合约现在将抛出异常。
- 通过 "new" 创建合约失败将抛出异常。
- 除以零或取模运算将抛出异常。
- 如果目标合约没有代码,则函数调用将抛出异常。
- 修饰符必须包含 _(如果需要,可以使用 if (false) _ 作为解决方法)。
- 修饰符:return 不会跳过修饰符中 _ 后面的部分。
- 修饰符中的占位符语句 _ 现在需要显式 ;。
- ecrecover 现在如果输入格式错误会返回零(以前会返回垃圾数据)。
- constant 关键字不能用于构造函数或回退函数。
- 删除了 interface(Solidity 接口)输出选项。
- JSON AST:通用清理,将许多节点重命名为与其 C++ 名称匹配。
- JSON 输出:srcmap-runtime 重命名为 srcmapRuntime。
- 将标准库合约(以及重新设计)从编译器内部移到 github.com/ethereum/solidity/std (import "std"; 或 import owned; 现在不再有效)。
- 删除了令人困惑且未记录的关键字 after。
- 新的保留字:abstract、hex、interface、payable、pure、static、view。
特性
- 十六进制字符串字面量:hex"ab1248fe"
- 内部:代码生成器可用的内联汇编。
- 命令行界面:使用 - 作为文件名可以从 stdin 读取。
- 接口 JSON:回退函数现在是 ABI 的一部分。
- 接口:版本字符串现在与 semver 兼容。
- 代码生成器:如果我们知道被调用帐户存在,则不提供 "new account gas"。
错误修复
- JSON AST:节点在错误的父节点上添加。
- Why3 翻译器:针对指数运算的崩溃修复。
- 命令行界面:链接名称中带有下划线的库。
- 类型检查器:回退函数不再可以返回数据。
- 代码生成器:修复 sha3() 用于不支持的类型时发生的崩溃。
- 代码生成器:手动设置 .send(0) 的 gas 补贴。
文档进行了大量更改,主要由自愿的外部贡献者完成。
衷心感谢所有为此次发布做出贡献的人!
下载 Solidity 的新版本这里.