梳理fabric e2e_cli 测试程序的具体步骤

作者在 hyperledger fabric 1.0.5 分布式部署 (一)中给读者们介绍了如何从零开始部署一个测试的 demo 环境,如果细心的读者可能会留意到,在启动fabric 的服务时,是直接执行network_setup.sh 脚本命令启动服务的。

如果我们打开 network_setup.sh 脚本查看,会发现启动的关键代码如下

function networkUp () {
if [ -f "./crypto-config" ]; then
echo "crypto-config directory already exists."
else
#Generate all the artifacts that includes org certs, orderer genesis block,
# channel configuration transaction
source generateArtifacts.sh $CH_NAME
fi if [ "${IF_COUCHDB}" == "couchdb" ]; then
CHANNEL_NAME=$CH_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH up -d >&
else
CHANNEL_NAME=$CH_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE up -d >&
fi
if [ $? -ne ]; then
echo "ERROR !!!! Unable to pull the images "
exit
fi
docker logs -f cli
}

读者可以看到,实际上 network_setup.sh 脚本就执行了两个命令,分别是

 source generateArtifacts.sh $CH_NAME
CHANNEL_NAME=$CH_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH up -d >&

让我们先来分析 generateArtifacts.sh 脚本

  • generateArtifacts.sh 脚本

generateArtifacts.sh 脚本的主要构成部分为三个函数,分别是

  1. generateCerts
  2. replacePrivateKey
  3. generateChannelArtifacts

generateCerts 函数的工作内容主要是根据 e2e_cli/crypto-config.yaml 描述的组织机构形式生成对应的私钥和证书,以供后续节点通讯使用。

fabric 用来生成私钥和证书的程序叫“cryptogen”,生成私钥和证书的命令为

cryptogen generate --config=./crypto-config.yaml

cryptogen 生成的私钥和证书文件存放在 e2e_cli/crypto-config

replacePrivateKey 函数的工作内容则是基于新生成的私钥和证书文件来修改docker-compose-e2e.yaml 配置文件中的相关私钥和证书信息,因为e2e_cli demo 没有用到 ca 服务,所以暂时不讨论这个方法,读者可以理解为该函数对于部署e2e_cli 没有任何帮助。

generateChannelArtifacts 函数的工作内容主要是创建创世块区,创建channel 对应的文件,以及将组织机构信息添加到channel 上。

该函数主要依赖 configtxgen 命令执行,configtxgen 通过读取 configtx.yaml 配置文件配置获取节点的组织关系。另外,configtxgen 依赖之前生成的私钥和证书工作,所以执行有先后顺序。

创建创世块区的命令

configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

创建 channel 文件

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

生成节点集合认证文件

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
  • docker-compose 命令

如果在执行 network_setup.sh 脚本时,指定使用 couchdb 作为存储,则用户在启动e2e_cli 相关docker 镜像时会同时启动常规节点镜像和couchdb 镜像。

常规节点镜像包含,orader、peer、cli 镜像,描述启动常规节点镜像的配置文件为 docker-compose-cli.yaml。

docker-compose 在启动 cli 时,还会执行一个 script.sh 脚本,该脚本描述了如何在fabric 集群中创建channel,以及如何将chaincode 加入到 channel 中。

  • script.sh 脚本

用户需要首先需要理解,script.sh 脚本是在 cli 的docker 镜像中执行,并且在宿主机器上执行。

在 script.sh 脚本中,有以下5大函数需要用户注意的

  1. setGlobals,设置环境变量,执行peer 命令时,主要依赖这些环境变量来执行对应的命令,例如哪个peer 节点加入到channel 中
  2. createChannel,创建channel
  3. joinChannel,将对应的peer 节点加入到channel 中
  4. updateAnchorPeers,将各个peer 节点和组织机构绑定在一起
  5. installChaincode,给channel 安装 chaincode

script.sh 脚本中,chaincodeQuery 和 chaincodeInvoke 都是e2e_cli demo的测试部分,对于部署fabric 集群没有任何帮助

参考博客:

http://www.cnblogs.com/aberic/p/7542835.html

