手把手教你實操部署FISCO BCOS聯盟鏈(附每一步代碼)

感謝FISCO BCOS社區貢獻者——劉海鋒,貢獻此文。

貢獻無大小,分享永留傳。謝謝你們的每一次貢獻。最後,如果你也想成爲Mr.FISCO BCOS,一起幹出點改變世界,到老了可以跟孫輩們吹吹牛的事,歡迎加入社區。

69adbc6a8c37857202ca71d5f6378212c5a.jpg

 

經過嘗試,我按以下操作順序執行,成功部署了一個符合此場景描述(點擊直達)的聯盟鏈。

 

1,聯盟委員會自建鏈證書

 

FISCO BCOS企業級部署工具提供了自建聯盟鏈證書的功能,如下:

cd generator  

#創建一個專用於放置證書的目錄(該目錄位置及名稱均可自定義,只要保證後續使用企業級部署工具需要提供證書目錄時,目錄路徑正確即可)
mkdir key_crt_dir

#在generator/key_crt_dir/chain下生成普通版鏈證書:
./generator --generate_chain_certificate ./key_crt_dir/chain

#在generator/key_crt_dir/chain-g下生成普通版鏈證書:
./generator --generate_chain_certificate ./key_crt_dir/chain-g -g
#-g參數表示國密

#按照企業級部署工具的使用要求將證書放在generator/meta/目錄下
cp ./key_crt_dir/chain-g/gmca.crt ./meta/gmca.crt 

cp ./key_crt_dir/chain/ca.crt ./meta/ca.crt


 

2,機構向聯盟委員會申請機構證書

 

將第2步的 generator 文件夾(裏面已經包含了鏈證書)複製爲同級目錄 generator-Agenerator-Bgenerator-Cgenerator-D (以下簡稱爲目錄generator-Agenerator-Bgenerator-Cgenerator-D)分別用於模擬聯盟委員會爲ABCD四家機構頒發自建證書的操作:

cd rc3-test-BCOS

cp -r generator generator-A && cp -r generator generator-B && cp -r generator generator-C && cp -r generator generator-D


企業級部署工具提供了頒發聯盟委員會自建機構證書的功能:頒發聯盟委員會自建機構證書

模擬聯盟委員會爲機構A頒發證書:

cd generator-A

#在generator-A/key_crt_dir/agencyA_key_crt_dir下生成機構A的普通版證書
./generator --generate_agency_certificate ./key_crt_dir/agencyA_key_crt_dir ./key_crt_dir/chain test-agencyA

#在generator-A/key_crt_dir/agencyA-g_key_crt_dir下生成機構A的國密版證書
./generator --generate_agency_certificate ./key_crt_dir/agencyA-g_key_crt_dir ./key_crt_dir/chain-g test-agencyA -g

#按照企業級部署工具的使用要求將證書放在generator-A/meta/目錄下
cp ./key_crt_dir/agencyA_key_crt_dir/test-agencyA/agency.crt  ./key_crt_dir/agencyA_key_crt_dir/test-agencyA/agency.key ./meta/

cp ./key_crt_dir/agencyA-g_key_crt_dir/test-agencyA/gmagency.crt  ./key_crt_dir/agencyA-g_key_crt_dir/test-agencyA/gmagency.key ./meta/


模擬聯盟委員會爲機構B頒發證書:

cd generator-B

#在generator-B/key_crt_dir/agencyB_key_crt_dir下生成機構B的普通版證書
./generator --generate_agency_certificate ./key_crt_dir/agencyB_key_crt_dir ./key_crt_dir/chain test-agencyB

#在generator-B/key_crt_dir/agencyB-g_key_crt_dir下生成機構B的國密版證書
./generator --generate_agency_certificate ./key_crt_dir/agencyB-g_key_crt_dir ./key_crt_dir/chain-g test-agencyB -g

#按照企業級部署工具的使用要求將證書放在generator-B/meta/目錄下
cp ./key_crt_dir/agencyB_key_crt_dir/test-agencyB/agency.crt  ./key_crt_dir/agencyB_key_crt_dir/test-agencyB/agency.key ./meta/

cp ./key_crt_dir/agencyB-g_key_crt_dir/test-agencyB/gmagency.crt  ./key_crt_dir/agencyB-g_key_crt_dir/test-agencyB/gmagency.key ./meta/


模擬聯盟委員會爲機構C頒發證書:

cd generator-C

#在generator-C/key_crt_dir/agencyC_key_crt_dir下生成機構B的普通版證書
./generator --generate_agency_certificate ./key_crt_dir/agencyC_key_crt_dir ./key_crt_dir/chain test-agencyC

#在generator-C/key_crt_dir/agencyC-g_key_crt_dir下生成機構B的國密版證書
./generator --generate_agency_certificate ./key_crt_dir/agencyC-g_key_crt_dir ./key_crt_dir/chain-g test-agencyC -g

