一、阐明
区块链网络的外围是分布式账本,在这个账本中记录了网络中产生的所有交易信息。
Hyperledger Fabric 是一个是开源的,企业级的,带权限的分布式账本解决方案的平台。Hyperledger Fabric 由模块化架构撑持,并具备极佳的保密性、可伸缩性、灵活性和可扩展性。Hyperledger Fabric 被设计成反对不同的模块组件间接拔插启用,并能适应在经济生态系统中盘根错节的各种场景。
本文分享在 Centos 下搭建 Hyperledger Fabric 2.4 环境并进行简略的网络测试。
二、环境筹备
2.1. 环境依赖
- Git 客户端
- Golang 1.17.5 以上版本
- Docker 18.03 以上版本
2.2. 查看环境
Docker 版本
docker -v
Golang 语言环境
go version
三、Fabric 源码装置
3.1. 创立目录
在 GOPATH 目录下创立 Fabric 的文件夹:
mkdir -p $GOPATH/src/github.com/hyperledger
3.2. 下载源码
cd $GOPATH/src/github.com/hyperledger
git clone https://gitee.com/hyperledger/fabric.git
这里应用国内的码云的镜像仓库
3.3. 批改装置脚本
如果本地网络拜访 github 顺畅能够疏忽该步骤
编辑 bootstrap.sh
文件
vim $GOPATH/src/github.com/hyperledger/fabric/scripts/bootstrap.sh
- 把
https://github.com/hyperledger/fabric-samples.git
批改为https://gitee.com/hyperledger/fabric-samples.git
- 正文
pullBinaries
3.4. 执行装置脚本
./bootstrap.sh
如下图所示,脚本执行胜利之后会下载一个 fabric-samples
工程和一堆 fabric 的 docker 镜像:
别离手动下载 fabric
和 fabric-ca
编译后的压缩包,寄存在 fabric/scripts/
目录下:
因为码云镜像仓库的公布包只有源码,咱们须要编译后的所以只能想方法去 github 下载。
https://github.com/hyperledge…
https://github.com/hyperledge…
压缩压缩包,失去 bin
与 config
两个文件夹:
tar -zxvf hyperledger-fabric-linux-amd64-2.4.1.tar.gz
tar -zxvf hyperledger-fabric-ca-linux-amd64-1.5.2.tar.gz
执行以下命令复制 fabric-samples
目录中
cp -r bin fabric-samples/
cp -r config fabric-samples/
四、启动 test-network 测试网络
进入 test-network 目录
cd $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network
执行以下命令:
./network.sh up
如果呈现下图的报错:
则须要批改 docker-compose
的版本,在 test-network 目录下别离编辑以下文件:
vim docker/docker-compose-test-net.yaml
vim docker/docker-compose-couch.yaml
vim docker/docker-compose-ca.yaml
vim addOrg3/docker/docker-compose-couch-org3.yaml
vim addOrg3/docker/docker-compose-org3.yaml
其中把 version: '3.7'
批改为 version: '3.6'
如下图所示:
批改完配置后,从新执行:
./network.sh up
如下图所示,已胜利启动一个 orderer 节点
和两个 peer 节点
:
至此一个基于 Hyperledger Fabric
的测试网络就搭建实现了。
五、测试网络应用
能够执行以下命令打印脚本的帮忙文本:
./network.sh -h
5.1. 创立 Channel
当初咱们的机器上正在运行对等节点和排序节点,咱们能够应用脚本创立用于在 Org1 和 Org2 之间进行交易的 Fabric 通道。
Fabric channel 是特定网络成员之间的专用通信层,通道只能由被邀请退出通道的组织应用,并且对网络的其余成员不可见。每个通道都有一个独自的区块链账本,被邀请的组织“退出”他们的对等节点来存储其通道账本并验证交易,建设一个通道相当于建设了一个子链。
应用 network.sh 脚本在 Org1 和 Org2 之间创立通道并退出他们的对等节点,执行以下命令创立一个通道:
./network.sh createChannel
如下图所示创立胜利后默认名称为 mychannel
可应用 -c
来指定通道名称,以下命令将创立一个名为 channel1
的通道:
./network.sh createChannel -c channel1
5.2. 在通道启动一个链码
创立通道后,能够开始应用智能合约与通道账本交互。智能合约蕴含治理区块链账本上资产的业务逻辑,由成员运行的应用程序网络能够在账本上调用智能合约创立,更改和转让这些资产,应用程序还通过智能合约查问,以在分类账上读取数据。
在 Fabric 中,智能合约作为链码以软件包的模式部署在网络上。链码装置在组织的对等节点上,而后部署到某个通道,而后能够在该通道中用于认可交易和区块链账本交互。在将链码部署到通道前,该频道的成员须要就链码定义达成共识,建设链码治理。何时达到要求数量的组织批准后,链码定义能够提交给通道,并且能够应用链码了。
创立频道后,能够应用 network.sh 脚本在通道上启动链码:
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-java -ccl java
- -ccn:为指定链码名称
- -ccl:为指定链码语言
deployCC
子命令将在 peer0.org1.example.com
和 peer0.org2.example.com
上装置 asset-transfer-basic
链码,如果第一次部署链码,脚本将装置链码的依赖项。默认状况下,脚本装置 Go 版本的 asset-transfer-basic
链码,能够通过参数 -ccl
来装置 Java 或 javascript 版本的链码。
5.3. 与网络交互
在启用测试网络后,能够应用 peer cli
客户端与网络进行交互,通过 peer cli
客户端能够调用已部署的智能合约,更新通道,或装置和部署新的智能合约。
首先确保操作目录为 test-network 目录,比方我的目录是:
以下操作需确保在 test-network
目录中进行操作:
执行以下命令将 cli 客户端增加到环境变量中:
export PATH=${PWD}/../bin:$PATH
还须要将 fabric-samples 代码库中的 FABRIC_CFG_PATH 设置为指向其中的 core.yaml 文件:
export FABRIC_CFG_PATH=$PWD/../config/
设置容许 org1 操作 peer cli 的环境变量:
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
CORE_PEER_TLS_ROOTCERT_FILE
和 CORE_PEER_MSPCONFIGPATH
环境变量指向 Org1 的 organizations
文件夹中的的加密资料。
执行以下命令用一些资产来初始化账本:
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'
执行胜利会返回 Chaincode invoke successful. result: status:200
如下图所示:
执行以下指令来查问通道账本中的资产列表:
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
六、敞开网络
应用完测试网络后,可执行以下命令敞开网络:
./network.sh down
该命令将进行并删除节点和链码容器,删除组织加密资料,并从 Docker Registry 移除链码镜像,另外还会删除之前运行的通道我的项目:
七、应用认证机构创立网络
Hyperledger Fabric 应用公钥基础设施 (PKI) 来验证所有网络参与者的行为。每个节点,网络管理员和用户提交的交易须要具备公共证书和私钥以验证其身份。
默认状况下,脚本应用 cryptogen 工具创立证书和密钥,该工具用于开发和测试,并且能够疾速为具备无效根信赖的 Fabric 组织创立所需的加密资料。
测试网络脚本还提供了应用证书颁发机构(CA)的网络的启动选项。在网络中每个组织操作一个 CA(或多个两头 CA)来创立属于他们的组织身份,所有由该组织运行的 CA 创立的身份享有雷同的组织信赖本源。
首先运行以下命令关停所有正在运行的网络:
./network.sh down
应用 CA 参数启动网络:
./network.sh up -ca
执行命令胜利后,通过打印的 docker 容器能够看到启动了三个 CA,每个网络中的组织一个:
能够通过 tree
命令来查看 Org1 管理员用户的 MSP 文件夹构造和文件:
tree organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/
其中 signcerts
文件夹中寄存着管理员用户的证书,keystore
文件夹中寄存着私钥。
参考资料
- https://hyperledger-fabric.re…
扫码关注有惊喜!