fabric 关于追加新组织结构


用configtxlator+cli+sdk

最近对动态追加组织Org3MSP进行了确认(cli+sdk),以下是所有的步骤。(过程粗略,详细部分自己学习研究,只是提供思想)
cli用来生成pb文件,sdk用来做签名
1.取得e2e例子的mychannel的配置定义
CORE_PEER_LOCALMSPID="Org1MSP" 
peer channel fetch config 'mychannel.pb' -o 'orderer0.example.com:7050' -c 'mychannel'
2.取得系统channel的配置定义
CORE_PEER_LOCALMSPID="OrdererMSP" 
peer channel fetch config 'syschannel.pb' -o 'orderer0.example.com:7050' -c 'testchainid'
3.生成新组织的所有密钥
做一个新的crypto-config.yaml文件,里面只有新组织的情报
通过下面命令,生成所有密钥文件
...../hyperledger/fabric/release/linux-amd64/bin/cryptogen generate --config=./crypto-config-neworg.yaml
4.做两个OrgMSPsample.json文件,分别用于普通channel和系统channel。两个的区别在于,系统channel有AnchorPeers和版本的定义
5.对于生成的密钥进行base64编码,并填写到OrgMSPsample.json里面。共牵涉3个项目如下。
admins ->../crypto-config/peerOrganizations/org3.example.com/users/[email protected]/msp/admincerts/[email protected]
root_certs ->../crypto-config/peerOrganizations/org3.example.com/users/[email protected]/msp/cacerts/ca.org3.example.com-cert.pem
tls_root_certs ->../crypto-config/peerOrganizations/org3.example.com/users/[email protected]/msp/tlscacerts/tlsca.org3.example.com-cert.pem
命令:cat xxxxx | base64 | sed ":a;N;s/\n//g;ta" 
6.参照fabric/examples/configtxupdate/例子,把普通channel和系统channel的差分pb文件做好,准备给sdk使用。
7.在sdk利用上面生成的查分pb文件,对系统channel进行更新(向Consortiums追加org,用OrderMSP的Admin用户提交更新)。
9.在sdk利用上面生成的查分pb文件,对mychannel进行更新(向application追加org,,用Org1MSP的Admin用户和Org2MSP的Admin用户提交更新)
10.启动新org的peer节点
11.在cli下做下面事情,目的为了更新chaincode版本。
①取得mychannel的block(peer channel fetch)
②将新启动的peer节点追加到mychannel下面
③所有新旧peer节点都加入新chaincode
peer chaincode install -n mycc -v 2.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
※以前的意识是所有节点都安装chaincode,其实,只有需要执行chaincode的节点才会去安装chaincode,同时这个节点也是背书节点。
这样chaincode对于其他节点是保密的。没有安装chaincode的节点,不能执行chaincode,但是可以验证交易并提交到账本。
④升级channel,以下两点需要注意
a.必须要和旧版本同名(mycc)
b.策略里面把新Org3MSP加进去
c.chaincode upgrade和chaincode instantiate一样,只需要执行一次。由于会调用cc的init方法,所以init在设计的时候要考虑版本升级问题。
peer chaincode upgrade -o orderer0.example.com:7050 -C 'mychannel' -n mycc -v 2.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -P "OR ('Org1MSP.member','Org2MSP.member','Org3MSP.member')" -c '{"Args":["init","","","",""]}' 
⑤执行invoke,query操作时要制定版本号
※由于旧的版本不会自动删除,所以需要手动删除。将来1.1版本会提供[peer channel signconfigtx]来收集签名。
好麻烦的过程!!!!!!!!!!!!!


本来可以在SDK里面把上面所有的事情都做了,但是在调用configtxlator/compute/update-from-configs之后,

返回的数据是有问题的不能正常解码,导致很多东西需要手动去做,又回到了上面的状态。

-----------------------------------------------------------------------------------------------

configtxlator使用注意事项

1,make时在fabric路径下面做,然后环境变量要更新
make configtxlator
make configtxgen
make peer
环境变量要更新
export PATH=/home/ubuntu/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin:$PATH

2,跑reconfig_batchsize的时候,要启动一个特别的cli
①CORE_PEER_LOCALMSPID=OrdererMSP
②-v $GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config/ordererOrganizations/example.com/users/[email protected]/msp:/var/hyperledger/orderer/msp \
③其他按照普通cli设定

-----------------------------------------------------------------------------------------------

orderer.block作为初始block存在,但是每个channel也有自己的初始block。

在e2e例子里面,join channel的时候,就是join自己的channel.

如果多个channel的话,这里就分别join很多channelX.block了。

另外在configtxlator中,也是根据[-c channelName]来取得相应channel配置和更新相应channel配置。

每个通道中各有一个账本。各个节点对于它所属的每个通道,都会保存一份该通道的账本副本

----------------------------------------------------------------------
在最新版本1.0.1中,reconfig_batchsize无法确认(beta时确认了没问题),因为根据分析,
max_message_count属于OrdererMSP的内容,如果在cli模式下,需要指定msp,这时只能指定Org1MSP或者Org2MSP,
这样就会出现下面的异常。
The identity is a member of a different MSP (expected OrdererMSP, got Org1MSP)
解除方案,
一个是在创世块中,把OrdererMSP改成Org1MSP,然后再交给orderer使用。
另一个是,等待peer channel signconfigtx的出现,获得OrdererMSP的签名。

另一种方法,更改msp

参照
https://github.com/yeasy/docker-compose-files/blob/master/hyperledger/1.0.2/scripts/func.sh
http://www.mamicode.com/info-detail-2002133.html

获取系统channel
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
CORE_PEER_LOCALMSPID="OrdererMSP"
CORE_PEER_TLS_ROOTCERT_FILE=$ORDERER_CA
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp
peer channel fetch config 'config_block.pb' -o 'orderer0.example.com:7050' -c 'testchainid' --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

利用configtxtor修改config_block.pb内容

更新系统channel
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
CORE_PEER_LOCALMSPID="OrdererMSP"
CORE_PEER_TLS_ROOTCERT_FILE=$ORDERER_CA
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/[email protected]/msp
peer channel update -f 'config_update_in_envelope.pb' -c 'testchainid' -o 'orderer0.example.com:7050' --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

--------------------------------------------------------------------------------------------------

运行configtxlator.js例子
fabric-sdk-node/test/integration/configtxlator.js
安装下面两个插件
sudo npm install superagent --save
sudo npm install superagent-promise --save
按照e2e环境修改下面配置文件
../fabric-sdk-node/test/integration/e2e/config.json
设定link
cd /home/ubuntu/go/src/github.com/hyperledger/fabric-sdk-node/test/integration
ln -s /home/ubuntu/go/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config ./crypto-config
ln -s /home/ubuntu/go/src/github.com/hyperledger/fabric/examples/e2e_cli/channel-artifacts ./channel-artifacts
密钥文件的设定路径
../fabric-sdk-node/test/unit/util.js
getAdmin()、getOrdererAdmin()
启动configtxlator
configtxlator start
启动configtxlator.js
cd /home/ubuntu/go/src/github.com/hyperledger/fabric-sdk-node
node --debug-brk=5858 test/integration/configtxlator.js

你可能感兴趣的:(区块链)