Fabric v2.3 测试网络 - 脚本分析(二)- 创建通道createChannel.sh解析
本文针对创建通道脚本createChannel.sh进行分析,此脚本被创建测试网络network.sh脚本在执行命令./network.sh createChannel时调用
调用脚本及参数默认值命令:scripts/createChannel.sh "mychannel" 3 5 false
目录
# 导入引用的脚本文件
# 函数 - 创建通道创世区块
# 函数 - 创建通道
# 函数 - 节点加入到通道中
# 函数 - 设置锚节点
# 脚本开始执行
# 创建通道创世区块
# 创建通道
# 节点加入到通道中
# 将组织org1中的peer节点加到通道中
# 将组织org2中的peer节点加到通道中
# 设置锚节点
# 设置组织org1的锚节点
# 设置组织org2的锚节点
脚本流程梳理图
以下是createChannel.sh内容,文中浅蓝色字体及图片为分析备注,并根据一些备注生成了目录:
#!/bin/bash
# imports
# 导入引用的脚本文件
# envVar.sh脚本包含节点证书的环境变量,验证执行命令结果函数verifyResult、切换组织环境变量函数setGlobals等
. scripts/envVar.sh
# utils.sh脚本为打印输出信息功能,network.sh脚本调用了utils.sh脚本中的相关函数,如infoln、fatalln等函数,脚本简单,自行查看下
. scripts/utils.sh
CHANNEL_NAME="$1"
DELAY="$2"
MAX_RETRY="$3"
VERBOSE="$4"
: ${CHANNEL_NAME:="mychannel"}
: ${DELAY:="3"}
: ${MAX_RETRY:="5"}
: ${VERBOSE:="false"}
# 若不存在目录channel-artifacts,则创建
if [ ! -d "channel-artifacts" ]; then
mkdir channel-artifacts
fi
# 函数 - 创建通道创世区块
createChannelGenesisBlock() {
# 搜索configtxgen命令,判断是否存在此二进制文件,若不存在,打印错误信息,程序终止
which configtxgen
if [ "$?" -ne 0 ]; then
fatalln "configtxgen tool not found."
fi
set -x #脚本调试,会将下面执行的命令输出到屏幕上
# 创建创世区块:生成创世区块mychannel.block文件,根据配置文件./configtx/configtx.yaml来创建Orderer系统通道的创世块
configtxgen -profile TwoOrgsApplicationGenesis -outputBlock ./channel-artifacts/${CHANNEL_NAME}.block -channelID $CHANNEL_NAME
res=$?
{ set +x; } 2>/dev/null #取消脚本调试,之后执行的命令不再输出到屏幕上
# 调用脚本./script/envVar.sh中的函数verifyResult,用来验证上面执行的命令是否报错,如果报错,则打印错误信息,程序终止
verifyResult $res "Failed to generate channel configuration transaction..."
}
# 函数 - 创建通道
createChannel() {
# 调用脚本./script/envVar.sh中的函数setGlobals,为org1或org2的peer节点设置环境变量,参数1对应的是org1,2对应org2
# 设置环境变量为org1
setGlobals 1
# Poll in case the raft leader is not set yet
local rc=1
local COUNTER=1
# 创建通道若未成功,可尝试5次
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ] ; do
sleep $DELAY
set -x
# 创建通道,将执行结果信息记录到log.txt文件中
osnadmin channel join --channelID $CHANNEL_NAME --config-block ./channel-artifacts/${CHANNEL_NAME}.block -o localhost:7053 --ca-file "$ORDERER_CA" --client-cert "$ORDERER_ADMIN_TLS_SIGN_CERT" --client-key "$ORDERER_ADMIN_TLS_PRIVATE_KEY" >&log.txt
res=$?
{ set +x; } 2>/dev/null
let rc=$res
COUNTER=$(expr $COUNTER + 1)
done
# 打印log.txt,即打印创建通道结果信息
cat log.txt
# 调用脚本./script/envVar.sh中的函数verifyResult,用来验证上面执行的命令是否报错,如果报错,则打印错误信息,程序终止
verifyResult $res "Channel creation failed"
}
# joinChannel ORG
# 函数 - 节点加入到通道中
joinChannel() {
FABRIC_CFG_PATH=$PWD/../config/
ORG=$1
# 根据传递的参数设置环境变量,切换组织使用
setGlobals $ORG
local rc=1
local COUNTER=1
## Sometimes Join takes time, hence retry
# peer节点加入通道若未成功,可尝试5次
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ] ; do
sleep $DELAY
set -x
# 将节点加入通道,将执行结果信息记录到log.txt文件中
peer channel join -b $BLOCKFILE >&log.txt
res=$?
{ set +x; } 2>/dev/null
let rc=$res
COUNTER=$(expr $COUNTER + 1)
done
cat log.txt
verifyResult $res "After $MAX_RETRY attempts, peer0.org${ORG} has failed to join channel '$CHANNEL_NAME' "
}
# 函数 - 设置锚节点
setAnchorPeer() {
ORG=$1
# docker exec命令中使用setAnchorPeer.sh脚本返回的信息作为参数部分,脚本详细解析另起一篇文章(参见:Fabric v2.3 测试网络 - 脚本分析(三)- 创建通道 - 设置锚节点setAnchorPeer.sh解析),脚本位置如下图所示
docker exec cli ./scripts/setAnchorPeer.sh $ORG $CHANNEL_NAME
}
# 脚本开始执行
FABRIC_CFG_PATH=${PWD}/configtx
## Create channel genesis block
# 创建通道创世区块
infoln "Generating channel genesis block '${CHANNEL_NAME}.block'"
createChannelGenesisBlock
FABRIC_CFG_PATH=$PWD/../config/
BLOCKFILE="./channel-artifacts/${CHANNEL_NAME}.block"
## Create channel
# 创建通道
infoln "Creating channel ${CHANNEL_NAME}"
createChannel
successln "Channel '$CHANNEL_NAME' created"
# 节点加入到通道中
## Join all the peers to the channel
# 将组织org1中的peer节点加到通道中
infoln "Joining org1 peer to the channel..."
joinChannel 1
# 将组织org2中的peer节点加到通道中
infoln "Joining org2 peer to the channel..."
joinChannel 2
# 设置锚节点
## Set the anchor peers for each org in the channel
# 设置组织org1的锚节点
infoln "Setting anchor peer for org1..."
setAnchorPeer 1
# 设置组织org2的锚节点
infoln "Setting anchor peer for org2..."
setAnchorPeer 2
successln "Channel '$CHANNEL_NAME' joined"
脚本流程梳理图
以上是createChannel.sh脚本,对此脚本使用思维脑图梳理了流程,流程假设满足条件,满足必要条件(如相关配置文件已存在)且命令都可正常执行,如下图所示:
上一篇:Fabric v2.3 测试网络 - 启动测试网络脚本文件network.sh解析
下一篇:Fabric v2.3 测试网络 - 脚本分析(三)- 创建通道 - 设置锚节点setAnchorPeer.sh解析
Fabric v2.3 测试网络 - 脚本分析(二)- 创建通道createChannel.sh解析相关推荐
- Fabric v2.3测试网络 - 创建通道 返回结果分析
创建通道使用的命令 [root@localhost test-network]# ./network.sh createChannel 创建通道使用的命令用到了以下一些工具,如下图所示: 下面是创建通 ...
- 基于Fabric的商业票据交易网络案例分析
商业票据交易网络案例分析 前言 准备环境 Java/JavaScript Node.js v8(如果要运行 JavaScript 客户端应用程序) Maven,用于构建 Java 应用程序 Java ...
- DNS测试bat脚本分析
/********************************************************************* * Author : lile * Modified : ...
- 白鹭php源码,egret 2D引擎源码分析(二) 创建播放器
本帖最后由 fightingcat 于 2016-7-16 00:26 编辑 上一篇讲到了引擎的入口runEgret为每一个播放器标签(就是index.html中看到的那个 之前web.WebPlay ...
- Fabric v2.3 手动模拟(一) - 测试网络./network.sh up命令创建自己的网络
目录 0. 引言 1. 创建自己的网络目录 (1)进入fabric-samples目录 (2)创建文件夹test-network-myself(自己的网络目录) (3)进入test-network-m ...
- Hyperledger Fabric2.3 环境搭建及Fabric 测试网络使用
一.安装ubuntu20 Download Ubuntu Desktop | Download | Ubuntu 二.安装环境 参考: Prerequisites - hyperledger-fabr ...
- Fabric 搭建测试网络并部署智能合约
1.搭建网络: 详见博客 2.对Test Network的创建和关闭 cd ${HOME}/fabric-samples/test-network 创建网络: ./network.sh up关闭网络: ...
- FabricV2.2测试网络搭建以及开发环境部署
部署测试网络 Prerequisites: 安装docker.docker-compose git.cURL 要求docker版本 下载Fabric源码,Binaries和Docker Images ...
- 3.Hyperledger Fabric v2.0 CA组件
Hyperledger Fabric v2.0 CA组件 目的: 通过CA服务生成msp证书和tls证书,并启动fabric网络 由于使用CA生成证书时,需要注册为各个组织生成证书,为了便于理解,所以 ...
最新文章
- 开源助力!武汉新型冠状病毒防疫开源信息收集平台
- 为.net中的ListBox控件添加双击事件
- 数据库中查询记录时是否每次只能使用一个索引?
- 01-Flutter移动电商实战-项目学习记录
- PJ2018T4 对称二叉树 树形结构
- Opencv3 形态学操作
- 从「及格线」到优等生,威马只用一台W6
- 简述直方图和柱形图的区别_如何区分直方图与柱形图
- Oracle项目管理系统的BIM应用
- 当mqtt客户端向服务端发送信息出现掉包的问题
- SNF快速开发平台项目实践介绍
- FinalReport连接MYSQL数据库失败经验分享
- ei计算机相关 小木从,怀念楼讲心那棵小木钩瞒
- SiTime硅晶振MEMS谐振子制作工艺详解
- 【Latex】记录写毕业论文时用到的操作
- win7设置桌面豆绿色
- C#Application.DoEvents();的作用。
- nodeJS与npx之间的三两事
- echart 地图显示不全解决
- hadoop分布式环境搭建