【14】使用BaaS构建区块链

14-1 联盟链管理

14-1-1 管理区块链主链

联盟概述

联盟是一个虚拟组织,是不同的机构网络共同合作完成某个业务而结成的联合。

组织联盟的机构

在BaaS平台中,机构指联盟中租户所属的企业。联盟仅支持以租户为单位加入,联盟中不同租户可能属于同一个机构。

机构的权限

共享联盟区块链

创建区块链应用,并共享给联盟内其他机构

管理联盟链主链

创建区块链
  • 登录BaaS平台,进入“我的联盟”
  • 选择我创建的联盟

  • 左侧导航栏,单击 联盟内的链 > 立即订购
  • 在购买页面,选择联盟,然后根据需求选择套餐类型及订单时长
  • 单击 确认购买 进行付费。完成购买后,系统将自动为您配置区块链
  • 进入 联盟 > 联盟内的链 页面,会显示购买的区块链,单击 编辑 图标可进行修改。
申请区块链证书

蚂蚁链使用TLS双向认证机制(Client-authenticated TLS handshake),即客户端需要验证服务端(区块链节点)的身份,服务端也需要验证客户端身份。与大家常见的浏览器访问网站时的单向身份认证相比,双向认证是在TLS握手阶段,客户端认证完成服务器证书后,客户端会将自己的证书传给服务器。服务器验证通过后再开始主密钥协商。

因此,连接到蚂蚁链节点前,您必须要拥有能证明自己身份的数字证书。

  • 进入联盟,选择目标联盟
  • 左侧导航栏,点击 “联盟内的链”,右侧选择目标区块链,单击 “创建证书”

重置证书

左侧导航栏,点击“联盟内的链”,右侧选择目标区块链,单击“更多”->“重置证书’

查看区块链浏览器
  • 左侧导航栏,点击 “联盟内的链”,右侧选择目标区块链,单击联盟链卡片上的浏览器
  • 在浏览器页面中,可以看到链的相关信息,包括链交易数目、节点信息、账户信息、查看信息、块中包含的交易等信息。
  • 在浏览器页面中,点击③的某个区块,可查看具体区块信息
  • 在浏览器页面中,单击④的某个交易可查看具体交易信息
  1. 按区块链高度或交易哈希查询
  2. 授权用户通过支付宝扫描获取交易存证信息
  3. 单击解码查看,支持明文查看交易内容
  4. 查看交易签名内容
  5. 查看交易回执

管理节点

可以查看当前区块链的节点列表,包括节点地址,服务端口,共识状态等信息。

  • 联盟管理员添加节点
    • 节点管理 > 节点详情 标签页上单击 添加节点
    • 在右侧弹窗中选择节点类型,申请新增云上节点可直接自主购买,申请新增云下节点需要提交工单。
  • 联盟成员添加节点
    • 需要提交申请,管理员审批通过后,通过提交工单的形式提交节点
修改节点所有者
  • 节点所有者可以在节点列表直接对所有者进行修改。
  • 原节点所有者选择要修改的所有者后,通过输入验证码校验,节点所有者完成变更。
子链节点审批
  • 管理子链的过程中,当添加不是自己拥有的节点时,需要所有者审批
  • 登录BaaS平台,接入联盟,选择目标联盟,单击“主链管理”,进入链管理页面
  • 选择节点管理 -> 子链节点审批,即可查看或处理审批流程
    • 如果是联盟管理员,提交审批流程后,可查看节点审批进度及状态
    • 如果是节点所有者,可查看节点使用情况及节点的审批操作
管理账户
添加账户
  • 登录BaaS平台,进入联盟,选择目标联盟上的“主链管理”,在账户管理 > 账户管理页签,单击添加账户
  • 若选择 自动生成密钥和证书(密钥托管),则平台可以将您的账户密钥托管在BaaS网关可信存储环境中,托管密钥托管ID与用户关联,为您提供代理交易签名等服务,避免您因密钥丢失、泄露等导致无法使用账户。
  • 选择自动生成密钥和证书(密钥托管)的生成方式后,单击 去生成

  • 若选择 自动生成密钥和证书(密钥非托管),则需要您自己妥善保存账号相关的密钥信息。
  • 选择自动生成密钥和证书(密钥非托管)的生成方式后,单击 去生成

  • 选择手动生成密钥和证书的生成方式后,单击 去生成
  • “账户公钥”和“账户恢复公钥”可以通过BaaS平台提供Java版本的本地密钥服务生成
