fisco-generator 工具

前置条件:

机构 节点 所属群组 P2P 地址 RPC 监听地址 Channel 监听地址 IP 地址
机构 A 节点 0 群组 1,2 30300 20200 8545 127.0.0.1
节点 1 群组 1,2 30301 20201 8546 127.0.0.1
机构 B 节点 2 群组 1 30302 20202 8547 127.0.0.1
节点 3 群组 1 30303 20203 8548 127.0.0.1
机构 C 节点 4 群组 2 30304 20204 8549 127.0.0.1

下载工具 Generator

1
git clone https://gitee.com/FISCO-BCOS/generator.git #使用这个

切进目录并进行安装

1
2
3
4
cd generator/
./scripts/install.sh
# 测试是否安装成功
./generator -h

image.png
image.png

下载并解压二进制文件

1
2
git clone https://gitee.com/BackRe/resource.git
tar -zxvf ./resource/fisco-bcos.tar.gz -C ./meta

查看 fisco 版本信息

1
./meta/fisco-bcos -v

准备工作

根据前置条件中可以看到需求是 ABCD 机构所以要将当前的文件复制成 ABCD 四份。

1
2
3
4
cp -r generator/ generator-a
cp -r generator/ generator-b
cp -r generator/ generator-c
cp -r generator/ generator-d

image.png
image.png

生成区块链的唯一密钥证书 (在 generator 目录下生成)

1
./generator --generate_chain_certificate ./dir_chain_ca

--generate_chain_certificate生成区块链唯一的密钥相当于之前搭建中 nodes/127.0.0.1/sdk 内的内容

./dir_chain_ca生成的文件名称

1
2
3
4
5
# 预输出效果如下
root@backrer-virtual-machine:~/fisco/generator# ./generator --generate_chain_certificate ./dir_chain_ca
INFO | Chain cert begin.
INFO | Generate root cert success, dir is /root/fisco/generator/dir_chain_ca
INFO | Chain cert end.

然后生成各个机构的证书及密钥, 并复制到指定的机构目录下的 meta 中

1
2
3
4
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencya
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyb
cp -r ./dir_agency_ca/agencya/* ../generator-a/meta/
cp -r ./dir_agency_ca/agencyb/* ../generator-b/meta/

--generate_agency_certificate生成机构的密钥

./dir_agency_ca生成的文件位置

./dir_chain_ca区块链的唯一密钥

agencyxx机构名称

机构 A,B 的生成和群组 1

准备

切换到 generator-a 目录中,编辑 conf / node_deployment.ini

根据提供的 ip 端口进行对应的修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[group]
group_id=1

[node0]
; Host IP for the communication among peers.
; Please use your ssh login IP.
p2p_ip=127.0.0.1
; Listening IP for the communication between SDK clients.
; This IP is the same as p2p_ip for the physical host.
; But for virtual host e.g., VPS servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
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
channel_ip=0.0.0.0
p2p_listen_port=30301
channel_listen_port=20201
jsonrpc_listen_port=8546

同理切换到 generator-b, 编辑 conf / node_deployment.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[group]
group_id=1

[node0]
; Host IP for the communication among peers.
; Please use your ssh login IP.
p2p_ip=127.0.0.1
; Listening IP for the communication between SDK clients.
; This IP is the same as p2p_ip for the physical host.
; But for virtual host e.g., VPS servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30302
channel_listen_port=20202
jsonrpc_listen_port=8547

[node1]
p2p_ip=127.0.0.1
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30303
channel_listen_port=20203
jsonrpc_listen_port=8548

生成机构 A 的节点证书和 p2p 连接信息文件 (切换到 generator-a)

1
2
./generator --generate_all_certificates ./agencya_node_info
ll agencya_node_info

将 p2p 连接信息文件复制到 agency-b 中

1
cp agencya_node_info/peers.txt  ../generator-b/meta/peersa.txt

同理生成机构 B 的节点证书和 p2p 连接信息文件 (切换到 generator-b)

1
./generator --generate_all_certificates ./agencyb_node_info

将 p2p 连接信息文件复制到 agency-a 中

1
cp agencyb_node_info/peers.txt  ../generator-a/meta/peersb.txt

这里要注意一点,由于目前是要生成群组 1 所以群组需要创世区块,我们要将机构机构 B 中的两个 cert 文件拷贝到机构 A 的 meta 中。

1
cp -r agencyb_node_info/cert_*  ../generator-a/meta/

切换到机构 A 中并编辑文件conf/group_genesis.ini

1
2
cd ../generator-a/
vim conf/group_genesis.ini
1
2
3
4
5
6
7
8
[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

group_id群组号

根据前置要求表中配置好 node 的 ip 以及端口

结合四个节点证书生成创世块.

1
./generator --create_group_genesis ./group
1
2
3
4
root@backrer-virtual-machine:~/fisco/generator-a# ./generator --create_group_genesis ./group
INFO | Build operation begin.
INFO | generate ./group/group.1.genesis, successful
INFO | Build operation end.

image.png
image.png

group.1.genesis文件复制到机构 B 中

1
cp group/group.1.genesis  ../generator-b/meta/

生成机构 A

在 generator-a 文件下

使用--build_install_package生成机构的所有节点。

1
2
./generator --build_install_package ./meta/peersb.txt ./nodea
ll ./nodea

./meta/peersB.txt放置群组内其他节点的连接信息

./nodeA节点文件的输出目录

启动机构 A 的两个节点

1
2
3
bash nodea/start_all.sh
# 查询启动状态
ps -ef | grep fisco

image.png
image.png

生成机构 B

切换到机构 B

1
cd ../generator-b

生成机构 B, 并且启动

1
2
3
4
./generator --build_install_package ./meta/peersa.txt ./nodeb
bash nodeb/start_all.sh
# 查询启动状态
ps -ef | grep fisco

查看群组 1 的共识情况

1
tail -f ./node*/node*/log/log*  | grep +++

