鑑於筆者以前各大部落格教程都有很多人提問,早期建立一個技術交流群,裡面技術體系可能比較雜,想了解相關區塊鏈開發,技術提問,請加QQ群:538327407
目標
1、新增群組搭建完整聯盟鏈
2、根據群組新增機構
3、新增群組,將原有機構加入
一、前提準備:
java 環境
詳細可以參考前面幾章的操作。
二、正式操作
畫了一張圖,大致說明操作。
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控制檯進行共識測試,各個控制檯的輸出共識結果相同