Fabric 2.0 之更新通道配置

前言

  通道配置中包含了區塊鏈網絡的結構以及控制網絡交互的信息。這些配置由通道成員共同決定,並提交到通道的賬本中,可以使用configtxgen工具來構建通道配置。
  配置包含在創世塊中,更新通道配置的過程(例如添加通道成員或更改通道策略)稱爲配置更新交易。在生產環境中,通常由單個通道管理員來配置更新。
  雖然應用通道(application channel )和排序系統通道(system channel)不完全相同,但卻十分類似,具有相同的基本規則和結構,拉取和編輯的命令也是如此。因此這裏我們以應用通道爲例。由於通道配置信息比較長,這裏不放上來了,感興趣的朋友可以點擊下載鏈接查看:通道配置文件 (提取碼:33ox)。
  配置信息主要分成三塊:Channel,Application和Orderer。每個配置都會有與其相關的配置參數(例如MSP信息)。

通道配置參數

  Channel/Application: 控制應用通道特有的配置參數(例如添加或刪除通道成員)。 默認情況下,更改這些參數需要大多數組織管理員的簽名,分以下兩種情況:
  (1)通道中添加組織:要想將組織添加到通道,必鬚生成其MSP和其它組織參數,並添加到Channel/Application/groups下。
  (2)與組織相關的參數:任何組織相關的參數均可以修改,例如錨節點的配置,組織admin的證書。更改這些值僅需要組織本身的管理員同意。
  Channel/Orderer: 控制排序服務或者排序系統通道的參數,需要大多數排序組織的管理員同意 。
  (1)Batch size:這個參數決定了一個區塊中的交易的數量和大小,區塊不會大於absolute_max_bytes 或者交易數量大於max_message_count 。
  (2)Batch timeout.:批等待時間,即第一個交易等待batch timeout時間纔會切割區塊。減小該值,將會降低等待時間,但如果這個值過小,將會影響吞吐量。
  (3)Block validation:定義了某個塊被視爲有效的簽名要求,默認情況,需要多個排序組織的簽名。
  (4)Consensus type:共識類型。
  (5)Raft ordering service parameters:選用etcd raft共識時的參數。
  (6)Kafka brokers:選用Kafka共識時brokers的配置。
  Channel:
  Orderer addresses:可以廣播和傳遞的地址列表,Peer節點從中選擇。
  Hashing structure:塊數據是字節數組。 塊數據的哈希計算爲默克爾樹。 此值指定該Merkle樹的寬度。 目前,此值固定爲4294967295,它對應於塊數據字節串聯的簡單平面哈希。
  Hashing algorithm:哈希算法,用於計算編碼到區塊鏈塊中的哈希值的算法。 特別是,這會影響數據散列以及該塊的先前的塊散列字段。 注意,此字段當前只有一個有效值(SHA256),不應更改。

更新通道配置

  更新通道配置,一般分爲以下三個步驟:

  1. 獲取最新的通道配置
  2. 創建修改後的通道配置
  3. 重新編碼並提交配置

獲取最新的通道配置

  作爲更新通道步驟的第一步,我們需要獲取最新的通道配置塊。
  先配置節點信息:

export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
export CHANNEL_NAME=mychannel
export ORDERER_ADRESS=orderer.example.com:7050

  拉取protobuf格式的通道配置

peer channel fetch config config_block.pb -o $ORDERER_ADRESS  -c $CHANNEL_NAME--tls --cafile $ORDERER_CA

  使用configtxlator工具轉化爲易讀的json格式:

configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.json

  使用jq工具去掉不必要的配置信息:

jq .data.data[0].payload.data.config config_block.json > config.json

  複製config.json得到modified_config.json:

cp config.json modified_config.json

創建修改後的通道配置

  有兩種修改配置的方法:

  1. 使用文本編輯器修改modified_config.json
  2. 使用jq工具

   選擇手動編輯配置還是使用jq取決於修改的用例。 由於jq簡潔明瞭且可編寫腳本(當對多個通道進行相同的配置更新時,這是一個優勢),因此它是執行通道更新的推薦方法。
   關於jq在更改通道配置時的使用,參考:Fabric 2.0 之動態添加組織

重新編碼並提交配置

   第一步是將config.json和修改後的modified_config.json轉化爲protobuf格式,然後計算兩者差異:

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

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

configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_config.pb --output config_update.pb

   更改配置:

configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json

echo '{"payload":{"header":{"channel_header":{"channel_id":"'$CHANNEL_NAME'", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . > config_update_in_envelope.json

configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb

   在提交交易前,我們需要獲取足夠數量(通道更新策略,默認大多數組織簽名)的組織簽名,命令如下,這裏我們以組織一admin角色進行簽名。

peer channel signconfigtx -f config_update_in_envelope.pb

   如還需要組織二的簽名,可以切換身份到組織二的admin角色:

export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org2.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=peer0.org2.example.com:9051

   組織二簽名並提交交易,排序服務會變換並得到一個全新的完整的通道配置:

peer channel update -f config_update_in_envelope.pb -c $CHANNEL_NAME -o $ORDERER_ADRESS --tls true --cafile $ORDERER_CA
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章