合约流程
编辑合约
你可以基于任何支持solidity的编辑器编写合约。下述将基于remix在线编辑器为例,进行说明。注意使用与合约版本一致的编译器。
为了叙述方便,我们使用如下的简单合约示例:
pragma solidity ^0.4.24;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
}
编译合约
编写好合约后,可以使用remix的compile功能编译合约,检查合约中可能存在的语法错误。 在Using the contract simulator小节中介绍了如何使用remix获得字节码。
在remix界面中,点击右侧的Run,Environment选择JavaScript VM,可以看到有默认的账户,gas limit, 下方即为我们编辑的合约名称SimpleStorage。点击Deploy可以测试合约的部署并得到字节码。

在remix中间panel的底部有日志窗口,显示部署合约的结果。展开对应的日志内容,可以看到 status,transaction hash等信息。其中的input内容即为该合约对应的字节码。

上述示例合约对应的字节码为:
部署合约
有了字节码之后,可以使用seele client工具部署合约。 你可以在seele release中找到相应平台下的软件包。 注意,部署合约与发送交易一样,你需要运行相应的Seele node程序。
本地测试环境
为保障提交到Seele主网的合约是可用的,建议先在本地运行Seele私链节点, 并基于私链进行合约部署和调用测试。
主网环境
本地测试环境通过后,你可以按照私链部署合约的步骤,将合约部署到Seele主网上。 唯一的不同是,你需要运行一个主网的Seele node程序,并保持和Seele主网的数据同步。
通过client工具部署合约
准备一个Seele账户,并确保有足够的余额部署合约。
这里我们使用分片1的账户0x987f6215c30f1505e0d42769c5472b410d6bf961,并且保存了账户keystore文件
使用sendtx命令部署合约
sendtx参数amount 为交易金额(单位Fan),对于合约部署通常可以设置为0;from为发送交易账户对应的keystore文件; payload为合约字节码;gas为该笔交易所需最小gas值(默认为20000)。上述命令执行结果如下:
根据交易Hash查看合约部署结果:
得到如下结果:
结果中failed为false表明合约部署成功,contract的值为合约地址
调用合约
使用sendTx调用合约
通过remix获得方法调用字节码
使用client sendtx命令调用合约需要提供合约调用方法的payload信息,可以通过remix获得。在remix右下方已部署的合约处,点击左侧小三角可以看到该合约包含的变量和方法。本示例合约包含set和get方法。在set右侧填入参数值,点击set,即可实现函数调用。日志窗口可以看到调用的结果。点击详情可查看调用详情,其中input的值即为方法调用的字节码。本示例调用set,设置变量值为21,如下图所示:

使用sendtx调用合约
如下的命令调用上述合约中的set方法,设置变量值为21。其中payload 为从remix获得的字节码,from为发起交易的账户,to为合约地址
执行结果如下:
通过查询receipt信息,可以获取合约调用结果:
得到如下结果:
注意:调用合约的账户必须是与合约地址同一分片的,Seele目前不支持跨片合约调用
使用call调用合约方法
对于仅获取变量值而不改变合约状态的方法,可以通过call来调用。获取对应方法payload信息和上述sendtx调用合约的方法类似。如调用示例合约中的get方法:
可以得到如下结果:
可以看到,result显示的变量值为之前通过set方法设置的21。
Last updated
Was this helpful?