HyperLeger Fabric开发(二)——HyperLeger Fabric入门

HyperLeger Fabric开发(二)——HyperLeger Fabric入门

本文使用RHEL 7.3 workstation版本操作系统。

一、HyperLeger Fabric环境部署

1、Go语言开发环境部署

(1)Go语言环境安装
Go语言环境安装包下载地址:
https://golang.org/dl/
https://golang.google.cn/dl/
将下载的源码包解压至/usr/local目录
sudo tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz
将/usr/local/go/bin目录添加至PATH环境变量
export PATH=$PATH:/usr/local/go/bin
(2)GOPATH环境变量设置

GOPATH=/home/user/GoLang:/home/user/dev
export GOPATH

为了使用方便,通常需要将所有工作空间的bin路径添加到PATH环境变量中,如:
export $PATH:$GOPATH/bin
如果$GOPATH有多个工作目录,使用?${GOPATH//://bin:}/bin?添加所有的bin目录。
export $PATH:${GOPATH//://bin:}/bin

2、Docker工具安装

yum install docker

3、HyperLeger Fabric下载

GitHub地址:https://github.com/hyperledger/fabric
(1)go get下载
使用Go语言工具go get从HyperLeger Fabric项目的GitHub地址下载HyperLeger Fabric:
go get -u -v github.com/hyperledger/fabric
(2)git clone下载
HyperLeger Fabric项目大小约76MB,如果使用go get工具下载速度慢,可以使用git clone下载:
创建hyperledger目录:
mkdir -p $GOPATH/src/github.com/hyperledger
切换到hyperledger目录:
cd $GOPATH/src/github.com/hyperledger
git clone下载:
git clone https://github.com/hyperledger/fabric.git

二、HyperLeger Fabric工具部署

1、HyperLeger Fabric版本切换

进入HyperLeger Fabric项目所在源码目录:
cd $GOPATH/src/github.com/hyperledger/fabric
切换到release-1.0版本:
git checkout release-1.0

2、configtxgen工具安装

configtxgen工具用于生成Fabric的配置构件。
切换到configtxgen目录:
cd common/configtx/tool/configtxgen
编译安装:
go install
报错:
fatal error: ltdl.h: No such file or directory
安装Itdl:
yum install libtool-ltdl-devel
继续编译安装:
go install
目标工具被安装到$GOPATH/bin目录下。

3、cryptogen工具安装

cryptogen工具用于生成Fabric证书和密钥。
切换到cryptogen源码目录:
cd common/tools/cryptogen
编译安装:
go install
目标工具被安装到$GOPATH/bin目录下。

三、部署第一个Fabric网络

1、fabric-samples项目下载

fabric-samples项目包含first-network等HyperLeger Fabric项目的多个示例。
https://github.com/hyperledger/fabric-samples.git
下载fabric-samples项目到$GOPATH/src/github.com/hyperledger:
git clone https://github.com/hyperledger/fabric-samples.git

2、切换到first-network示例源码目录

切换到first-network示例:
cd $GOPATH/src/github.com/hyperledger/fabric-samples/first-network
切换到release-1.0版本:
git checkout release-1.0
first-network源码目录如下:

first-network示例即BYFN(build your first network),BYFN方案规定了一个由两个组织组成的简单HyperLeger Fabric网络,每个组织维护有两个对等节点和一个solo排序服务。
byfn.sh脚本利用Docker镜像快速引导BYFN(build your first network)示例网络,BYFN网络由代表两个不同组织的4个对等节点和一个排序节点组成。 byfn.sh脚本会启动容器运行一个脚本,脚本用于将对等节点加入一条通道,部署和实例化链码,并驱动在部署的链码上执行交易。

3、生成BYFN示例网络构件

byfn.sh脚本提供了生成网络构件的功能,用于生成不同网络实体的所有证书和密钥,用于引导排序服务的创始块以及配置通道所需的交易配置的集合。命令如下:
./byfn.sh -m generate -c scorpio -i 1.0.0
byfn.sh -m generate:使用cryptogen和configtxgen生成网络构件
-c:指定通道名称
-i:指定版本

[[email protected] first-network]$ ./byfn.sh -m generate -c scorpio -i 1.0.0
Generating certs and genesis block for with channel ‘scorpio‘ and CLI timeout of ‘10‘
Continue (y/n)? y
proceeding ...
/home/user/GoLang/bin/cryptogen

##########################################################
##### Generate certificates using cryptogen tool #########
##########################################################
org1.example.com
org2.example.com

/home/user/GoLang/bin/configtxgen
##########################################################
#########  Generating Orderer Genesis block ##############
##########################################################
2018-10-21 15:52:45.442 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.467 CST [common/configtx/tool] doOutputBlock -> INFO 002 Generating genesis block
2018-10-21 15:52:45.469 CST [common/configtx/tool] doOutputBlock -> INFO 003 Writing genesis block

#################################################################
### Generating channel configuration transaction ‘channel.tx‘ ###
#################################################################
2018-10-21 15:52:45.479 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.482 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2018-10-21 15:52:45.482 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx

#################################################################
#######    Generating anchor peer update for Org1MSP   ##########
#################################################################
2018-10-21 15:52:45.494 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.497 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-10-21 15:52:45.498 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

#################################################################
#######    Generating anchor peer update for Org2MSP   ##########
#################################################################
2018-10-21 15:52:45.508 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.513 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-10-21 15:52:45.513 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

cryptogen用于为各种网络实体生成加密材料(x509证书和签名密钥)。x509证书代表身份/标识,允许在实体进行通信和交易时进行签名/验证身份验证。
cryptogen(fabric证书/密钥生成工具)使用一个配置文件crypto-config.yaml(包含网络拓扑)为组织和属于组织的组件(peer/orderer)生成一组证书和密钥。每个组织都配置了一个唯一的根证书(ca-cert),用于将特定组件(peer和orderer)绑定到组织。通过为每个组织分配唯一的CA证书,可以模仿典型的网络,网络中的成员将使用其自己的证书颁发机构。 Hyperledger Fabric中的交易和通信由实体的私钥(密钥库)签名,然后通过公钥(签名)进行验证。
cryptogen工具生成的证书和密钥将保存到crypto-config目录,目录结构如下:

configtxgen使用一个configtx.yaml文件,configtx.yam定义了一个示例网络,网络中有一个排序服务组织OrdererOrg以及两个对等节点组织(Org1,Org2),每个组织管理和持有2个对等节点。configtx.yam文件还指定了一个SampleConsortium的联盟,由2个对等节点组织构成。需要特别注意文件顶部的Profiles部分,有两个唯一的头部信息,一个是排序节点的创世区块TwoOrgsOrdererGenesis,一个是通道TwoOrgsChannel。这两个头部信息会在创建网络构件时作为参数。
configtx.yaml文件也包含两个需要的额外规格说明。首先,指定了两个对等节点组织的对等节点(peer0.org1.example.com,peer0.org2.example.com);其次,指明了每个成员的MSP目录位置(MSPDir指定),从而允许在排序节点的创世块中存储每个组织的根证书。目前,任何网络实体和排序服务通信都必须要进行数字签名认证。

4、启动BYFN示例

启动first-network,使用-i参数指定版本为1.0.0:
./byfn.sh -m up -c scorpio -i 1.0.0
byfn.sh -m up:启动BYFN示例
首次启动first-network时,会从Docker镜像仓库下载下列三个镜像:

docker.io/hyperledger/fabric-orderer:x86_64-1.0.0
docker.io/hyperledger/fabric-peer:x86_64-1.0.0
docker.io/hyperledger/fabric-tools:x86_64-1.0.0

5、关闭BYFN示例

./byfn.sh -m down -c scorpio
用于关闭BYFN网络,会关闭容器,移除加密材料和4个配置信息,并且从Docker仓库删除链码镜像。

7、故障排除

再次启动BYFN网络示例前,必须先关闭BYFN网络,删除生成的证书、容器、网络构件以及链码镜像等。如果不关闭BYFN网络,将会导致创建通道失败。错误如下:

!!!!!!!!!!!!!!! Channel creation failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========

原文地址:http://blog.51cto.com/9291927/2307159

时间: 2024-10-02 18:29:02

HyperLeger Fabric开发(二)——HyperLeger Fabric入门的相关文章

HyperLeger Fabric SDK开发(二)——Fabric SDK配置

HyperLeger Fabric SDK开发(二)--Fabric SDK配置 一.Fabric SDK配置 Fabric区块链网络应用程序需要大量的参数,用于连接Fabric区块链网络.通常将Fabric区块链网络应用程序所需的参数放到一个配置文件进行管理,配置文件定义Fabric SDK Go的配置和用户自定义参数,指定了连接Fabric区块链网络所需的全部信息,例如Fabric区块链网络组件的主机名和端口等.Fabric SDK GO为应用程序提供的配置文件通常使用yaml文件格式编写,

HyperLeger Fabric开发(一)——HyperLeger简介

HyperLeger Fabric开发(一)--HyperLeger简介 一.HyperLeger简介 1.HyperLeger简介 Hyperledger(超级账本)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,目标是让成员共同合作,共建开放平台,满足来自多个不同行业各种用户案例,并简化业务流程.由于点对点网络的特性,分布式账本技术是完全共享.透明和去中心化的,故非常适合于在金融行业的应用,以及其它的例如制造.银行.保险.物联网等行业.通过创建分布式账本的公开标准

HyperLeger Fabric开发(三)——HyperLeger Fabric架构

HyperLeger Fabric开发(三)--HyperLeger Fabric架构 一.HyperLeger Fabric架构简介 1.通道简介 商业应用的一个重要的需求是私密×××易,为此Fabric设计了通道(Channel)来提供成员之间的隐私保护.通道是部分网络成员之间拥有独立的通信渠道,在通道中发送的交易只有属于通道的成员才可见,因此通道可以看作是Fabric的网络中部分成员的私有通信子网.通道由排序服务管理.在创建通道的时候,需要定义通道的成员和组织.锚节点(anchor pee

HyperLeger Fabric开发(四)——HyperLeger Fabric共识机制

HyperLeger Fabric开发(四)--HyperLeger Fabric共识机制 一.Fabric共识过程 1.Fabric共识过程 Fabric区块链的网络节点本质上是互相复制的状态机,节点之间需要保持相同的账本状态.为了实现分布式节点的一致性,各个节点需要通过共识过程,对账本状态的变化达成一致性的认同.Fabric区块链的共识过程包括3个阶段:背书.排序和校验. 2.背书 在背书(endorsement)阶段中,背书节点对客户端发来的交易提案进行合法性校验,然后模拟执行链码得到交易

HyperLeger Fabric开发(五)——HyperLeger Fabric账本存储

HyperLeger Fabric开发(五)--HyperLeger Fabric账本存储 一.HyperLeger Fabric账本简介 Fabric里的数据以分布式账本的形式存储.账本由一系列有顺序和防篡改的记录组成,记录包含着数据的全部状态改变.账本中的数据项以键值对的形式存放,账本中所有的键值对构成了账本的状态,也称为世界状态(World State).?每个通道中有唯一的账本,由通道中所有成员共同维护着账本,每个记账节点上都保存了所属通道的账本的一个副本,因而是分布式账本.对账本的访问

HyperLeger Fabric开发(六)——HyperLeger Fabric智能合约(链码)

HyperLeger Fabric开发(六)--HyperLeger Fabric智能合约(ChainCode) 一.链码(Chaincode)简介 1.链码简介 在Fabric中,智能合约也称为链码(chaincode),分为用户链码和系统链码.系统链码用来实现系统层面的功能,包括系统的配置,用户链码的部署.升级,用户交易的签名和验证策略等:用户链码用于实现用户的应用功能,开发者编写链码应用程序并将其部署到区块链网络上,终端用户通过与网络节点交互的客户端应用程序调用链码.链码被编译成一个独立的

HyperLeger Fabric开发(七)——HyperLeger Fabric链码开发

HyperLeger Fabric开发(七)--HyperLeger Fabric链码开发 一.链码开发模式 1.链码开发模式简介 Fabric的链码开发调试比较繁琐.在不使用链码开发模式的情况下,链码不能在本地测试,必须部署到docker,install和instantiate后,Peer节点会在新的容器中启动链码.但只能通过docker logs查看链码日志,通过打印日志的方式进行链码调试.如果对链码进行了修改,需要重新开始上述流程.为了简化Fabric链码开发的调试过程,Fabric引入了

HyperLeger Fabric开发(八)——HyperLeger Fabric链码开发测试

HyperLeger Fabric开发(八)--HyperLeger Fabric链码开发测试 一.链码实例 SACC项目链码实例如下: package main import ( "fmt" "github.com/hyperledger/fabric/core/chaincode/shim" "github.com/hyperledger/fabric/protos/peer" ) // SimpleAsset implements a si

HyperLeger Fabric开发(九)——HyperLeger Fabric部署实战(单机)

HyperLeger Fabric开发(九)--HyperLeger Fabric部署实战(单机) 系统环境:RHEL 7.3操作系统Fabric release 1.3 一.crypto-config.yaml文件 1.Orderer节点组织 (1)单节点 OrdererOrgs: - Name: Orderer Domain: example.com Specs: - Hostname: orderer (2)多节点 OrdererOrgs: ??- Name: Orderer ????Do