動的動的な組織を追加または変更組織のファブリック-java sdkの完了を使用する前に、我々は、CLIを使用する方法を見て動的に組織を増加させて行われます。
なぜあなたが同じであるため、使用javasdkのステップで、彼についての方法を学びました;ので、ここで、私はあなたが組織を完了するために、動的に追加さjavasdk使用してステップバイステップでかかります。
1、CP暗号config.yaml暗号-CONFIG-addorg.yaml
暗号設定-addorg.yamlのコピーコンテンツを変更します
関連する証明書ORG3の--config =を生成./bin/cryptogen使用します。/暗号-CONFIG-addorg.yaml指令発生器
2、configtx.yamlを変更し、組織の情報を増やします
組織JSONに関連するデータを生成する./bin/configtxgen -printOrg Org3MSP -profile ./configtx.yaml>チャネルアーティファクト/ org3.jsonコマンドを使用して
3、CLIクライアントのORG1を入力してください。
4、ダウンロードJQインストールツール
aptのアップデートを実行します&& aptのインストール-y JQ
関連コンテンツを整理引っ張って、内容を実行し、
ここでは、このツールは主に、JSON構造の処理ツールである、JQについて話をします。Javaは交換することができJSONObject対応を使用することです。
5.最新の構成ブロックmychannelチャネルを取得し、重複を防止または構成の変更を置き換え、並行性を確保するために支援し、二つの組織の削除を防ぐことができます。
因为我这里的tls是关闭的,所以执行peer channel fetch config mychannel.pb -o orderer.example.com:7050 -c mychannel如果没有关闭,则执行peer channel fetch config mychannel.pb -o orderer.example.com:7050 -c mychannel --tls --cafile $ORDERER_CA
前提要先执行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,定义环境变量
6,将pb内容转换到json文件中
configtxlator proto_decode --input mychannel.pb --type common.Block | jq .data.data[0].payload.data.config > mychannel.json
7,执行以下命令,将之前生成好的org3.json和 mychannel.json追加合并到临时文件
jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' mychannel.json ./channel-artifacts/org3.json > mychannel_config.json
8,把更新前后的文件打包成二进制文件
configtxlator proto_encode --input mychannel.json --type common.Config > original_mychannel.pb
configtxlator proto_encode --input mychannel_config.json --type common.Config > modified_mychannel.pb
9,获取增量包并且补全,转换成二进制文件
使用工具,计算新老二进制文件,得出相差的内容;这一块的结构体以update的信息构成;
configtxlator compute_update --channel_id mychannel --original original_mychannel.pb --updated modified_mychannel.pb > mychannel_update.pb
configtxlator proto_decode --input mychannel_update.pb --type common.ConfigUpdate > mychannel_update.json
我们将修改后的二进制文件转码看一下他的大概内容。
将对比后的json内容,重新构建在下述的结构体,注意这个结构体是固定格式。在提交修改交易的时候,会对其进行对象映射。有一些变化都会有问题;
echo '{"payload":{"header":{"channel_header":{"channel_id":"mychannel", "type":2}},"data":{"config_update":'$(cat mychannel_update.json)'}}}' | jq . > mychannel_update_envelope.json
将修改后的结构体,转码为pb格式
configtxlator proto_encode --input mychannel_update_envelope.json --type common.Envelope > mychannel_update_Org_envelope.pb
10,签署并提交配置更新
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/[email protected]/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
peer channel signconfigtx -f mychannel_update_Org_envelope.pb
组织org2中在提交一次
执行结果:
11,获取签名之后通知orderer更新通道信息
peer update -f mychannel_update_Org_enevlope.pb -c mychannel -o orderer.exeample.com:7050
结果:
12,配置org3的yaml文件,启动即可。
13,启动
Docker-composer -f peer-org3.yaml up -d
14,jion
export CORE_PEER_LOCALMSPID="Org3MSP"
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_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=peer0.org3.example.com:7051
Peer channel join -b mychannel.block
15,安装升级合约
新增的组织,想要参与交易和数据同步,必须要将合约进行升级,否则在想orderer发消息同步时,会抛角色不匹配,被拒绝同步数据
总结一下,也是为下面我们使用java-sdk完成动态增加组织或修改配置提供知识储备:
1,通过configtxgen工具生成组织3证书,和组织3的详细新json文件;
2,通过configtxlator获取目标channel的pb,转码为json详情
3,将org3的json和channel详细进行合并,转码成最新的字节pb
4,计算新老pb,获得将要修改的配置信息pb,再将其转码为json
5,将转码后的json,在进行格式化,组织可被fabric解析的数据结构
6,将现存的几个组织(原channel参与的组织),对其进行签名
7,提交到orderer,进行配置化修改
8,将org3,jion到目标channel,并安装、升级合约;就开始同步数据
需要注意的是,此次新增的组织只对这个channel有效,若想其对其他channel也生效,就需要重复上述的操作;对新的channel进行配置化修改