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 需要为地址类型
需要明确指定的更改
本节列出了该版本中需要更明确显示代码的更改。
语义和句法变化
本节描述了该版本中必须要修改代码的变更。
小结
为了实现对国密的支持,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