[以下是基于官方教程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中都有]
./byfn -m generate
./byfn -m up
进入fabric-sample/first-network/下面将fabric网络启动,以下操作都是在first-network下面进行的
mkdir org3-artifacts (此文件夹以及下面的文件在fabric-sample1.1版本中都有,不需要新建)
cd org3-artifacts (进入org3-artifacts目录下,以下几个操作都是在org3-artifacts目录下操作的)
vim org3-crypto.yaml (参考附录)
vim configtx.yaml (参考附录)
../../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中包含)
cd .. (进入first-network目录,注意和上面2.2对应)
cp -r crypto-config/ordererOrganizations org3-artifacts/crypto-config/
(将orderer相关的证书拷贝到org3的目录中,让新的组织可以连接到orderer)
docker exec -it cli bash (新加的组织需要原来channel中成员的同意,进行org1,org2对org3交易进行签名等处理,以下操作加上#都是带边在容器内操作)
!如果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
配置环境变量
检查环境变量是否配置成功
解码原来网络的配置文件config_block.pb
将原来的网络配置文件转化成json,使用到了configtxlator proto_decode和jq工具
在原来的配置文件中增加org3的配置信息,生成 modified_config.json
将config.json转换成protobufs(下面计算会需要)
将modified_config.json 转换为 protobufs(下一步计算会需要)
根据config.pb和modified_config.pb计算出升级的org3_update.pb
解码org3_update.pb到json文件
生成配置升级的json
将生成的配置升级文件org3_update_in_envelope.json转化成protobufs
为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
配置交易到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
新打来一个terminal,,在first-network下面操作
vim docker-compose-org3.yaml (编写编写org3的节点文件,参考附录)
docker-compose -f docker-compose-org3.yaml up -d (启动org3网络)
进入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 ORDERER_CA (从orderer获取当前通道的配置信息,注意此处的的0表示从区块number为0的开始,如果不填表示从当前更改配置信息的区块开始,这样行不通,必须从0开始)
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环境变量)
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的环境变量)
升级链码和背书策略等
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/
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 upgrade -o orderer.example.com:7050 –tls
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’)”
测试