添加账户白名单
  • 开通白名单功能后,只有白名单里的账户可以调用SDK
  • 登录BaaS控制台,进入联盟后,单击主链管理,在账户管理,。 账户白名单页签下,单击立即开通。
  • 在白名单管理页签下,单击添加白名单账户
  • 在弹出的权限编辑框中,按需勾选权限类型,填写账户名称后,单击提交。
申请账户白名单权限
  • 联盟内的机构成员可以申请账户白名单,审批通过后才能进行SDK调用
  • 进入主链管理,选择 账户管理 > 账户白名单页签,单击右侧的权限申请
  • 在申请权限的弹框中填写各类参数后,单击提交
  • 联盟管理员进入账户管理 > 账户白名单页签中,处理审批流程

运营监控
  • 登录BaaS平台,进入联盟后,选择目标联盟链,单击联盟链卡片上的链管理,进入链管理页面
  • 选择运营监控页签,在区块链监控模块下可以查看最近一个月的区块链状态及各个节点的状态
管理跨链配置
跨链数据连接服务

在链管理页面上,单击 跨链管理 标签并从其下拉菜单中选择 跨链服务,然后单击 申请开通

管理外部数据源
  • 在链管理页面上,单击 跨链管理 标签并从其下拉菜单中选择 外部数据,可以开启外部数据源连接服务
  • 服务开通后,您可以管理当前的公共数据源和私有数据源
小程序浏览器查询权限

要使用小程序浏览器查询权限功能,需要先前往蚂蚁链应用市场,开通小程序浏览器服务。

合约数据解析

通过合约数据解析功能,使用区块链浏览器查看交易对应的业务信息

合约解析的使用流程

  • 进入合约数据解析页面定义业务模型
  • 执行智能合约或原生存证的接口程序,可获得交易hash
  • 在区块链浏览器查看业务视图

暂不支持TEE安全版

分层密钥管理

需要先前往蚂蚁链应用市场,开通分层密钥管理服务。

14-1-2 管理区块链子链

子链概述

蚂蚁链BaaS平台的子网功能支持在区块链上创建子链

每条子链可以添加不同的机构成员和节点,为后续的业务隔离提供了方便,从而保证了数据的安全。

子链特点

在区块链应用中,存在联盟内部不同节点灵活组网的需求。蚂蚁链的动态子网(subnet)功能支持在区块链运行过程中创建新的共识子网,新的子网包含主网上全部或部分节点,运行独立的共识,能够实现在不部署新节点的情况下快速建立独立的业务链,支持业务数据隔离;同时,子网统一节点身份机制也为不同子网间的业务互操作提供了安全保障。

管理联盟链子链

在BaaS控制台中可以对联盟链子链进行以下管理操作:

创建联盟链子链

查看子链浏览器

管理子链节点

管理子链账户

管理子链用户

子链节点停服

创建区块链子链
  • 登录BaaS平台,进入 “我的联盟”,选择目标联盟
  • 选择一条需要创建子链的联盟链,单击子链管理,进入到主链管理-子链管理的页面
  • 单击页面右上角创建子链,弹出创建子链的弹窗
  • 在创建子链的弹窗填写参数
  • 单击确定,完成创建,创建好的子链可以在联盟链主链的子链管理列表下
查看子链浏览器
  • 登录BaaS控制台,选择目标联盟,选择创建目标子链的联盟链,单击子链管理
  • 单击目标子链上的浏览器,进入子链浏览器
管理子链节点
  • 登录BaaS控制台,选择目标联盟,选择创建目标子链的联盟链,单击子链管理
  • 单击目标子链上的管理,进入子链管理页面,选择节点管理页签
添加节点
  • 单击右上角添加节点,在弹框中的节点信息下拉框中选择需要添加的节点
  • 如果不是节点所有者,会生成一个添加节点的审批流程,节点所有者审批通过后才能使用该节点
删除节点
  • 单击目标节点卡片上的删除小图标,删除节点时需要验证码验证
  • 节点从该子链删除后,不影响主链节点
  • 子链至少保留一个节点
管理子链账户
  • 登录BaaS控制台,选择目标联盟,选择创建目标子链的联盟链,单击子链管理
  • 单击目标子链上的管理,进入子链管理页面,选择账户管理页签
  • 创建和查看区块链上的账户
  • 单击右上角添加账户后,你可以选择 自动生成密钥和证书(密钥托管)、自动生成密钥和证书(密钥非托管)和 手动生成密钥和证书 三种方式创建账户
  • 冻结或解冻账户
  • 单击列表下目标账户右侧的冻结或解冻按钮,即可冻结或解冻该账户
