蚂蚁开放联盟链合约开发入门

  • dwong
  • 更新于 2022-06-13 11:45
  • 阅读 6276

快速入门蚂蚁开放联盟链合约开发

蚂蚁链简介

蚂蚁链包含多个产品:合约体验链、开放联盟链、联盟链

  • 合约体验链:一条本地开发体验链,供您免费体验本地开发的全流程 网址
  • 联盟链:可以创建或加入联盟,门槛较高 网址
  • 开放联盟链:面向企业和开发者提供的“无需搭链、快速上链、接近公链”的区块链服务网络。网址

本文介绍如何快速入门蚂蚁开放联盟链合约开发

快速上手

准备环境

  1. 开通开放联盟链

    如果尚未开通开放联盟链,需要先开通相关服务。

    开放联盟链服务目前免费开通。

    登录控制台,按照指示开通。

  2. 申请 AccessKey 私钥文件

    申请用于连接联盟链的 acceddId 和 accessKey,后续和合约进行交互时需要用

  3. 创建链上账户

    在控制台左侧“链账户管理”菜单栏可以创建密钥托管和密钥非托管的账户

    • 密钥托管账号由蚂蚁链保管私钥。自行保存账户公钥,并记录密钥托管 ID(mykmsKeyId)
    • 密钥非托管,自己保管私钥等文件(只有一次下载机会)
  4. 往链上账户分配燃料

    对于首次开通服务的新用户(支付宝个人/企业账号),蚂蚁区块链会免费赠送 1 亿燃料(TPS 为 1)。

    需要给步骤3创建的链上账户分配燃料用于支付区块链操作相关手续费。

开发合约

切换到“开发指引”->“合约开发”标签下面,可选择“使用合约管理工具开发”或者“使用合约模板快速开发”。

以“使用合约模板快速开发”标签下面的“链上资产”(类似erc20)为例。

点击“立即使用”;输入合约名,点击“下一步”;点击“立即创建”。创建成功后,点击“立即编辑”,会跳转到在线IDE编辑器(类似Remix)。

开放联盟链提供了「Cloud IDE 在线合约开发环境」,为智能合约开发提供简单、高效的集成环境。

在IDE中可以完成修改合约、编译、部署合约等。

部署合约

可以把合约部署到本地模拟器中,方便进行测试。也可以把合约部署到云端。

部署到云端时需要进行环境配置。账户名选项中可以选择托管用户和非托管用户。非托管用户需要提供私钥证书和私钥证书密码。

部署到云端时,合约名不能重复。部署后可以在部署记录中查看刚刚部署的合约名称、地址等。

合约交互

可以在IDE中直接和合约进行交互。也可以通过 SDK 和 http 方式调用合约进行交互。

蚂蚁开放联盟链目前只支持 Java 和 Go SDK,其它语言需要用 http 方式接入开放联盟链。 http接入文档

以 balancoOf 方法为例,示范如何使用 http 发起交易和查询交易结果:

  1. 首先需要发送握手请求,拿到验证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))
  2. 发送请求

    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
    }
  3. 查询交易结果

    打开开放联盟链区块链浏览器,输入相应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 数据    ```
点赞 2
收藏 3
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

3 条评论

请先 登录 后评论
dwong
dwong
0x014E...1912
江湖只有他的大名,没有他的介绍。