Hyperledger Fabric 2.x 环境搭建

标签: 区块链 区块链 Hyperledger Fabric | 发表时间:2022-01-23 19:52 | 作者:
出处:https://zlt2000.gitee.io/

一、说明

区块链网络的核心是分布式账本,在这个账本中记录了网络中发生的所有交易信息。

Hyperledger Fabric是一个是开源的,企业级的,带权限的分布式账本解决方案的平台。Hyperledger Fabric由模块化架构支撑,并具备极佳的保密性、可伸缩性、灵活性和可扩展性。Hyperledger Fabric被设计成支持不同的模块组件直接拔插启用,并能适应在经济生态系统中错综复杂的各种场景。

本文分享在 Centos下搭建 Hyperledger Fabric 2.4 环境并进行简单的网络测试。

 

二、环境准备

2.1. 环境依赖

  • Git 客户端
  • Golang 1.17.5以上版本
  • Docker 18.03以上版本

 

2.2. 检查环境

Docker版本

1     
docker -v     

 

Golang语言环境

1     
go version     

 

三、Fabric 源码安装

3.1. 创建目录

在 GOPATH 目录下创建 Fabric 的文件夹:

1     
mkdir -p $GOPATH/src/github.com/hyperledger     

 

3.2. 下载源码

1     
2
3
cd $GOPATH/src/github.com/hyperledger     

git clone https://gitee.com/hyperledger/fabric.git

这里使用国内的码云的镜像仓库

 

3.3. 修改安装脚本

如果本地网络访问github顺畅可以忽略该步骤

编辑 bootstrap.sh 文件

1     
vim $GOPATH/src/github.com/hyperledger/fabric/scripts/bootstrap.sh     
  1. https://github.com/hyperledger/fabric-samples.git 修改为 https://gitee.com/hyperledger/fabric-samples.git

  1. 注释 pullBinaries

 

3.4. 执行安装脚本

1     
./bootstrap.sh     

如下图所示,脚本执行成功之后会下载一个 fabric-samples 工程和一堆fabric的docker镜像:


 

分别手动下载 fabricfabric-ca 编译后的压缩包,存放在 fabric/scripts/ 目录下:

由于码云镜像仓库的发布包只有源码,我们需要编译后的所以只能想办法去github下载。

https://github.com/hyperledger/fabric/releases/download/v2.4.1/hyperledger-fabric-linux-amd64-2.4.1.tar.gz

https://github.com/hyperledger/fabric-ca/releases/download/v1.5.2/hyperledger-fabric-ca-linux-amd64-1.5.2.tar.gz

压缩压缩包,得到 binconfig 两个文件夹:

1     
2
3
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 目录中

1     
2
cp -r bin fabric-samples/     
cp -r config fabric-samples/

 

四、启动test-network测试网络

进入test-network目录

1     
cd $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network     

执行以下命令:

1     
./network.sh up     

如果出现下图的报错:

则需要修改 docker-compose 的版本,在test-network目录下分别编辑以下文件:

1     
2
3
4
5
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' 如下图所示:

修改完配置后,重新执行:

1     
./network.sh up     

如下图所示,已成功启动一个 orderer节点 和两个 peer节点

至此一个基于 Hyperledger Fabric 的测试网络就搭建完成了。

 

五、测试网络使用

可以执行以下命令打印脚本的帮助文本:

1     
./network.sh -h     

5.1. 创建Channel

现在我们的机器上正在运行对等节点和排序节点, 我们可以使用脚本创建用于在Org1和Org2之间进行交易的Fabric通道。

Fabric channel 是特定网络成员之间的专用通信层,通道只能由被邀请加入通道的组织使用,并且对网络的其他成员不可见。 每个通道都有一个单独的区块链账本,被邀请的组织“加入”他们的对等节点来存储其通道账本并验证交易,建立一个通道相当于建立了一个子链。

使用network.sh脚本在Org1和Org2之间创建通道并加入他们的对等节点,执行以下命令创建一个通道:

1     
./network.sh createChannel     

如下图所示创建成功后默认名称为 mychannel

可使用 -c 来指定通道名称,以下命令将创建一个名为 channel1 的通道:

1     
./network.sh createChannel -c channel1     

 

5.2. 在通道启动一个链码