管理子链用户
  • 登录BaaS控制台,选择目标联盟,选择创建目标子链的联盟链,单击子链管理
  • 单击目标子链上的管理,进入子链管理页面,选择参与机构页签
  • 添加参与机构
  • 单击右上角添加机构,在弹框中添加机构中选择需要添加的机构
子节点停服
  • 登录BaaS控制台,选择目标联盟,选择创建目标子链的联盟链,单击子链管理
  • 单击目标子链上的停止

14-2 基础应用服务

14-2-1 本地区块链浏览器

安装与配置

为方便用户在本地查看链的相关信息,合约链浏览器提供浏览器镜像。用户可在本地配置链节点和证书信息,在容器中部署,通过本地与容器之间的端口映射,在本地web浏览器看到链的相关信息,包括链交易数目、节点信息、账户信息、出块信息、块中包含的交易等信息。

合约链浏览器的安装和配置包含四个步骤

  1. 准备环境
  2. 下载安装包
  3. 本地配置
  4. 启动服务
步骤一

运行合约链浏览器需要以下软件环境

  • MySQL数据库

合约链浏览器需要有可连接的MySQL数据库作为数据存储单元。

创建名称为“browser”的数据库(选择utf8字符集)

  • Docker镜像环境

合约链浏览器需要在Docker镜像环境下运行,需要预先安装Docker Engine

步骤二

下载安装包

登录蚂蚁链BaaS平台控制台,进入联盟后,从左侧导航栏选择 应用 > 平台应用,选择合约链浏览器

获取合约链浏览器的安装包,解压安装包至本地目录下,得到以下文件

步骤三

本地配置

执行init.sql中的建表语句,在MySQL数据库中建立对应的表。

config目录下的application.properties文件,更新以“$”符号开头的配置项

步骤四

启动服务

在本地config的上级目录执行runApp.sh中的脚本

执行docker ps查看容器是否运行,如果已运行,在浏览器中输入localhost:8080即可访问区块链浏览器。

功能说明

首页

可以查看区块链的基本详情,交易历史、区块、哈希等信息

账户页

在账户页可以查看该条链上所有账户信息

单击目标账户的地址,可以查看该账户的详细信息

合约页

可以查看到本链上运行的所有合约

单击目标合约,进入合约详情页,可以看到相关合约详细信息

单击 合约代码,可选择提交本地合约,来验证链上执行的该合约是否为本地当前合约

14-2-2 数据导出服务

概述/服务开通

数据导出服务能将区块链上特定的区块、交易、合约事件导出到外部的数据库中,导出过程中保证事件的完整性,符合条件的事件会被推送到外部数据库至少一次。

数据导出服务支持导出指定区块高度区间内的所有事件,也支持持续运行模式,准实时地将链上数据写入到外部数据库中。

主链开通方式
  • 登录蚂蚁链BaaS平台控制台,单击我的联盟,进入我的联盟页。
  • 选择需要开通服务的联盟
  • 选择需要开通服务的链,单击主链管理进入链管理页面
  • 在上方导航栏中,单击应用服务->数据导出服务进入数据导出服务控制台。
  • 单击立即开通,授权并开通数据导出服务。
子链开通方式
  • 登录蚂蚁链BaaS平台控制台,单击我的联盟,进入我的联盟页。
  • 选择需要开通服务的联盟
  • 选择目标主链,单击主链卡片上的子链管理进入主链管理-子链管理页面
  • 选择需要开通服务的子链,单击子链卡片上的管理进入子链管理页面
  • 在上方导航栏中,单击应用服务->数据导出服务进入数据导出服务控制台。
  • 单击立即开通,授权并开通数据导出服务。

创建导出任务

分为四步:

  1. 导出数据设置
  2. 导出目标设置
  3. 表映射关系设置
  4. 完成创建
步骤一

进入导出服务控制台,单击右上角的新建导出,开始导出任务创建流程

步骤二

导出目标设置

  • MySQL

  • 阿里云日志服务(SLS)

  • 托管RocketMQ

  • 托管MQTT

步骤三

表映射关系设置

当导出目标设置成托管RocketMQ,托管MQTT时,直接跳过表映射关系设置就能完成导出任务的创建。

导出目标设置成MySQL时,如果第一步有生成预览数据,则该步骤会默认生成一套映射关系,可以在此基础上进行修改。

导出到阿里云日志服务(SLS)

步骤四

单击下一步,完成导出任务的创建

导出任务管理

任务查看

