1. 程式人生 > >【乾貨乾貨】hyperledger fabric 之動態新增組織/修改配置 (Fabric-java-sdk) 下

【乾貨乾貨】hyperledger fabric 之動態新增組織/修改配置 (Fabric-java-sdk) 下

 

我們接著上一節來講;

在熟悉動態增加組織或修改配置的步驟後,我們就可以使用java的api來完成動態增加組織或修改配置了;

廢話不多說,直接上乾貨;

1,預製條件

     org3的證書以及組織3的MSP詳情資訊,需要提前準備(如果不清楚的,可以回頭看一下上一章)

     fabric-java-sdk   1.2  我這裡使用的是1.2版本,更高版本基本相同,沒有什麼大變化

 2,啟動configtxlator工具的rest服務   

      準備configtxlator工具,你可以通過原始碼編譯或在網上自己下載

      執行 ./configtxlator start命令,預設埠是7059

     

 3,建立通道連結

   

   4, 獲取通道配置位元組碼

          byte[] mychannelConfig = channel.getChannelConfigurationBytes();

          這一步對應的是peer channel fetch config命令生成後的pb檔案

   5,將位元組碼轉化為json

         

     通過configtxlator 工具提供的decode方法,解碼的訊息型別為 common.Config

    6,讀取org3.json內容

    

     7,將組織3的內容和channel當前的配置資訊合併

     當前配置資訊的結構體如下圖,我們可以使用JSONObject來代替cli客戶端的jq工具來操作json內容

      

 

               

  8,將合併後的json檔案,編碼成位元組碼

    

    將json檔案提交給configtxlator 工具提供的encode方法,解碼的訊息型別為 common.Config

    

    這一段邏輯就相當於是將修改後的json,轉化為pb檔案的邏輯

    9,在第4步中,我們獲取過通道的位元組碼,而這裡我們有修改後的位元組碼,只要對這兩個做一次對比;就可以獲取到需要修改的部分內容;

    

     依舊使用configtxlator工具,而這時候需要呼叫的是計算介面:compute,訊息型別為:update-from-configs

     

   10,構建修改配置,向orderer傳送變更交易了;

      這裡大家可能有個疑惑,不是要需要其他組織簽名的嗎?是不是少了一步?

      當前需要簽名,而這也是使用api的一個好處,他幫我們做了好多事情;先看一下下面的這段程式碼,有幾點注意點:

        

      注意點:

              a),通道的updateChannelConfiguration方法,第二個引數是無邊界的陣列;

              

              b)這個引數,就是各個組織的修改提供的簽名人。上面是動態增加組織的,如果是修改配置的話;比如修改區塊大小資訊,那麼這裡主要傳一個orderer的使用者就可以; 

              c)是不是什麼使用者都可以進行提交修改?當然不是,必須是admin;

              d)此方法,是沒由返回值的,所以只能通過異常捕獲,或使用斷言的方法,來判斷你的修改是否成功了;

      備註:channel,在提交修改的sendUpdateChannel方法中,動態幫我們組裝了echo '{"payload":{"header":{"channel_header":... 這個段邏輯。這也解釋了上述的那個問題。

        

 

    11,判斷是否修改成功

     

       主要再獲取一下最新的通道配置,檢查一下你新增的組織是否在這個json物件中即可;

 

    12,其他步驟,就不在追溯了,後面要做的就是,組織jion、安裝/升級合約.這樣組織3才會更新資料。否則會被orderer拒絕訪問同步。在orderer端,你會看到需要Org1MSP/Org2MSP,但獲取到是Org3MSP的異常;

    我使用是是couchdb,資料已經同步。ok完成動態新增組織;動態修改配置,其實是一個步驟。就不在追溯了;

    

 

     備註:

     當前這一章中提到了configtxlator工具,但並沒有過多的對其進行詳細說明,後面我們花一章時間對他做一個說明;

 

               

&n