前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Hyperledger Fabric 网络构建

Hyperledger Fabric 网络构建

作者头像
R0A1NG
发布2022-02-19 09:40:39
发布2022-02-19 09:40:39
74500
代码可运行
举报
文章被收录于专栏:R0A1NG 技术分享R0A1NG 技术分享
运行总次数:0
代码可运行
1.生成认证证书

需要复制crypto-config.yaml到目录

代码语言:javascript
代码运行次数:0
复制
cryptogen generate --config=./crypto-config.yaml

在当前目录下自动生成crypto-config目录,里边存放了所有的证书与密钥,为MSP 提供服务 Name:组织名称 Domain:组织域名 Specs: ​ -Hostname:自定义节点名称 Template:使用模板定义节点名称 peer($Count +1) ​ -Count:节点数量 Users:用户名称 user$Count ​ - Count:用户数量

2.生成起始区块

需要复制configtx.yaml到目录

代码语言:javascript
代码运行次数:0
复制
mkdir channel-artifacts
代码语言:javascript
代码运行次数:0
复制
configtxgen -profile TwoOrgsOrdererGenesis -channelID sys-channel-name -outputBlock ./channel-artifacts/genesis.block

-profile:后边接通道配置名称,从configtx.yaml文件的profiles配置段中寻找相关通道配置名称载入。 -channelID:后边接通道名称,这里定义的是系统通道的名称,建议全小写并且没有特殊字符; -outputBlock:后边接创世区块输出的文件路径,路径中目录如果不存在,需提前创建; cd $HOME/fabric-samples/first-network mkdir -p channel-artifacts

configtx.yaml

该文件总共有六个配置段:

Organizations:定义了各组织机构的名称、MSPID、MSP目录、读写策略等; Capabilities:能力定义,设定了不同版本的节点所能做的事情; Application:定义了要写入创世区块或配置交易的应用参数。 Orderer:定义了通道的共识模式与区块的相关信息; Channel:定义了通道中相关API的调用权限; Profiles:定义configtxgen工具的相关配置入口;

Organizations:

Name:在网络中的名称 ID:MSP中的唯一ID MSPDir:msp的相关目录 Policies:读写策略 AnchorPeers:锚节点配置

3.创建通道配置文件
代码语言:javascript
代码运行次数:0
复制
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
4.创建组织锚节点配置文件
创建Org1和Org2阻止锚节点配置文件
代码语言:javascript
代码运行次数:0
复制
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
代码语言:javascript
代码运行次数:0
复制
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP

-profile:后边接通道配置名称,从configtx.yaml文件的profiles配置段中寻找相关通道配置名称载入。 -outputAnchorPeersUpdate:后边接组织锚节点配置文件输出的文件路径; -channelID:后边接通道名称,这里定义的是业务通道的名称,建议全小写并且没有特殊字符; -asOrg:后边接所属组织的MSPID,要与configtx.yaml文件中Organizations配置段的定义一致;

锚节点每个组织至少有一个,有多少个锚节点就创建多少个锚节点配置文件
5.启动docker容器

复制scripts文件夹到目录

需要复制docker-compose-cli.yaml和base文件夹到目录

并删除这几个文件里的:$IMAGE_TAG

在peer-base.yaml文件里,第16行,${COMPOSE_PROJECT_NAME}是docker网络命名,这里自己填写

例如改为test-first-network

代码语言:javascript
代码运行次数:0
复制
docker-compose -f docker-compose-cli.yaml up -d
新旧网络冲突

删掉docker-compose-base.yaml文件,第52行 peer0.org1.example.com:/var/hyperledger/production删除

docker操作

查看docker镜像

代码语言:javascript
代码运行次数:0
复制
docker images

查看docker运行的镜像

代码语言:javascript
代码运行次数:0
复制
docker ps -a

查看docker网络列表

代码语言:javascript
代码运行次数:0
复制
docker network ls

查看docker网络信息

