本系列文章:
git
第一章:九析带你完爆 fabric - 快速搭建区块链github
第二章:九析带你完爆 fabric - 快速搭建 GO 环境docker
目录ide
1 前言工具
2 编译生成 configtxgen 和 cryptogen学习
2.1 编译生成 configtxgen区块链
2.2 编译生成 cryptogenui
2.3 将工具加入到 PATH 环境变量spa
3 下载 fabric first-network 样例
4 搭建并启动区块链网络
4.1 建立证书和创世区块
4.2 启动网络
4.3 脚本流程解析
4.3.1 启动网络并建立网络节点
4.3.2 调用 script.sh 脚本文件
5 删除网络
1 前言
第一章九析首先带你下载 fabric 源码;接着根据源码中的脚本下载 fabric 所有 docker 镜像;而后运行了几个基础镜像构建出一个简单的区块链网络;最后在这个区块链网络上建立通道、MSP,初始化并安装链码,最后操做链码的整个过程。建议读者能够根据个人教程手把手操做感觉一下。
第二章九析带你轻松完爆了 GO 语言环境的搭建,目的是为了编译 fabric 世界中最重要的两个工具 configtxgen 和 cryptogen,前者做用是建立创世区块、建渠道,后者是为了建立节点通讯的证书。
本章咱们将要继续前行,谁让咱们的征途是星辰和海洋呢。本章九析将带你继续深刻,完爆 fabric 提供的另一个简单样例 first-network。由于我坚决相信,若是要真正作到水乳交融,光靠神交是远远不够的,你还须要持续的进入、深刻,只有这样你才能体会到其中的无尽美妙,才能爽到爆。
在这里再声明一下,区块链难学之一在于名词、术语比较多,不少人就是由于术语的缘由致使很难入门,我这里的建议是你不用管术语,只是跟着个人操做进行便可。由于在后续的教程中,你会天然而然从操做中理解这些术语。本人是军人家庭,我清楚地记得新兵在刚入伍时老是会对命令不理解进而产生抵触的心理,好比,为何要负重跑,为何忽然要搞拉练等等,每到这个时候教官都只会淡淡说一句:“在执行中加深理解”。我以为此话一样适用区块链的学习。
2 编译生成 configtxgen 和 cryptogen
若是要编译这 2 个 fabric 提供的工具,必需要先预先安装好 GO 语言环境,若是你尚未轻松完爆 GO,建议你回到第二章。
2.1 编译生成 configtxgen
cd $GOPATH/src/github.com/hyperledger/fabric/common/configtx/tool/configtxgen/
go install --tags=nopkcs11
命令执行成功后,会在 $GOPATH/bin 目录下生成 configtxgen:
2.2 编译生成 cryptogen
cd $GOPATH/src/github.com/hyperledger/fabric/common/tools/cryptogen
go install --tags=nopkcs11
命令执行成功后,回在 $GOPATH/bin 目录下生成 cryptogen:
2.3 将工具加入到 PATH 环境变量
export PATH=$PATH:$GOPATH/bin
3 下载 fabric first-network 样例
下载地址以下。这里说明以下,若是你是从本人的第一章开始阅读,那里下载的 fabric-sample 用例版本是 v1.1.0,通过验证在 fabric v1.0.0 源码下编译生成的 configtxgen 和 cryptogen 工具下执行会报错。所以这里须要从新下载 fabric-sample v1.0.2 版本。
https://github.com/hyperledger/fabric-samples/releases/tag/v1.0.2
解压:
tar -zxvf fabric-samples-1.0.2.tar.gz
解压后截图:
进入 fabric-sample-1.0.2/first-network 目录,查看目录结构以下:
下面简单介绍一下相关文件和目录的做用:
.env # 文件。存放环境变量
byfn.sh # 文件。整个样例代码的启动脚本。 byfn(build your first network 简称)
configtx.yaml # 文件。该配置文件主要交给 fabric 提供的工具 configtxgen 使用,configtxgen 工具做用是生成创世区块、生成或者配置通道(channel)
crypto-config.yaml # 文件。该配置文件主要交给 fabric 提供的工具 cryptogen 使用,cryptogen 工具做用是生成区块链网络各个节点通讯的证书
docker-**.yaml # 文件。这 5 个配置文件做用是建立区块链网络
base # 目录。存放 docker-compose 定义的一些公共服务
scripts # 目录。该目录提供脚本建立通道、加入通道、安装链码、初始化链码、跟链码交互等操做
channel-artifacts # 目录。存储启动脚本执行完毕后建立的通道和创世区块文件。
4 搭建并启动区块链网络
搭建区块链网络的过程实际上是很简单的,就是 byfn.sh 脚本文件。
4.1 建立证书和创世区块
在启动区块链网络以前,启动脚本首先要根据 configtx.yaml 和 crypto-config.yaml 文件建立创世区块、通道配置和 peer、order 节点通讯的数字证书。
./byfn.sh -m generate -c jiuxi-channel # -c 选项做用是建立名为 jiuxi-channel 的通道
命令执行结果以下图所示:
执行此命令后会多生出一个目录 crypto-config 目录,该目录存放 order 节点和 peer 锚节点各类数字证书:
同时也会在 channel-artifacts 目录下生成通道配置文件、创世区块等:
4.2 启动网络
执行启动脚本启动网络:
./byfn.sh -m up -c jiuxi-channel
脚本执行结果部分截图以下,代表最终网络启动成功、节点添加成功、安装并操做链码成功等:
4.3 脚本流程解析
4.3.1 启动网络并建立网络节点
脚本首先启动网络,并相继建立网络中的各个节点,执行结果会产生 6 个 docker 容器,以下图红框所示:
网络中共有 1 个 order 节点、4 个 peer 节点从属于 2 个不一样的组织(org1 和 org2)、cli 客户端节点(该节点做用是能够登陆到不一样的 peer 节点执行一些操做,好比安装链码、实例化链码、跟链码交互等操做)。
4.3.2 调用 script.sh 脚本文件
在启动网络成功以后,便会执行 scripts 目录下的 script.sh 脚本,该命令会执行一系列的子任务。
建立通道:
将全部 peer 节点加入到刚建立的通道中:
更新锚节点信息:
安装链码:
该样例一共在 3 个 peer 节点安装了相同的一段链码(所谓链码,就是运行在区块链节点上的一段代码。你能够反过来理解链码,若是说区块链上什么逻辑都没有,光有一条链有什么价值,假如区块链中有一个节点安装了一段链码,代码逻辑为打印 hello world,那么客户端 cli,就能够调用该区块链上该节点上的这段链码了):
实例化链码(调用链码的 init 方法):
操做链码(执行查询操做,查询操做又触发链码的 invoke 方法):
5 删除网络
我知道有些人喜欢作事有头有尾,既然生成了区块链,那么如何清除掉呢?执行以下命令销毁整个区块链、链码以及链码执行结果:
./byfn.sh -m down -c jiuxi-channel
命令直接结果部分截图以下:
该命令执行轨迹为强制中止并删除样例 docker 容器、删除链码 docker 镜像(放心,并不会删除 fabric 自身的 docker 镜像)。你能够经过以下命令去检查:
docker images # 查看镜像信息
docker ps -a # 查看容器信息
自此,整个 first-network 样例被轻松完爆。