Fabric1.4:手动启动 first-network 网络(一)
注意:本文所使用的 fabric 版本为 v1.4.3,与其它版本的网络存在差异。
手动启动 first-network 网络系列分为三部分:
第一篇单纯使用命令行的形式执行 byfn.sh 脚本中的内容,第二篇和第三篇是对手动启动网络过程所使用的命令和配置文件的解释。
1 生成组织结构与身份证书
我们使用 cryptogen 工具将文件 crypto-config.yaml 作为参数配置生成组织结构与身份证书:
$ cd ./fabric-sample/first-network
$ ../bin/cryptogen generate --config=./crypto-config.yaml
执行完毕后,当前文件夹下会出现一个新的文件夹:crypto-config,在该目录下就是存放刚刚生成的组织结构与身份证书。
2 生成网络启动的配置文件
我们使用 configtxgen 工具会将文件 configtx.yaml 作为参数配置生成网络启动的配置文件。
因此,我们需要告诉 configtxgen 工具在哪里寻找它需要的 configtx.yaml 文件,告诉它查看当前的工作目录:
$ export FABRIC_CFG_PATH=$PWD
2.1 生成系统通道创世区块
使用 configtxgen 工具指定 configtx.yaml 文件中定义的 TwoOrgsOrdererGenesis 模块,生成 Orderer 系统通道的初始区块文件:
$ ../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
成功执行后,在 channel-artifacts 目录下会生成系统通道的创世区块文件 genesis.block。
2.2 生成应用通道交易配置文件
使用 configtxgen 工具指定 configtx.yaml 文件中定义的 TwoOrgsChannel 模块,创建应用通道配置交易文件:
$ export CHANNEL_NAME=mychannel && ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
在 channel-artifacts 目录下会生成应用通道交易配置文件 channel.tx。
2.3 生成两个组织的锚节点更新配置文件
使用 configtxgen 工具指定 configtx.yaml 文件中定义的 TwoOrgsChannel 模块,分别为 org1 和 org2 生成应用通道上的锚节点更新配置文件:
$ ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
$ ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
在 channel-artifacts 目录下会生成锚节点更新配置文件 Org1MSPanchors.tx 和 Org2MSPanchors.tx。
3 启动分布式网络
使用 docker-compose 工具将 docker-compose-cli.yaml 文件作为参数,启动提供网络服务的各个节点:
$ docker-compose -f docker-compose-cli.yaml up -d
4 应用通道的创建与测试
4.1 创建应用通道
进入 CLI 容器:
$ docker exec -it cli bash
创建应用通道:
# export CHANNEL_NAME=mychannel
# export 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 $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile $ORDERER_CA
该命令会返回一个名为 mychannel.block 的区块文件,保存在 CLI 容器的当前目录下。
4.2 各节点加入应用通道
peer0.org1 加入应用通道
# peer channel join -b mychannel.block
peer1.org1 加入应用通道
# CORE_PEER_ADDRESS=peer1.org1.example.com:8051
# peer channel join -b mychannel.block
peer0.org2 加入应用通道
# CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
# CORE_PEER_ADDRESS=peer0.org2.example.com:9051
# 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.crt
# peer channel join -b mychannel.block
peer1.org2 加入应用通道
# CORE_PEER_ADDRESS=peer1.org2.example.com:10051
# peer channel join -b mychannel.block
4.3 更新锚节点并安装链码
peer0.org1 更新为锚节点安装链码
# CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
# CORE_PEER_ADDRESS=peer0.org1.example.com:7051
# CORE_PEER_LOCALMSPID="Org1MSP"
# CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
# peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile $ORDERER_CA
# peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
peer0.org2 更新为锚节点并安装链码
# CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
# CORE_PEER_ADDRESS=peer0.org2.example.com:9051
# 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.crt
# peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile $ORDERER_CA
# peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
4.4 实例化链码并测试
实例化链码
# peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
Query
# peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
Invoke
# peer chaincode invoke -o orderer.example.com:7050 --tls --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["invoke","a","b","10"]}'
在 peer1.org1 上安装链码
# CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
# CORE_PEER_ADDRESS=peer1.org1.example.com:8051
# CORE_PEER_LOCALMSPID="Org1MSP"
# CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt
# peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
Query
# peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
5 清除分布式网络
使用指定的 docker-compose-cli.yaml 配置文件关闭网络:
$ docker-compose -f docker-compose-cli.yaml down
手动删除 crypto-config 和 channel-artifacts 目录下的全部配置文件。注意,channel-artifacts 文件夹不能删除,如果误删,请手动创建。
Fabric1.4:手动启动 first-network 网络(一)的更多相关文章
- 关于sql server 2008过期导致 MSSQLSERVER服务就无法启动,手动启动就报告错误代码17051。
1.基本现象:MSSQLSERVER服务就无法启动,手动启动就报告17051错误. 2.解决办法: 第一步:进入SQL2008配置工具中的安装中心, 第二步:再进入维护界面,选择版本升级, 第三步:进 ...
- core java 10~12(多线程 & I/O & Network网络编程)
MODULE 10 Threads 多线程-------------------------------- 进程: 计算机在运行过程中的任务单元,CPU在一个时间点上只能执行一个进程,但在一个时间段上 ...
- tomcat部署-手动启动tomcat部署,添加网页,
公司的内网什么都不能往外传,于是自己用公司的网络搭了一个网页,在网上抄了一堆upload,用来来回传输数据.... 但是每次用ideaJ启动服务器太费时. 研究了一下怎么手动启动tomcat,部署网页 ...
- Oracle 服务手动启动关闭
在windows7中安装完Oracle11g之后会出现一下七种服务:可通过运行->services.msc查看. 其中各个服务名称中的ORCL或orcl为SID即System IDentifie ...
- 手动启动mongodb和nodejs程序
最近做单片机去了,以前用的mongodb和nodejs没有配置成服务,居然忘了如何手动启动.在此记录下 一.手动启动mongodb 1.进入cmd 2.在dos下打开mongodb路径E:\mongo ...
- 解决关于ArcGIS10.2服务手动启动的问题
解决关于ArcGIS10.2服务手动启动的问题 C:\program files\arcgis\license10.2\bin> lmgrd -z -c service.txt新建一文本,将上面 ...
- arcgis手动启动服务提示端口4000被使用
具体解决办法 参考 http://hi.baidu.com/xjx19860908/item/6b46376d92044694c4d249f6该博文. 手动启动,提示4000端口被占用,去查找4000 ...
- 【BZOJ】【1834】【ZJOI2010】Network 网络扩容
网络流/费用流 这题……我一开始sb了. 第一问简单的最大流…… 第二问是要建费用流的图的……但是是在第一问的最大流跑完以后的残量网络上建,而不是重建…… 我们令残量网络上原有的弧的费用全部为0(因为 ...
- bzoj1834: [ZJOI2010]network 网络扩容
努力看了很久样例一直过不了...然后各种输出中间过程啊巴拉巴拉弄了1h,没办法了...然后突然想到啊原来的边可以用啊为什么不用...于是A了...感人肺腑 #include<cstdio> ...
随机推荐
- Laravel 上传excel,读取并写入数据库 (实现自动建表、存记录值
<?php namespace App\Http\Controllers; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminat ...
- 【DCN】路由操作
offset */interface in/out access-list/prefix-list <1-16> // 修改路由偏移量 RIP偏移列表 ...
- Python--day71--ORM分组补充
1,ORM映射对应的sql语句: 2,QuerySet QuerySet方法大全 ########################################################### ...
- hdu 1128 Self Numbers
Self Numbers Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- Ralasafe配置手册
Ralasafe访问控制(权限管理)中间件的配置工作非常少.因为项目发起人非常讨厌配置.因此,"己所不欲,勿施于人",Ralasafe的配置也非常少. Ralasafe配置工作只有 ...
- java 声明多个泛型类型和通配符
若一个类中多个字段需要不同的泛型声明,则在声明类的时候指定多个泛型类型即可: 格式: public interface IDAO<PK, T> { PK add(T t); void re ...
- linux 从用户空间的 I/O 存取
刚刚描述的这些函数主要打算被设备驱动使用, 但它们也可从用户空间使用, 至少在 PC- 类 的计算机. GNU C 库在 <sys/io.h> 中定义它们. 下列条件应当应用来对于 inb ...
- 2019-9-24-dotnet-remoting-抛出异常
title author date CreateTime categories dotnet remoting 抛出异常 lindexi 2019-09-24 15:39:50 +0800 2018- ...
- 【t050】方程求解
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 要求Xi(i = 1,2,3,4)是一个[-T..T]中的整数,满足方程AX1 + BX2 + CX3 ...
- 【t056】智力问答(链表+计数排序做法)
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 新年联欢会上,G.Sha负责组织智力问答节目.G.Sha建立了一个很大很大的超级题库,并衡量了每道题的 ...