创建通道后,可以开始使用智能合约与通道账本交互。智能合约包含管理区块链账本上资产的业务逻辑,由成员运行的应用程序网络可以在账本上调用智能合约创建,更改和转让这些资产,应用程序还通过智能合约查询,以在分类账上读取数据。

在Fabric中,智能合约作为链码以软件包的形式部署在网络上。链码安装在组织的对等节点上,然后部署到某个通道,然后可以在该通道中用于认可交易和区块链账本交互。在将链码部署到通道前,该频道的成员需要就链码定义达成共识,建立链码治理。何时达到要求数量的组织同意后,链码定义可以提交给通道,并且可以使用链码了。

创建频道后,可以使用network.sh脚本在通道上启动链码:

1     
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-java -ccl java     
  • -ccn:为指定链码名称
  • -ccl:为指定链码语言

deployCC 子命令将在 peer0.org1.example.compeer0.org2.example.com 上安装 asset-transfer-basic 链码,如果第一次部署链码,脚本将安装链码的依赖项。默认情况下,脚本安装Go版本的 asset-transfer-basic 链码,可以通过参数 -ccl 来安装 Java 或 javascript 版本的链码。

 

5.3. 与网络交互

在启用测试网络后,可以使用 peer cli 客户端与网络进行交互,通过 peer cli 客户端可以调用已部署的智能合约,更新通道,或安装和部署新的智能合约。

首先确保操作目录为test-network目录,比如我的目录是:

以下操作需确保在 test-network 目录中进行操作:

执行以下命令将cli客户端添加到环境变量中:

1     
export PATH=${PWD}/../bin:$PATH     

还需要将fabric-samples代码库中的FABRIC_CFG_PATH设置为指向其中的core.yaml文件:

1     
export FABRIC_CFG_PATH=$PWD/../config/     

设置允许org1操作peer cli的环境变量:

1     
2
3
4
5
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/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051

CORE_PEER_TLS_ROOTCERT_FILECORE_PEER_MSPCONFIGPATH 环境变量指向Org1的 organizations 文件夹中的的加密材料。

执行以下命令用一些资产来初始化账本:

1     
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 如下图所示:

执行以下指令来查询通道账本中的资产列表:

1     
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'     

 

六、关闭网络

使用完测试网络后,可执行以下命令关闭网络:

1     
./network.sh down     

该命令将停止并删除节点和链码容器,删除组织加密材料,并从Docker Registry移除链码镜像,另外还会删除之前运行的通道项目:

 

七、使用认证机构创建网络

Hyperledger Fabric使用公钥基础设施(PKI)来验证所有网络参与者的行为。 每个节点,网络管理员和用户提交的交易需要具有公共证书和私钥以验证其身份。

默认情况下,脚本使用cryptogen工具创建证书和密钥,该工具用于开发和测试,并且可以快速为具有有效根信任的Fabric组织创建所需的加密材料。

测试网络脚本还提供了使用证书颁发机构(CA)的网络的启动选项。在网络中每个组织操作一个CA(或多个中间CA)来创建属于他们的组织身份,所有由该组织运行的CA创建的身份享有相同的组织信任根源。

首先运行以下命令关停所有正在运行的网络:

1     
./network.sh down     

使用CA参数启动网络:

1     
./network.sh up -ca     

执行命令成功后,通过打印的docker容器可以看到启动了三个CA,每个网络中的组织一个:

可以通过 tree 命令来查看Org1管理员用户的MSP文件夹结构和文件:

1     
tree organizations/peerOrganizations/org1.example.com/users/[email protected]/     

其中 signcerts 文件夹中存放着管理员用户的证书, keystore 文件夹中存放着私钥。

 

参考资料

相关 [hyperledger fabric 环境] 推荐:

Hyperledger Fabric 2.x 环境搭建

- - 陶陶技术博客
区块链网络的核心是分布式账本,在这个账本中记录了网络中发生的所有交易信息. Hyperledger Fabric是一个是开源的,企业级的,带权限的分布式账本解决方案的平台. Hyperledger Fabric由模块化架构支撑,并具备极佳的保密性、可伸缩性、灵活性和可扩展性. Hyperledger Fabric被设计成支持不同的模块组件直接拔插启用,并能适应在经济生态系统中错综复杂的各种场景.

Hyperledger Fabric V1.0 环境搭建 - 个人文章 - SegmentFault

