hyperledger第一讲-环境安装及网络启动

标签:分布式账本
发布时间:2018年09月10日 价值:20000.00 / 共识:26

环境搭建

快速入门: http://hyperledger-fabric.readthedocs.io/en/release-1.1/getting_started.html

前提

下面的命令是在ubantu系统下,如果是mac,先安装homebrew,然后 sudo apt 替换为 brew

fabric需要用到一些依赖库,而这些依赖库的下载需要socket(也就是终端)翻墙。
测试自己的电脑能否终端翻墙 curl www.google.com
如果能返回一堆数据,那么恭喜你,终端翻墙成功。终端翻墙请自行google。

安装git

  1. $ sudo apt update
  2. $ sudo apt install git

安装curl

  1. $ sudo apt install curl

安装vim

  1. $ sudo apt install vim

安装Docker

  1. $ sudo apt update
  2. $ docker --version
  3. $ sudo apt install docker.io

查看Docker版本信息

version 1.12+

  1. $ docker --version

输出: Docker version 1.13.1, build 092cba3

安装Docker Compose

  1. $ docker-compose --version
  2. $ sudo apt install docker-compose

查看DockerCompose版本信息

  1. $ docker-compose --version

输出: docker-compose version 1.8.0, build unknown

Golang

Fabric1.1.0版本要求Go1.9+

Fabric1.0.0版本要求Go1.7+

下载go1.10.1.linux-amd64.tar.gz

解压文件

  1. $ tar -zxvf go1.10.1.linux-amd64.tar.gz

编辑环境变量文件

  1. $ vim .bashrc

添加如下内容:

  1. export GOPATH=$HOME/gocode
  2. export GOROOT=$HOME/go
  3. export PATH=$GOROOT/bin:$PATH
  1. $ source .bashrc
  2. $ go version

输出: go version go1.10.1 linux/amd64

如果系统中有旧版本的golang,则使用如下命令卸载旧版本的golang,然后再重新安装

  1. $ su -
  2. # apt-get remove golang-go --purge && apt-get autoremove --purge && apt-get clean

如果是mac系统,安装golang及环境配置略有不同,详细安装过程查看这里

安装Node与npm

安装nvm

  1. $ sudo apt update
  2. $ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.10/install.sh | bash
  3. $ export NVM_DIR="$HOME/.nvm"
  4. $ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

安装Node

  1. $ nvm install v8.11.1

检查Node版本

  1. $ node -v

输出: v8.11.1

检查npm版本

  1. $ npm -v

输出: 5.6.0

Hyperledger Fabric Samples 下载安装

创建一个空目录

  1. $ mkdir fb

进入该目录

  1. $ cd fb
下载方式一:

新建文件bootstrap.sh

  1. $ vim bootstrap.sh

https://github.com/hyperledger/fabric/blob/master/scripts/bootstrap.sh中的内容拷贝保存退出

赋予bootstrap.sh可执行权限并运行

  1. $ chmod +x bootstrap.sh

配置docker加速器

配置docker加速器的目的是为了在下载docker镜像文件时加速

  1. $ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://8890cb8b.m.daocloud.io

重启docker服务

  1. $ sudo systemctl restart docker.service

执行bootstrap.sh

确定网络稳定,否则会导致各种问题,例如下载到一半时网络超时,下载失败等等

  1. $ sudo ./bootstrap.sh 1.2.0

下载完成后, 查看相关输出内容, 如果下载有失败的镜像, 可再次执行 $ sudo ./bootstrap.sh 1.2.0 命令

下载方式二:

建议使用方式一进行下载

配置docker加速器,

  1. $ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://8890cb8b.m.daocloud.io

重启docker服务

  1. $ sudo systemctl restart docker.service
  1. $ curl https://github.com/hyperledger/fabric/blob/master/scripts/bootstrap.sh | bash -s 1.1.0

