zoukankan      html  css  js  c++  java
  • 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.txOrg2MSPanchors.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-configchannel-artifacts 目录下的全部配置文件。注意,channel-artifacts 文件夹不能删除,如果误删,请手动创建。

  • 相关阅读:
    angularjs中的jqlite的认识理解及操作使用
    轻谈Normalize.css
    oppo R9 WLAN使用代理图解
    前端小炒的win7使用笔记(收藏篇)
    git操作方便,简单使用的客户端sourcetree 安装配置所遇问题总结
    关于js中对事件绑定与普通事件的理解
    IT最新最火的网络词汇*2*(文章来源电商)
    Git笔记之初识vi编辑器
    番茄钟工作法--我们天生爱分享
    探讨"点"语法的奥秘
  • 原文地址:https://www.cnblogs.com/zongmin/p/12180572.html
Copyright © 2011-2022 走看看