快速入门蚂蚁开放联盟链合约开发
蚂蚁链包含多个产品:合约体验链、开放联盟链、联盟链
本文介绍如何快速入门蚂蚁开放联盟链合约开发
开通开放联盟链
如果尚未开通开放联盟链,需要先开通相关服务。
开放联盟链服务目前免费开通。
登录控制台,按照指示开通。
申请 AccessKey 私钥文件
申请用于连接联盟链的 acceddId 和 accessKey,后续和合约进行交互时需要用
创建链上账户
在控制台左侧“链账户管理”菜单栏可以创建密钥托管和密钥非托管的账户
往链上账户分配燃料
对于首次开通服务的新用户(支付宝个人/企业账号),蚂蚁区块链会免费赠送 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 数据 ```
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!