安装完成后输出:

  1. hyperledger/fabric-ca latest 72617b4fa9b4 5 weeks ago 299 MB
  2. hyperledger/fabric-ca x86_64-1.1.0 72617b4fa9b4 5 weeks ago 299 MB
  3. hyperledger/fabric-tools latest b7bfddf508bc 5 weeks ago 1.46 GB
  4. hyperledger/fabric-tools x86_64-1.1.0 b7bfddf508bc 5 weeks ago 1.46 GB
  5. hyperledger/fabric-orderer latest ce0c810df36a 5 weeks ago 180 MB
  6. hyperledger/fabric-orderer x86_64-1.1.0 ce0c810df36a 5 weeks ago 180 MB
  7. hyperledger/fabric-peer latest b023f9be0771 5 weeks ago 187 MB
  8. hyperledger/fabric-peer x86_64-1.1.0 b023f9be0771 5 weeks ago 187 MB
  9. hyperledger/fabric-javaenv latest 82098abb1a17 5 weeks ago 1.52 GB
  10. hyperledger/fabric-javaenv x86_64-1.1.0 82098abb1a17 5 weeks ago 1.52 GB
  11. hyperledger/fabric-ccenv latest c8b4909d8d46 5 weeks ago 1.39 GB
  12. hyperledger/fabric-ccenv x86_64-1.1.0 c8b4909d8d46 5 weeks ago 1.39 GB
  13. hyperledger/fabric-zookeeper latest 92cbb952b6f8 2 months ago 1.39 GB
  14. hyperledger/fabric-zookeeper x86_64-0.4.6 92cbb952b6f8 2 months ago 1.39 GB
  15. hyperledger/fabric-kafka latest 554c591b86a8 2 months ago 1.4 GB
  16. hyperledger/fabric-kafka x86_64-0.4.6 554c591b86a8 2 months ago 1.4 GB
  17. hyperledger/fabric-couchdb latest 7e73c828fc5b 2 months ago 1.56 GB
  18. hyperledger/fabric-couchdb x86_64-0.4.6 7e73c828fc5b 2 months ago 1.56 GB

添加环境变量

  1. $ export PATH=<path to download location>/bin:$PATH

注: 表示下载的fabric-samples文件目录所在路径

  1. 例: $ export PATH=$HOME/fb/fabric-samples/bin:$PATH

HyperLedger Fabric环境搭建完成。

启动网络

通过脚本自动启动

进入对应目录

$ cd fabric-samples/first-network

first-network目录下有两个自动化脚本byfn.sheyfn.sh, 这两个脚本的启动顺序是先执行byfn.sh再执行eyfn.sh(eyfn.sh不是必须的,eyfn.sh的作用稍后介绍)

查看帮助信息:

$ ./byfn.sh --help

  1. up:启动
  2. down:清除网络
  3. restart:重新启动
  4. generate:生成证书及创世块
  5. upgrade:将网络从1.0升级到1.1
  6. -c:用于指定channelName,默认值"mychannel"
  7. -tCLI timeout时间,默认值10
  8. -d:延迟启动,默认值3
  9. -f:使用指定的网络拓扑结构文件,默认使用docker-compose-cli.yaml
  10. -s:指定使用的数据库,可选 goleveldbcouchdb
  11. -l:指定chaincode使用的语言,可选golang node
  12. -i:指定镜像tag,默认 "latest"
  13. 详细参数可通过./byfn.sh help查看

生成证书和密钥

为各种网络实体生成所有证书和密钥,用于引导订购服务以及配置通道所需的一系列配置事务

$ sudo ./byfn.sh -m generate

启动网络

$ sudo ./byfn.sh -m up

如果启动发生错误,则执行关闭命令后再次执行启动命令

最后输出如下内容代表启动且测试成功

  1. ============== Query on peer1.org2 on channel 'mychannel' is successful ================
  2. ========= All GOOD, BYFN execution completed ===========

或者通过Node.js启动网络./byfn.sh -m up -l node

first-network会生成1个orderer+4个peer+1个CLI的网络结构,整个网络包括2个org

系统会提示您是否希望继续或中止。回应一个y或打回车键:

  1. Starting with channel 'mychannel' and CLI timeout of '10'
  2. Continue? [Y/n]
  3. proceeding ...
  4. Creating network "net_byfn" with the default driver
  5. Creating peer0.org1.example.com
  6. Creating peer1.org1.example.com
  7. Creating peer0.org2.example.com
  8. Creating orderer.example.com
  9. Creating peer1.org2.example.com
  10. Creating cli
  11. ____ _____ _ ____ _____
  12. / ___| |_ _| / \ | _ \ |_ _|
  13. \___ \ | | / _ \ | |_) | | |
  14. ___) | | | / ___ \ | _ < | |
  15. |____/ |_| /_/ \_\ |_| \_\ |_|
  16. Channel name : mychannel
  17. Creating channel...

