最佳实践
文档版本 01
发布日期 2021-11-12
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传 播。
商标声明
和其他华为商标均为华为技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
您购买的产品、服务或特性等应受华为公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或 特性可能不在您的购买或使用范围之内。除非合同另有约定,华为公司对本文档内容不做任何明示或暗示的声 明或保证。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文 档中的所有陈述、信息和建议不构成任何明示或暗示的担保。
目 录
1 基于 Hyperledger Fabric 增强版构建银行联盟链... 1
1.1 方案概述...1
1.2 订购区块链服务...3
1.3 邀请成员...5
1.4 被邀请方加入联盟链... 6
1.5 安装及实例化链代码... 8
1.6 配置应用... 10
1.7 部署应用... 12
1.8 调试应用... 14
1 基于 Hyperledger Fabric 增强版构建银行联 盟链
1.1 方案概述
应用现状
随着信息化技术的不断发展,银行之间的业务流程趋于规范化,其中不乏一些重复的 操作,例如需要跨行查询用户账号和身份认证等基本信息时,查询时间慢,效率低,
导致用户等待时间过长,影响用户体验。
解决方案
区块链服务BCS支持创建区块链类型为“联盟链”的Hyperledger Fabric增强版服务。
通过组建一个银行联盟链,银行联盟链的发起方可以动态邀请其他银行加入此联盟 链,组建一个多成员参与的银行联盟链系统。联盟成员之间实现数据可信共享,不仅 可以节省用户办理业务的时间和精力,同时还可以提高银行的办事效率。而且各联盟 成员的节点运行在独立的VPC中,独立管理,安全可控。
本实践以组建银行联盟链为例进行演示,旨在帮助您了解联盟链的基础知识以及如何 组建联盟链的方法,帮助您快速上手使用并体验华为云区块链服务。
说明
组建银行联盟链只用于场景体验,不用于实际应用。
背景信息
● 业务场景和成员:
– 银行联盟链中成员democraticBank邀请新成员civilizationBank(简称邀请方 A)和harmoniousBank加入联盟链(简称邀请方B)。
– 基于democraticBank银行的账户以及已有的KYC信息背书,免KYC过程开通 civilizationBank和harmoniousBank银行的账户。
● 主要诉求:
用户身份等信息需要加密,避免暴力破解;提供基于身份信息的快速查询。
● 关键挑战:
– 安全隐私:银行不希望把客户隐私信息泄露给其它银行。
– 高性能检索:提供类传统数据库的检索性能(毫秒级响应) ,保持一致用户 体验。
– 良好接口:提供简单方便的接口,便于应用开发。
操作流程
介绍组建联盟链的操作流程。
图1-1 操作流程
1. 订购区块链服务
订购联盟链类型的区块链服务,组织成员名为democraticBank。
2. 邀请成员
创建联盟链成功后,由组织成员democraticBank作为邀请方邀请新成员 civilizationBank和harmoniousBank加入联盟链。
3. 被邀请方加入联盟链
被邀请方civilizationBank和harmoniousBank根据邀请信息加入联盟链。
4. 安装及实例化链代码
邀请方、被邀请方A和被邀请方B都必须安装链代码。实例化链代码只需要由邀请 方、被邀请方A或被邀请方B其中一个完成即可。
5. 配置应用
在邀请方发起交易的时候,邀请方需要下载自己的orderer管理员证书、
democraticBank组织的管理员证书以及被邀请方A和邀请方B已隐去私钥的证书。
6. 部署应用
在弹性云服务器上安装银行联盟链示例应用。
7. 调试应用
部署应用后,即可开始测试联盟链之间的数据交易。
1.2 订购区块链服务
您需要订购一个区块链服务,并配置基本参数和网络节点。
操作步骤
步骤1 登录区块链服务管理控制台。
步骤2 进入服务管理页面,单击Hyperledger Fabric增强版的“购买”按钮。
步骤3 根据界面提示,配置区块链基本信息,参数如表1-1所示。
须知
为了保证示例Demo成功运行,请在参数配置时按照表格中的参数值填写。
表1-1 基本信息配置
参数 说明
计费模式 选择“按需计费”。
区域 使用默认区域。
企业项目 选择已创建的企业项目,例如:default。
如果您没有开通企业管理服务,将无法看到 企业项目选项。
区块链服务名称 自定义名称,例如:bank-union-demo。
版本类型 选择“企业版”。
区块链类型 选择“联盟链”。
Fabric内核 v2.2。
共识策略 Raft(CFT)
资源初始密码 请自行设置。
资源初始密码确认 -
步骤4 单击“下一步:资源配置”,进行资源配置,参数如表1-2所示。
表1-2 资源配置
参数 说明
环境资源 选择“自定义环境”。
参数 说明
集群 选择“创建新的CCE集群”。
可用区 可用区1
云主机规格 4核/8GB
云主机个数 1
高可用 否
虚拟私有云 系统自动创建VPC。
所在子网 系统自动创建子网。
云主机登录方式 选择“密码”。
root密码 如果填写该项,则以填写值为准,如果不填
写,则以资源初始密码为准。
确认密码 -
是否使用CCE集群节点弹性IP 选择“是”。
弹性IP计费方式 按带宽计费
弹性IP带宽 5 Mbit/s
步骤5 单击“下一步:区块链配置”,进行区块链配置,参数如表1-3所示。
表1-3 区块链配置
参数 说明
区块链配置 自定义配置。
区块链管理初始密码 如果填写该项,则以填写值为准,如果不填 写,则以资源初始密码为准。
区块链管理确认密码 -
存储卷类型 文件存储卷。
节点组织存储容量 使用默认规格。
账本数据存储方式 选择“文件数据库(GoLevelDB)”。
peer节点组织 创建1个节点组织,名称必须与如下内容完 全一致:
democraticBank,节点数量为2。
通道配置 将通道名称修改为testchannel,并将 democraticBank节点组织添加至通道中。
说明通道名称必须为testchannel。
参数 说明
共识节点数量 使用默认规格。
安全机制 选择“ECDSA”。
区块生成配置 选择“否”。
添加RESTful API支持 选择“否”。
添加可信计算平台 选择“否”。
步骤6 单击“下一步:确认订单”。
步骤7 确认配置信息无误后,勾选协议和免责声明,并单击“提交订单”。
请等待数分钟,安装页面提示安装成功,查看服务状态变为“正常”后,表示区块链 服务部署完成。
说明
当创建失败时,请排查失败原因,请参考:常见问题-订单部署类。
----结束
1.3 邀请成员
创建联盟链后,您可以通过邀请成员加入某个通道组建联盟链系统。
操作步骤
步骤1 登录区块链服务管理控制台。
步骤2 在页面左侧选择“成员管理”。单击页面右上角“邀请成员”。
步骤3 在邀请成员页面,下拉列表中选择创建的BCS服务和通道,在租户名称中填入被邀请方 的租户名,单击“确定”。
图1-2 邀请成员
步骤4 (可选)单击“邀请一个新租户”可添加多个成员进行邀请。
本示例邀请civilizationBank和harmoniousBank两个新成员加入银行联盟链。
说明
最多支持邀请5个成员,铂金版本支持提交工单修改成员配额,其他版本不支持。
步骤5 单击“确定”,邀请通知信息将发送至被邀请方。
----结束
1.4 被邀请方加入联盟链
当您收到加入联盟链的成员邀请时,您会收到通知信息,此时您可以同意邀请,加入 联盟链。
操作步骤
步骤1 被邀请方A登录区块链服务管理控制台。
步骤2 在页面左侧选择“通知管理”。单击通知列表“操作”列的“查看”。
步骤3 创建BCS服务。
1. 作为被邀请方,选择服务前需要单击“创建BCS服务”来创建服务,否则无法加入 联盟通道。
图1-3 创建 BCS 服务
2. 根据界面提示,购买BCS服务。
表1-4 配置参数
参数 示例
计费模式 选择“按需计费”。
区域 使用与邀请方相同的区域。
区块链服务名称 自定义名称,与邀请方名称相同,例如:bank-union- demo。
版本类型 选择“企业版”。
区块链类型 选择“联盟链”。
集群类型 选择“CCE集群”。
容器集群 选择创建好的容器集群。
存储卷类型 选择“文件存储卷”。
网络存储 选择创建好的文件存储。
账本数据存储方式 选择“文件数据库(goleveldb)”。
peer节点组织 创建1个节点组织,名称自定义,例如:
civilizationBank。
共识策略 默认。
开启共识节点数据老 化
否。
多可用区 否。
安全机制 默认。
版本信息 与邀请方版本一致。
区块链管理初始密码 请自行设置。
添加RESTful APIs支
持 否。
配置弹性IP 是。
添加可信计算平台 选择“否”。
3. 单击“立即购买”进入配置确认页面,确认信息无误后,单击“提交”。
请等待数分钟,安装页面提示安装成功,查看服务及组织状态变为“正常”后,
表示区块链服务部署完成。
步骤4 被邀请方A创建BCS服务成功后,在通知详情页面确认需要加入联盟通道的组织,再单 击“同意”,加入联盟链。
步骤5 请参考步骤1~步骤4,将被邀请方B加入联盟链。
被邀请方B创建的组织名为harmoniousBank,其余操作默认与被邀请方A相同。
----结束
1.5 安装及实例化链代码
一个通道里的所有Peer节点都必须安装链代码,然后在其中一个Peer节点上进行链代 码实例化。如需使用相同的链代码,通道成员必须在链代码安装期间为链代码提供相 同的名称和版本。
须知
● 邀请方、被邀请方A和B都必须安装链代码。
● 使用的链代码名称和版本号必须一致。
● 实例化链代码只需要由邀请方、被邀请方A或被邀请方B其中一个完成即可。
安装链代码
步骤1 登录区块链服务管理控制台。
步骤2 单击左侧导航栏中的“服务管理”。
步骤3 在服务卡片中,单击“区块链管理”,登录链代码管理页面。
步骤4 在登录页面输入用户名、密码、验证码,单击“登录”。
说明
● 用户名为admin,密码为您在创建区块链服务时设置的区块链管理初始密码,如果没有设置 区块链管理初始密码,则以资源初始密码为准。
● 登录时,若您使用的是IE浏览器,有可能会跳转失败并提示使用证书不受信任,此时您可以 单击此处进行处理。
步骤5 在链代码管理页面,单击页面左上角的“安装链代码”。
步骤6 在安装界面输入“链代码名称”、“链代码版本”,选择需要安装链代码的节点及链 代码语言,添加链代码文件等,配置参数如表1-5所示。
表1-5 配置参数
参数 示例
链代码名称 fabbank
链代码版本 1.0
账本数据存储方式 文件数据库(GoLevelDB) 选择全部Peer节点 勾选
组织&Peer节点 默认已同时选中所有节点。
链代码语言 Golang
链代码文件 登录区块链服务管理控制台,进入“体验中心 >
应用案例”,下载“银行联盟链示例应用”中的银 行联盟链链代码。
链代码描述 根据需要填写相关描述。
步骤7 单击“安装”,完成链代码安装。
----结束
实例化链代码
步骤1 链代码安装完成后,在链代码列表的“操作”列,单击“实例化”。
步骤2 选择实例化通道、链代码版本、背书策略、背书组织列表等,填写链代码参数,具体 如表1-6所示。
表1-6 配置参数
参数 值
链代码名称 fabbank 实例化通道 testchannel
链代码版本 1.0
初始化函数 init
参数 值
链代码参数 -
背书策略 选择“下列任意组织背书”
背书组织列表 选择全部三个组织
隐私保护配置 否
步骤3 单击“实例化”,完成链代码在当前通道上的实例化。
稍等2~3分钟后刷新界面,单击“实例化”列的“查看更多”,查看链代码实例化进 度。
----结束
1.6 配置应用
在邀请方发起交易的时候,邀请方需要下载自己的orderer管理员证书、
democraticBank组织的管理员证书以及被邀请方A和B已隐去私钥的证书。
请妥善保管下载证书中的私钥,建议对私钥进行加密存储。
前提条件
已创建弹性云服务器。创建弹性云服务器的方法,请参见《弹性云服务器用户指 南》。
SDK 配置和证书下载
步骤1 在“服务管理”界面,在邀请方bank-union-demo的服务卡片中,单击“获取客户端 配置”。
步骤2 勾选“SDK文件”,配置参数请参见表1-7。
须知
为了保证示例成功运行,请在参数配置时按照表格中的参数值填写。
表1-7 配置 SDK 参数
参数名称 参数值
链代码名称 fabbank
证书存放路径 /opt/bank/src/bank/conf/crypto
说明“/opt/bank/src/bank/conf/crypto”为容器内部路径,此路径挂载在 弹性云服务器的“/root/bankuniondemo”路径下。
通道名称 testchannel
参数名称 参数值
组织&Peer节点 保持系统默认,不要全选。
步骤3 勾选“共识节点证书”和“Peer节点证书”,“Peer节点证书”中指定节点组织保持 默认值,勾选“管理员证书”。单击“下载”。
步骤4 解压下载包,将sdk-config.yaml文件拷贝两份,三份yaml文件分别命名为
democraticBank.yaml、civilizationBank.yaml、harmoniousBank.yaml,最后将yaml 文件上传到弹性云服务器“/root/bankuniondemo”目录下。
说明
您需要在弹性云服务器的“/root”目录下,自行创建bankuniondemo目录。
步骤5 在被邀请方A服务卡片中,单击“获取客户端配置”,勾选“Peer节点证书”及“管理 员证书”,下载区块链组织civilizationBank管理员证书。
步骤6 删除被邀请方A区块链组织civilizationBank管理员证书中的私钥文件:tls目录下的 server.key文件和msp目录下keystore文件夹中的文件。
图1-4 删除 tls 目录下的 server.key
图1-5 删除 msp 目录下 keystore 文件
步骤7 请参考步骤5~步骤6,被邀请方B下载区块链组织harmoniousBank中的管理员证书,
并删除其私钥文件。
步骤8 邀请方将下载的bank-union-demo-orderer管理员证书、democraticBank组织的管理 员证书、被邀请方A组织中civilizationBank删除私钥后的证书以及被邀请方B组织中 harmoniousBank删除私钥后的证书,存放至准备好的弹性云服务器的“/root/
bankuniondemo”路径下。
----结束
1.7 部署应用
本章节主要介绍如何部署应用。
部署应用
步骤1 下载银行联盟链依赖的镜像:登录区块链服务管理控制台,进入“体验中心 > 应用案 例”,下载“银行联盟链示例应用”中的银行联盟链依赖的镜像。
步骤2 登录到弹性云服务器,执行以下命令。
cd /root/bankuniondemo
将上一步下载的镜像上传到该目录。
新建startserver.sh文件:vi startserver.sh
将如下内容拷贝至startserver.sh文件中,并保存。
#!/bin/sh
#获取当前路径 path=`pwd`
#获取IP地址
localip=`ifconfig eth0 | grep "inet addr" | awk '{ print $2}' | awk -F: '{print $2}'`
#检测unzip 和 docker命令是否已经安装好 if type unzip > /dev/null 2>&1; then echo "Unzip command is exists!"
else echo "No unzip command, please install unzip before start this demo"
exit 1 fi
if type docker > /dev/null 2>&1; then echo "Docker exists!"
else echo "No docker, please install docker before start this demo"
exit 1 fi
#检查证书目录是否存在 if [ -e ./crypto ];then rm -rf crypto fi
#解压证书文件
echo "Start unziping certificate ...."
cerzip=$(ls|grep .zip) for i in $cerzip;
dounzip -n $i -d crypto/
doneecho "Unzip certificate Done!!"
#适配证书路径 Folder="$path/crypto"
for file in ${Folder}/*
do temp_file=`basename $file`
mv -f $path/crypto/$temp_file/* $path/crypto/
done
#检查所需的证书文件是否已准备完善
echo "Start checking if the required files are ready"
if [ -e $path/democraticBank.yaml ]&&[ -e $path/civilizationBank.yaml ]&&[ -e $path/
harmoniousBank.yaml ];then echo "Check required yaml files OK!!"
elseecho "Please check if the required yaml files are ready!!"
exitfi
#忘记密码的情况重启
read -p "Is this the first time you deploy the application? If yes please insert 'y', if you want to reset your password please insert 'n': " choice
echo $choice
if [ $choice = "n" ];then
docker rm $(docker stop $(docker ps -a -q --filter ancestor=bank --format="{{.ID}}")) echo "Resetting password..."
fi
#设置密码
read -p "Please set your password: " test echo $test
if [ ${#test} -lt 4 -o ${#test} -gt 24 ];then echo "password length should in [4, 24].";exit;fi
#load images
if [ -e $path/bankv3.tar.gz ];then echo "Start loading images..."
docker load -i bankv3.tar.gz
echo "Api-server images is exists,Skip load!"
fi
#启动服务
echo "Start server ..."
docker run --env TESTPWD=$test -p 8080:8080 -d -it -v $path/crypto:/opt/bank/src/bank/conf/crypto -v
$path/democraticBank.yaml:/opt/bank/src/bank/conf/democraticBank.yaml -v $path/
harmoniousBank.yaml:/opt/bank/src/bank/conf/harmoniousBank.yaml -v $path/civilizationBank.yaml:/opt/
bank/src/bank/conf/civilizationBank.yaml bank RET_CODE=`echo $?`
if [ $RET_CODE -eq 0 ]; then echo "Start server success!"
echo -e "please login \033[32mhttp://EIP:8080/adminLogin \033[0mto visit Bank Management System"
echo -e "or login \033[32mhttp://EIP:8080/userLogin \033[0mto visit Bank Customer System"
else echo "Failed to start server! Please check if everything ok"
fi
执行脚本:
bash startserver.sh
步骤3 安装过程中,用户需要输入两次信息,第一次“是否是第一次部署应用”,是键入y,
否(即想修改密码)键入n;第二次键入用户自定义密码(以下举例,键入密码为 123456):
执行结果可参考如下返回信息:
步骤4 执行如下命令,检查容器是否启动。
docker ps
提示如下信息,表示启动成功;否则请检查配置。
----结束
添加安全组
● 若您是通过自有服务器部署bankuniondemo,则不涉及“添加安全组”操作。
● 若您是通过华为云弹性云服务器ECS部署bankuniondemo应用,部署成功后需要 先创建安全组,再添加安全组规则以允许服务器的8080端口可被访问,方法参见 创建安全组。添加安全组规则时的规则参数如表1-8所示。
表1-8 安全组规则参数表
参数 值 说明
协议 TCP 网络协议。
方向 入方向 安全组规则生效的方向,入方向指
从外部访问安全组规则下的弹性云 服务器。
端口范围 创建1条规则,填写
8080。 规则的端口范围。
源地址 选择IP地址,0.0.0.0/0 当方向为入方向时,需要填入此参 数。
● EIP为部署bankuniondemo的服务器IP或弹性云服务器的弹性IP。
1.8 调试应用
部署应用后,管理员可以录入客户信息或者客户申请账户。
管理员录入客户信息
步骤1 Demo应用成功运行后,银行管理员通过“http://EIP:8080/adminLogin”访问Demo 应用。
说明
● EIP为部署Demo的服务器IP或弹性云服务器的弹性IP。
● 管理员页面默认用户名:admin,密码:(请输入上页部署应用时键入的自定义密码),仅 供demo体验登录。
步骤2 单击“创建账户”录入客户信息。例如:在中国民主银行录入信息,包括姓名、身份 证号、银行卡号和电话号码。
步骤3 创建成功后可以进入区块浏览器,单击交易列表中的“查看详情”查看创建记录。
----结束
客户申请账户
步骤1 客户通过“http://EIP:8080/userLogin”访问Demo应用,进入客户页面。
说明
● EIP为部署Demo的服务器IP或弹性云服务器的弹性IP。
● 客户页面默认用户名:customer,密码:(请输入上页部署应用时键入的自定义密码),仅 供demo体验登录。
步骤2 客户根据界面提示选择中国文明银行,登录账户。
进入到中国文明银行的账户申请界面,可以通过中国民主银行的账户信息开通中国文 明银行的账户。
这里充分使用了基于区块链的身份共享,客户一旦开通一家银行的账户,那么经过审 核的可信身份信息就会记录在区块链中,且加密共享给其他银行。那么客户就可以免 审核申请其他银行的账户。
客户登录中国文明银行系统:
基于中国民主银行账户信息申请中国文明银行账户:
基于中国文明银行账户信息申请中国和谐银行账户:
基于不存在的中国文明银行账户信息申请中国和谐银行账户:
若申请成功,则提示“根据您提供的他行账户信息,已成功开通我行账户!”;否则 提示“请检查您已开户的账户信息”。
步骤3 客户申请成功后可以进入区块浏览器,单击交易列表中的“查看详情”查看申请记 录。
----结束