超级账本Fabric学习(二)Fabric1.0.0网络搭建(上)

看完博客之后有喜欢的网友可以点赞关注哦,毕竟大家的支持就是我写博客的动力。

2020年8月7日,整理于家中。

注意:这里我们虽说是配置文件和搭建网络,但是为了大家方便理解我们并不做修改,多是介绍和讲解

1:配置文件准备

1.1:公私钥与证书

Fabric中有两种类型的公私钥和证书

  • 第一种:一种是给节点之间,为了通讯安全而准备的TLS证书
  • 第二种:另一种是用户登录和权限控制的用户证书
  • (本来这些证书都应该是由CA来颁发的,但是我们这里是测试环境,并没有启用CA节点,这里我们使用cryptogen工具来生成这两种证书)

1.2:配置与介绍crypto-config.yaml文件

注意:该文件在 fabric-samples/first-network目录下

作用:

  • crypto-config.yaml主要用于配置组织节点的个数,以及每个组织里面有用户的个数。
  • 后面cryptogen工具还会根据该文件作为参数配置,生成这些组织,节点,用户相应的证书

也可以说是cryptogen工具读取这个配置文件产生证书和密钥。

重点:crypto-config.yaml文件源码详解

整个crypto-config.yaml源码可以分为两个部分:OrdererOrgs(排序节点组织) 和PeerOrgs(peer节点组织)

图片当中的注释可以参考

OrdererOrgs部分:
Orderer组织部分

注意:上面源码中,我们使用了Specs的方式来定义了多个orderer节点,目前有三种模式:

  • solo 模式:只允许有一个orderer节点,单个节点就可以部署。
  • kafka模式:允许有一个或多个orderer节点,是需要群集支持(kafka和zookeeper)
  • etcdraft模式:orderer本身集成了etcd服务,只需要启动一个或多个orderer即可,不需要额外的组件支持。

总结:solo模式仅供开发测试阶段使用,生产环境可以选择kafka或etcdraft。

PeerOrgs部分:

peer组织部分

经过以上介绍之后,crypto-config.yaml配置文件可以根据我们自己的实际运用场景进行修改。

手动生成证书/密钥:

像上一篇博客中这一步的工作是直接靠byfn.sh脚本完成的,就是在脚本当中定义并调用了一个叫做generateCerts的函数,并且也使用了cryptogen工具。这里我们手动的话,根据configtx.yaml定义的网络配置,使用cryptogen工具生成证书,需要提供出工具所在的相对路径,然后加上cryptogen命令即可,工具二进制文件在fabric-samples/bin目录中。

../bin/cryptogen generate --config=./crypto-config.yaml

如果命令执行成功后,终端会显示如下内容:

org1.exmples.com
org2.exmples.com

而上述操作成功后生成的证书和密钥会保存在一个叫做crypto-config的文件夹中,如果我们之前没有在执行命令的目录下创建该文件夹,则会自动创建。如果之前拉取的源码目录下已经有这个目录,并且里面已经有了证书和密钥,可以把他们删除了,然后再自己测试一下。

证书文件和密钥保存的目录

该目录下,按照组织,节点,用户三大体系分类,不同的子目录下存放着各自的各种证书已经密钥。但如果我们仔细去看的话就会发现里面有很多证书都是一样的,比如说cacerts证书(CA证书)。就是"ca.example.com.cert.pem"文件

关于证书,我们现在可以不必过多的去关注,只需要知道他针对每一个组织,每一个节点,以及每一个用户都生成了一套证书就可以了。

而且每一套证书都包括CA呀,Amin证书,以及签名证书,加密通信证书等等。

1.3:配置与介绍configtx.yaml文件

注意:该文件在 fabric-samples/first-network目录下

作用:

configtx.yaml主要用于配置这个区块链联盟当中的组织信息

比如:

  • 组织的名字呀,及对应的证书的位置。
  • 对于peer节点来说,还有他的对外的主节点(锚节点AnchorPeer)
  • 对于order节点来说,还有他共识机制的选择,区块的时间间隔呀,每一个块中能包含的交易的数量,块的大小,等等这些信息 。

configtxgen工具用于创建四个配置网络工件:

  • genesis.block(创世区块)
  • channek.tx(通道配置交易)
  • Org1MSPchors.tx(锚节点交易)和Org2MSPchors.tx

解析:

其中创世区块是排序服务的创世区块;通道配置交易是在通道创建时广播给orderer;锚节点交易指定通道上每个组织的锚节。configtxgen将配置文件configtx.yaml作为参数配置,默认的configtx.yaml包含三个组织:一个orderer组织(OrdererOrg)和两个peer组织(Org1,Org2).每个peer组织维护两个peer节点(peer0,peer1),该文件还指定了一个联盟SampleConsortium,该联盟包含两个组织。

下面将插入configtx,yaml文件的源码图片,里面有中文注释,进行详细介绍

config.tx,yaml文件分为很多配置段,其中最为重要的是profiles配置段,该配置段相当于一个入口,通过configtxgen配置工具的-profiles参数指定选择哪个profile生成相应的文件,相当于一个回调函数的感觉,其他配置段都会在profiles配置端=段根据需求进行引用。

fabric中的configtx.yaml文件可以分为四个部分,四段,分别是:

  • Profiles(配置入口段)
  • Organizations(组织配置段)
  • Orderer(排序节点配置段)
  • Application(应用通道相关配置段)

