donut-ide

提供基于蚂蚁区块链“智能合约”的开发、测试和发布管理等基本功能,同时输出区块链服务的能力,进而高效实现一个DApp。

Usage no npm install needed!

<script type="module">
  import donutIde from 'https://cdn.skypack.dev/donut-ide';
</script>

README

1. 简介

为了支持区块链应用的高效开发,测试和发布,蚂蚁区块链提供了结合支付宝小程序IDE集成开发合约的插件,同时插件可以在小程序中输出区块链服务能力,建立小程序和区块链服务之间的“桥梁”,实现区块链服务在小程序场景内的应用。

  • 关于“蚂蚁区块链BaaS平台”介绍,请参考说明文档
  • 关于“蚂蚁区块链合约平台”介绍,请参考说明文档

问题咨询

DApp-group-QR.jpg

1.1 核心功能介绍

插件核心提供的功能如下:

  1. 配置简单:开发者只需要配置ak和sk,通过登录金融科技获取ak/sk,无需配置证书、无需创建合约链账户。
  2. 自动生成合约工程目录:插件可根据简单配置选项自动生成合约工程目录和合约样例代码,同时生成访问区块链服务的相关代码。
  3. 支持合约开发和测试:编译、部署和单元测试,同时在IDE中可以集成测试小程序调用合约,完成端到端的完整流程测试。
  4. 支持合约发布记录管理:查看已开发合约的发布记录,合约的字节码和abi信息,选中已发布合约加载到小程序前端代码中自动生成合约对象,直接调用合约方法。
  5. 小程序使用区块链相关服务:插件自动在工程中生成代码,实现在小程序中调用区块链服务,比如:直接调用使用“账户映射服务”为小程序用户创建区块链账户;插件将合约封装为javascript中合约对象,输出区块链智能合约能力,小程序端可以像调用本地对象方法一样调用区块链合约方法。此外,小程序还可以直接调用区块链“存证接口”进行存证。

屏幕快照 2019-09-07 下午8.06.00.png

1.2 获取插件

可以在支付宝小程序IDE插件市场获取并安装插件: 20191010174945.5ab193d4e0846f51ae322be1f0835e65.png

2. 插件工作原理

小程序IDE插件是在“小程序”端和“区块链服务”之间建立连接的“桥梁”,实现区块链服务在小程序中应用。 小程序IDE插件原理.png

3. 环境准备

在小程序中使用区块链服务,需要至少有一条蚂蚁区块链的访问权限,可登录蚂蚁区块链BaaS申请购买专属合约链,在实验测试阶段可以使用蚂蚁区块链BaaS提供的公共“合约体验链”。 登录金融科技获取开发需要的ak和sk,在使用插件时根据提示填入配置。注意:此ak和sk,将被配置到插件生成的小程序代码中,请根据实际情况的安全性要求进行调整(比如:使用“云函数”等应用服务管理ak和sk进而访问区块链服务)。 屏幕快照 2019-09-07 下午8.34.41.png

4. 合约开发

插件在使用过程中,可按照提供的功能标签顺序使用:

  1. 信息:创建合约工程,开发合约;
  2. 编译:编译合约;
  3. 部署更新:选择目标合约链环境(默认提供:合约体验链),编写部署脚本,部署并发布合约,或更新升级合约;
  4. 测试:编写单元测试用例,一键执行测试合约功能;

屏幕快照 2019-09-07 下午8.41.35.png

  • 其中第1步,生成的合约工程目录结构如下:

屏幕快照 2019-09-07 下午8.57.29.png

  • 其中第2步,编译合约的结果保存在blockchain/contracts目录下,每个json文件中都包含了对应合约编译的结果字节码和abi等详情。

  • 其中第3步,需要编写一个脚本来说明多合约部署的先后部署顺序、依赖关系等,样例部署脚本如下:

module.exports = function(client, contractMap, done) {
  const Demo = contractMap.Demo
  // 合约部署到生产环境
  client.deploy('name'+Date.now(), Demo).then((data) => {
    client.log('Demo success')
    done()
  }).catch((err) => {
    client.log('Demo error')
    client.errorLog(err)
    done()
  })
};

如果合约部署时,需要执行constructor初始化方法,并且需要传递参数,则可以直接通过deploy方法传递参数:['param1', 'param2', 'param3']

module.exports = function(client, contractMap, done) {
  const Demo = contractMap.Demo
  // 合约部署到生产环境
  client.deploy('name'+Date.now(), Demo, ['param1', 'param2', 'param3']).then((data) => {
    client.log('Demo success')
    done()
  }).catch((err) => {
    client.log('Demo error')
    client.errorLog(err)
    done()
  })
};

2.jpg

  • 其中第4步骤中,编写单元测试,可以通过在blockchain/test目录中编写单元测试用例,插件主要提供了Mocha测试框架能力。

3.jpg

5. 合约发布记录

插件也可以查看合约的发布记录情况,同时发布记录与在线工具Cloud IDE的发布记录保持同步,在Cloud IDE发布的合约记录,在这里同样可以展示。

同时发布记录提供发布合约的字节码(bytecode)和接口说明(abi)的详细信息,方便使用。 5.jpg

6. 小程序中调用合约

6.1 准备工作

1.在小程序开发者中心添加服务器域名白名单,将网关域名prodapigw.cloud.alipay.com加入白名单。 6.jpg

2.注意:如果提示域名添加失败,请在区块链BAAS中提交工单开通权限。 7.jpg

3.开通完成,添加服务器域名白名单,填写域名申请,选择对外服务系统不在一个集群,其余根据自己的业务进行填写,审批之后即可在小程序中调用合约。 8.jpg

6.2 调用合约

如下图,在代码中需要引入Blockchian对象调用合约,contractName为用户发布的合约名称,get为合约中的方法名称,如需给合约传递参数,则在第三个参数中传入数组[合约参数1, 合约参数2, ...]9.jpg