机构 C 的生成与群组 2

切到机构 C, 编辑文件conf/node_deployment.ini

1
2
cd ../generator-c
vim conf/node_deployment.ini

根据前置要求设置好对应的端口,以及群组 id

这里就不展示修改后的文档了。

生成机构 C 的节点证书和 p2p 连接信息,并将连接信息拷贝给机构 A

1
2
./generator --generate_all_certificates ./agencyc_node_info
cp -r agencyc_node_info/peers.txt ../generator-a/meta/peersc.txt

在这里由于我们需要生成群组 2,又因为机构 A 也在群组 2 中,所以我们要将机构 A 的连接信息和 cert 文件拷贝给机构 C 以便于生成创世区块。

1
2
cp -r ../generator-a/agencya_node_info/cert*  meta/
cp -r ../generator-a/agencya_node_info/peers.txt meta/peersa.txt

编辑机构 C 的conf/group_genesis.ini文件

1
2
3
4
5
6
7
8
[group]
group_id=2

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

生成群组 2 的创世块文件, 并将创世区块拷贝给机构 A

1
2
./generator --create_group_genesis ./group
cp -r group/group.2.genesis ../generator-a/meta/

生成机构 C 并启动

1
2
3
./generator --build_install_package ./meta/peersa.txt ./nodec
bash nodec/start_all.sh
ps -ef | grep fisco

现在将机构 A 添加到群组 2 中 (切到机构 A)

1
2
cd ../generator-a
./generator --add_group ./meta/group.2.genesis ./nodea

./meta/group.2.genesis群组 2 的创世块

./nodea需要加入群组的节点目录

使机构 A 连接机构 C

1
./generator --add_peers ./meta/peersc.txt ./nodea

./meta/peersc.txt连接信息文件

./nodea要连接的节点

重新启动机构 A,并查询机群组 2 是否有共识存在

1
2
3
4
bash nodea/stop_all.sh
bash nodea/start_all.sh
# 查询群组2共识情况
tail -f ./node*/node*/log/log* | grep g:2.*+++

机构 D 的生成与群组 3 的创建

方法与上方类似

切换到 generator-d, 并编辑文件conf/node_deployment.ini

1
2
cd ../generator-c
vim conf/node_deployment.ini

由于这里是三个节点所有在配置文件时要多配置一个节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[group]
group_id=3

[node0]
; Host IP for the communication among peers.
; Please use your ssh login IP.
p2p_ip=127.0.0.1
; Listening IP for the communication between SDK clients.
; This IP is the same as p2p_ip for the physical host.
; But for virtual host e.g., VPS servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30306
channel_listen_port=20206
jsonrpc_listen_port=8551

[node1]
p2p_ip=127.0.0.1
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30307
channel_listen_port=20207
jsonrpc_listen_port=8552

[node2]
p2p_ip=127.0.0.1
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30308
channel_listen_port=20208
jsonrpc_listen_port=8553

生成机构 D 的节点证书和 p2p 连接信息文件

1
./generator --generate_all_certificates ./agencyd_node_info

将连接信息拷贝给机构 A

1
cp -r agencyd_node_info/peers.txt ../generator-a/meta/peersd.txt

将 A 的信息拷贝给 D 用于创建创世区块

1
2
cp -r ../generator-a/agencya_node_info/peers.txt meta/peersa.txt
cp -r ../generator-a/agencya_node_info/cert* meta/

配置group_genesis.ini

1
2
3
4
5
6
7
8
9
[group]
group_id=3

[nodes]
node0=127.0.0.1:30300
node1=127.0.0.1:30301
node2=127.0.0.1:30306
node3=127.0.0.1:30307
node3=127.0.0.1:30308

创建群组 3 创世区块,并将文件拷给机构 A

1
2
./generator --create_group_genesis ./group
cp -r group/group.3.genesis ../generator-a/meta/

生成机构 D 节点并启动

1
2
./generator --build_install_package ./meta/peersa.txt ./noded
bash noded/start_all.sh

切换机构 A 中,将群组 3 的初始化以及连接机构 D

1
2
./generator --add_group ./meta/group.3.genesis ./nodea/
./generator --add_peers ./meta/peersd.txt ./nodea/

重启机构 A, 并且查看共识

1
2
3
bash nodea/stop_all.sh
bash nodea/start_all.sh
tail -f ./node*/node*/log/log* | grep g:3.*+++

机构 E 同理

自行完成

Icon喜欢这篇作品的话,奖励一下我吧~
💗感谢你的喜欢与支持!
致谢名单
本作品由 JoBackRer 于 2025-01-14 18:12:01 发布
作品地址:fisco-generator 工具
除特别声明外,本站作品均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 JoBackRer の blog
Logo