华为云区块链服务的整体架构
华为云区块链服务 BCS 是面向企业及开发者的高性能、高可用和高平安的区块链技术平台服务,能够帮忙企业和开发人员在华为云上疾速、低成本的创立、部署和治理区块链利用。
BCS 基于 Hyperledger1.0、kubernetes 搭建,配置简略,数分钟内即可实现部署,提供全流程的自动化运维服务,多维度监控;反对多种高效共识算法,切换灵便,秒级共识(2000+ TPS);多角色节点和成员可动静退出 / 退出;采纳容器化物理资源管理;一键上链,节约 80% 的开发、部署老本;按需付费,缩小 60% 应用老本;对立运维,节约监控和运维老本;依据用户需要进行弹性伸缩,降级回滚;欠缺的用户、秘钥、权限治理和隔离解决,多层加密保障,国密和同态加密等隐衷解决,牢靠的网络安全根底能力,经营平安无忧。
BCS 的总体逻辑架构如图 1 所示的三个档次,即区块链服务平台、合约链码层和业务应用层。
区块链服务平台
区块链服务平台具备极强的可靠性和扩展性,后续依据市场需求逐渐反对 Corda 和 EEA 等优良区块链框架,为下层利用低成本、疾速的提供高平安、高牢靠、高性能的企业级区块链零碎。
合约链码
合约链码层目前提供 Hyperledger 规范智能合约接口,用户能够依据不同利用场景构建不同的智能合约,后续将与合作伙伴一起为用户打造通用场景智能合约库,如供应链治理和溯源、供应链金融、数字资产、公益慈悲和互联网保险等,企业能够在此基础上疾速构建区块链利用场景。
业务应用层
业务应用层为最终用户提供可信、平安、快捷的区块链利用。用户能够应用华为云提供的各种解决方案(例如供应链金融解决方案、游戏行业解决方案、供应链溯源解决方案、新能源行业解决方案等),联合合约层疾速搭建区块链利用。
图 1 华为云区块链服务 BCS 的逻辑架构
部署区块链服务
步骤 1:资源筹备
为了更稳固的运行区块链服务需筹备 2 台 8u16g 机器来进行服务的部署。注册并登陆华为云账号,进入华为云治理控制台,抉择计算 / 云容器引擎服务(见图 2)。
点击创立 Kubernetes 集群按钮,进入创立虚拟机的界面,在集群名称输入框中命名集群的名字,按需抉择本人要应用的配置 (能够采纳默认配置) 并点击下一步按钮进入图 3 界面。
在图 3 的界面上抉择 2 台 8 核 16GB 内存的机器,在弹性 IP 栏点击当初购买弹性 IP,公网弹性 IP 次要用于对公网公布 BCS 代理的拜访地址。在云容器引擎左侧导航条中点击资源管理 / 虚拟机集群如图 4,查看集群列表中刚创立的集群状态是否购买胜利。
图 2 云容器引擎服务总览
图 3 抉择节点机器规格
图 4 集群信息列表
步骤 2:部署服务
在云治理控制台点击区块链服务进入如图 5 的区块链服务页面,点击该页面右上角的“购买区块链服务”的按钮进入图 6。
图 5 区块链服务总览
在图 6 的区块链服务购买页面中填写区块链服务名称,抉择步骤 1 中创立的容器集群。在该示例中咱们创立了两个节点组织 testorg 和 developerorg,并为每个组织调配两个 peer 节点;抉择疾速拜占庭容错共识策略,基于拜占庭容错共识节点的最小数量为 4,即 3f+1,f=1;抉择 ECDSA 签名算法的成员证书散发机制;配置链码治理 Portal 的登录明码。
图 6 购买区块链服务
区块链节点的通道配置如图 7 所示,咱们创立一个通道命名为 testchannel,把之前创立的组织 testorg 和 developerorg 退出该通道。实现如上配置之后,点击下一步浏览该服务的概要信息,最初提交订单实现服务的订购和配置过程如图 8。
图 7 区块链节点的通道配置
图 8 区块链服务订单详情
点击左侧导航条的服务治理进入服务状态查问页面,期待数分钟后查看所部署的服务状态如图 9 所示,该服务进入胜利运行状态。
图 9 区块链服务运行界面
开发链码
链码也称为智能合约,本质上是控制区块链网络中的不同实体或相干方互相交易的业务逻辑。简言之,链码将业务网络交易封装在代码中,能够调用链码来设置和获取账本,即区块数据或世界状态(world state)。
步骤 1:示例场景阐明
该示例场景应用区块链来追踪研发团队内的某产品的测试数据,通过查问某个产品或者服务一段时间内的测试用例后果,进而剖析产品的性能状态。开发人员能够查问到失败用例是哪些、集中在产品的哪些模块,还能够依据测试人员的名字,分割测试人员疾速定位问题;测试管理者能依据不同测试人员的测试用例,发现问题的多少和模块的稳固水平;测试人员在零碎中记录测试后果,其余参与方能够查问测试后果。该示例场景的基本功能阐明如下。链码的交互流程如图 10。
_1、_测试管理者 manager 创立我的项目和模块;
_2、_测试管理者 manager 依据项目名称、模块增加测试用例、创建人和创立工夫;
_3、_测试人员 tester 依据测试用例增加测试后果、测试工夫、测试人员和备注;
_4、_测试人员 tester、测试管理者 manager、开发人员 developer 能够依据项目名称、模块查问测试用例;依据测试用例查问测试后果、工夫、测试人员和备注。
图 10 线下 APP 和链码的简略交互流程图
步骤 2:编写链码
链码开发人员可从
“github.com/hyperledger/fabric/core/chaincode/shim” 模块查看链码的接口,需实现 init 和 invoke 接口。shim 模块中的接口定义如下:
在定义好整个代码的保留目录构造后,开发人员需将 ”github.com/hyperledger/fabric/core/chaincode/shim” 退出到办法援用。
对于有须要初始化解决的数据,能够在初始化函数 init 中编写并在链码实例化的过程中进行。这里咱们定义了一个示例即初始化项目名称,代码实现如下:
接下来开始定义外部逻辑的启用函数 invoke。首先通过接口中的内置办法 GetFunctionAndParameters()来获取传入的函数别名和参数,通过 switch case 或 if else 条件语句把之前剖析的各个用户角色能够调用的办法起个别名,而后和外部的实在办法做好一一对应关系,并将接口对象和相应调用参数传入对应的办法。
具体的用户可能拜访哪个办法的权限逻辑管制可由下层的利用 app 实现,链码次要实现对数据的存储和查问的逻辑。Invoke 链码示例如下:
实现 invoke 函数后咱们须要给这个 go 文件定义好它的入口 main 函数,通过 fabric shim 包中的 Start 办法来启动咱们定义的全局智能合约,保障链码能够被正确的调用,示例如下:
这样咱们链码的根本代码架构就搭建好了,开发人员可持续填充每个办法内的逻辑,即别名所对应的实在办法的实现。咱们以创立测试用例和查问测试用例为示例阐明。
● 创立测试用例以项目名称、模块名称及测试用例名称形成复合主键,而后为它创立一个索引,再将创立好的索引存入链中。这样查问的时候就能够应用不同的组合查问形式查问实在须要的后果。
● 查问测试用例通过局部匹配复合主键将具备雷同的项目名称和模块名称的值查问进去,而后通过迭代器将键值中的测试用例名称截取进去存成一个列表,对其进行 json 序列化并作为查问后果返回给下层 App。下层 App 须要对查问的数值进行反序列化即可拿到整个用例名称的列表,依据其余须要查问具体用例后果。
步骤 3:装置部署链码
链码编写实现之后咱们须要把链码部署到 fabric 集群环境中。华为云区块链服务提供了可视化的链码生命周期管理工具。在区块链服务的管理控制台上点击服务列表前面的链码治理链接,关上图 11 中的链码治理登陆页面,输出默认的用户名 admin 和用户创立服务时所设置的明码,登陆链码治理平台对链码进行相应的操作。
图 11 链码治理登陆界面
登陆后用户可抉择在哪个组织的哪个节点 peer 上装置链代码。如图 12 所示咱们抉择在 testorg 的 peer- 1 节点装置链代码。点击右上角的装置链码按钮,须要填写链码名称、版本号以及为了保障完整性的信息摘要,最初上传一个图 13 所示的链码 zip 格局的压缩文件。
图 12 链码治理界面
图 13 链码装置界面
链码的 zip 压缩包和压缩包的摘要信息计算如图 14 和 15 所示。
图 14 链码压缩包
图 15 链码压缩包摘要信息
链码应用之前须要先实例化,装置胜利当前咱们在链码的操作按钮列中能够看到图 16 实例化按钮曾经处于激活状态。点击实例化按钮,抉择链码背书策略,输出链码的函数名、init 办法的参数如上述示例中的项目名称 testproject、抉择要实例化的通道如 testchannel,而后点击确定按钮,触发链码的实例化。实例化完结后可在如图 17 的界面上查问链码状态,在 testchannel 上能够查看链码是否曾经实例化胜利。
图 16 链码激活状态界面
图 17 链码实例化胜利界面
开发业务层区块链利用
Hyperledger fabric 目前反对 java,nodejs,go 和 python 语言的 sdk,供用户抉择用不同的语言开发下层利用,应用相应的 sdk 调用部署在区块链上的链码。以下示例中咱们抉择应用 go 语言开发业务层利用。
步骤 1:配置 fabric sdk
Hyperledger fabric 官网提供了咱们须要的 go sdk 文件包,下载地址是:
https://github.com/hyperledge…。目前 BCS 服务应用的版本 commit 号是 035e4f9。
咱们须要为 fabric sdk 生成相应的配置文件和拜访区块链节点的组织证书。SDK 配置文件次要包含要拜访的链码名称 / 版本、证书解压的目录地位、实例化链码的通道,装置链码的节点组织 / 名称。在订购的区块链服务状态中的点击图 18 中的“下载 SDK 配置“会弹出图 19 配置窗口,实现 sdk 配置。
图 18 SDK 配置文件下载界面
图 19 配置 SDK 文件下载界面
在订购的区块链服务状态列表页面上能够查看每个节点的状态以及相应的证书下载性能,咱们须要下载相干的证书到 sdk 的配置文件所指定目录中,使得业务利用能够和区块链节点失常的进行通信。图 20 显示了 orderer 节点和 peer 节点的证书下载链接。
图 20 orderer 节点和 peer 节点的证书下载
步骤 2:编写业务利用代码
合理配置 sdk 与区块链节点 peer 的通信后,业务层利用代码仅需对接链码的 invoke 和 query 的办法。以下示例中咱们应用 sdk 提供的接口 ChannelClient,即先通过加载 sdk 配置文件生成一个 sdk 实例,而后传入通道名称和用户信息生成一个 ChannelClient 对象,最初应用该 ChannelClient 发动一笔执行链码的交易。
图 21 ChannelClient 初始化过程
在业务利用代码中定义好一个链码的数据结构 ChainCodeSpec,包含 ChannelClient 对象、用户信息和链码名称等,在 ChannelClient 初始化时给其赋值。将链码的 invoke 和 query 办法定义成构造体办法,能够很简略的在发动交易的时候实现数据传递如图 22 所示。
图 22 调用链码的 invoke 和 query 办法
步骤 3:测试业务利用代码
上面咱们简略的定义一个 main 办法如图 23 来测试一下咱们的代码。首先申明之前在链码治理网站实例化的链码信息,即链码名称 chaicodetest,实例化的通道名称 testchannel,用户应用的是组织内的普通用户。其次,定义两个测试方法创立测试用例和查问测试用例。
创立测试用例 create\_testcases 须要按程序传入 4 个参数即项目名称、模块名称、测试用例名称和测试用例形容,调用 invoke 办法将一次交易写入区块链。查问测试用例 query\_testcases 办法传入项目名称和模块名称,查问测试用例信息。
图 23 业务利用调用链码实现端到端测试
之后咱们应用 go run 来执行这个测试用例,如图 24 咱们能够看到曾经生成 testchannel 实例并与区块链节点建设连贯。为了确认交易是否失常,链码是否正确保留之前用例的复合键值索引,咱们登陆区块链节点并用“docker logs < 容器 id>”命令咱们能够看到如图 25 中为每笔交易创立的区块。图 26 链码容器也可查看咱们之前链码打印的日志来确定是否能够正确查问测试用例。
图 24 SDK 代码执行后果
图 25 查看区块链节点 peer 中的运行后果
图 26 链码运行
本文通过一个简略的例子介绍如何通过华为云提供的区块链服务疾速的开发和搭建起一个利用,用户能够依据所需的场景,基于本文的示例部署区块链服务,开发链码和业务层利用。
本文只论述了局部代码的实现,残缺的代码下载地址是:
https://github.com/cloud1230/…,供开发人员参考。
华为云区块链服务:http://t.cn/RFbD7V7