1. 程式人生 > >第七章 手動部署Fisco Bcos 區塊鏈並完成新增群組,在原有群組中新增機構

第七章 手動部署Fisco Bcos 區塊鏈並完成新增群組,在原有群組中新增機構

鑑於筆者以前各大部落格教程都有很多人提問,早期建立一個技術交流群,裡面技術體系可能比較雜,想了解相關區塊鏈開發,技術提問,請加QQ群:538327407


目標

1、新增群組搭建完整聯盟鏈

2、根據群組新增機構

3、新增群組,將原有機構加入


一、前提準備:

java 環境

詳細可以參考前面幾章的操作。

二、正式操作

 官方參考文件:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/tutorial/enterprise_quick_start.html#ac2

 

畫了一張圖,大致說明操作。

 

 

 

 

 

 

 

 

1、創世機構生成鏈證書,dir_chain_ca 檔案複製給各個機構

2、在各個機構的的generator 目錄下 執行命令生成個各自的機構證書

以下三個命令 要在各自的操作介面操作

機構A:./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA
機構B:./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyB

 

備註:生成機構證書 都需要有鏈證書等做基礎

3、鏈證書、機構證書、機構私鑰至機構對應機構的meta目錄下

上圖為創世區塊的meta 資料夾,裡面還收集了其他節點的證書。

普通機構,只有自己的節點證書、還有其他群組的peers.txt 的檔案,以及群組配置檔案、鏈證書、自己的機構證書等。

 

4、修改各個機構的node_deployment.ini檔案

p2p_ip 和rpc_ip 修改為 內網地址

前提:內網埠等要開啟

5、生成各個機構的節點證書和p2p 連線資訊檔案

機構A:./generator --generate_all_certificates ./agencyA_node_info
機構B:./generator --generate_all_certificates ./agencyB_node_info

 

需要用的上面node_deployment.ini,及機構meta資料夾下的機構證書與私鑰

6、各自機構peers.txt 互相傳遞

機構生成節點時需要指定其他節點的節點P2P連線地址,因此,A機構需將節點P2P連線地址檔案發給其他機構,同樣的其他機構都要把peers[自定義].txt copy 給除自己外的機構/meta 資料夾下

7、創世區塊修改群組

修改:./conf/group_genesis.ini

 

配置group_id,以及p2p_ip,rpc_ip 

8、此步會根據機構A的meta資料夾下配置的節點證書,生成group_genesis.ini配置的群組創世區塊

./generator --create_group_genesis ./group

 

生成好之後,會出現一個group 資料夾

將./group/group.1.genesis 檔案copy 個每個機構 的meta 下面

9、生成所屬節點

./generator --build_install_package ./meta/peers.txt ./nodeA

./generator --build_install_package ./meta/peers.txt ./nodeB

./generator --build_install_package ./meta/peers.txt ./nodeC

說明:上面命令 peers.txt 是可以自定義名稱的,初始化時候我將他們統一放到peers.txt ,不過後續拓展新的節點和新機構,我有單獨拆分為:比如機構A中有機構B的peersB.txt 配置檔案。

 

10、啟動節點

bash ./nodeA/start_all.sh

如果出現端口占用,這麼解決

 

(1).根據埠查詢程序

sudo lsof -i:[port]

 

(2).根據PID殺掉程序

sudo kill [PID]

 

重新啟動

bash ./nodeA/start_all.sh

 

檢視:

程序:ps -ef | grep fisco

檢視節點:tail -f ./node*/node*/log/log* | grep +++

出現+++ 為節點正常共識

 

 


 


生成新的機構

(1) 生成機構證書

(2)copy 機構證書到meta 目錄,並將 /agency*_node_info/cert*.crt 放到對應的創世區塊的機構/meta/

同時包括p2p連線peers.txt


(3) 修改 node_deployment.ini 檔案

下載控制檯