#按照企業級部署工具的使用要求將證書放在generator-C/meta/目錄下
cp ./key_crt_dir/agencyC_key_crt_dir/test-agencyC/agency.crt  ./key_crt_dir/agencyC_key_crt_dir/test-agencyC/agency.key ./meta/

cp ./key_crt_dir/agencyC-g_key_crt_dir/test-agencyC/gmagency.crt  ./key_crt_dir/agencyC-g_key_crt_dir/test-agencyC/gmagency.key ./meta/


模擬聯盟委員會爲機構D頒發證書:

cd generator-D

#在generator-D/key_crt_dir/agencyD_key_crt_dir下生成機構D的普通版證書
./generator --generate_agency_certificate ./key_crt_dir/agencyD_key_crt_dir ./key_crt_dir/chain test-agencyD

#在generator-D/key_crt_dir/agencyD-g_key_crt_dir下生成機構D的國密版證書
./generator --generate_agency_certificate ./key_crt_dir/agencyD-g_key_crt_dir ./key_crt_dir/chain-g test-agencyD -g

#按照企業級部署工具的使用要求將證書放在generator-D/meta/目錄下
cp ./key_crt_dir/agencyD_key_crt_dir/test-agencyD/agency.crt  ./key_crt_dir/agencyD_key_crt_dir/test-agencyD/agency.key ./meta/

cp ./key_crt_dir/agencyD-g_key_crt_dir/test-agencyD/gmagency.crt  ./key_crt_dir/agencyD-g_key_crt_dir/test-agencyD/gmagency.key ./meta/


 

3,機構ABCD頒發下屬節點自建證書

 

企業級部署工具提供了機構頒發自建節點證書的功能。機構在頒發下屬節點的證書時,會同時生成該機構下屬節點的p2p連接信息,該信息用於在機構生成每個下屬節點的部署程序時,告知每個節點程序去羣組內其它節點的連接地址。機構生成下屬節點的節點證書和p2p連接信息依靠企業級部署工具的generator/conf/node_deployment.ini文件內容。

  • 機構A自建頒發下屬節點的節點證書,並生成機構A下屬節點的所有p2p連接信息。

    修改generator-A/conf/node_deployment.ini文件如下:

    [group] group_id=1

    [node0] p2p_ip=127.0.0.1 rpc_ip=127.0.0.1 p2p_listen_port=30300 channel_listen_port=20200 jsonrpc_listen_port=8545

    [node1] p2p_ip=127.0.0.1 rpc_ip=127.0.0.1 p2p_listen_port=30301 channel_listen_port=20201 jsonrpc_listen_port=8546

    [node2] p2p_ip=127.0.0.1 rpc_ip=127.0.0.1 p2p_listen_port=30302 channel_listen_port=20202 jsonrpc_listen_port=8547

    生成機構A下屬節點的節點證書和p2p連接信息:

    cd generator-A
    
    #根據generator-A/conf/node_deployment.ini文件的內容,在generator-A/node_cert_p2p下生成機構A的下屬節點證書和p2p連接信息
    ./generator --generate_all_certificates ./node_cert_p2p -g
    
    
    

    generator-A/node_cert_p2p/peers.txt內容如下:

    127.0.0.1:30300 127.0.0.1:30301 127.0.0.1:30302

  • 機構B頒發下屬節點的證書,並生成下屬節點的所有p2p連接信息。

    修改generator-B/conf/node_deployment.ini文件如下:

    [group] group_id=1

    [node0] p2p_ip=127.0.0.1 rpc_ip=127.0.0.1 p2p_listen_port=30303 channel_listen_port=20203 jsonrpc_listen_port=8548

    生成機構B下屬節點的證書和p2p連接信息:

    cd generator-B
    
    #根據generator-B/conf/node_deployment.ini文件的內容,在generator-B/node_cert_p2p下生成機構A的下屬節點證書和p2p連接信息
    ./generator --generate_all_certificates ./node_cert_p2p -g
    
    
    

    generator-B/node_cert_p2p/peers.txt內容如下:

    127.0.0.1:30303

  • 機構C頒發下屬節點的證書,並生成下屬節點的所有p2p連接信息。

    修改generator-C/conf/node_deployment.ini文件如下:

    [group] group_id=2

    [node0] p2p_ip=127.0.0.1 rpc_ip=127.0.0.1 p2p_listen_port=30304 channel_listen_port=20204 jsonrpc_listen_port=8549

    生成機構C下屬節點的證書和p2p連接信息:

    cd generator-C
    
    #根據generator-C/conf/node_deployment.ini文件的內容,在generator-C/node_cert_p2p下生成機構A的下屬節點證書和p2p連接信息
    ./generator --generate_all_certificates ./node_cert_p2p -g
    
    
    

    generator-C/node_cert_p2p/peers.txt內容如下:

    127.0.0.1:30304

 

