【干貨干貨】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工具,但並沒有過多的對其進行詳細說明,后面我們花一章時間對他做一個說明;

 

               

 


免責聲明!

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



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