bash <(curl -s https://raw.githubusercontent.com/FISCO-BCOS/console/master/tools/download_console.sh)

 

如果下載忙 ctrl+C 重新下載,多實驗幾次,有的時候比較快

修改console 內部的conf ,ca證書、節點證書和私鑰 一個xml 配置項

官方說法:
將節點sdk目錄下的ca.crt、node.crt和node.key檔案拷貝到conf目錄下。
將conf目錄下的applicationContext-sample.xml檔案重新命名為applicationContext.xml檔案。
配置applicationContext.xml檔案,其中添加註釋的內容根據區塊鏈節點配置做相應修改。
提示:相關IP改為內網ip
則applicationContext.xml配置不用修改。

 

 


一個機構 內部節點 每個節點 證書都不一樣,

控制檯可以使用swith 2 等操作切換,不需要手動修改 配置

參考:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/sdk/sdk.html#spring

 

新建群組(將原有機構A加入--》到機構C為創世區塊的群組2中)

前提條件:完成基礎安裝

下載

cd ~/ && git clone https://github.com/FISCO-BCOS/generator.git

 

安裝

此操作要求使用者具有sudo許可權。

cd generator && bash ./scripts/install.sh

 

檢查是否安裝成功,若成功,輸出 usage: generator xxx

./generator -h

 

拉取節點二進位制

拉取最新fisco-bcos二進位制檔案到meta中

./generator --download_fisco ./meta

 

檢查二進位制版本

若成功,輸出 FISCO-BCOS Version : x.x.x-x

./meta/fisco-bcos -v

將機構A  中./dir_chain_ca/目錄copy 到專案中

(1)修改新機構的 group_genesis.ini 檔案, group_id 等改為新的群組,其他的也做相應修改

(2) 將機構A  /agencyA_node_info/cert*.crt 放到 機構C的meta 目錄下

(3) 對應的peers.txt 也copy 過去,並改名為peers[自己定義].txt,

(4) 機構C 本身的node_deployment.ini 配置好,就配置了 group_id 改為 對應的群組

(5)機構C生成節點證書及P2P連線資訊檔案 ,執行如下命令:

./generator --generate_all_certificates ./agencyC_node_info

 

(6)對應的peers.txt 複製給機構A的meta 下面的peers.txt 中

(7)生成group_genesis.ini配置的群組創世區塊。執行如下命令:

 ./generator --create_group_genesis ./group

 

(8)group.2.genesis copy 給機構A 的meta 檔案下

(9)機構C生成所屬節點,執行如下命令:

 ./generator --build_install_package ./meta/peersA.txt ./nodeC 

 


(10)啟動節點 bash ./nodeC/start_all.sh

(11)下載console ,把之前其他機構console 拿過來,修改console 目錄下conf

官方說法:
將meta/node_172.27.16.5_3030 等類似 目錄下的ca.crt、node.crt和node.key檔案拷貝到conf目錄下。
將conf目錄下的applicationContext-sample.xml檔案重新命名為applicationContext.xml檔案。
配置applicationContext.xml檔案,其中添加註釋的內容根據區塊鏈節點配置做相應修改。

則applicationContext.xml配置不用修改。

(12) 使用switch 2 等切換控制檯,前提是要給控制檯配置好配置


在原有的群組裡面新增機構(注意要在同一個內網,或者網路是可以聯通的情況下)

 ps:本事例和官方操作不同,官方是在機構A和機構C已經建立群組2的基礎上,將機構C加入群組1,筆者是在機構A和機構B組合群組1情況下,新增一個獨立機構,並完全加入到群組1中

 

1、下載源程式,將機構A的鏈證書資料夾(./dir_agency_ca),傳送機構C的專案根目錄下

2、生成機構C證書:

./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyC

 

3、傳送鏈證書、機構證書、機構私鑰,示例是通過檔案拷貝的方式,
放到機構C的工作目錄的meta目錄下

 

4、修改 node_deployment.ini,主要修改 p2p_ip和rpc_ip

5、將C的節點peers.txt copy 給A,同時將A的copy 給C

6、生成機構C節點證書,執行如下命令:

./generator --generate_all_certificates ./agencyC_node_info

 

7、agencyC_node_info 相關 cert*.crt copy 給機構A(創世區塊所在機構)./meta/

 

8、將群組group.1.genesis 檔案分配copy 給機構C 的meta ,生成機構C所屬節點

並執行命令:

./generator --build_install_package ./meta/peers.txt ./nodeC

 

啟動機構C的節點:

bash ./nodeC/start_all.sh

 

9、機構C執行,為機構C節點新增群組1創世區塊後需從啟節點

./generator --add_group ./meta/group.1.genesis ~/generator/nodeC

 

10、機構A中進入控制檯,新增新的節點

主要通過控制檯 addSealer 命令: 後面的節點id 是新加入機構C的兩個節點,通過機構C中meta 資料夾下的節點資料夾中的node.nodeid 檔案獲取

 

 

 如上操作,新增新節點成功

 

11、重啟節點

bash ~/generator/nodeD/stop_all.sh
bash ~/generator/nodeD/start_all.sh

 

 

12、在機構C的控制檯中,加入群組A的配置,就可以了

 

<?xml version="1.0" encoding="UTF-8" ?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
         http://www.springframework.org/schema/tx   
    http://www.springframework.org/schema/tx/spring-tx-2.5.xsd  
         http://www.springframework.org/schema/aop   
    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">


    <bean id="encryptType" class="org.fisco.bcos.web3j.crypto.EncryptType">
        <constructor-arg value="0"/> <!-- 0:standard 1:guomi -->
    </bean>

    <bean id="groupChannelConnectionsConfig" class="org.fisco.bcos.channel.handler.GroupChannelConnectionsConfig">
        <property name="allChannelConnections">
            <list>
                <bean id="group1"  class="org.fisco.bcos.channel.handler.ChannelConnections">
                    <property name="groupId" value="1" />
                    <property name="connectionsStr">
                        <list>
                            <value>172.27.16.5:20200</value>
                            <value>172.27.16.5:20201</value>

                        </list>
                    </property>
                </bean>
            </list>
        </property>
    </bean>

    <bean id="channelService" class="org.fisco.bcos.channel.client.Service" depends-on="groupChannelConnectionsConfig">
        <property name="groupId" value="1" />
        <property name="agencyName" value="fisco" />
        <property name="allChannelConnections" ref="groupChannelConnectionsConfig"></property>
    </bean>

</beans>

 

 在機構C控制檯進行共識測試,各個控制檯的輸出共識結果相同

&n