您好,欢迎来到微智科技网。
搜索
您的当前位置:首页深入解析HyperledgerFabric搭建的全过程

深入解析HyperledgerFabric搭建的全过程

来源:微智科技网
深⼊解析HyperledgerFabric搭建的全过程

在这篇⽂章中,使⽤fabric-samples/first-network中的⽂件进⾏fabric⽹络(solo类型的⽹络)搭建全过程的解析。如有错误欢迎批评指正。⾄于Fabric⽹络的搭建这⾥不再介绍,可以参考这⼀篇⽂章fabric⽹络:单机,solo类型,两个组织,分别有两个节点⾸先看⼀下该⽂件夹内有哪些⽂件:

base connection-org2.json docker-compose-cli.yaml docker-compose-org3.yamlbyfn.sh connection-org2.yaml docker-compose-couch-org3.yaml eyfn.sh

channel-artifacts connection-org3.json docker-compose-couch.yaml org3-artifactsconfigtx.yaml connection-org3.yaml docker-compose-e2e-template.yaml README.mdconnection-org1.json crypto-config.yaml docker-compose-etcdraft2.yaml scriptsconnection-org1.yaml docker-compose-ca.yaml docker-compose-kafka.yaml将本次⽤不到的⽂件删除,剩余的⽂件:.

├── base

│ ├── docker-compose-base.yaml│ └── peer-base.yaml├── channel-artifacts├── configtx.yaml

├── crypto-config.yaml

├── docker-compose-cli.yaml├── docker-compose-couch.yaml

├── docker-compose-e2e-template.yaml

1.证书的⽣成

在Fabric⽹络环境中,第⼀步需要⽣成各个节点的证书⽂件,所⽤到的配置⽂件为crypto-config.yaml,说明⼀下⽂件内各字段的意义:OrdererOrgs: #定义⼀个Order组织

- Name: Orderer #order节点的名称,当前⽹络模式为solo类型,所以只定义了⼀个Order节点 Domain: example.com #order节点的域 Specs: #暂时⽤不到 - Hostname: orderer - Hostname: orderer2 - Hostname: orderer3 - Hostname: orderer4 - Hostname: orderer5

PeerOrgs: #定义Peer组织

- Name: Org1 #声明Peer组织名称为Org1 Domain: org1.example.com #Org1组织的域

EnableNodeOUs: true #节点组织单元,具体不了解,可以看crypto-config/peerOrganizations/*.example.com/msp/config.yaml⽂件了解 Template: #在这⾥可以定义所⽣成的Org1组织中的Peer节点证书数量,不包括Admin

Count: 2 #表明需要⽣成两个Peer节点的证书,如果需要其他数量的Peer节点,只需要更改这⾥的数量。 Users: #在这⾥可以定义所⽣成的Org1组织中类型为User的证书数量,不包括Admin Count: 1 #⽣成⽤户的证书的数量

- Name: Org2 #声明第⼆个Peer组织名称为Org2,如果需要更多的Peer组织证书,只需要按该模板添加即可。 Domain: org2.example.com #与以上相同 EnableNodeOUs: true Template: Count: 2 Users: Count: 1

我们这⾥就使⽤两个组织,每个组织分别有两个节点和⼀个User。接下来我们使⽤该⽂件⽣成对应数量的证书:#路径需要更改为⾃⼰的路径

cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/ #在这⾥可能会报错,通常是权限问题,可以添加sudo重新执⾏cryptogen generate --config=./crypto-config.yaml

#执⾏完毕后,当前⽂件夹下会出现⼀个新的⽂件夹:crypto-config,在该⽂件夹下就是刚刚⽣成的证书.⽂件夹内证书不再详解,会在另⼀篇⽂章中专门解释Fabric-ca的内容。2 ⽣成创世区块,通道配置,锚节点配置⽂件在这⾥需要⽤到configtxgen这个⼆进制⽂件。2.1⽣成创世区块#⾸先进⼊⽂件夹

cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/ #执⾏命令⽣成创世区块

configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block#如果没有channel-artifacts这个⽂件夹,则需要⼿动去创建

如果没有出现错误的话,在channel-artifacts⽂件夹中可以看⾄⽣成的genesis.block⽂件。2.2⽣成通道配置信息

#执⾏命令⽣成通道配置信息

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel同样,在channel-artifacts⽂件夹中可以看⾄⽣成的channel.tx⽂件。2.3⽣成锚节点配置⽂件

#⾸先⽣成Org1的锚节点配置⽂件

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP#⽣成Org2的锚节点配置⽂件

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP所有需要的配置⽂件全部建⽴完成,在channel-artifacts中应该有以下⼏个⽂件:channel.tx genesis.block Org1MSPanchors.tx Org2MSPanchors.tx3启动⽹络

到了这⼀步,可以启动⽹络了。

#⾸先进⼊``fabric-samples/first-network``⽂件夹。

cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/#启动容器

sudo docker-compose -f docker-compose-cli.yaml up -d执⾏以下命令查看容器是否启动成功:sudo docker ps

#如果可以看到如下信息说明启动成功

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES17d79586b1b7 hyperledger/fabric-tools:latest \"/bin/bash\" 30 seconds ago Up 28 seconds cli