- -
学习区块链技术有段时间了,刚好晚上有空把超级账本子项目fabric v1.0部署运行及开发环境的搭建过程整理下,编写的内容主要参照官方文档. 由于fabric项目目前还处于孵化阶段,正式版本预计5月份才会到来. 近期官方示例和文档也频繁更新中,本文内容主要基于源码中 “examples” 和 “devenv” 来完成fabric入门示例的快速部署运行和统一开发环境的搭建.

Hyperledger Fabric V1.0 跳坑玩耍

- - SegmentFault 最新的文章
       最近有个项目需要用到超级账本的概念,随后在网上查阅相关的信息. 最后相中了 Fabric作为实验玩耍的目标. 要玩就要玩最新的啦,所以舍弃了v0.6的版本,但是截至这篇文章摸出来,v1.0还处于alpha阶段. 以下环境的搭建步骤很大一部分来自于 hyperledger-fabric.readthedocs.io,英语好的同学也可以直接看那边的教程.

Hyperledger Fabric 核心概念

- - 陶陶技术博客
区块链是一个透明的,基于不可变模式的去中心化系统,核心就是一个分布式账本,记录网络上发生的所有交易. 区块链网络主要有三种类型:公共区块链、联盟区块链,以及私有区块链;我们熟知的比特币、以太坊这些数字货币其实就是属于公共区块链平台;. 而今天要介绍的 Fabric 则是属于联盟链类型的;Fabric是一个企业级的分布式账本技术平台,也是目前应用最广泛的区块链项目.

Hyperledger Fabric 1.0,基于区块链的分布式账本

- - 开源中国社区最新新闻
由 Linux 基金会发起创建的开源区块链分布式账本 —— Hyperledger Fabric,已经迎来了 1.0 版本. 该项目着重于性能和可靠性,以及推动区块链和分布式账本技术的跨行业协作. Hyperledger Fabric 可用于全球供应链管理、金融交易、资产账和去中心化的社交网络等场景,但无意以此来构建一种加密货币.

[原]区块链开源实现hyperledger fabric架构详解

- - 陶辉的专栏
hyperledger fabric是区块链中联盟链的优秀实现,主要代码由IBM、Intel、各大银行等贡献,目前v1.1版的kafka共识方式可达到1000/s次的吞吐量. 本文中我们依次讨论:区块链的共通特性、fabric核心概念、fabric的交易执行流程. 本文来源于笔者欲对公司部分业务上链而进行培训的PPT,故图多文字少,不要怕太长.

Fabric批量远程执行操作

- - CSDN博客推荐文章
最近有个需求就是要在一个集群的多个机器上运行一些命令,比如启动、停止服务,运行一些脚本收集一些数据等,于是找到了python的一个框架Fabric. Fabric是一个Python库,用于简化使用SSH的应用程序部署或系统管理任务. 它提供的主要功能包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入、中止执行等.

配置 fabric 穿越跳板机

- - 膘叔
在转这篇文章的时候,我觉得 很懒,所以我几乎没有排版就直接ctrl+c,ctrl+v就过来了. 下面是正文,链接来源是:https://mozillazg.com/2013/12/python-fabric-gateway.html. 说实话,跳板机给研发的日常工作添加了些许麻烦. 幸好 fabric 提供了穿越跳板机的功能,使跳板机不再影响我们的工作.

基于fabric和hg的自动化部署

- - CSDN博客推荐文章
fabric是个很好用的自动化部署工具,虽然功能比起puppet,saltstack之类要弱一些,但胜在用python,而且免安装服务端. 当然你要说docker更好我也同意,然而我是经常使用FreeBSD的,而且还有一些32位的低配系统,并不适合用docker. 自动化部署的目的主要是简化手工部署的麻烦,包括初次安装部署和代码修改后的更新部署.

Twitter推移动应用开发工具Fabric 阿里百度已在用

- - TechWeb 今日焦点 RSS阅读
Twitter推移动应用开发工具Fabric 阿里百度已在用. 【TechWeb报道】10月23日消息,据国外媒体报道,Twitter周三发布了一款免费的移动应用开发者工具包——Fabric,旨在帮助开发者更好地编程以及增加公司收益. Twitter周三召开了首届面向移动应用开发者的“一对多消息服务”大会,并在会上推出了Fabric平台.