进入数据导出服务控制台,在任务列表下,您可以看到当前区块链实例上的所有导出任务

  • 如果自定义设置了结束块高,则任务创建成功后,在一次性任务页签下展示。
  • 如果准实时写入数据到数据库,则任务创建成功后,在持续性任务页签下展示。
  • 导出任务的状态:
    • 运行中:数据正在导出中
    • 暂停:任务被人为停止
    • 成功:导出任务已经执行完成
    • 失败:导出任务运行失败,可以单击启动,重启失败的任务。
查看/修改任务详情
  • 查看任务详情 在数据导出服务列表页,单击目标服务操作栏下的详情,可在任务详情页中查看任务的详情信息。
  • 修改任务详情 在任务详情页,单击右上角的修改按钮,可以对该任务的任务名称、任务描述、告警地址进行修改。
  • 修改完成后,单击右上角的确认修改,即可保存修改后的信息。
申请Token

对于导出数据到托管MQTT的任务,您在客户端使用时,需要提前在BaaS平台上申请Token

  • 在数据导出服务列表下,单击创建的导出到托管MQTT的任务所在行操作栏下的详情,进入任务详情页
  • 在任务详情页,单击导出目标设置模块下的申请Token
  • 申请通过后,即可为您展示AK和Token信息
暂停/恢复导出

在创建导出任务后,当数据正在导出中,状态显示运行中,此时,如果您想中断导出任务,可以单击操作栏下的暂停按钮。暂停任务后,您也可以重新恢复数据导出任务,继续导出数据到外部数据库。

删除/查询、重试失败记录
  • 如果导出任务已完成,或不需要继续导出数据到该任务,您可以清理任务列表中的任务
  • 对状态为失败的导出任务,单击该导出任务右侧操作栏下的日志,即可查询该导出任务导出失败的日志

14-2-3 区块链C端浏览器

14-2-4 账户映射服务

概述/开通服务

账户映射服务,是由蚂蚁区块链提供的一套用于业务账户与链上账户进行映射和托管的服务。此服务可以管理业务账户与链上地址的映射关系,更安全地管理链上账户的公私钥,为待上链交易提供签名。

使用服务

前置条件
  • 已将蚂蚁区块链合约平台SDK更新至最新版
  • 接入蚂蚁区块链的应用SDK。在使用账户映射服务前,在项目的配置文件中加入蚂蚁区块链应用SDK的Maven依赖。
操作流程
账户映射

批量异步映射调用流程

交易签名

映射完成后,链上地址对应的公私钥托管在蚂蚁区块链平台。可通过交易签名API传入指定业务账户和需要签名的交易哈希,由蚂蚁区块链平台对交易哈希值进行签名,并返回签名后的结果

接口说明

单个账户映射(同步返回)

输入参数

返回值

结果码

批量账户映射(异步返回)

输入参数

返回值

结果码

查询批量映射结果

输入参数

返回值

结果码

查询单个已映射的账户信息

输入参数

返回值

结果码

查询全部已映射的账户信息

输入参数

返回值

结果码

交易签名

输入参数

返回值

结果码

14-2-5 分层密钥管理服务

概述/开通服务

分层密钥管理服务(Asymmetric Key Derivation Function,AKDF)是由蚂蚁区块链提供的一套密钥生成和管理服务,可用于区分指定链上的数据访问权限。

开通服务

  • 进入联盟,单击左侧导航栏上的应用 > 平台应用,找到分层密钥管理服务应用所在行,单击右侧的详情
  • 在右上角选择一个联盟,以及该联盟内的一条链后,单击开通,即可以为该联盟的指定链开通分层密钥管理服务

使用服务

前置条件
  • 接入蚂蚁区块链的核心SDK
  • 接入蚂蚁区块链的应用SDK。在使用AKDF服务前,需要在项目的配置文件中加入蚂蚁区块链应用SDK的Maven依赖
操作流程
创建密钥

服务开通后,联盟管理员可通过 链管理 > 分层密钥管理 下的 创建密钥 功能来创建目标链的密钥

授权管理

对密钥对应的目标链上的用户进行密钥授权管理。

  • 添加授权

授权链上用户下载、使用密钥

  • 取消授权

对已授权但未下载该密钥的用户取消授权。已下载密钥的用户,无法再去下载密钥,但已经下载的密钥仍可继续使用

使用密钥

被授权的用户可以通过API接口下载指定密钥对。下载的密钥对中,公钥为明文,私钥为密文,用户需要使用加入联盟时下载或生成的client.key对密文私钥解密后才能使用密钥

关闭下载

关闭密钥下载后,已被授权但是未下载密钥的用户,不能再下载此密钥。已下载该密钥的用户仍然可以继续使用该密钥

接口列表

获取已创建的密钥对列表