等待创建直到显示如下信息,表示启动网络成功

  1. Query Result: 90
  2. 2017-05-16 17:08:15.158 UTC [main] main -> INFO 008 Exiting.....
  3. ===================== Query on peer1.org2 on channel 'mychannel' is successful =====================
  4. ===================== All GOOD, BYFN execution completed =====================
  5. _____ _ _ ____
  6. | ____| | \ | | | _ \
  7. | _| | \| | | | | |
  8. | |___ | |\ | | |_| |
  9. |_____| |_| \_| |____/

关闭网络

$ sudo ./byfn.sh -m down

关闭网络之后, 可以一步一步地探索网络设置. 将杀死容器, 删除加密文件, 并从Docker Registry中删除链码图像

若在启动网络时遇到如下错误

  1. OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"scripts/script.sh\": stat scripts/script.sh: no such file or directory": unknown

或者

  1. ERROR: Encountered errors while bringing up the project.
  2. ERROR !!!! Unable to start network

则执行./byfn.sh down 清除网络后再启动

手动启动网络

生成组织关系和身份证书

确定是在 fabric-samples/first-network 路径下

  1. $ cd fb/fabric-samples/first-network/

为fabric网络生成指定拓扑结构的组织关系和身份证书

  1. $ sudo ../bin/cryptogen generate --config=./crypto-config.yaml

此命令依赖 crypto-config.yaml 配置文件

会有如下输出:

  1. org1.example.com
  2. org2.example.com

证书和密钥(即MSP材料)将被输出到目录 first-network/crypto-config 的目录中

ordererOrganizations子目录下包括构成Orderer组织(1个Orderer节点)的身份信息

peerOrganizations子目录下为所有的Peer节点组织(2个组织, 4个节点)的相关身份信息. 其中最关键的是MSP目录, 代表了实体的身份信息

crypto-config文件目录结构如下

