合约流程

编辑合约

你可以基于任何支持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;
    }
}
注意:使用Seele部署合约,建议使用的solidity版本为0.4.24-0.4.26

编译合约

编写好合约后,可以使用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?