1, 摘要
本文假设读者已按照前面课程完成了标准合约链或者TEE隐私合约链的部署。本文主要讲解蚂蚁区块链的智能合约编译环境的使用。包括以下内容:
(1)蚂蚁区块链Cloud IDE 说明
(2)配置Cloud IDE证书
(3)Solidity智能合约编译/部署/运行
2,蚂蚁区块链Cloud IDE 说明
蚂蚁区块链Cloud IDE 合约开发环境(以下简称“IDE”)是 BaaS 合约平台提供的在线合约开发工具。此工具为智能合约开发提供简单、高效的集成环境,并提供以下核心功能:
- 合约编辑与编译,展示编译结果字节码和接口说明(ABI)。
- 合约的部署和调用;提供默认体验链环境和测试账户,用来部署和调用合约。
- 解析合约方法的返回值、事件日志等,辅助调试合约;保存合约到 BaaS 合约管理。
Cloud IDE 暂不支持国密算法合约链。国密算法合约链仅供 蚂蚁区块链创新大赛 试用,尚未正式对外发布。
基本框架
IDE 是一个典型的去中心化应用(Dapp),可通过 JavaScript SDK 直接与区块链平台通信,进行合约部署和调用。这样设计的优势在于,通过 IDE 您可以连接任何目标的蚂蚁区块链平台环境,前提是您必须拥有目标环境签发的证书,因为 IDE 与区块链平台通过 HTTPs 进行通信。
3,配置Cloud IDE证书
3.1 证书文件说明
要与 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 平台申请证书,得到此证书文件。或者自动生成时下载得到。 |
3.2 生成MyPKCS12.p12个人证书文件
参考 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”文件供用户下载。这样的话,就不需要在本地命令行组装了。
3.3 导入根证书文件
针对不同的操作系统,证书文件导入方式不同。辉哥根据自己的环境,只做WINDOWS环境的导入演练。针对苹果操作系统的参考官网说明。
- macOS 操作系统
3.3.1 下载根证书
https://baas.cloud.alipay.com/chain-manage/chain/union/lists?consortiumId=2105&tenantName=ZNAPCVKP下下载根证书
保存到本地目录备用。
3.3.2 导入根证书
通过 Chrome 浏览器打开 keychain 工具,选择 设置 > 高级 > 管理证书,然后在证书管理窗口中选择 受信任的根证书颁发机构 > 导入。
点击告警确认后,导入根证书就成功了。
3.3.3 导入个人证书文件
在证书管理窗口中选择 个人 > 导入,然后选择 MyPKCS12.p12 文件,按引导完成导入。
【提醒:】重启浏览器。在导入相关证书文件之后,需要重新启动 Chrome 浏览器,然后才能继续使用 Cloud IDE。
常见错误:导入client.crt误认为是个人证书
导入结束后在个人证书列表中没有导入的该证书显示的。要参考“ 3.2 生成MyPKCS12.p12个人证书文件”完成证书生成。
4,Solidity智能合约编译/部署/运行
4.1 编译
(1)点击“创建合约”按钮进入蚂蚁区块链CLoud IDE环境。
IDE环境自动为用户生成了一个投票类的默认合约,供用户测试使用。
(2)点击“编译”按钮,完成智能合约编译。
选择前面章节导入的个人证书:
如果编译成功,则会有编译结果(成功或者告警信息),右边会生成合约的ABI信息和字节码流。
字节码
字节码即合约代码的编译结果,也是合约部署时使用的关键数据,通过 SDK 可以将合约字节码部署到目标的生产链上使用。合约接口说明(ABI)
应用程序二进制接口(Application Binary Interface,ABI)可以理解为合约的接口说明。当合约被编译后,其对应的 ABI 也会一起生成。
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 介绍(英文)。
默认环境说明和典型错误告警
环境配置按钮对应的是账号和私钥的配置说明,系统已经提供了默认值。
其中的私钥并不是环境创建时下载的,这个私钥需要界面user.key之后解密user.key之后获取的16进制私钥。
辉哥手贱,没有理解清楚就用自己创建的账户配置了用户名和私钥(直接从user.key复制)
这样会在编译环节有报错的。
"TEE加密配置"暂时不使用吧,其他文章再做详解。
4.2 部署
在合约编译通过,得到字节码和 ABI 后,在 Cloud IDE 中点击 部署合约 将合约部署到目标体验链进行测试。
在部署定义了 constructor 方法的合约时,需要给定 constructor 方法的参数。Cloud IDE 支持合约方法参数类型的提示和一些基本数据类型的初始化赋值,辉哥使用了“alice”,“bob”,“duncan”这3个人名作为候选人。
部署成功后,可以看到合约的所有方法列表。
合约ID:0xcd5588db6fc6fb44dd76b006202f9efa2ba5d715272a1ae06fb3c805e6a25289
TX Hash:0x9c89f5f9d601fa394ed9bf6496c687f75557553deaa2343e7939f81b2333e107
4.3 运行合约(调用合约)
合约部署成功后,IDE 会列出合约中所有的 public 方法以及 public 类型的状态变量。点击目标方法右侧的 调用合约 进行调用。
其中,状态变量对应的调用可以直接返回当前状态变量的值。合约方法的调用可以返回如下几个字段:
参数 说明
input: 合约方法的输入数据,通常为合约方法的参数。
output: 合约方法的返回值,可能是多个值,根据返回值具体类型转码显示。
log:如果在合约中使用了 Event 事件,并且事件被触发,则会在 log 中展示。
举例来说,点击voteForCandidate函数的“调用合约”按钮,
运行成功后,就可以看到结果为true,产生了HASH值。
记录交易hash值:0x11b2d34793ce280ebfb47de8080889605e48bd6d6e1bf5f2d2d525ce674355f4
此时查询查询投票次数函数 totalVotes,发现其结果为1了。
4.4 浏览器查询交易结果
把上面获得的HASH值在区块链浏览器https://baas.cloud.alipay.com/chain/detail?bizid=ca545a5c&&tenantName=ZNAPCVKP上查询,都可以查的到执行记录。
你也可以把以下信息输入到TEE硬件隐私合约链浏览器查询结果吧。
(1)合约创建信息
合约ID:0xcd5588db6fc6fb44dd76b006202f9efa2ba5d715272a1ae06fb3c805e6a25289
TX Hash:0x9c89f5f9d601fa394ed9bf6496c687f75557553deaa2343e7939f81b2333e107
(2)投票函数voteForCandidate - duncan
TX Hash:0x11b2d34793ce280ebfb47de8080889605e48bd6d6e1bf5f2d2d525ce674355f4
(3) 查询投票次数 totalVotes
TX Hash:0x1cd5da92a51b5ba686e348ca83bb799f97c4178286c7250c971292cd36a838d4
5,参考
(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