crypto-config
├── ordererOrganizations
│ └── example.com
│ ├── ca
│ │ ├── ca.example.com-cert.pem
│ │ └── df69b6d2aea8038270c5340d358bfe34eee039a8e16d4a849e67ec27a8ed53bd_sk
│ ├── msp
│ │ ├── admincerts
│ │ │ └── Admin@example.com-cert.pem
│ │ ├── cacerts
│ │ │ └── ca.example.com-cert.pem
│ │ └── tlscacerts
│ │ └── tlsca.example.com-cert.pem
│ ├── orderers
│ │ └── orderer.example.com
│ │ ├── msp
│ │ │ ├── admincerts
│ │ │ ├── cacerts
│ │ │ ├── keystore
│ │ │ ├── signcerts
│ │ │ └── tlscacerts
│ │ └── tls
│ │ ├── ca.crt
│ │ ├── server.crt
│ │ └── server.key
│ ├── tlsca
│ │ ├── 138f1cfd2708bca1e9e525773af410d46cef12736c3673ed787d7bbc38f013a4_sk
│ │ └── tlsca.example.com-cert.pem
│ └── users
│ └── Admin@example.com
│ ├── msp
│ │ ├── admincerts
│ │ ├── cacerts
│ │ ├── keystore
│ │ ├── signcerts
│ │ └── tlscacerts
│ └── tls
│ ├── ca.crt
│ ├── client.crt
│ └── client.key
└── peerOrganizations
├── org1.example.com # 第一个组织的相关材料,每个组织会生成单独的根证书
│ ├── ca #存放组织的根证书和对应的私钥文件,默认采用EC 算法,证书为自签名。组织内的实体将基于该根证书作为证书根。
│ │ ├── 9b78dd1cc0570c9ef3f3fa31a1b343e7a6c0f157a2cc17f75412e12f2936898c_sk
│ │ └── ca.org1.example.com-cert.pem
│ ├── msp # 存放代表该组织的身份信息
│ │ ├── admincerts # 组织管理员的身份验证证书,被根证书签名
│ │ │ └── Admin@org1.example.com-cert.pem
│ │ ├── cacerts # 组织的根证书,同ca 目录下文件
│ │ │ └── ca.org1.example.com-cert.pem
│ │ ├── config.yaml
│ │ └── tlscacerts # :用于TLS 的CA 证书,自签名
│ │ └── tlsca.org1.example.com-cert.pem
│ ├── peers # 存放属于该组织的所有Peer 节点
│ │ ├── peer0.org1.example.com # 第一个peer 的信息,包括其msp 证书和tls 证书两类
│ │ │ ├── msp
│ │ │ │ ├── admincerts # 组织管理员的身份验证证书。Peer 将基于这些证书来认证交易签署者是否为管理员身份
│ │ │ │ ├── cacerts # 存放组织的根证书
│ │ │ │ ├── config.yaml
│ │ │ │ ├── keystore # 本节点的身份私钥,用来签名
│ │ │ │ ├── signcerts # 验证本节点签名的证书,被组织根证书签名
│ │ │ │ └── tlscacerts # TLS 连接用的身份证书,即组织TLS 证书
│ │ │ └── tls # 存放tls 相关的证书和私钥
│ │ │ ├── ca.crt # 组织的根证书
│ │ │ ├── server.crt # 验证本节点签名的证书,被组织根证书签名
│ │ │ └── server.key # 本节点的身份私钥,用来签名
│ │ └── peer1.org1.example.com # 第二个peer 的信息,与peer0.org1.example.com结构类似
│ │ ├── msp
│ │ │ ├── admincerts
│ │ │ ├── cacerts
│ │ │ ├── config.yaml
│ │ │ ├── keystore
│ │ │ ├── signcerts
│ │ │ └── tlscacerts
│ │ └── tls
│ │ ├── ca.crt
│ │ ├── server.crt
│ │ └── server.key
│ ├── tlsca
│ │ ├── cf4587814bc05f9f81ac3d990c365660dedf1479e60f737c7e9e707727a27168_sk
│ │ └── tlsca.org1.example.com-cert.pem
│ └── users # 存放属于该组织的用户的实体
│ ├── Admin@org1.example.com # 管理员用户的信息,包括其msp 证书和tls 证书两类
│ │ ├── msp
│ │ │ ├── admincerts # 管理身份验证证书
│ │ │ ├── cacerts # 存放组织的根证书
│ │ │ ├── keystore # 本用户的身份私钥,用来签名
│ │ │ ├── signcerts # 管理员用户的身份验证证书,被组织根证书签名。要被某个Peer认可,则必须放到该Peer 的msp/admincerts 下
│ │ │ └── tlscacerts # TLS 连接用的身份证书,即组织TLS 证书
│ │ └── tls # 存放tls 相关的证书和私钥
│ │ ├── ca.crt # 组织的根证书
│ │ ├── client.crt # 管理员的用户身份验证证书,被组织根证书签名
│ │ └── client.key # 管理员用户的身份私钥,用来签名
│ └── User1@org1.example.com # 第一个用户的信息,包括msp 证书和tls 证书两类
│ ├── msp
│ │ ├── admincerts # 管理身份验证证书
│ │ ├── cacerts # 存放组织的根证书
│ │ ├── keystore # 本用户的身份私钥,用来签名
│ │ ├── signcerts # 验证本用户签名的身份证书,被组织根证书签名
│ │ └── tlscacerts # TLS 连接用的身份证书,即组织TLS 证书
│ └── tls # 存放tls 相关的证书和私钥
│ ├── ca.crt # 组织的根证书
│ ├── client.crt # 验证用户签名的身份证书,被组织根证书签名
│ └── client.key # 用户的身份私钥,用来签名
└── org2.example.com # 第二个组织的信息,与org1.example.com结构类似
├── ca
│ ├── 91fd76daf883a57066303fb6842ff4fb07c6793dbc8fbbca6303efea455884b2_sk
│ └── ca.org2.example.com-cert.pem
├── msp
│ ├── admincerts
│ │ └── Admin@org2.example.com-cert.pem
│ ├── cacerts
│ │ └── ca.org2.example.com-cert.pem
│ ├── config.yaml
│ └── tlscacerts
│ └── tlsca.org2.example.com-cert.pem
├── peers
│ ├── peer0.org2.example.com
│ │ ├── msp
│ │ │ ├── admincerts
│ │ │ ├── cacerts
│ │ │ ├── config.yaml
│ │ │ ├── keystore
│ │ │ ├── signcerts
│ │ │ └── tlscacerts
│ │ └── tls
│ │ ├── ca.crt
│ │ ├── server.crt
│ │ └── server.key
│ └── peer1.org2.example.com
│ ├── msp
│ │ ├── admincerts
│ │ ├── cacerts
│ │ ├── config.yaml
│ │ ├── keystore
│ │ ├── signcerts
│ │ └── tlscacerts
│ └── tls
│ ├── ca.crt
│ ├── server.crt
│ └── server.key
├── tlsca
│ ├── d3c3e6e37d306992bc9fb826415ed77971031418db48c195d5a24521916f32f3_sk
│ └── tlsca.org2.example.com-cert.pem
└── users
├── Admin@org2.example.com
│ ├── msp
│ │ ├── admincerts
│ │ ├── cacerts
│ │ ├── keystore
│ │ ├── signcerts
│ │ └── tlscacerts
│ └── tls
│ ├── ca.crt
│ ├── client.crt
│ └── client.key
└── User1@org2.example.com
├── msp
│ ├── admincerts
│ ├── cacerts
│ ├── keystore
│ ├── signcerts
│ └── tlscacerts
└── tls
├── ca.crt
├── client.crt
└── client.key