4,羣組1各機構生成下屬節點部署程序

 

羣組1的組建

 

節點部署程序的生成,依賴於節點所屬羣組的羣組創世區塊

 

假設羣組1成員機構確認由機構A生成羣組1創世區塊

  • 說明:創世區塊文件和證書文件一樣,需要放到generator/meta。企業級部署工具生成羣組創世區塊,依賴於企業級部署工具的generator/conf/group_genesis.ini文件,該文件內容大致如下(示例):

    [group] group_id=1

    [nodes] node1=127.0.0.1:30301 node0=127.0.0.1:30300

    [group]表示羣組的ID(數字,唯一),[nodes]表示羣組初始創建時的下屬所有節點的p2p連接信息。生成創世區塊,還需要提供[nodes]下配置的所有節點的節點證書,所以,負責生成創世區塊的機構,需要在羣組組網初始時,收集羣組內所有節點的節點證書和p2p連接信息。羣組組成之後,已有節點的退出和新節點的加入都不要再修改創世區塊(創世區塊一經創建不可再修改)。

機構A收集羣組1所有節點的節點證書(格式:gmcert_p2pIp_p2pPort.crt),此過程使用拷貝指令cp模擬:

cd /usr/local/rc3-test-BCOS/

#機構A獲取羣組1除機構A之外的其它所有機構下屬節點的節點證書
cp ./generator-B/node_cert_p2p/gmcert*.crt ./generator-A/meta/


機構A收集羣組1所有節點的節點連接信息:

cd /usr/local/rc3-test-BCOS/

#機構A獲取羣組1除機構A之外的其它所有機構下屬節點的p2p連接信息
cp ./generator-B/node_cert_p2p/peers.txt ./generator-A/meta/group1-peers-all-without-A.txt


強調:如果羣組1除了機構A和機構B之外還有別的機構X,機構A也需要獲取機構X下屬節點的節點證書和節點連接信息。這裏不做延伸。最終,機構A會拿到羣組內所有節點的p2p連接信息和證書

 

生成羣組1創世區塊

由於企業級部署工具生成羣組創世區塊依賴於generator/conf/group_genesis.ini文件的內容,所以機構A講自己的企業級部署工具的generator-A/conf/group_genesis.ini文件修改如下:

[group] group_id=1

[nodes] node0=127.0.0.1:30300 node1=127.0.0.1:30301 node2=127.0.0.1:30302 node3=127.0.0.1:30303

注意[nodes]下配置的信息來源於上面機構A收集羣組1所有節點的節點連接信息而獲得的。

機構A生成羣組1創世區塊,並分發給羣組1的其它機構(使用拷貝指令模擬):

cd generator-A

#將羣組1的創世區塊生成到generator-A/group1_genesis下(同時也在generator-A/meta下放置了一份)
./generator --create_group_genesis ./group1_genesis -g

#機構A將羣組1創世區塊分發給羣組1其它機構(直接放置在其他機構企業級部署工具的meta/文件夾下)
cd /usr/local/rc3-test-BCOS/

cp ./generator-A/group1_genesis/group.1.genesis ./generator-B/meta/


 

生成羣組1節點部署程序

企業級部署工具提供了生成節點部署程序的功能,機構可一次生成下屬所有節點的部署程序。該功能需要提供羣組內除本機構外其它所有機構的所有下屬節點的p2p連接信息(需要放置在generator/meta下)

  • 機構A生成下屬節點的部署程序。上面的操作,機構A已經拿到了羣組內除了機構A之外其它羣組的節點p2p連接信息。

    cd generator-A
    
    #機構A在generator-A/agencyA_node下生成了機構A的下屬節點部署程序
    ./generator --build_install_package ./meta/group1-peers-all-without-A.txt ./agencyA_node -g
    
    
    
  • 機構B生成下屬節點的部署程序。上面的操作,機構A已經把羣組1的創世區塊文件分發給了機構B,並放置在了generator-B/meta/下。按照企業級部署工具生成機構下屬節點部署程序的條件,機構B還需要知道羣組1內除機構B外其它所有機構的所有下屬節點的p2p連接信息,且需要放置在需要放置在generator/meta下。節點連接信息的收集過程,實際部署的時候,由負責生成羣組創世區塊的機構分發給羣組的下屬機構比較好,因爲在生成羣組創世區塊的時候就收集了這些信息,避免了羣組的機構之間冗餘的交流成本。

    cd /usr/local/rc3-test-BCOS/
    
    #機構B先收集羣組內除了機構B之外其它羣組的節點p2p連接信息,本次測試只有機構A。
    cp ./generator-A/node_cert_p2p/peers.txt ./generator-B/meta/group1-peers-all-without-B.txt
    
    cd generator-B
    
    #機構B在generator-B/agencyB_node下生成了機構A的下屬節點部署程序
    ./generator --build_install_package ./meta/group1-peers-all-without-B.txt ./agencyB_node -g
    
    
    
  • 注意:這時候還沒有啓動任何節點。

 

