梳理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. Phoenix 索引生命周期

    本文主要介绍Phoenix索引状态的生命周期,帮助大家解惑“为什么我的phoenix索引不能正常使用了?” 索引状态 索引总共有以下几个状态,其状态信息存储在SYSTEM.CATALOG表中.可以通过 ...

  2. 关于js开发的小问题

    一.开发当中经常会动态拼接html,当然为了简便性好多人直接就是使用内联事件: $('#td1').html( '<a href="#" onclick="app. ...

  3. linux修改进程的名字

    1 修改linux进程名字的基本原理 linux进程以argv[0]作为进程的名字,因此只需要修改argv[0]处的字符串就修改了linux进程的名字. 2 直接修改argv[0]会导致的问题 如果名 ...

  4. 剑指Offer:链表中倒数第k个结点【22】

    剑指Offer:链表中倒数第k个结点[22] 题目描述 输入一个链表,输出该链表中倒数第k个结点. 解题思考 我们定义两个指针L和R,R事先移动K-1个位置,然后两者同时往后移动直到遇到R的下个节点为 ...

  5. 内核中led触发器实例【转】

    本文转载自:http://blog.csdn.net/yuanlulu/article/details/6438847 ======================================== ...

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

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

  7. hdu-2647 Reward && hdu-2049产生冠军 &&hdu-3342Legal or Not(拓扑排序)

    题目链接: hdu-2647 /*Problem : 2647 ( Reward ) Judge Status : Accepted RunId : 16919085 Language : G++ A ...

  8. 在KitKat(Android 4.4.2) 推送网址给手机

    弱者才会回避问题. 最近想把网址推送给手机实现后台下载,打算故技重施,用短信传送然后中断广播的方法实现隐蔽传送.试了半天发现怎么现在拦不住短信了.查了一下才发现原来Android4.4增加了一个安全机 ...

  9. 算法实现c语言--02

    从键盘上输入字符,将小写字母转换成大写字母.输入“ctl + z” 结束 . #include<stdio.h> #include<stdlib.h> //从键盘上输入字符,将 ...

  10. ubuntu解决挂起后不能唤醒

    安装 laptop-mode 如果你不缺认自已是否安装了laptop-mode-tools工具包,可以在终端中输入下列命令来确认是否安装. dpkg -l | grep laptop-mode-too ...