0f4adb6b578e hyperledger/fabric-orderer:latest \"orderer\" 57 seconds ago Up 29 seconds 0.0.0.0:7050->7050/tcp orderer.example.com

e2795ea9d43b hyperledger/fabric-peer:latest \"peer node start\" 57 seconds ago Up 30 seconds 0.0.0.0:10051->10051/tcp peer1.org2.example.com247a6e4fdd62 hyperledger/fabric-peer:latest \"peer node start\" 57 seconds ago Up 30 seconds 0.0.0.0:9051->9051/tcp peer0.org2.example.comad4af3309e8c hyperledger/fabric-peer:latest \"peer node start\" 57 seconds ago Up 31 seconds 0.0.0.0:8051->8051/tcp peer1.org1.example.comf6d256b517 hyperledger/fabric-peer:latest \"peer node start\" 58 seconds ago Up 40 seconds 0.0.0.0:7051->7051/tcp peer0.org1.example.com3.1创建通道

创建通道需要进⼊cli容器:sudo docker exec -it cli bash#看到光标前的信息变为

root@17d79586b1b7:/opt/gopath/src/github.com/hyperledger/fabric/peer# #则成功进⼊容器⾸先配置环境变量:

#当前cli容器默认配置是节点peer0,所以不需要其他配置信息

ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem#创建通道信息

peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile $ORDERER_CA#看到如下信息说明创建通道成功

2019-06-20 13:05:55.829 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized2019-06-20 13:05:55.926 UTC [cli.common] readBlock -> INFO 002 Received block: 0

#将⽣成的⽂件移动到channel-artifacts⽂件夹中mv mychannel.block channel-artifacts/3.2加⼊通道

#因为当前cli容器使⽤的是peer0的配置,所以可以直接将peer0加⼊通道 peer channel join -b channel-artifacts/mychannel.block#更新环境变量使其他节点也加⼊通道

#=========peer1.org1=========== 注意这⾥端⼝要与上⾯⽂件中配置的端⼝号相同CORE_PEER_ADDRESS=peer1.org1.example.com:8051 peer channel join -b channel-artifacts/mychannel.block #=========peer0.org2============CORE_PEER_LOCALMSPID=\"Org2MSP\"

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crtCORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/mspCORE_PEER_ADDRESS=peer0.org2.example.com:9051peer channel join -b channel-artifacts/mychannel.block #=========peer1.org2=============

CORE_PEER_ADDRESS=peer1.org2.example.com:10051peer channel join -b channel-artifacts/mychannel.block#退出容器exit

3.3更新锚节点#重新进⼊容器

sudo docker exec -it cli bash#更新环境变量

ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem#========Org1================

peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.tx --tls true --cafile $ORDERER_CA#========Org2================#更新环境变量

CORE_PEER_LOCALMSPID=\"Org2MSP\"

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crtCORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/mspCORE_PEER_ADDRESS=peer0.org2.example.com:9051

peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile $ORDERER_CA#退出容器exit

3.4安装链码

#链码的安装仍然需要在所有节点上进⾏操作#进⼊容器

sudo docker exec -it cli bash#更新环境变量

ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem#=========peer0.org1===========

#这⾥很有可能会出现路径不存在的错误,解决⽅法是在容器内找到对应的链码所在位置,然后替换当前链码路径##⽐如本⽂中链码路径为/opt/gopath/src/github.com/chaincode/chaincode_example02/go##则可以将以下命令的链码路径更改为github.com/chaincode/chaincode_example02

peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02#实例化链码 该步骤创建了a,b两个账户,其中a账户余额定义为100,b账户余额定义为200

peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -v 1.0 -c '{\"Args\":[\"init\#这⼀步执⾏完毕后可以在其他节点上也安装链码,具体环境变量配置见本⽂中4.23.5调⽤链码

#以peer0.org1为例#⾸先进⼊cli容器

sudo docker exec -it cli bash

#执⾏以下命令进⾏查询a账户余额

peer chaincode query -C mychannel -n mycc -c '{\"Args\":[\"query\#如果命令⾏输出100说明链码成功调⽤.

#接下来我们发起⼀笔交易:通过peer0.org1节点将a账户余额转账给b20

peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -c '{\"Args\":[\"invoke\#然后登陆peer1.org1节点进⾏查询

CORE_PEER_ADDRESS=peer1.org1.example.com:8051

peer chaincode query -C mychannel -n mycc -c '{\"Args\":[\"query\#如果输出结果为:80

说明Fabric⽹络⼿动搭建成功#退出容器exit

最后关闭⽹络:

sudo docker-compose -f docker-compose-cli.yaml down --volumes #删除⽣成的⽂件,下次启动⽹络需要重新⽣成sudo rm -r channel-artifacts crypto-config4总结

本⽂并没有使⽤CouchDb作为fabric⽹络的数据库,准备放到下⼀篇多机搭建Fabric⽹络中⼀起讲解。到这⾥,整个⽹络的⼿动搭建过程已经完成,希望⼤家能够有所收获。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务