羣組2的組建

假設羣組2成員機構確認由機構C生成羣組2創世區塊

機構C收集羣組2所有節點的節點證書和節點連接信息,此過程使用拷貝指令cp模擬:

cd /usr/local/rc3-test-BCOS/

#機構C獲取羣組2除機構C之外的其它機構下屬節點的節點證書
cp ./generator-B/node_cert_p2p/gmcert*.crt ./generator-C/meta/

#機構C獲取羣組2除機構C之外的其它機構下屬節點p2p連接信息
cp ./generator-B/node_cert_p2p/peers.txt ./generator-C/meta/group2-peers-all-without-C.txt


 

生成羣組2創世區塊

機構C修改generator-C/conf/group_genesis.ini文件如下:

[group] group_id=2

[nodes] node3=127.0.0.1:30303 node2=127.0.0.1:30304

機構C生成羣組2創世區塊,並分發給羣組2的其它機構(使用拷貝指令模擬):

cd generator-C

#將羣組2的創世區塊生成到generator-C/group2_genesis下(同時也在generator-C/meta下放置了一份)
./generator --create_group_genesis ./group2_genesis -g

cd /usr/local/rc3-test-BCOS/

#機構C將羣組2創世區塊分發給羣組2其它機構
cp ./generator-C/group2_genesis/group.2.genesis ./generator-B/meta/


 

生成羣組2節點部署程序

上面的操作中,負責生成羣組2創世區塊的機構C已經獲取到了羣組2的其它成員機構下屬節點的連接信息,所以,機構C使用企業級部署工具生成機構C下屬節點部署程序的條件滿足。

  • 機構C生成下屬節點的部署程序。
cd generator-C

#機構C在generator-C/agencyC_node下生成了機構C的下屬節點部署程序
./generator --build_install_package ./meta/group2-peers-all-without-C.txt ./agencyC_node -g


  • 機構B加入羣組2。機構B的下屬節點部署程序在創建羣組1時已生成,所以現在只需要把羣組2的信息加入機構B已經生成的節點部署程序即可(此時機構B的下屬節點部署程序還都沒有部署和啓動)。機構B使用企業級部署工具提供的指令add_groupadd_peers,給定參數,即可配置加入羣組2:

將羣組2的羣組信息加入機構B的下屬節點部署程序中(機構B已經拿到了機構C生成和分發的羣組2創世區塊):

cd generator-B

#機構B註冊羣組2創世區塊
./generator --add_group ./meta/group.2.genesis ./agencyB_node


機構B收集羣組2其它節點p2p連接信息,並配置到已有的節點部署程序中:

cd /usr/local/rc3-test-BCOS/

#機構B收集羣組2其它節點的p2p連接信息
cp ./generator-C/node_cert_p2p/peers.txt ./generator-B/meta/group2-peers-all-without-B.txt

#機構B下屬所有節點加入羣組2
cd generator-B

./generator --add_peers ./meta/group2-peers-all-without-B.txt ./agencyB_node


  • 修改羣組2默認的共識算法爲raft。

機構B修改generator-B/agencyB_node/node_127.0.0.1_30303/conf/group.2.genesis文件(如果有多個節點,則所有節點的該文件都需要修改);

機構C修改generator-C/agencyC_node/node_127.0.0.1_30304/conf/group.2.genesis文件(如果有多個節點,則所有節點的該文件都需要修改)。相關配置項如下(修改共識機制和羣組id):

[consensus] consensus_type = raft

[group] id = 2

至此,

機構A下屬的節點部署程序位於generator-A/agencyA_node/node*文件夾下。 機構B下屬的節點部署程序位於generator-B/agencyB_node/node*文件夾下。 機構C下屬的節點部署程序位於generator-C/agencyC_node/node*文件夾下。

注意:現在還沒有啓動任何節點,也沒有啓動聯盟鏈。

 

5,啓動聯盟鏈

 

創建/usr/local/rc3-test-BCOS/test-chain文件夾,模擬節點部署服務器,以下簡稱爲目錄test-chain

cd /usr/local/rc3-test-BCOS/

mkdir test-chain


聯盟所有機構部署並啓動下屬節點程序,啓動聯盟鏈。

機構A部署將下屬節點程序(使用拷貝指令模擬):

cd /usr/local/rc3-test-BCOS/

cp -r ./generator-A/agencyA_node/node* ./test-chain/ 


機構B部署將下屬節點程序(使用拷貝指令模擬):

cd /usr/local/rc3-test-BCOS/

cp -r ./generator-B/agencyB_node/node* ./test-chain/ 


機構C部署將下屬節點程序(使用拷貝指令模擬):

cd /usr/local/rc3-test-BCOS/

cp -r ./generator-C/agencyC_node/node* ./test-chain/


