4 搭建第一个自己的网络
下面让我们手动搭建一个自己的fabric 网络:
- 创建一个项目目录: 如
mkdir ~/Demo
- orderer节点个数为1个
- 组织个数2个
- OrgGo
- OrgCPP
- OrgGo有两个peer节点, 该组织有3个用户
- OrgCpp有两个peer节点, 该组织有4个用户
4.1 生成Fabric的证书
编写生成组织节点证书的配置文件,我们将其命名为: crypto-config.yaml。在里边指定组织的名称, 节点个数, 用户个数和访问节点的域名信息。
将如下写好的配置文件放入目录:
~/Demo
中
1 | # crypto-config.yaml |
1 | 配置文件编写完成, 在Demo目录下执行该命令: |
4.2 创始块和通道文件的创建
Fabric是基于区块链的分布式账本, 每个账本都有自己的区块, 账本的区块链中会存储账本的交易数据,但账本的第一个区块是一个例外,该区块不存储交易数据而是存储配置信息,通常账本的第一个区块称为创始块。
我们需要些编写生成创始块文件的配置文件,配置文件名字为
configtx.yaml, 该名字不要修改
, 写好之后放入Demo
目录中
1 | # configtx.yaml |
1 | 1. 在Demo目录下创建新目录 channel-artifacts, 将生成的创始块和通道文件存储在该目录中 |
通道(频道)在Fabric中称为channel, 一个channel表示一个账本。fabric和其他区块链平台最大的区别是支持多账本。每个fabric中至少包含一个channel,下边我们将通过命令将通道创建出来。
1 | 创建channel |
4.3 启动docker-compose
4.3.1 编写配置文件
编写docker-compose启动时加载的配置文件,默认加载的文件名为:
`docker-compose.yml/yaml
,可通过命令docker-compose --help
查看。我们将该文件放到项目目录~/Demo
中。
1 | # docker-compose.yml |
接下来就上面
docker-compose.yaml
文件中依赖的文件docker-compose-base.yaml
,根据上面的指定可以知道该文件是放到base目录中,也就是说需要在Demo目录中创建子目录base:mkdir base
。
1 | # ~/Demo/base/docker-compose-base.yaml |
在上面的docker-compose-base.yaml文件中又引用了文件
peer-base.yaml
,接下来我们对该文件进行修改。
1 | # ~/Demo/base/peer-base.yaml |
4.3.2 通过docker-compose启动容器
docker-compose的配置文件编写完成之后, 我们就可以通过配置文件中的配置将所有节点的容器全部启动起来.
1 | 启动容器 |
4.4 channel管理
4.4.1 操作步骤
这个动作需要在cli容器中运行
创建channel
1
2
3
4
5
6
7
8
9进入cli容器
docker exec -it cli bash
peer channel create -o ubuntu.wumansgy.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA
参数说明:
- ubuntu.wumansgy.com: 连接的orderer的地址,hostname:port
- $CHANNEL_NAME: channel的名称,如果没有指定,默认为mychannel, 通道创建成功之后会在磁盘生成
一个文件, 名字为$CHANNEL_NAME.block(通道名.block)
- $CORE_PEER_TLS_ENABLED: 和orderer通信时是否启用tls
- $ORDERER_CA: 使用tls时,所使用的orderer的证书该命令执行过程:
- 发送消息,创建了channel,名字为
$CHANNEL_NAME
- 获取创始区块,并且用protobuf进行序列化,本地生成了一个文件
$CHANNEL_NAME.block
- 发送消息,创建了channel,名字为
将peer节点添加到channel中
1
2
3peer channel join -b $CHANNEL_NAME.block
参数说明:
CHANNEL_NAME.block, 创建出的通道文件的名字将每个组织的锚节点(anchor peer)更新到orderer
1
2
3
4
5
6peer channel update -o ubuntu.wumansgy.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA
参数说明:
- ubuntu.wumansgy.com: 连接的orderer的地址,hostname:port
- ${CORE_PEER_LOCALMSPID}anchors.tx: 组织的锚节点文件, 是通过configtxgen指令生成的
- $CORE_PEER_TLS_ENABLED: 和orderer通信时是否启用tls
- $ORDERER_CA: 使用tls时,所使用的orderer的证书
4.4.2 脚本编写
上述操作需要对多个节点进行操作,因此我们可以写一个脚本文件, 对这些操作进行统一处理,方便使用者进行操作。为了对编写的脚本统一管理,可以将其放入一个目录中。
我们可以在
~/Demo
目录下创建新的子目录scripts
, 将所有的脚本文件放到里边。编写的脚本如下:
会被调用多次的操作, 我们将其放到一个单独的脚本文件中
1 | 该脚本文件我们命名为 utils.sh |
创建通道操作:
1 | 该脚本文件我们命名为createChannel.sh |
将节点添加到通道中
1 | 该脚本文件我们命名为joinChannel.sh |
将每个组织的锚节点(anchor peer)更新到orderer
1 | 该脚本文件我们命名为updateChannel.sh |
4.5 chaincode安装和实例化
1 | 该脚本文件我们命名为installChainCode.sh |