代码语言:javascript
代码运行次数:0
复制
docker network inspect testfirstnetwork_byfn

查看 peer0的docker日志

代码语言:javascript
代码运行次数:0
复制
docker logs peer0.org1.example.com

进入cli docker容器

代码语言:javascript
代码运行次数:0
复制
docker exec -it cli bash

查看有哪些数据卷

代码语言:javascript
代码运行次数:0
复制
docker volume ls
6.根据通道配置文件生成通道
代码语言:javascript
代码运行次数:0
复制
docker exec cli peer channel create -o orderer.example.com:7050 -c mychannel --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem -f ./channel-artifacts/channel.tx

-o:与某个排序节点连接; -c:通道名称; -f:使用通道配置文件; --tls:是否开启TLS加密传输协议; --cafile:服务端的证书文件;

7.将节点加入通道
代码语言:javascript
代码运行次数:0
复制
#"peer0.org1"
docker exec cli peer channel join -b mychannel.block

#"peer1.org1"
docker exec -e "CORE_PEER_ADDRESS=peer1.org1.example.com:7051" cli peer channel join -b mychannel.block

#"peer0.org2"
docker exec -e "CORE_PEER_ADDRESS=peer0.org2.example.com:7051" -e "CORE_PEER_LOCALMSPID=Org2MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp" cli peer channel join -b mychannel.block

../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp


#"peer1.org12
docker exec -e "CORE_PEER_ADDRESS=peer1.org2.example.com:7051" /
    -e "CORE_PEER_LOCALMSPID=Org2MSP" /
    -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp" cli peer channel join -b mychannel.block
docker容器里的常用命令
代码语言:javascript
代码运行次数:0
复制
peer
8.根据锚节点配置文件更新锚节点
代码语言:javascript
代码运行次数:0
复制
#"peer0.org1"
docker exec cli peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

#"peer0.org2"
docker exec -e "CORE_PEER_ADDRESS=peer0.org2.example.com:7051" -e "CORE_PEER_LOCALMSPID=Org2MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp" -e "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.crt" cli peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
9.链码安装
代码语言:javascript
代码运行次数:0
复制
docker exec cli peer chaincode install -n mycc -v 1.0 -l golang -p "github.com/chaincode/chaincode_example02/go/"

-n:链码的名字 -v:链码的版本号 -l:编写语言 -p:链码路径

10.实例化链码
代码语言:javascript
代码运行次数:0
复制
docker exec cli peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -l golang -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"

-o:与某个排序节点连接; -l:链码编程语言,使用golang; --tls:是否开启TLS加密传输协议; -v:链码版本号,默认1.0; --cafile:服务端的证书文件; -c:传输给链码的参数; -C:通道名称; -P:背书策略; -n:链码名称;

11.链码查询
代码语言:javascript
代码运行次数:0
复制
docker exec cli peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
查看go环境变量
代码语言:javascript
代码运行次数:0
复制
go env
设置go代理
代码语言:javascript
代码运行次数:0
复制
go env -w GOPROXY=https://goproxy.io,direct
拉取依赖
代码语言:javascript
代码运行次数:0
复制
go get github.com/gin-gonic/gin
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021 年 03 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.生成认证证书
  • 2.生成起始区块
    • configtx.yaml
    • Organizations:
  • 3.创建通道配置文件
  • 4.创建组织锚节点配置文件
    • 创建Org1和Org2阻止锚节点配置文件
    • 锚节点每个组织至少有一个,有多少个锚节点就创建多少个锚节点配置文件
  • 5.启动docker容器
    • 新旧网络冲突
    • docker操作
  • 6.根据通道配置文件生成通道
  • 7.将节点加入通道
    • docker容器里的常用命令
  • 8.根据锚节点配置文件更新锚节点
  • 9.链码安装
  • 10.实例化链码
  • 11.链码查询
  • 查看go环境变量
  • 设置go代理
  • 拉取依赖
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档