各機構節點分別啓動,以節點0爲例:

cd /usr/local/rc3-test-BCOS/test-chain/node_127.0.0.1_30300/

#啓動
./start.sh


查看節點啓動狀態:

##實際項目中需要進入節點服務器命令行
ps -ef | grep -v grep | grep fisco-bcos
#會查到至少一個FISCO-bcos進程


 

6,控制檯的配置和使用

 

控制檯是FISCO BCOS提供的服務器工具,可查看聯盟鏈的運行狀態及區塊和交易信息,同時提供了智能合約的編譯功能。控制檯官方詳細說明在這裏

控制檯的下載(rc3版的企業級部署工具提供了下載控制檯的指令,參考官網):

cd /usr/local/rc3-test-BCOS/

#下載控制檯,該命令意爲下載並執行鏈接中的shell腳本,運行的結果是在/usr/local/rc3-test-BCOS/目錄下載了控制檯程序的壓縮包,並解壓爲/usr/local/rc3-test-BCOS/console/文件夾
bash <(curl -s https://raw.githubusercontent.com/FISCO-BCOS/console/master/tools/download_console.sh)


控制檯下載結束,得到/usr/local/rc3-test-BCOS/console/目錄,以下簡稱爲目錄console。控制檯默認提供的智能合約編譯jar包是普通版的,國密版的聯盟鏈則需要使用國密版的合約編譯jar包。國密版jar包的配置操作如下:

cd /usr/local/rc3-test-BCOS/console/

#將國密版合約編譯包下載到/usr/local/rc3-test-BCOS/console/目錄下
curl -LO https://github.com/FISCO-BCOS/LargeFiles/raw/master/tools/solcj/solcJ-all-0.4.25-gm.jar

#將默認的合約編譯包替換爲國密版編譯包
./replace_solc_jar.sh solcJ-all-0.4.25-gm.jar


控制檯提供了示例配置文件console/conf/applicationContext-sample.xml,本次測試使用示例的配置文件格式,我們將其拷貝一份使用:

cd /usr/local/rc3-test-BCOS/console/

#將控制檯示例配置文件複製爲控制檯要求的配置文件名稱
cp conf/applicationContext-sample.xml conf/applicationContext.xml


 

控制檯的配置

本次測試爲機構A-節點0:127.0.0.1:30300機構B-節點3:127.0.0.1:30303機構C-節點4:127.0.0.1:30304三個節點配置控制檯,各節點的控制檯安裝使用拷貝指令,將上面下載的控制檯目錄分別複製給節點0、節點3、節點4:

cd /usr/local/rc3-test-BCOS/

cp -r console/ test-chain/node_127.0.0.1_30300/console
cp -r console/ test-chain/node_127.0.0.1_30303/console
cp -r console/ test-chain/node_127.0.0.1_30304/console


實際部署控制檯時,不一定要將控制檯放在節點的部署程序裏,控制檯程序的目錄位置不受限制,甚至可以部署在非節點服務器上,只要將控制檯的配置文件中的節點channel連接地址配置正確,保證控制檯能連接到鏈即可。

 

爲控制檯配置sdk證書

控制檯在某種意義上也是一種節點,是可以查看和操作鏈的節點,控制檯本身不參與鏈的運行,但是連接鏈也需要認證(事實上FISCO BCOS系統中所有連接鏈的行爲都需要認證,如使用web3sdk的業務系統等),即sdk證書。sdk證書在證書鏈中與節點證書是同一級別的證書,都是由機構頒發,因此聯盟各成員機構經過聯盟委員會同意後實際控制着聯盟鏈的准入(注意:sdk證書在FISCO BCOS鏈中標誌着身份,同一個證書理論上可以被不同場景使用,如控制檯,web3sdk項目等,但是FISCO​​​​​​​ BCOS會認爲是同一個身份,所以sdk證書最好不要複用)。本次測試,各機構模擬頒發sdk證書(均是自建的證書)的操作如下:

  • 機構A頒發sdk證書
cd generator-A

#在generator-A/key_crt_dir/dir_sdk_ca/目錄下生成sdk證書
./generator --generate_sdk_certificate ./key_crt_dir/dir_sdk_ca ./key_crt_dir/agencyA_key_crt_dir/test-agencyA


​ 機構A爲節點0控制檯配置sdk證書:

cd /usr/local/rc3-test-BCOS/

#把機構A生成的sdk證書複製到節點0的控制檯配置目錄
cp generator-A/key_crt_dir/dir_sdk_ca/sdk/* test-chain/node_127.0.0.1_30300/console/conf/ 


  • 機構B頒發sdk證書
cd generator-B

#在generator-B/key_crt_dir/dir_sdk_ca/目錄下生成sdk證書
./generator --generate_sdk_certificate ./key_crt_dir/dir_sdk_ca ./key_crt_dir/agencyB_key_crt_dir/test-agencyB


​ 機構B爲節點3控制檯配置sdk證書:

cd /usr/local/rc3-test-BCOS/

#把機構B生成的sdk證書複製到節點3的控制檯配置目錄
cp generator-B/key_crt_dir/dir_sdk_ca/sdk/* test-chain/node_127.0.0.1_30303/console/conf/ 


  • 機構C頒發sdk證書
cd generator-C

#在generator-C/key_crt_dir/dir_sdk_ca/目錄下生成sdk證書
./generator --generate_sdk_certificate ./key_crt_dir/dir_sdk_ca ./key_crt_dir/agencyC_key_crt_dir/test-agencyC


​ 機構C爲節點4控制檯配置sdk證書:

cd /usr/local/rc3-test-BCOS/

#把機構C生成的sdk證書複製到節點4的控制檯配置目錄
cp generator-C/key_crt_dir/dir_sdk_ca/sdk/* test-chain/node_127.0.0.1_30304/console/conf/


 

修改控制檯配置信息

控制檯的配置,主要是修改控制檯的配置文件console/conf/applicationContext.xml,因此,節點0、節點3、節點4都需要根據節點的羣組和連接信息修改:

test-chain/node_127.0.0.1_30300/console/conf/applicationContext.xml

test-chain/node_127.0.0.1_30303/console/conf/applicationContext.xml

test-chain/node_127.0.0.1_30304/console/conf/applicationContext.xml

文件,着重修改國密開關、羣組信息、channel連接地址等,官方參考信息

 

啓動控制檯

#例如啓動節點0上配置的控制檯
cd /usr/local/rc3-test-BCOS/test-chain/

bash node_127.0.0.1_30300/console/start.sh


如果控制檯配置正確(主要是配置文件的配置項國密開關、羣組信息、channel連接地址等),啓動控制檯效果如下:

457d1aa834d2d8b32d6313059800ef4116a.jpg

控制檯常用指令如下(更多指令參考官方說明):

#查看控制檯版本
getNodeVersion

#獲取當前節點所有p2p連接信息
getPeers

#獲取當前羣組下屬的節點id列表
getGroupPeers

#獲取當前羣組的區塊的高度
getBlockNumber

#查看當前節點所在羣組的共識節點列表
getSealerList

#查看當前節點所在羣組的觀察節點列表
getObserverList

#切換當前節點從屬的羣組
switch [groupId]

#獲取當前羣組共識信息
getConsensusStatus

#獲取當前節點從屬的所有羣組的羣組id列表
getGroupList

#獲取當前節點控制檯當前羣組部署的合約信息
getDeployLog

#退出控制檯
quit


如獲取控制檯版本:

f6f0cbab01fabcf77fcc1da871a7e1ea227.jpg

所以,本次測試使用的是2.0.0-rc3 gm版本的控制檯。

 

7,組網變動

 

機構A組網變動

 

進入機構A的節點0:127.0.0.1:30300控制檯,執行:getPeers,查看節點0在羣組1中連接的其它節點信息(不包括節點0自身信息):

bc3292b16be3ddfe719c03f3b0c0cab5d26.jpg

可以看到節點的NodeID

節點1:09557505930aa98b661e30648df01e1ee3a72408a772600eb1aeb33888b5838e6c8428632bcdecf87705d95e32cdfc7ba2632e35963939f022c3a8ab864b679b

節點2:e63b4edccd6902bb3ebda75c0b0527c8a6fa6bfdd6fb1fe3f0d70b507e76e2e9c595bf5f2e0655d6f841a267eee15c0f0abd74bcb4b1ee6f2335f0ef52d6fc6b

查看此時羣組1的共識節點,執行getSealerList

6fc0edf200ffd0561276f364030e5cba8b4.jpg

可以看到當前羣組1總共有四個共識節點。從羣組1移除節點2:

[group:1]> removeNode e63b4edccd6902bb3ebda75c0b0527c8a6fa6bfdd6fb1fe3f0d70b507e76e2e9c595bf5f2e0655d6f841a267eee15c0f0abd74bcb4b1ee6f2335f0ef52d6fc6b


結果:

1491467a4de4b37965fd437cf9f93509af5.jpg

將節點1設置爲觀察節點:

[group:1]> addObserver 09557505930aa98b661e30648df01e1ee3a72408a772600eb1aeb33888b5838e6c8428632bcdecf87705d95e32cdfc7ba2632e35963939f022c3a8ab864b679b


結果:

2867597207d81956673251237289c3bc825.jpg

再次執行getSealerList,查看羣組1的共識節點:

f89960a244508032f5129f711ab46385174.jpg

可以看到羣組1的共識節點已經變爲兩個。

執行getObserverList,查看羣組1的觀察節點:

bc228f5fcd626319021300ee7f8f0718a44.jpg

可以看到,觀察節點只有一個了,也就是被設置爲觀察節點的節點1。至此,機構A組網變動操作結束,節點類型的操作參考官方說明

 

機構D組網變動

 

第一,機構D加入羣組2。

 

機構D爲下屬節點5頒發自建證書

 

機構D下屬節點證書和節點連接信息的生成,依賴於generator-D/conf/node_deployment.ini文件,機構D修改該文件如下:

[group] group_id=2

[node0] p2p_ip=127.0.0.1 rpc_ip=127.0.0.1 p2p_listen_port=30305 channel_listen_port=20205 jsonrpc_listen_port=8550

執行:

cd generator-D

#根據generator-D/conf/node_deployment.ini文件的內容,在generator-D/node_cert_p2p下生成機構D的下屬節點證書和p2p連接信息
./generator --generate_all_certificates ./node_cert_p2p -g


羣組2現已組建且正在運行,機構D的下屬節點5要加入羣組2,需要知道節點5加入羣組2之後,要與哪些節點連接,所以機構D需要收集現已運行的羣組2的節點連接信息,此過程必須是聯盟委員會同意的。使用拷貝指令模擬如下:

cd /usr/local/rc3-test-BCOS/

#機構D收集羣組2所屬機構B下屬節點的所有p2p連接信息
cp ./generator-B/node_cert_p2p/peers.txt ./generator-D/meta/peersB.txt

#機構D收集羣組2所屬機構C下屬節點的所有p2p連接信息
cp ./generator-C/node_cert_p2p/peers.txt ./generator-D/meta/peersC.txt


機構D收集完p2p連接信息之後,需要手動將所有收集到的p2p連接信息文件合併,假設合併爲generator-D/meta/group2-peers-all-without-D.txt

新節點(節點5)加入羣組2,除了知道要連接哪些節點外,還需要知道羣組2的創世區塊。假設經過聯盟委員會同意,由機構C將羣組2的創世區塊交給機構D。此過程使用拷貝指令模擬:

cd /usr/local/rc3-test-BCOS/

cp ./generator-C/group2_genesis/group.2.genesis ./generator-D/meta/


 

機構D生成節點部署程序

 

cd generator-D

#機構D在generator-D/agencyD_node下生成了機構D的下屬節點部署程序
./generator --build_install_package ./meta/group2-peers-all-without-D.txt ./agencyD_node -g


確認和修改generator-D/agencyD_node/node_127.0.0.1_30305/conf/group.2.genesis文件的配置必須和羣組2的相關配置一致(如共識機制,羣組id等)

 

機構D部署下屬節點5

 

此過程使用拷貝指令模擬:

cd /usr/local/rc3-test-BCOS/

cp -r ./generator-D/agencyD_node/node* ./test-chain/


啓動節點5:

cd /usr/local/rc3-test-BCOS/test-chain/node_127.0.0.1_30305/

./start.sh


啓動節點3的控制檯,查看此時節點3連接其它節點的信息:

e850dee896ca33037da401c2dde49825b06.jpg

因爲節點3同屬羣組1和羣組2,所以可以看到機構A的節點。可以看到節點5的NodeID

節點5

6fe7dd6558a09ec1d7ee17145555a9d3526b6bfeea2f7d90b0055a883e24173e28c98fc7f3b3ac6ab86155330ffb8d354219460a4dedcb828b7bade39faca2bb

再查看此時羣組2的共識節點:

122841383a2517f60b05b550d74eb775fac.jpg

裏面並沒有節點5的NodeID。這時,節點5已經作爲觀察節點加入羣組2。

假設由羣組2原有機構成員機構C把機構D的新節點註冊爲羣組2的共識節點,此過程需要機構D將節點5的NodeID交給節點C,節點5的NodeID/usr/local/rc3-test-BCOS/generator-D/agencyD_node/node_127.0.0.1_30305/conf/gmnode.nodeid

 

機構C的節點4進入控制檯發送指令,將節點5加入爲到羣組2的共識節點:

#進入節點4控制檯
cd /usr/local/rc3-test-BCOS/test-chain/node_127.0.0.1_30304/console/

#啓動控制檯
./start.sh


fd16ba7838846ff014c7e9ed30af8f787db.jpg

再次查看羣組2的共識節點:

04a47afa0cf3a24f34c8c75f0640d1fc721.jpg

節點5參與羣組2共識成功。到此爲止,機構D加入羣組2操作結束。

 

第二,機構D的節點5與機構B的節點3組成羣組3。

 

假設由機構B生成羣組3的創世區塊文件,機構B收集將要組建的羣組3的下屬節點3和節點5的證書和p2p連接信息,收集過程使用拷貝指令模擬(上面的操作,各機構均已生成下屬節點的節點證書和p2p連接信息,所以不需要重複操作):

cd /usr/local/rc3-test-BCOS/

#機構B收集羣組3其它節點(節點5)的節點證書
cp ./generator-D/node_cert_p2p/gmcert_127.0.0.1_30305.crt ./generator-B/meta/

#機構B收集羣組3其它節點(節點5)的p2p連接信息
cp ./generator-D/node_cert_p2p/peers.txt ./generator-B/meta/group3-peers-all-without-B.txt


機構B生成羣組3創世區塊,創世區塊文件的生成依賴於generator-B/conf/group_genesis.ini文件的內容,修改該文件的內容如下:

[group] group_id=3

[nodes] node0=127.0.0.1:30303 node1=127.0.0.1:30305

 

注意[nodes]配置項的內容爲羣組3初始創建時所有下屬節點的連接信息,除了羣組3的機構B下屬的127.0.0.1:30303外,還包括機構B從機構D收集來的機構D下屬節點127.0.0.1:30305的連接信息。

 

機構B生成羣組3創世區塊:

cd generator-B

#在generator-B/group3_genesis/文件夾下生成的便是羣組3的創世區塊
./generator --create_group_genesis ./group3_genesis -g


機構B向羣組3其它機構(機構D)分發羣組3創世區塊,此過程使用拷貝指令模擬:

cd /usr/local/rc3-test-BCOS/

cp -r generator-B/group3_genesis generator-D/


注意:此時節點3和節點5都已在運行,所以分發給機構D的創世區塊文件不需要放在企業級部署工具的meta文件夾下,而是需要機構B和機構D直接將羣組的創世區塊文件直接配置到已運行的節點3和節點5中。

機構B和機構D將羣組3創世區塊文件(group.3.genesisgroup.3.ini)配置到已經部署的節點3和節點5服務器程序中,此過程使用拷貝指令模擬:

cd /usr/local/rc3-test-BCOS/

#機構B在下屬節點3上配置羣組3的創世區塊
cp generator-B/group3_genesis/group.3* test-chain/node_127.0.0.1_30303/conf/

#機構D在下屬節點5上配置羣組3的創世區塊
cp generator-D/group3_genesis/group.3* test-chain/node_127.0.0.1_30305/conf/


wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

重啓節點3和節點5。以重啓節點3爲例:

cd /usr/local/rc3-test-BCOS/test-chain/node_127.0.0.1_30303/

#先停止運行節點3
./stop.sh

#再啓動節點3
./start.sh


wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

說明:節點的重啓其實是殺掉節點服務器中已經運行的節點fisco-bcos進程,然後再次啓動,這也是stop.shstart.sh腳本所做的事,實際情況中完全可以手動查找節點服務器的fisco-bcos進程並kill掉,以此停止節點的運行:

#進入節點的部署服務器命令行執行,查看fisco-bcos進程id
ps -ef | grep -v grep | grep fisco-bcos

kill -9 [上一步查出來的進程id]


wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

再次修改節點3的控制檯配置,將羣組3的配置信息添加進去,啓動控制檯,就可以查到羣組3的節點信息:

#進入節點3控制檯
cd /usr/local/rc3-test-BCOS/test-chain/node_127.0.0.1_30303/console/

#啓動控制檯
./start.sh


wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

至此,機構D的組網變動操作結束,整個場景描述的所有行爲均已結束。

 

注:
建議此文和背景描述https://mp.weixin.qq.com/s/_V30KGDXjFC-zFCpVXPqWg一起閱讀。

 


 

FISCO BCOS是完全開源的聯盟區塊鏈底層技術平臺,由金融區塊鏈合作聯盟(深圳)(簡稱金鍊盟)成立開源工作組通力打造。開源工作組成員包括博彥科技、華爲、深證通、神州數碼、四方精創、騰訊、微衆銀行、亦筆科技和越秀金科等金鍊盟成員機構。

代碼倉庫:https://github.com/FISCO-BCOS

 

我們鼓勵機構成員、開發者等社區夥伴參與開源共建事業,有你在一起,會更了不起。多樣參與方式:

1 進入微信社羣,隨時隨地與圈內最活躍、最頂尖的團隊暢聊技術話題(進羣請添加小助手微信,微信ID:fiscobcosfan);

2 訂閱我們的公衆號:“FISCO BCOS開源社區”,我們爲你準備了開發資料庫、最新FISCO BCOS動態、活動、大賽等信息;

3 來Meetup與開發團隊面對面交流,FISCO BCOS正在全國舉辦巡迴Meetup,深圳、北京、上海、成都……歡迎您公衆號在菜單欄【找活動】中找到附近的Meetup,前往結識技術大咖,暢聊硬核技術;

4 參與代碼貢獻,您可以在Github提交Issue進行問題交流,歡迎向FISCO BCOS提交Pull Request,包括但不限於文檔修改、修復發現的bug、提交新的功能特性。

代碼貢獻指引:

https://github.com/FISCO-BCOS/FISCO-BCOS/blob/master/docs/CONTRIBUTING_CN.md

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章