第三章 九析带你轻松完爆 hyperledger fabric - 学习 first-network

本系列文章:


第一章:九析带你完爆 fabric - 快速搭建区块链

第二章:九析带你完爆 fabric - 快速搭建 GO 环境

第三章:九析带你完爆 fabric - 快速上手 first-network 样例

目录

1 前言

2 编译生成 configtxgen 和 cryptogen

    2.1 编译生成 configtxgen

    2.2 编译生成 cryptogen

    2.3 将工具加入到 PATH 环境变量

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:image1.png

2.2 编译生成 cryptogen

cd $GOPATH/src/github.com/hyperledger/fabric/common/tools/cryptogen

go install --tags=nopkcs11

        命令执行成功后,回在 $GOPATH/bin 目录下生成 cryptogen:image2.png

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

        解压后截图:image3.png

        进入 fabric-sample-1.0.2/first-network 目录,查看目录结构如下:image4.png

        下面简单介绍一下相关文件和目录的作用:

.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 的通道

        命令执行结果如下图所示:image5.png

        执行此命令后会多生出一个目录 crypto-config 目录,该目录存放 order 节点和 peer 锚节点各种数字证书:image6.png

        同时也会在 channel-artifacts 目录下生成通道配置文件、创世区块等:image7.png

4.2 启动网络

        执行启动脚本启动网络:

./byfn.sh -m up -c jiuxi-channel

        脚本执行结果部分截图如下,表明最终网络启动成功、节点添加成功、安装并操作链码成功等:image8.png

4.3 脚本流程解析

4.3.1 启动网络并创建网络节点image9.png

        脚本首先启动网络,并相继创建网络中的各个节点,执行结果会产生 6 个 docker 容器,如下图红框所示:image10.png

        网络中共有 1 个 order 节点、4 个 peer 节点从属于 2 个不同的组织(org1 和 org2)、cli 客户端节点(该节点作用是可以登录到不同的 peer 节点执行一些操作,比如安装链码、实例化链码、跟链码交互等操作)。

4.3.2 调用 script.sh 脚本文件

        在启动网络成功之后,便会执行 scripts 目录下的 script.sh 脚本,该命令会执行一系列的子任务。

        创建通道:image11.png

        将所有 peer 节点加入到刚创建的通道中:image12.png

        更新锚节点信息:image13.png

        安装链码:image14.png

        该样例一共在 3 个 peer 节点安装了相同的一段链码(所谓链码,就是运行在区块链节点上的一段代码。你可以反过来理解链码,如果说区块链上什么逻辑都没有,光有一条链有什么价值,假如区块链中有一个节点安装了一段链码,代码逻辑为打印 hello world,那么客户端 cli,就可以调用该区块链上该节点上的这段链码了):image15.png

        实例化链码(调用链码的 init 方法):image16.png

        操作链码(执行查询操作,查询操作又触发链码的 invoke 方法):image17.png

5 删除网络

        我知道有些人喜欢做事有头有尾,既然生成了区块链,那么如何清除掉呢?执行如下命令销毁整个区块链、链码以及链码执行结果:

./byfn.sh -m down -c jiuxi-channel

        命令直接结果部分截图如下:image18.png

        该命令执行轨迹为强制停止并删除样例 docker 容器、删除链码 docker 镜像(放心,并不会删除 fabric 自身的 docker 镜像)。你可以通过如下命令去检查:

docker images # 查看镜像信息

docker ps -a   # 查看容器信息

        自此,整个 first-network 样例被轻松完爆。

猜你喜欢

转载自blog.51cto.com/14625168/2468568