蚂蚁链简介
蚂蚁链包含多个产品:合约体验链、开放联盟链、联盟链
- 合约体验链:一条本地开发体验链,供您免费体验本地开发的全流程 网址
- 联盟链:可以创建或加入联盟,门槛较高 网址
- 开放联盟链:面向企业和开发者提供的“无需搭链、快速上链、接近公链”的区块链服务网络。网址
本文介绍如何快速入门蚂蚁开放联盟链合约开发
快速上手
准备环境
-
开通开放联盟链
如果尚未开通开放联盟链,需要先开通相关服务。
开放联盟链服务目前免费开通。
登录控制台,按照指示开通。
-
申请 AccessKey 私钥文件
申请用于连接联盟链的 acceddId 和 accessKey,后续和合约进行交互时需要用
-
创建链上账户
在控制台左侧“链账户管理”菜单栏可以创建密钥托管和密钥非托管的账户
- 密钥托管账号由蚂蚁链保管私钥。自行保存账户公钥,并记录密钥托管 ID(mykmsKeyId)
- 密钥非托管,自己保管私钥等文件(只有一次下载机会)
-
往链上账户分配燃料
对于首次开通服务的新用户(支付宝个人/企业账号),蚂蚁区块链会免费赠送 1 亿燃料(TPS 为 1)。
需要给步骤3创建的链上账户分配燃料用于支付区块链操作相关手续费。
开发合约
切换到“开发指引”->“合约开发”标签下面,可选择“使用合约管理工具开发”或者“使用合约模板快速开发”。
以“使用合约模板快速开发”标签下面的“链上资产”(类似erc20)为例。
点击“立即使用”;输入合约名,点击“下一步”;点击“立即创建”。创建成功后,点击“立即编辑”,会跳转到在线IDE编辑器(类似Remix)。
开放联盟链提供了「Cloud IDE 在线合约开发环境」,为智能合约开发提供简单、高效的集成环境。
在IDE中可以完成修改合约、编译、部署合约等。
部署合约
可以把合约部署到本地模拟器中,方便进行测试。也可以把合约部署到云端。
部署到云端时需要进行环境配置。账户名选项中可以选择托管用户和非托管用户。非托管用户需要提供私钥证书和私钥证书密码。
部署到云端时,合约名不能重复。部署后可以在部署记录中查看刚刚部署的合约名称、地址等。
合约交互
可以在IDE中直接和合约进行交互。也可以通过 SDK 和 http 方式调用合约进行交互。
蚂蚁开放联盟链目前只支持 Java 和 Go SDK,其它语言需要用 http 方式接入开放联盟链。
http接入文档
以 balancoOf 方法为例,示范如何使用 http 发起交易和查询交易结果:
-
首先需要发送握手请求,拿到验证token
后续请求使用该token,从而可以避免验证。握手机制
curl -X "POST" "https://rest.baas.alipay.com/api/contract/shakeHand" \ -H 'Content-Type: application/json; charset=utf-8' \ -d $'{ "accessId": "<your accessId>", "time": "<mill second>", "secret": "<secret>" }' # secret=sign(accessId + time + accessKey) # sign方法: Hex.encode(RSAWithSHA256(message))
-
发送请求
curl -X "POST" "https://rest.baas.alipay.com/api/contract/chainCallForBiz" \ -H 'Content-Type: application/json; charset=utf-8' \ -d $'{ "methodSignature": "balanceOf(identity)", "bizid": "a00e36c5", "inputParamListStr": "[{\\"data\\":\\"IHMBWD30xB1U7+rG+lF3bs01hj40kckniMBbF++qytw=\\"}]", "accessId": "<your accessId>", "contractName": "MyAssets", "token": "<your token>", "orderId": "<your orderId>", "mykmsKeyId": "<your mykmsKeyId>", "outTypes": "[\\"uint256\\"]", "tenantid": "<your tenantid>", "account": "<your account name>", "gas": "2100000", "method": "CALLCONTRACTBIZASYNC" }' # 需要替换 orderId(不重复字符串即可), account(链上账户名)、mykmsKeyId、accessId、token(上面获取到的token)
调用成功后会返回
{ "success":true, "code":"200", "data":"9577ae72aec5a4611cdce9447eb134797df415b1cac7f4a04dfa840b8519df67" // 交易hash }
-
查询交易结果
打开开放联盟链区块链浏览器,输入相应hash即可查询。也可以通过 http 发起请求去查询该笔hash
http 查询交易回执(receip)
注:需要消耗燃料
curl -X "POST" "https://rest.baas.alipay.com/api/contract/chainCall" \ -H 'Content-Type: application/json; charset=utf-8' \ -d $'{ "bizid": "a00e36c5", "method": "QUERYRECEIPT", "hash": "9577ae72aec5a4611cdce9447eb134797df415b1cac7f4a04dfa840b8519df67", "accessId": "<your accessId>", "token": "<your token>" }' # 需要替换 accessId、token(上面获取到的token)
返回数据
{ "success":true, "code":"200", "data": "{\"blockNumber\":113932700,\"code\":0,\"gasUsed\":21538,\"hash\":\"42f6022e4b83b61dcb959d632917c1baa441b1496a702d2614d1f4e4fd9cc448\",\"logs\":[{\"from\":{\"data\":\"eScIYwGF5RYInWgoSSJNTycer5EnrjuRfLZ3\/0e7dUo=\",\"empty\":false,\"value\":\"eScIYwGF5RYInWgoSSJNTycer5EnrjuRfLZ3\/0e7dUo=\"},\"logData\":\"\",\"to\":{\"data\":\"RU7dx20a2G459sOucgoKRBGGwTEuQlgxrh4QANzEqoU=\",\"empty\":false,\"value\":\"RU7dx20a2G459sOucgoKRBGGwTEuQlgxrh4QANzEqoU=\"},\"topics\":[\"call_contract\"]}],\"output\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxA=\",\"result\":0,\"txFinish\":false,\"txSuccess\":false}"} # 返回内容中 output 即为该笔交易返回的数据。 # 需要对该数据解码:先进行base64解码后得到的byte[],对byte[]进行hex编码,再转化为字符串 # "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxA=" -> "0000000000000000000000000000000000000000000000000000000000002710" # 十进制的 10000 # 也可以调用”解析合约返回值“接口处理 output 数据 ```