fabric1.1 动态添加组织

[以下是基于官方教程fabric-sample1.1搭建的,原来是2 Org + 1 Orderer,现在研究新增一个组织Org3并加入到原来的通道中,请先clone fabric-sample1.1 git clone https://github.com/hyperledger/fabric-samples.git]
[以下所有需要vim的文件在fabric-sample1.1中都有]

  1. ./byfn -m generate
    ./byfn -m up
    进入fabric-sample/first-network/下面将fabric网络启动,以下操作都是在first-network下面进行的

  2. mkdir org3-artifacts (此文件夹以及下面的文件在fabric-sample1.1版本中都有,不需要新建)
    cd org3-artifacts (进入org3-artifacts目录下,以下几个操作都是在org3-artifacts目录下操作的)
    vim org3-crypto.yaml (参考附录)
    vim configtx.yaml (参考附录)

  3. ../../bin/cryptogen generate –config=./org3-crypto.yaml (生成org3秘钥)
    export FABRIC_CFG_PATH=$PWD (设置配置路径)
    ../../bin/configtxgen -printOrg Org3MSP > ../channel-artifacts/org3.json (生成org3的配置文件并放入上一层channel-artifact中,org3.json中包含)

  4. cd .. (进入first-network目录,注意和上面2.2对应)
    cp -r crypto-config/ordererOrganizations org3-artifacts/crypto-config/
    (将orderer相关的证书拷贝到org3的目录中,让新的组织可以连接到orderer)

  5. docker exec -it cli bash (新加的组织需要原来channel中成员的同意,进行org1,org2对org3交易进行签名等处理,以下操作加上#都是带边在容器内操作)

    apt-get update

    apt-get -y install jq (安装jq,一个对json进行过滤,格式化,修改的工具)

    !如果cli容器由于网络问题不能很好的更新安装,可以手动安装
    !在宿主机中进行 wget https://github.com/stedolan/jq/releases/download/jq-1.5/jq-1.5.tar.gz
    !tar -zxvf jq-1.5.tar.gz
    !docker cp jq-1.5 cli:/opt/gopath/src/github.com/hyperledger/fabric/peer/
    !在cli容器中进行 cd jq-1.5/ && ./configure && make && sudo make install

  6. 配置环境变量

    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 && export CHANNEL_NAME=mychannel

    echo ORDERER_CA && echo ORDERER_CA && echo CHANNEL_NAME

    检查环境变量是否配置成功

    peer channel fetch config config_block.pb -o orderer.example.com:7050 -c CHANNELNAMEtlscafile C H A N N E L N A M E − − t l s − − c a f i l e ORDERER_CA

    解码原来网络的配置文件config_block.pb

    configtxlator proto_decode –input config_block.pb –type common.Block | jq .data.data[0].payload.data.config > config.json

    将原来的网络配置文件转化成json,使用到了configtxlator proto_decode和jq工具

    jq -s ‘.[0] * {“channel_group”:{“groups”:{“Application”:{“groups”: {“Org3MSP”:.[1]}}}}}’ config.json ./channel-artifacts/org3.json > modified_config.json

    在原来的配置文件中增加org3的配置信息,生成 modified_config.json

    configtxlator proto_encode –input config.json –type common.Config –output config.pb

    将config.json转换成protobufs(下面计算会需要)

    configtxlator proto_encode –input modified_config.json –type common.Config –output modified_config.pb

    将modified_config.json 转换为 protobufs(下一步计算会需要)

    configtxlator compute_update –channel_id $CHANNEL_NAME –original config.pb –updated modified_config.pb –output org3_update.pb

    根据config.pb和modified_config.pb计算出升级的org3_update.pb

    configtxlator proto_decode –input org3_update.pb –type common.ConfigUpdate | jq . > org3_update.json

    解码org3_update.pb到json文件

    echo ‘{“payload”:{“header”:{“channel_header”:{“channel_id”:”mychannel”, “type”:2}},”data”:{“config_update”:’$(cat org3_update.json)’}}}’ | jq . > org3_update_in_envelope.json

    生成配置升级的json

    configtxlator proto_encode –input org3_update_in_envelope.json –type common.Envelope –output org3_update_in_envelope.pb

    将生成的配置升级文件org3_update_in_envelope.json转化成protobufs

  7. 为org3签名(在cli操作)
    切换到 peer0.org1,为org3签名
    export CORE_PEER_LOCALMSPID=”Org1MSP”
    export 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
    export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
    peer channel signconfigtx -f org3_update_in_envelope.pb 为org3签名

    切换到peer0.org2,2位org3签名
    export CORE_PEER_LOCALMSPID=”Org2MSP”
    export 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
    export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
    export CORE_PEER_ADDRESS=peer0.org2.example.com:7051

    peer channel signconfigtx -f org3_update_in_envelope.pb

  8. 配置交易到orderer
    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 update -f org3_update_in_envelope.pb -c mychannel -o orderer.example.com:7050 –tls –cafile $ORDERER_CA

  9. 新打来一个terminal,,在first-network下面操作
    vim docker-compose-org3.yaml (编写编写org3的节点文件,参考附录)
    docker-compose -f docker-compose-org3.yaml up -d (启动org3网络)

  10. 进入Org3cli容器,进行相关操作(注意这里的操作在Org3cli下,和上面cli下操作的区别)
    docker exec -it Org3cli bash 登录Org3cli容器,进行通道等相关操作,下面带#的标识在容器里面进行的操作
    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
    export CHANNEL_NAME=mychannel (配置环境变量)

    peer channel fetch 0 mychannel.block -o orderer.example.com:7050 -c CHANNELNAMEtlscafile C H A N N E L N A M E − − t l s − − c a f i l e ORDERER_CA (从orderer获取当前通道的配置信息,注意此处的的0表示从区块number为0的开始,如果不填表示从当前更改配置信息的区块开始,这样行不通,必须从0开始)

  11. peer0.org3加入通道
    export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt
    export CORE_PEER_ADDRESS=peer0.org3.example.com:7051 (配置peer0.org3环境变量)

    peer channel join -b mychannel.block (peer0.org3加入通道)

  12. peer1.org3加入通道
    export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/tls/ca.crt
    export CORE_PEER_ADDRESS=peer1.org3.example.com:7051 (配置peer1.org3的环境变量)

    peer channel join -b mychannel.block (peer1.org3加入通道)

  13. 升级链码和背书策略等

    peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/ (Org3Cli里面安装chaincode)

  14. org1里升级chaincode(注意在cli容器中操作)
    export CORE_PEER_LOCALMSPID=”Org1MSP” export 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 export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=peer0.org1.example.com:7051

    peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/

  15. org2 里升级chaincode(注意在cli容器中操作)
    export CORE_PEER_LOCALMSPID=”Org2MSP” export 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 export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp export CORE_PEER_ADDRESS=peer0.org2.example.com:7051

    peer chaincode install -n mycc -v 2.0 -pgithub.com/chaincode/chaincode_example02/go/

  16. 升级背书策略(任何一个安装了该链码的机器上都行)
    peer chaincode upgrade -o orderer.example.com:7050 –tls COREPEERTLSENABLEDcafile C O R E P E E R T L S E N A B L E D − − c a f i l e ORDERER_CA -C $CHANNEL_NAME -n mycc -v 2.0 -c ‘{“Args”:[“init”,”c”,”900”,”d”,”100”]}’ -P “OR (‘Org1MSP.peer’,’Org2MSP.peer’,’Org3MSP.peer’)”

  17. 测试

    peer chaincode query -C $CHANNEL_NAME -n mycc -c ‘{“Args”:[“query”,”c”]}’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值