Profiles
Profiles配置段

Organizations

组织配置段

Orderer

排序节点配置段

Application
Application配置段

2:创世配置构造

有了这两个配置文件下面我们就可以取构造区块链的创世配置了

创世配置的构造包括以下几个部分:

  • MSP证书
  • Orderer创世区块
  • Channel创世交易/区块
  • 组织主节点配置文件

2.1:MSP证书

第一个配置就是组织 ,节点,用户的证书。组织,节点,用户是三套不同的证书体系。而每一套证书体系都包括比如说:CA证书,加密通信的证书(tls证书),以及签名证书(sign)等等。

这一步就是上面将crypto-config.yaml文件生成各种证书和密钥的那一步。

生成证书文件

cd ~/go/src/github.com/hypeledger/fabric-samples/first-network
../bin/cryptogen generate --config=./crypto-config.yaml

2.2:Orderer创世区块

目前通道分为两种类型:

  • 系统通道

    解释:排序节点通过系统通道来管理应用通道。

  • 应用通道

    解释:用户的交易信息通过应用通道传递,对一般用户来说,通道是指应用通道。

通过过这个区块我们解决的是先有鸡还是现有蛋的问题,得先有系统链才能去创建其他链。

该创世区块是指生成系统通道得创世区块,主要用于启动Ordering服务,配置网络中的策略。

生成Orderer创世区块

用到configtxgen工具和configtx.yaml文件

configtxgen工具参数信息以及解释:

Usage of configtxgen:
1.-asOrg string
	#作为特定的组织(按名称string)执行配置生成,包括org(可能)有权设置的写集中的值。如用来指明锚节点所在的组织。
	
2.-channelCreateTxBaseProfile string
	#指定一个概要文件作为orderer系统通道当前状态,以允许再通道创建tx期间修改非应用程序参数。仅在与outputCreatChannelTx组合	#时有效。

3.-channelID string
	#在configtx中使用的通道ID,及通道名称。

4.-configPath string 
	#包含要使用的配置路径(如果设置的话)

5.-inspectBlock string
	#按指定路径打印块中包含的配置,用来检查通道的配置信息。

6.-inspectChannelCreateTx string
	#按指定路径打印块中包含的配置,用于检查和输出通道中创世区块的内容,锚节点在configtx.yaml中的AnchorPeers中指定。

7.-outputAnchorPeerUpdate string 
	#创建一个配置更新来更新锚节点(仅在默认通道创建时工作,并且仅在第一次更新时工作)

8.-outputBlock string
	#将genesis块写入(如果设置)的路径。confitx.yaml文件中的Profiles要指定Consortiums,否则启动排序服务节点失败。
	
9.-outputCreateChannelTx string
	#将通道配置交易文件写入(如果设置)的路径。configtx.yaml文件中的Profiles必须包括Application,否则创建通道会失败。
	
10.-profile string 
	#指定使用的时configtx.yaml中某个用于生成的Profiles配置项。
	
11.-printOrg string 
	#将组织的定义打印为JSON。(对于手动向通道添加组织非常有用)
	
12.-version 
	#显示版本信息

接下来我们要告诉configtxgen工具在哪里能够寻找到他需要的configtx.yaml文件,我们告诉他当前路径

cd ~/go/src/hyperledger/fabric-samples/first-network
FABRIC_CFG_PATH=$PWD

生成创世区块的命令如下:

#cd到之前生成MSP证书的config目录下创建一个名叫channel-artifacts的目录
cd ~/go/src/github.com/hyperledger/fabric-samples/first-network/config
mkdir channel-artifacts
#cd回first-network目录下
cd  ../
../bin/configtxgen -profile TwoOrgsOrderGenesis -outputBlock ./config/channel-artifacts/genesis.block

2.3:Channel创世交易/区块(通道的配置交易)

顾名思义,就是去构建通道的第一笔交易,这笔交易是一笔配置交易,包括了通道的初始化信息,并且这笔交易会被单独包装成一块区块,也就是这个通道的创世区块。

命令如下:

#同样是在first-network 目录下
../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./config/channel-artifacts/mychannel.tx  /    -channelID mychannel 

2.4:组织主节点配置文件

就是去生成每个组织主节点的配置交易,在实际生产中也是可以不做的,因为在组织内部的peer节点之间,他们是通过Goosip协议进行区块同步的,如果我们没有去设置主节点,Goosip协议也会去动态选举一个主节点出来。

生成组织的锚节点交易,虽然这一步是没有必要的,但为了记录笔记,还是写上为好。

#在哪个路径下我都不想说了
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./config/channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Or1MSP

../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./config/channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Or2MSP

以上所有操作当中一个字母都不能错,有一个错了,都会造成错误和偏差,所以请谨慎小心为妙。

上面四次操作如果都成功的话会在config/channel-artifacts目录下生成以下四个文件:

生成的四个文件

后面剩下的就是启动网络了,这一部分放到下一篇博客讲解,我们这里采用的是docker-compose的方式来部署环境,所以接下来我们就可以配置docker-compose的yaml文件,以便顺利启动Fabric的docker环境。详情请看下一篇博客。这篇博客十分重要哦,毕竟涉及到了:docker-compose-cli.yaml , docker-compose-base.yaml , peer-base.yaml

猜你喜欢

转载自blog.csdn.net/qq_45676856/article/details/107880881