Cryptogen 按照配置文件中指定的结构生成了对应的组织和密钥、证书文件

其中最关键的是各个资源下的msp 目录内容,存储了生成的代表MSP 身份的各种证书文件,一般包括:

  • admincerts :管理员的身份证书文件
  • cacerts :信任的根证书文件
  • key store :节点的签名私钥文件
  • signcerts :节点的签名身份证书文件
  • tlscacerts: TLS 连接用的证书
  • intermediatecerts (可选):信任的中间证书
  • crls (可选):证书撤销列表
  • config.yaml (可选):记录OrganizationalUnitldentifiers 信息,包括根证书位置和ID信息

这些身份文件随后可以分发到对应的Orderer 节点和Peer 节点上,并放到对应的MSP路径下,用于签名使用

配置环境变量

告诉configtxgen工具在哪里寻找configtx.yaml 文件

  1. $ export FABRIC_CFG_PATH=$PWD

创建Ordering服务启动初始区块

指定使用 configtx.yaml 文件中定义的 TwoOrgsOrdererGenesis 模板, 生成Ordering服务系统通道的初始区块文件

  1. $ sudo ../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

命令执行后输出如下:

  1. 10:49:21.181 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration
  2. 10:49:21.207 CST [msp] getMspConfig -> INFO 002 Loading NodeOUs
  3. 10:49:21.208 CST [msp] getMspConfig -> INFO 003 Loading NodeOUs
  4. 10:49:21.210 CST [common/tools/configtxgen] doOutputBlock -> INFO 004 Generating genesis block
  5. 10:49:21.211 CST [common/tools/configtxgen] doOutputBlock -> INFO 005 Writing genesis block

创建一个应用通道的配置交易

务必替换$CHANNEL_NAME或设置CHANNEL_NAME为可在整个说明中使用的环境变量

  1. $ export CHANNEL_NAME=mychannel

指定使用 configtx.yaml 配置文件中的 TwoOrgsChannel 模板, 来生成新建通道的配置交易文件, TwoOrgsChannel 模板指定了Org1和Org2都属于后面新建的应用通道

  1. $ sudo ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

输出如下

  1. 11:13:24.984 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration
  2. 11:13:24.992 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
  3. 11:13:24.993 CST [msp] getMspConfig -> INFO 003 Loading NodeOUs
  4. 11:13:24.994 CST [msp] getMspConfig -> INFO 004 Loading NodeOUs
  5. 11:13:25.016 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 005 Writing new channel tx

生成锚节点配置更新文件

锚节点配置更新文件用来对组织的锚节点进行配置

同样基于 configtx.yaml 配置文件生成新建通道文件, 每个组织都需要分别生成且注意指定对应的组织名称

  1. $ sudo ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
  2. $ sudo ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

启动网络

$ sudo docker-compose -f docker-compose-cli.yaml up -d

-f: 指定docker-compose文件

注:

如果想查看网络的实时日志,则不需要提供 -d 参数

CLI容器将闲置1000秒。如果在需要时它消失了,可以用一个简单的命令重新启动它:

​ $ sudo docker start cli

