一、说明

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

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/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

压缩压缩包,得到 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:{PWD}/../bin: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.crtexportCOREPEERMSPCONFIGPATH={PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_MSPCONFIGPATH=PWD/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crtexportCOREP​EERM​SPCONFIGPATH={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.readthedocs.io/en/latest/whatis.html

Hyperledger Fabric 2.x 环境搭建相关推荐

  1. 基于docker的 Hyperledger Fabric 多机环境搭建(上)

    环境:ubuntu 16.04 Docker  17.04.0-ce go 1.7.4 consoul v0.8.0.4 ======================================= ...

  2. hyperledger fabric v2.4环境搭建及区块链项目开发

    基础环境配置,不再详细描述:学习交流可联系博主. 安装go 安装docker 安装docker-compose 清空历史docker images docker system prune --all ...

  3. Hyperledger Fabric 2.4环境搭建部署及示例运行

    Hyperledger Fabric目前最新发布版本为2.4,本文将详细介绍Hyperledger Fabric 2.4的环境搭建步骤,并介绍结合fabric2.4完成的具体区块链项目实例,使用jav ...

  4. 超级记账本学习笔记:Hyperledger Fabric 1.0环境搭建,及运行e2e的问题

    嗯,虽然Hyperledger Fabric1.1.0版本已经发布了,但是我没搭起来,哈哈哈哈. 但是Hyperledger Fabric 1.0搭建成功了,嗯,还是很高兴的. 这篇文章是基于以下文章 ...

  5. 【超级账本】Fabric介绍及其环境搭建(一)

    目录 前言 1. fabric 介绍 1.1 fabric和以太坊的区别 1.2 身份管理介绍 1.3 账本:每个节点中都有 1.4 交易管理介绍 1.5 节点介绍 1.6 通道介绍–channel ...

  6. Hyperledger Fabric区块链浏览器搭建

    最近在用Hyperledger Fabric平台做一个项目,要使用区块链浏览器.以下是我的基础环境的情况以及搭建过程. 版本 Ubuntu 22.04.1 LTS 运行内存 8.0 GiB 处理器 I ...

  7. 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

    Hyperledger Composer使用教程 基本概念介绍 1. 欢迎来到Hyperledger作曲家 Hyperledger Composer是一个广泛的,开放的开发工具集和框架,可以使开发区块 ...

  8. Ubuntu 16.04下 hyperledger fabric1.0 网络环境搭建过程

    环境: windows10 + VirtualBox 6.1.0 + Ubuntu16.04.6 参考教程: https://blog.csdn.net/smallone233/article/det ...

  9. Hyperledger Fabric 1.0 快速搭建 -------- 多机部署 Fabric CA节点服务

    前言 在这里我推荐两位大神的博客,可以参考或者直接跟着这两位大神学习,我是阅读这两位大神的博客和<深度探索区块链Hyperledger技术与应用>一书部署的 <深度探索区块链Hype ...

  10. Hyperledger indy MacOS indy-node环境搭建(VirtualBox 版本)

    VirtualBox下载 https://www.virtualbox.org/wiki/Downloads Vagrant下载 https://www.vagrantup.com/downloads ...

最新文章

  1. D~信息学/计算机专业操作
  2. myeclipse java maven web 项目结构,Myeclipse 10 Maven 构建 Java Web 项目
  3. java scanner 类_Java Scanner类
  4. 1006: 组合的输出(dfs的一种用法)(与排列类似)
  5. 20155324 《信息安全系统设计基础》课程总结
  6. 远程控制软件teamviewer简介
  7. 《华为研发》阅读 - 13
  8. 2022-2028全球及中国薪酬管理系统行业研究及十四五规划分析报告
  9. 28岁的他如何从运营转岗产品经理
  10. RESB 0x7dfe-$ 报错
  11. 一步步学习改变思维习惯
  12. Java 中XO 的概念
  13. 优矿量化实验室———转自知乎
  14. 全球区块链理事会(GBBC)成立中国分会,开启新篇章
  15. 使用Guardium和Privileged Identity Manager(PIM)缓解内部威胁
  16. mAPI(商户用API) v1.1发布
  17. 生物信息学(高通量测序)名词
  18. Redist过期策略、应用、持久化
  19. delphi for php 教学视频,Delphi for PHP 的遗憾
  20. 写一个excel文档资源小程序(更新中)

热门文章

  1. html转成高清pdf,Javascript实现html转pdf高清版(提高分辨率)
  2. ttl低电平接大电阻_电压不稳定?那是你不懂上拉/下拉电阻原理,5分钟教你应用!...
  3. USYD悉尼大学DATA1002 详细作业解析Module5
  4. 算法成华纳旗下歌手?背景音乐经济
  5. java各位数字补位,左边补0
  6. 一些有趣但少有人知的 Python 特性
  7. 09SpringBoot web 错误处理
  8. virt-install安装虚拟机
  9. 云e办学习笔记(二十七)邮件自动发送功能实现
  10. nginx 的proxy 时间讲解