
本文假设读者已按照前面课程完成了标准合约链或者TEE隐私合约链的部署。本文主要讲解蚂蚁区块链的智能合约编译环境的使用。包括以下内容: (1)蚂蚁区块链Cloud IDE 说明 (2)配置Cloud IDE证书 (3)Solidity智能合约编译/部署/运行
蚂蚁区块链Cloud IDE 合约开发环境(以下简称“IDE”)是 BaaS 合约平台提供的在线合约开发工具。此工具为智能合约开发提供简单、高效的集成环境,并提供以下核心功能:
Cloud IDE 暂不支持国密算法合约链。国密算法合约链仅供 蚂蚁区块链创新大赛 试用,尚未正式对外发布。
IDE 是一个典型的去中心化应用(Dapp),可通过 JavaScript SDK 直接与区块链平台通信,进行合约部署和调用。这样设计的优势在于,通过 IDE 您可以连接任何目标的蚂蚁区块链平台环境,前提是您必须拥有目标环境签发的证书,因为 IDE 与区块链平台通过 HTTPs 进行通信。

要与 BaaS 平台建立 HTTPs 连接,您需准备三个证书文件:CA 机构的根证书(ca.crt)、客户端的证书文件(client.crt)和客户端的私钥文件(client.key)。这三个文件的详细说明如下:
文件 | 说明 | 来源 |
|---|---|---|
ca.crt | 合约平台的认证 CA 证书,客户端用来验证区块链平台服务。 | 从 BaaS 平台下载。 |
client.key | RSA 密钥 | 使用 OpenSSL 工具生成。或者自动生成时下载得到 |
client.crt | RSA 证书,与 client.key 是一对。 | 通过 client.key 生成证书请求文件,提交到 BaaS 平台申请证书,得到此证书文件。或者自动生成时下载得到。 |
参考 OpenSSL 安装说明 配置 OpenSSL 工具。
使用 OpenSSL 工具将 client.crt 和 client.key 文件合并生成 MyPKCS12.p12 文件。
openssl pkcs12 -export -clcerts -inkey client.key -in client.crt -out MyPKCS12.p12 -name "Client1"
执行此命令的过程中,您需要输入一次 client.key 文件的解密密码(如果 client.key 文件是加密保存的),输入两次 MyPKCS12.p12 文件的使用密码,之后即可得到一个 MyPKCS12.p12 文件。

生成的“MyPKCS12.p12”文件备用:

听阿里孙善禄专家说,后面一个版本即将在自动生成密钥的选项时生成“MyPKCS12.p12”文件供用户下载。这样的话,就不需要在本地命令行组装了。
针对不同的操作系统,证书文件导入方式不同。辉哥根据自己的环境,只做WINDOWS环境的导入演练。针对苹果操作系统的参考官网说明。
https://baas.cloud.alipay.com/chain-manage/chain/union/lists?consortiumId=2105&tenantName=ZNAPCVKP下下载根证书

保存到本地目录备用。

通过 Chrome 浏览器打开 keychain 工具,选择 设置 > 高级 > 管理证书,然后在证书管理窗口中选择 受信任的根证书颁发机构 > 导入。

7.导入根证书

8.导入根证书1.png

9.导入根证书2.png

10.导入根证书3.png

11.完成根证书导入.png
点击告警确认后,导入根证书就成功了。

12.导入告警-成功.png
在证书管理窗口中选择 个人 > 导入,然后选择 MyPKCS12.p12 文件,按引导完成导入。

13.导入个人证书1.png

14.导入个人证书-正确.png

15.个人证书导入生成私钥密码.png

16.证书导入存储目录.png

17.正在完成证书导入向导.png

18.个人证书导入成功.png
【提醒:】重启浏览器。在导入相关证书文件之后,需要重新启动 Chrome 浏览器,然后才能继续使用 Cloud IDE。

14.导入个人证书2-选择CRT(错误).png
导入结束后在个人证书列表中没有导入的该证书显示的。要参考“ 3.2 生成MyPKCS12.p12个人证书文件”完成证书生成。

1.合约入口
IDE环境自动为用户生成了一个投票类的默认合约,供用户测试使用。

2. 智能合约界面
选择前面章节导入的个人证书:

19.编译时选择证书
如果编译成功,则会有编译结果(成功或者告警信息),右边会生成合约的ABI信息和字节码流。