网络启动顺序: 首先启动Orderer节点, 然后启动Peer节点, 日志输出如下:

  1. ......
  2. orderer.example.com | 02:48:25.080 UTC [orderer/common/server] initializeServerConfig -> INFO 002 Starting orderer with TLS enabled
  3. orderer.example.com | 02:48:25.101 UTC [fsblkstorage] newBlockfileMgr -> INFO 003 Getting block information from block storage
  4. orderer.example.com | 02:48:25.138 UTC [orderer/commmon/multichannel] NewRegistrar -> INFO 004 Starting system channel 'testchainid' with genesis block hash 67662e918ab76b4a8863cc625d67fcc31e9cb3a7c3c4f9f707af1c05ba5be686 and orderer type solo
  5. orderer.example.com | 02:48:25.138 UTC [orderer/common/server] Start -> INFO 005 Starting orderer:
  6. ......

Peer节点启动后, 默认情况下没有加入网络中的任何应用通道, 也不会与Orderer服务建立连接.需要通过客户端对其进行操作, 让它加入网络和指定的应用通道中

进入Docker容器

执行如下命令进入到CLI容器中(后继操作都在容器中执行)

  1. $ sudo docker exec -it cli bash

如果成功, 命令提示符会变为如下内容:

root@b240e1643244:/opt/gopath/src/github.com/hyperledger/fabric/peer#

创建通道

检查环境变量是否正确设置

  1. echo $CHANNEL_NAME

设置环境变量

  1. export CHANNEL_NAME=mychannel

创建通道

  1. peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

该命令自动在本地生成与该应用通道同名的初始区块 mychannel.block, 只有拥有该文件才可以加入创建的应用通道中

查看:

  1. root@086adb802655:/opt/gopath/src/github.com/hyperledger/fabric/peer# ll
  2. total 36
  3. drwxr-xr-x 5 root root 4096 Apr 29 03:34 ./
  4. drwxr-xr-x 3 root root 4096 Apr 29 02:48 ../
  5. drwxr-xr-x 2 root root 4096 Apr 29 02:47 channel-artifacts/
  6. drwxr-xr-x 4 root root 4096 Apr 29 02:35 crypto/
  7. -rw-r--r-- 1 root root 15660 Apr 29 03:34 mychannel.block
  8. drwxr-xr-x 2 root root 4096 Apr 29 02:13 scripts/

加入通道

应用通道所包含组织的成员节点可以加入通道中

  1. peer channel join -b mychannel.block

join命令: 将本Peer节点加入到某个应用通道中

参数含义

-b: 初始区块文件的路径信息

执行成功后, Peer连接到该应用通道的Ordering服务上, 开始接收区块信息

更新锚点

使用Org1的管理员身份更新锚节点配置

  1. peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

使用Org2的管理员身份更新锚节点配置

  1. CORE_PEER_LOCALMSPID="Org2MSP"
  2. CORE_PEER_ADDRESS=peer0.org2.example.com:7051
  3. CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
  4. 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
  5. peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

手动配置网络完成, 即可进入下一讲的链码的测试和开发。

关闭网络

如果不使用或者测试完毕,需要关闭网络
$ docker-compose -f docker-compose-cli.yaml down

  • 删除运行的容器
  1. docker rm -f $(docker ps -aq)
  • 删除docker中的组织镜像
    查看所有镜像
    docker images
  1. REPOSITORY TAG IMAGE ID CREATED SIZE
  2. dev-peer1.org2.example.com-mycc-1.0-26c2ef32838554aac4f7ad6f100aca865e87959c9a126e86d764c8d01f8346ab latest 3f906f351783 3 minutes ago 172MB
  3. dev-peer0.org1.example.com-mycc-1.0-384f11f484b9302df90b453200cfb25174305fce8f53f4e94d45ee3b6cab0ce9 latest c3c604fd9b4f 3 minutes ago 172MB
  4. dev-peer0.org2.example.com-mycc-1.0-15b571b3ce849066b7ec74497da3b27e54e0df1345daff3951b94245ce09c42b latest 2db3b4f50920 3 minutes ago 172MB
  5. hyperledger/fabric-ca latest 72617b4fa9b4 3 months ago 299MB
  6. hyperledger/fabric-ca x86_64-1.1.0 72617b4fa9b4 3

如果有非hyperledger镜像,需要删除他们
删除命令
docker rmi -f IMAGE ID IMAGE ID 从上面复制

最后进入生成的配置目录

  1. 检查 crypto-config文件夹是否删掉
  2. 检查 channel-artifacts文件夹内是否清空
  • 分享 收藏
1 条评论
  • 严肃 CEO U Network

    这个专栏不错!加油!哈哈哈哈哈哈哈哈哈,感谢作者!哈哈哈哈哈哈

    2018-09-30 15:46