hyperledger fabric 1.0.5 分布式部署 (五)的更多相关文章

  1. hyperledger fabric 1.0.5 分布式部署 (七)

    fabric 使用 fabric-ca 服务 准备部分 首先需要用户从github上download fabric-ca 的工程代码 cd $GOPATH/src/github.com/hyperle ...

  2. hyperledger fabric 1.0.5 分布式部署 (六)

    如何在相同的peer 节点上创建多个 channel 作者在hyperledger fabric 1.0.5 分布式部署 (五)已经向读者们介绍了一个简单的fabric 的部署流程,那么根据上一篇博客 ...

  3. hyperledger fabric 1.0.5 分布式部署 (八)

    gdb debug peer 程序 在开始我们从 github 上download 下来的源码包,实际上已经包含了可执行的 peer 程序,但是该程序是使用 release 方式编译的,并不支持gdb ...

  4. hyperledger fabric 1.0.5 分布式部署 (四)

    chaincode 的开发 作者在hyperledger fabric 1.0.5 分布式部署 (三)中向读者介绍了如何开发fabric 的chaincode,那么实际上chaincode 还有其他的 ...

  5. hyperledger fabric 1.0.5 分布式部署 (二)

    环境:2台 ubuntu 16.04 角色列表 角色 IP地址 宿主端口 docker端口  peer0.org1.example.com  47.93.249.250  7051  7051  pe ...

  6. hyperledger fabric 1.0.5 分布式部署 (三)

    本篇博客主要是向读者介绍 fabric 在部署时的一些细节,还有作者自己学习过程中的心得. 初始化相关密钥的程序,实际上是一个shell脚本,并且结构特别简单 generateArtifacts.sh ...

  7. hyperledger fabric 1.0.5 分布式部署 (一)

    环境是个人虚拟机ubuntu 16.04 64 位版本 前期用户需要先安装好:gcc.g++.git 软件 安装 golang 首先给环境安装一个 go 语言环境,版本最好在1.8 以上 golang ...

  8. hyperledger fabric 1.0.5 分布式部署 (九)

    linux 使用vim.ctags 配置fabric 源码阅读环境 首先需要安装 ctags,作者使用apt-get 来安装的,安装的版本是5.9 apt-get install ctags 5.9 ...

  9. Hyperledger Fabric 1.0 学习搭建 (五)--- 启动Fabric多节点集群

    5.1.启动orderer节点服务 上述操作完成后,此时各节点的compose配置文件及证书验证目录都已经准备完成,可以开始尝试启动多机Fabric集群. 首先启动orderer节点,切换至order ...

随机推荐

  1. 哈希表的java实现

    一.为什么要用哈希表 树的操作通常需要O(N)的时间级,而哈希表中无论存有多少数据,它的插入和查找(有时包括删除)只需要接近常量级的时间,即O(1)的时间级. 但是哈希表也有一定的缺点:它是基于数组的 ...

  2. ajax json html 结合

    <table id="datas" border="1" cellspacing="0" style="border-col ...

  3. emoji字符不能插入MySQL数据库,提示“'\xF0\x9F\x98\x84' for column 'XXXX' at row 1”

    从网络中取下的数据解析后不能插入数据库,提示某个字段有问题,问题提示如下: SQLException: Incorrect string value: '\xF0\x9F\x98\x84' for c ...

  4. db的操作

    '/---------------------------------------------------------------------------------------------- '/ ...

  5. BZOJ 2002 Bounce 弹飞绵羊 —— 分块算法

    题目链接:https://vjudge.net/problem/HYSBZ-2002 2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Li ...

  6. 【EOJ Monthly 2018.2 (Good bye 2017)】

    23333333333333333 由于情人节要回家,所以就先只放代码了. 此题是与我胖虎过不去. [E. 出老千的 xjj] #include<cstdio> #include<c ...

  7. HDU2147 kiki's game (SG表找规律)

    Recently kiki has nothing to do. While she is bored, an idea appears in his mind, she just playes th ...

  8. python 基础之第十一天(面向对象)

    #############面向对象##################### 类: In [1]: class MyClass(object): ##用class定义一个类 ...: def psta ...

  9. windows install JDK&&JRE

    重装系统后,安装的java环境没了,只能重装一下~~~~ 1.下载JDK 2.这里会安装两次,其中第一次为安装 JDK,第二次安装JRE,建议不要将这两个放在同一个文件夹. 3.配置环境变量 用鼠标右 ...

  10. sizeToFit的学习与认知

    今天一扫前两日的坏心情,终于有心情平静下来,今天我是根据网络上的一些资料进行学习,今天学习的内容是 sizeToFit() 方法在不方便手动布局的场景中的使用. 首先感谢资料的提供者:参考1 参考2 ...