输入参数

返回值

结果码

获取被授权密钥对

输入参数

返回值

结果码

14-2-6 workflow 业务状态订阅服务

概述

workflow业务状态订阅服务是由蚂蚁区块链提供的一套区块链工作流提效服务,旨在简化开发工作,提升开发效率。

通过workflow,联盟多方可以协作完成业务多个环节。开发者只需根据业务逻辑抽象定义各阶段的合约状态(state),以及相应的合约方法驱动状态相互转换,同时完成客户端响应状态变化的业务逻辑即可。其中,链上合约状态变换、发生事件(Event)会自动触发链下客户端方法执行,客户端方法又会自动提交交易到链上合约,驱动合约状态同步迁移。开发者无需关心合约与客户端方法之间的调用过程,由workflow框架代理完成。

使用服务

通过JSON文件生成代码框架

使用说明

步骤一:配置开发环境

在BaaS平台申请链,待审核通过后,下载对应的签名证书等相关文件

修改recourses/db/data.sql,配置相关的证书和服务路径(支持相对路径和绝对路径)

修改recourses/db/db.setting文件

修改recourses/application.properties文件中的SpringBoot框架配置

修改recourses/client.json文件

步骤二:创建合约账户

合约账户主要用于部署合约、调用合约以及合约内的角色(Roles)权限控制

使用mychainAccountManager.createAccount()可创建账户。

通常需要使用链上已存在账户来创建新账户。如果不拥有任何账户,可以先使用技术栈mychainAccountManager.createLocalAccount()方法在本地数据库生成账户,然后提供账户publicKey到BaaS平台在链上完成账户创建。

步骤三:定义workflow语义

workflow框架核心由链上智能合约和链下客户端业务逻辑构成。

链上智能合约由States、Events、Roles和Transactions方法构成。

客户端业务逻辑由Method和Context构成。

States和Events为链上智能合约和链下客户端业务逻辑的公用部分。

workflow属性定义

合约和客户端公用部分

智能合约定义部分

  • Roles:必选。在多方参与的业务场景中,对合约Transaction方法的调用需要权限控制,因此需要定义Role
  • Transactions:必选。链上合约中的State的流转,需要通过调用Transaction方法完成

客户端逻辑定义部分

  • Context:必选。客户端业务逻辑方法的默认输入数据。Context是一种输入(input),可能来自客户端本地数据库或者远程RPC调用的返回结果。
    • Name:必选。成员名称
    • Type:必选。成员基本类型
  • Methods:必选。客户端业务逻辑方法定义的集合,Method统一输入参数为Context,在链上当前状态为FromState并且发生的事件为Event时,此Method将被workflow自动触发调用
    • FromState:必选。从链拉取区块,解析获取到的合约当前State,应当为States定义中的某一个
    • Event:必选。从链拉取区块,解析获取到的合约当前发生的事件Event,应当为Events定义中的某一个
    • ToState:必选。客户端Method的目标状态
    • Condition:可选。若需要workflow分支执行,可定义Condition
    • CallMethod:必选。客户端根据合约状态和事件,做出响应的具体逻辑方法,需要具体实现
步骤四:使用技术栈生成代码框架、智能合约框架

在区块链BaaS平台应用市场中生成需要的技术栈代码框架

获取代码框架后,src/main/java/com/example/demo/impl目录如下

src/main/rescources/contracts/目录会增加一个智能合约文件xxxxContract.sol

步骤五:补充客户端业务逻辑、初始化Context、补充智能合约逻辑代码

workflow框架使用说明

需实现生成的框架jar包 baas-tech-stack-strater.jar中的XXXFacade.java接口

生成智能合约SimpleContract.sol

(可选)自动生成的合约可以直接部署使用,包含角色权限管理、状态流转方法、状态和事件Log等,可以根据业务需求做二次开发,在状态流转方法中增加额外的处理逻辑。

步骤六:部署智能合约

有以下两种途径

  • 如果联盟中的合约由其他方部署,可获取目标contractId(16进制)后配置到数据库mychain_bv_config表中
  • 通过技术栈创建管理合约,使用mychainContractManager即可创建合约

步骤七:测试、上线部署客户端服务

测试部分主要包括链上智能合约、链下客户端业务逻辑

  • 智能合约:可以通过编写测试用例,单独测试智能合约
  • 客户端业务逻辑:可以通过本地调试、编写测试用例进行针对性的测试。技术栈会定时拉取区块,解析每个交易进行处理,如果目标workflow的合约State发生转换,有特定Event发生,即会自动触发Method中对应绑定的方法执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FrancyZhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值