3.编译成功
ABI 类似于程序中的接口说明文档,描述了属性和方法签名相关信息,包括字段名称、字段类型、方法名称、参数名称、参数类型、方法返回值类型等。
ABI 参数说明: name: 函数名称 type: 方法类型,包括 function、constructor、fallback(缺省方法),默认为 function。 constant: 布尔值,如果为 true,则表示方法不会修改合约字段的状态变量。 payable: 布尔值,表示方法是否可以接收系统转账。 stateMutability: 状态类型,包括 pure(不读取区块链状态)、view(和 constant 类型一样,只能查看,不会修改合约字段)、nonpayable(和 payable 含义一样)、payable(和 payable 含义一样)。 inputs: 数组,描述参数的名称和类型。 name: 参数名称 type: 参数类型 outputs: 和 inputs 一样,如果没有返回值,缺省是一个空数组。
更多 ABI 相关信息,参见 Solidity ABI 介绍(英文)。
环境配置按钮对应的是账号和私钥的配置说明,系统已经提供了默认值。

04.默认环境配置
其中的私钥并不是环境创建时下载的,这个私钥需要界面user.key之后解密user.key之后获取的16进制私钥。
辉哥手贱,没有理解清楚就用自己创建的账户配置了用户名和私钥(直接从user.key复制)

4.环境配置
这样会在编译环节有报错的。

5.部署合约,输入私钥不正确.png
"TEE加密配置"暂时不使用吧,其他文章再做详解。
在合约编译通过,得到字节码和 ABI 后,在 Cloud IDE 中点击 部署合约 将合约部署到目标体验链进行测试。

20.部署成功.png
在部署定义了 constructor 方法的合约时,需要给定 constructor 方法的参数。Cloud IDE 支持合约方法参数类型的提示和一些基本数据类型的初始化赋值,辉哥使用了“alice”,“bob”,“duncan”这3个人名作为候选人。

部署合约
部署成功后,可以看到合约的所有方法列表。

20.部署成功.png
合约ID:0xcd5588db6fc6fb44dd76b006202f9efa2ba5d715272a1ae06fb3c805e6a25289 TX Hash:0x9c89f5f9d601fa394ed9bf6496c687f75557553deaa2343e7939f81b2333e107
合约部署成功后,IDE 会列出合约中所有的 public 方法以及 public 类型的状态变量。点击目标方法右侧的 调用合约 进行调用。
其中,状态变量对应的调用可以直接返回当前状态变量的值。合约方法的调用可以返回如下几个字段: 参数 说明 input: 合约方法的输入数据,通常为合约方法的参数。 output: 合约方法的返回值,可能是多个值,根据返回值具体类型转码显示。 log:如果在合约中使用了 Event 事件,并且事件被触发,则会在 log 中展示。
举例来说,点击voteForCandidate函数的“调用合约”按钮,

21. 运行合约-投票给duncan
运行成功后,就可以看到结果为true,产生了HASH值。

22.运行合约-投票成功
记录交易hash值:0x11b2d34793ce280ebfb47de8080889605e48bd6d6e1bf5f2d2d525ce674355f4
此时查询查询投票次数函数 totalVotes,发现其结果为1了。

23. 运行合约-查询投票次数
把上面获得的HASH值在区块链浏览器https://baas.cloud.alipay.com/chain/detail?bizid=ca545a5c&&tenantName=ZNAPCVKP上查询,都可以查的到执行记录。

24.浏览器查询交易记录
你也可以把以下信息输入到TEE硬件隐私合约链浏览器查询结果吧。
合约ID:0xcd5588db6fc6fb44dd76b006202f9efa2ba5d715272a1ae06fb3c805e6a25289 TX Hash:0x9c89f5f9d601fa394ed9bf6496c687f75557553deaa2343e7939f81b2333e107
TX Hash:0x11b2d34793ce280ebfb47de8080889605e48bd6d6e1bf5f2d2d525ce674355f4
TX Hash:0x1cd5da92a51b5ba686e348ca83bb799f97c4178286c7250c971292cd36a838d4
(1)TEE合约联盟链浏览器 https://baas.cloud.alipay.com/chain/detail?bizid=ca545a5c&&tenantName=ZNAPCVKP (2)配置 Cloud IDE 证书https://tech.antfin.com/docs/2/101796#Windows%20%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F