蚂蚁区块链BaaS平台应用开发指南(三):从一个简单合约开始

Could IDE的入口

新版的Cloud IDE已经去除证书配置的要求,开发者开通区块链之后可直接开始智能合约的开发。在本节中,我们将会使用Could IDE来进行合约的编写、编译和调试的工作。
如果是体验链,请在新手引导引导界面,找到合约体验链卡片,点击调试合约

如果是正式的托管链或区块链创新大赛的链,通过合约管理>新建工程编辑已有工程进入Cloud IDE。

从一个最简单的合约开始

选择目标链

编译部署合约前,要指定好所要部署的链以及部署用的账户:
在右边栏中,点击环境配置

在本例中,选择合约体验链

部署账户暂时先用平台提供的默认账户Test001和对应的私钥;

在编译部署过程中,开发者一定要正确选择对应的链。
部署账户可以使用默认的账户进行,后期开发者如果有需求,可以按照自己需求配置部署合约的账户。

点击确定。

编译合约

在打开的Could IDE界面中,新建一个合约文件(main.sol)。

在中间的编辑器中的填入以下内容:

pragma solidity ^0.4.0;

contract SimpleStorage {
    uint storedData;

    function set(uint256 x) public {
        storedData = x;
    }

    function get() public view returns (uint256) {
        return storedData;
    }
}

在Cloud IDE右边栏,点击编译
然后可以在左下角看到编译的结果(下图×××区域),包括Warning和Error。在右边栏,可以看到编译生成的合约字节码(bytecode)和合约接口说明(ABI)(下图绿色区域)。

点击保存按钮,可以把当前合约文件保存到合约工程中。

注意,这里只是把合约文件保存到工程文件中,并不是保存到区块链上。下一节会介绍如何通过Cloud IDE把编译好到合约部署到链上。

部署合约

当合约编译完毕,点击字节码右上角的部署合约

给要部署的合约实例一个名称:

合约每成功部署一次,在链上就存在一个实例。
同一条链上的合约实例不得重名。

部署成功后,应该在右边栏看到如下信息:合约ID部署交易的交易Hash合约暴露的可调用接口

调用合约

对于上面的样例代码,我们做了非常简单的三件事情:

  • 声明了一个类型为Uint的Stroage变量storedData,该变量在部署的时候会被初始化为0,并保存在区块链上;
  • 暴露了一个设置该变量的接口set(uint256)
  • 暴露了一个获取该变量的接口get()

先点击调用合约调用set接口,在弹出的输入参数窗口,输入一个非负数,点击确定。
调用完成后,可以看到如下结果:

同样的,再调用get方法去获取storedData值,调用成功后,可以在output字段中见到我们设置到值,具体结果参考下面:

至此,我们完整的编译、部署和调用了一个智能合约。这个合约永久的存储在我们的目标链上,合约名或合约ID是该合约实例的访问接口,任何人都可以通过Cloud IDE或其他SDK来接入链并调用该合约所暴露的方法。

进阶

更新合约

目前Could IDE不支持合约更新。部署之后,如果需要修改合约,那么只能修改后,重新编译并重新部署成一个新的合约实例,合约名和合约ID都要更新。

如果有需求,开发者可以通过SDK接口去更新合约,详情见这里和这里。

连接到已部署的合约

开发者经常需要测试调用已经部署好的合约,目前Could IDE中的工程文件并不保存合约部署后的合约名,ID,ABI和字节码。因此,要实现这个需求,操作的步骤如下:

  1. 打开Could IDE,配置好链的环境。
  2. 打开之前已部署合约的代码。
  3. 编译合约一次,生成合约字节码和ABI接口说明。(关键点产生和链上合约完全一致的ABI接口说明
  4. 点击ABI接口右上角的已部署合约按钮。

  5. 输入之前部署的合约名合约Identity

  6. 连接后,可以看到合约的方法,并可以继续调用:

连接到已部署合约的时候,Cloud IDE是不会做任何接口检查的,开发者要保证生成的ABI和已部署的合约完全一致,否则可能导致调用失败。
注意:一旦工程文件里面的合约代码逻辑发生了变化,就不能继续链接到之前部署过的实例上,否则会产生调用错误。如果代码有更新,建议部署新的实例来进行调试。

小结

Cloud IDE是一个极为方便的合约管理、调试和部署工具。开发者需要多加熟悉并理解各个功能的使用,这对后续开发工作帮助非常大。

你可能感兴趣的:(蚂蚁区块链BaaS平台应用开发指南(三):从一个简单合约开始)