2.Solidity合约介绍
2.1 星火链Solidity合约语言
在星火链合约账户中,Solidity
编译后生成的opCode
指令码会存储到合约账户中,用于合约的执行。
本节主要介绍在星火链中支持的 Solidity
合约的特性、语法、功能等。星火链平台支持的Solidity
语法基本与官方Solidity
基本一致,目前支持0.4.26
和0.8.21
两个版本,官方建议使用高版本编译器。
solidity官方文档:
https://docs.soliditylang.org/en/v0.8.21/
2.1.1 与标准Solidity合约的区别
星火链bid地址支持:
星火链
solidity
中address
表示的地址,长度为24
字节,以太坊solidity
中address
表示的地址是20字节。指令支持:
星火链上
solidity
不支持SELFDESCTRUCT
命令。链机制不同导致的语言差异:
星火链上
solidity
不支持EXTCODEHASH
,DIFFICULT
指令。
2.1.2 合约事件
在Solidity智能合约开发中,事件(Event)是一个重要的概念,它允许合约在特定情况下通知外部实体,如前端应用或其他合约。事件机制为合约与外部世界提供了一种通信方式,使得外部实体能够实时获取合约内部状态的变化信息。
星火链的Solidity智能合约同样支持合约事件,详细介绍见Solidity合约事件。
2.2 星火链Solidity合约开发工具
2.1.1 Solidity编译器
由于指令集支持和地址表示法的区别, 星火链提供了专用编译器来编译星火链Solidity
合约. 本节指导开发者使用官方编译器编译星火链智能合约。
npm包地址:https://www.npmjs.com/package/@bifproject/solc-bif 。
下载
需要电脑上安装nodejs 且版本号>=10.0.0
npm i -g @bifproject/solc-bif npm i -g bs58
验证是否安装成功,执行下面的命令不报错
solcjs --help
编写测试合约
用一个最简单的测试合约做例子。
pragma solidity ^0.8.20; contract test{ function testfun() public returns(string){ return "hello world"; } }
编译合约
执行编译命令:
solcjs --bin --abi test.sol
执行成功后结果如下,没有Error信息,警告可以忽略。
执行完后会生成两个文件:
test_sol_test.abi
test_sol_test.bin
接下来就可以使用SDK在星火链上部署调用合约了,详细步骤见使用SDK快速体验星火链。
2.1.2 ABI编解码工具
由于指令集支持和地址表示法的区别, 星火链提供了专门的ABI编解码工具对合约的参数进行编解码。
ethereumjs-abi
星火链提供了专用的abi编解码工具ethereumjs-abi。
离线API
星火链的离线API服务支持调用本地API接口实现abi编解码功能,见离线API abi编解码接口。
2.1.3 Openzeppelin 合约模板
OpenZeppelin是一套用Solidity语言编写, 基于EVM架构的智能合约模板库。星火链根据许可有的特性,提供了自己的Opnezeppelin合约模板。开发者可以基于星火链的Openzeppelin合约模板开发DAPP, 详见OpenZeppelin合约模板。
2.1.4 Remix 合约IDE
Remix
是用于智能合约开发的Web端集成开发环境 (IDE)。由于其操作简单、功能强大,成为智能合约开发者的首选开发工具,在区块链,特别是以太坊生态中有举足轻重的地位。Remix合约IDE星火插件是基于Remix
IDE的星火链插件,基于此插件,开发者可以更加直观、便捷地在星火链上开发、测试和部署智能合约。详见Remix IDE 介绍。
2.1.5 Hardhat
Hardhat作为以太坊开发者生态中的明星工具,是构建智能合约和去中心化应用(DApps)的重要基石,我们结合 Hardhat 的插件式架构,为开发者提供了Hardhat 星火插件,覆盖从合约开发到部署的全流程,从而缩短合约开发周期,提高合约开发体验,提升合约开发效率。