Solidity是一门为实现智能合约而创建的高级编程语言,在区块链领域非常流行。FISCO BCOS从开始就支持使用Solidity进行合约开发,在FISCO BCOS v2.6.0中,社区使用evmone替换了原有的EVM解释器以获得更好的性能表现,同时也实现了对Solidity 0.6版本支持。本文将简要解读Solidity 0.6版本中的新特性和重要变更,以便社区开发者了解。
新特性解析
本节重点介绍Solidity 0.6版本中新加入的特性。
1. 引入新的try/catch特性
Solidity 0.6版本引入了新的try/catch特性,能够捕获外部函数调用或者合约创建时候的错误。
下面是一个例子。
创建CharitySplitter合约对象时,需要传入owner的地址,如果传入全0的地址,就会出现错误。如果错误出现在try后边的表达式中或者是表达式涉及的内部函数中,则不能够被捕获。
catch { ... }用于不关心异常信息的情况
// SPDX-License-Identifier: MITpragma solidity ^0.6.1;contract CharitySplitter {address public owner;constructor(address _owner) public {require(_owner != address(0), "no-owner-provided");owner = _owner;}}contract CharitySplitterFactory {mapping(address => CharitySplitter) public charitySplitters;uint256 public errorCount;event Log(string reason);event LogBytes(bytes reason);function createCharitySplitter(address charityOwner) public {try new CharitySplitter(charityOwner) returns (CharitySplitter newCharitySplitter) {charitySplitters[msg.sender] = newCharitySplitter;} catch Error(string memory reason) {// catch failing revert() and require()errorCount++;emit Log(reason);} catch (bytes memory reason) {// catch failing assert()errorCount++;emit LogBytes(reason);}}}
2. struct和enum现在可以在合约文件中声明,不再限制在contract或library中
// SPDX-License-Identifier: MITpragma solidity ^0.6.1;enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill
3. 数组切片可以作为calldata数组,例如
abi.decode(msg.data[4:], (uint, uint))4.注释描述规范了Natspec在开发文档中支持多返回值,并强制执行与@param同名的检查
5. Yul和内联汇编有一个名为 leave 的新语句,该语句退出当前函数
6. 现在可以通过 payable(x) 把 address 转换为 address payable , x 需要为地址类型
需要明确指定的更改
子类合约不能屏蔽父类的状态变量,如果父类声明了非private的变量x,那么子类不能再声明同名状态变量。
语义和句法变化
2. 当没有其他函数匹配时,新的回调函数会被调用 (如果不存在 receive 函数,则当调用数据为空时,也会调用回退函数)。回调函数可以选择是否标记为 payable,如果没有 payable 那么附加以太且匹配不到其他函数的调用会回滚。只有在实现升级或代理模式的合约时,才需要实现新的回调函数。
小结
为了实现对国密的支持,FISCO BCOS对FISCO-BCOS/solidity项目做了部分更改,主要是在国密模式将哈希算法替换为SM3。当前FISCO-BCOS/solidity项目有0.4.25、0.5.2、0.6.10三个版本,支持win、mac、Linux-generic64和Linux-aarch64四种平台,分别提供国密和非国密的solc编译器,相应的console项目也提供0.4、0.5和0.6三个版本的发布包。
FISCO BCOS版本 | 最低支持Solidity版本 | 最高支持Solidity版本 |
v2.0.0-v2.5.0 | 0.4.25 | 0.5.2 |
v2.6.0 | 0.4.25 | 0.6.10 |
FISCO BCOS开源社区会持续关注Solidity的进展,及时添加对新特性的支持,目前FISCO BCOS开发工作仍在持续进行,新版本需求也在持续收集规划中,欢迎大家共同探讨交流。
FISCO BCOS的代码完全开源且免费
下载地址↓↓↓
https://github.com/FISCO-BCOS/FISCO-BCOS