梳理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. 基于EasyDarwin实现幼儿园监控类项目

    移动互联网越来越普及,幼儿园监控类的项目也越来越多,如何能够以最低的成本.最快的速度搭建一套幼儿园监控类的平台成了许多开发者的需求,那么我们今天就来简单探讨一下如何基于EasyDarwin实现一套幼儿 ...

  2. httpclient4 模拟访问网页 模拟登录 简单例子

    JAVA后台模拟登录一个网站,获得一定权限后进一步操作. 所用的工具: Apache HttpComponents client 4.3版本 以下为代码: import org.apache.http ...

  3. 删除SVN账号

    删除里面的所有文件   C:\Users\Administrator\AppData\Roaming\Subversion\auth

  4. a little riak book

    a little riak book 的无聊总结 <pre name="code" class="python">#!/bin/bash # Ria ...

  5. [数据挖掘课程笔记]人工神经网络(ANN)

    人工神经网络(Artificial Neural Networks)顾名思义,是模仿人大脑神经元结构的模型.上图是一个有隐含层的人工神经网络模型.X = (x1,x2,..,xm)是ANN的输入,也就 ...

  6. office web apps 整合到自己项目中(wopi实现在线预览编辑)

    借助office web apps实现在线预览和在线编辑 我所有的代码都是用go语言编写,你可以直接编译后使用,不用再有其他的操作. 最近项目实在太忙,这几天才有时间,这次是重头戏,要好好琢磨一下怎么 ...

  7. LVS集群的负载调度

    LVS集群的负载调度 章文嵩 (wensong@linux-vs.org) 转自LVS官方资料 2002 年 5 月 本文主要讲述了LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法. ...

  8. python berkeley DB操作——打开btree索引文件中的database

    打开BDB中某个索引中的数据库代码: from bsddb3 import db import bsddb3 as bsddb print db.DB_VERSION_STRING mydb = db ...

  9. 数学题--On Sum of Fractions

    题目链接 题目意思: 定义v(n)是不超过n的最大素数, u(n)是大于n的最小素数. 以分数形式"p/q"输出 sigma(i = 2 to n) (1 / (v(i)*u(i) ...

  10. [转载] Android raw与assets区别

    *res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点:1.res/raw中的文件会被映射到R ...