梳理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. Thumbelina,摘自iOS应用Snow White and more stories

    Once upon a time there was a woman who wanted to have a child. 从前,有个想要个孩子的女人. A witch heard her wish ...

  2. R in Action(0) 开篇

    这几年数据挖掘的火热,也越来越多的人把R作为数据挖掘的一个辅助工具,据国际性组织kkguter统计有60%的人在挖掘过程中用到R工具,可见这个工具是多么的流行,对于数据统计.筛选以及画图绝对是神器.尽 ...

  3. [IR课程笔记]Page Rank

    主要目的: 在网络信息检索中,对每个文档的重要性作出评价. Basic Idea: 如果有许多网页链接到某一个网页,那么这个网页比较重要. 如果某个网页被一个权重较大的网页链接,那么这个网页比较重要. ...

  4. 软件版本GA,RC,alpha,beta含义

    软件版本GA,RC,alpha,beta含义 (1)RC:(Release Candidate) Candidate是候选人的意思,用在软件上就是候选版本.Release.Candidate.就是发行 ...

  5. TortoiseSVN使用笔记

    TortoiseSVN版本冲突详解   下列步骤展示了如何将分支A中的修改合并到分支B. 1.在分支B的本地副本目录中选择"合并(Merge)". 2.选择“合并一个版本范围(Me ...

  6. OCX控件避免弹出安全警告的类

    1.要加一个头文件:         #include <objsafe.h>2.在控件头文件中加入: 1 DECLARE_INTERFACE_MAP()2 BEGIN_INTERFACE ...

  7. PTA 哈希查找 除留取余法

    PTA 电话聊天狂人(25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10​5​​),为通话记录条数.随后N行,每行给出一条通话记录.简单起 ...

  8. Gulp-webpack简单应用

    1.配置环境:  在  webstorm  的控制台中  (1) cnpm install --save-dev gulp    (2)  cnpm install --save-dev gulp-w ...

  9. bzoj2806

    广义后缀自动机+二分+单调队列+dp 这道题其实就是一个简单dp,dp[i]表示匹配到i最长匹配多少,设val[i]表示当前位置和原串的最长公共长度,二分的长度是L,那么要求dp[i]=max(dp[ ...

  10. Tautonym Puzzle

    题意: 构造一个长度不超过200,数字不大于100的序列,使得合法子序列的个数恰好为N: 合法子序列是指一个长度为偶数的序列,前一半和后一半相等. 解法: 考虑这种构造方法 假设我们当前有序列为 $x ...