【干貨干貨】hyperledger fabric 之動態添加組織/修改配置 (Fabric-java-sdk) 上


在使用fabric-java的sdk完成動態添加組織或動態修改組織之前,我們先看一下使用cli是如何完成動態增加組織的;

為什么要先學習一下他,因為使用javasdk的方式步驟是一樣的;所以下面,我也會一步一步帶着大家使用java-sdk完成動態添加組織;

 

1,cp crypto-config.yaml crypto-config-addorg.yaml

修改crypto-config-addorg.yaml副本內容

 

使用./bin/cryptogen generate --config=./crypto-config-addorg.yaml命令生成org3的相關證書

 

2,修改configtx.yaml,增加組織信息

 

通過使用./bin/configtxgen -printOrg Org3MSP -profile ./configtx.yaml > channel-artifacts/org3.json命令,生成組織相關的json數據

 

 

3,進入org1的cli客戶端;

4,下載jq安裝工具

執行命令apt update && apt install -y jq

 

執行一下內容,拉取組織相關內容;

 這里說一下jq,這個工具主要是json結構體處理工具。對應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/Admin@org1.example.com/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/Admin@org3.example.com/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進行配置化修改


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM