Hyperledger Fabric 2.x 环境搭建

一、说明
区块链网络的核心是分布式账本,在这个账本中记录了网络中发生的所有交易信息。
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下载。

压缩压缩包,得到 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 文件夹中存放着私钥。
参考资料
扫码关注有惊喜!

Hyperledger Fabric 2.x 环境搭建的更多相关文章
- Hyperledger fabric 1.4 环境搭建(一)
Hyperledger fabric 1.4 环境搭建(一) 1.更换下载源 更换apt的下载源,因为官方下载源很慢,需要更换到国内的镜像站 1.1.进入/etc/apt/目录 cd etc/apt ...
- 基于docker的 Hyperledger Fabric 多机环境搭建(上)
环境:ubuntu 16.04 Docker 17.04.0-ce go 1.7.4 consoul v0.8.0.4 ======================================= ...
- 基于docker的 Hyperledger Fabric 多机环境搭建(下)
Docker环境部署见上一篇博客:http://www.cnblogs.com/cnblogs-wangzhipeng/p/6994541.html. 我们部署分布式容器服务后就要在上面部署Fabri ...
- Ubuntu下搭建Hyperledger Fabric v1.0环境
多次尝试才正常启动了Fabric,如遇到各种莫名错误,请参考如下一步步严格安装,特别用户权限需要注意. 一.安装Ubuntu16 虚拟机或双系统,虚拟机有VirtualBox或者VMware,Ub ...
- Hyperledger Fabric1.4 网络环境搭建步骤
1. 外部访问虚拟机: 安装ssh apt-get install openssh-server openssh-client 2. 安装vim sudo apt install vim 3. ...
- Hyperledger Fabric 1.0 学习搭建 (四)--- 创建Fabric多节点集群
4.1.配置说明 首先可以根据官方Fabric自带的e2e_cli列子中的集群方案来生成我们自己的集群,与案例不同的是我们需要把容器都分配到不同的服务器上,彼此之间通过网络来进行通信,网络构建完成后则 ...
- Hyperledger Fabric 1.0 学习搭建 (三)--- 运行测试e2e-Fabric
3.1.运行fabric-samples的问题说明 该问题说明能够解决6.1.平台特定使用的二进制文件配置第一步的问题.可以选择继续阅读该说明,或者等参考到6.1小节时再反向阅读本说明,具体在6.1中 ...
- Hyperledger Fabric 1.0 学习搭建 (二)--- 源码及镜像文件处理
2.1下载Fabric源码下载Fabric源码是因为要用到源码中提到的列子和工具, 工具编译需要用到go语言环境, 因此需要把源码目录放到$GOPATH下. 通过1.3中go的安装配置, $GOPAT ...
- Hyperledger Fabric 1.0 学习搭建 (五)--- 启动Fabric多节点集群
5.1.启动orderer节点服务 上述操作完成后,此时各节点的compose配置文件及证书验证目录都已经准备完成,可以开始尝试启动多机Fabric集群. 首先启动orderer节点,切换至order ...
- Hyperledger Fabric 1.0 学习搭建 (一)--- 基础环境搭建
1: 环境构建在本文中用到的宿主机环境是Centos ,版本为Centos.x86_64 7.2, 一定要用7版本以上, 要不然会安装出错. 通过Docker 容器来运行Fabric的节点,版本为v1 ...
随机推荐
- 授权调用: 介绍 Transformers 智能体 2.0
简要概述 我们推出了 Transformers 智能体 2.0! ⇒ 在现有智能体类型的基础上,我们新增了两种能够 根据历史观察解决复杂任务的智能体. ⇒ 我们致力于让代码 清晰.模块化,并确保最终提 ...
- nginx的11个阶段
nginx处理请求的11个阶段 阶段 模块 第一阶段 POST_READ realip 第二阶段 SERVER_REWRITE rewrite 第三阶段 FIND_CONFIG 第四阶段 REWRIT ...
- github加速与添加ssh密钥
part1-github加速 此处推荐Fetch GitHub Hosts,文章的中间位置有手动添加dns的内容,十分完备,此处不赘述.不知道是不是我家网络抽风,总是得代理才能进githubQAQ难受 ...
- 大厂边缘组VS小厂核心组,要怎么选?
有问必答 最近有粉丝提问:大厂边缘组VS小厂核心组,怎么选? 这确实是个好问题,读者老爷们可以先问下自己:如果有一份月薪2W在大厂边缘组打螺丝的Offer且不加班,另外还有一份月薪2W5,在小厂核心组 ...
- Linux扩展篇-shell编程(十一)- shell编程工具-VS Code
根据个人多年工作经验,shell没有自己专用的IDE,使用vim开发,对于新手而言不太友好,那如何高效快速书写shell脚本?合适的工具就显得尤为重要,本人比较推荐的就是VS Code.里面有比较成熟 ...
- 机器学习决策树ID3算法,python实现代码
机器学习决策树ID3算法,python实现代码 看到techflow介绍ID3算法,中间有代码示例.代码尝试执行力下,发现有错误. https://www.cnblogs.com/techflow/p ...
- 铭瑄B760 ITX 无法睿频 无法跑满
铭瑄B760 ITX 无法睿频 无法跑满 状况: 铭瑄B760 ITX + 12600K,跑分时,大核最高 3.7GHz,电压也不到1V.CPU-Z 跑分才600. 解决方法: 1.关机. 2.长按 ...
- C#.NET ASP.NET IIS 加载.pfx私钥证书时报错“出现了内部错误。”
C#.NET ASP.NET IIS 加载.pfx私钥证书时报错"出现了内部错误." 原始代码报错: X509Certificate2 x509cer = new X509Cert ...
- 什么是JDBC,在上面时候会用到它?
JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库.JDBC接口及相关类在java.sql包和javax.sql包里.我们可以用 ...
- Java中常见的几种的溢出
引言 在开发过程中,因为编程经验不足,经常会导致各种各样的溢出,今天本文就举例说明几种常见的溢出 堆溢出 堆溢出是最常见的一种溢出. 导致原因:堆中没有足够的空间储存新生成的实例对象 public s ...