区块链期末复习题
FISCO BCOS 3群组8节点联盟链的构建过程
1 FISCO BCOS 8节点3群组联盟链的网络搭建
(1)环境准备: 确保每台机器(虽然这里都在127.0.0.1,但逻辑上可视为不同机器)都安装了FISCO BCOS运行所需的依赖,如curl、openssl、docker等。
(2)生成所有机构的证书: 这是联盟链的基础。需要为每个机构(agencyA, agencyB, agencyC, agencyD)生成各自的机构证书和节点证书,并生成链的根证书。、
(3)生成每个机构节点的配置文件: 根据拓扑描述,为每个机构的2个节点生成相应的配置文件(config.ini、genesis.ini等),特别是node.nodeid、listen_ip、rpc_listen_ip、p2p_listen_port、rpc_listen_port、channel_listen_port等端口设置需要错开,避免冲突。
(4)配置群组信息: 这是多群组搭建的关键。每个群组都需要一个统一的创世区块配置(genesis.ini),并在config.ini中指定其所属的群组ID。对于跨群组的节点(如机构A的节点),需要同时配置多个群组ID。
(5)启动所有节点: 逐一启动所有机构的8个节点。
(6)创建群组并启动: 在任意一个属于该群组的节点上创建群组,然后启动群组。
详细操作步骤:
1.1统一管理脚本下载
在~/fisco-bcos下,下载FISCO BCOS的构建脚本1
2curl -LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/release-2.9.1/build_chain.sh
&& chmod +x build_chain.sh
1.2生成链证书和各个机构的证书
生成总的链证书(CA)1
bash build_chain.sh -l 1 # 这会生成一个总的 CA 证书在 nodes/ca 目录下
为每个机构生成机构证书
这些机构证书及其相关文件会生成在 nodes 目录下各自机构的子目录中。1
2
3
4
5
6
7
8# 例如为 agencyA 生成机构证书
bash build_chain.sh -N agencyA
# 为 agencyB 生成机构证书
bash build_chain.sh -N agencyB
# 为 agencyC 生成机构证书
bash build_chain.sh -N agencyC
# 为 agencyD 生成机构证书
bash build_chain.sh -N agencyD
1.3生成每个机构节点的配置
假设每个节点的 P2P 端口从 20200 开始递增,RPC 端口从 8545 开始递增,Channel 端口从 8546 开始递增。1
2
3
4
5
6
7-l 127.0.0.1:2 表示在127.0.0.1上创建2个节点。
-o 指定机构名称。
-p, -r, -c 分别指定 P2P、RPC、Channel 端口的起始值,脚本会自动递增。
-g 指定节点所属的群组ID列表,用逗号分隔。
机构A (agencyA):2个节点 (node0, node1),属于 group1, group2, group31
2
3
4# node0
bash build_chain.sh -g group1,group2,group3 -l 127.0.0.1:2 -o agencyA -p 20200 -r 8545 -c 8546
# node1 (端口递增)
bash build_chain.sh -g group1,group2,group3 -l 127.0.0.1:2 -o agencyA -p 20201 -r 8547 -c 8548
机构B (agencyB):2个节点 (node0, node1),属于 group11
2
3
4# node0
bash build_chain.sh -g group1 -l 127.0.0.1:2 -o agencyB -p 20202 -r 8549 -c 8550
# node1 (端口递增)
bash build_chain.sh -g group1 -l 127.0.0.1:2 -o agencyB -p 20203 -r 8551 -c 8552
机构C (agencyC):2个节点 (node0, node1),属于 group31
2
3
4# node0
bash build_chain.sh -g group3 -l 127.0.0.1:2 -o agencyC -p 20204 -r 8553 -c 8554
# node1 (端口递增)
bash build_chain.sh -g group3 -l 127.0.0.1:2 -o agencyC -p 20205 -r 8555 -c 8556
机构D (agencyD):2个节点 (node0, node1),属于 group21
2
3
4# node0
bash build_chain.sh -g group2 -l 127.0.0.1:2 -o agencyD -p 20206 -r 8557 -c 8558
# node1 (端口递增)
bash build_chain.sh -g group2 -l 127.0.0.1:2 -o agencyD -p 20207 -r 8559 -c 8560
1.4拷贝节点证书和群组创世区块文件
统一genesis.ini文件:
在 nodes/127.0.0.1/agencyA/node0 或 nodes/127.0.0.1/agencyA/node1 目录下会生成
group1.genesis.ini, group2.genesis.ini, group3.genesis.ini。
这些文件包含了群组的创始配置(如节点列表、共识算法等)。
需要将 group1.genesis.ini 拷贝到所有属于 group1 的节点目录
(如 agencyA/node0/conf/ agencyA/node1/conf/ agencyB/node0/conf/ agencyB/node1/conf/)下。
同理,将 group2.genesis.ini 拷贝到所有属于 group2 的节点目录。
将 group3.genesis.ini 拷贝到所有属于 group3 的节点目录。
配置config.ini中的[groups]部分:
对于每个节点,检查其 conf/config.ini 文件,确保 [groups] 配置项中正确列出了该节点所属的所有群组ID。例如,agencyA 的节点 node0 的 config.ini 应包含 [groups] group_id=1,2,3。
1.5启动所有节点
进入每个节点的目录,并启动
对所有8个节点重复此操作。1
2
3
4
5
6# 进入每个节点目录,例如
cd nodes/127.0.0.1/agencyA/node0
# 启动节点
bash start.sh
# 检查节点状态
ps -ef | grep fisco-bcos
2.针对FISCO BCOS联盟链的控制台搭建措施
搭建FISCO BCOS控制台是为了方便与链进行交互、部署合约和查询数据。
2.1下载控制台1
2
3
4cd ~/fisco-bcos # 或其他工作目录
curl -LO https://github.com/FISCO-BCOS/console/releases/download/v2.9.1/console.tar.gz
tar -zxvf console.tar.gz
cd console
2.2配置控制台证书
控制台需要连接到某个节点的Channel端口。为了安全连接,控制台也需要相应的证书。
—将 链根证书(nodes/ca/ca.crt) 拷贝到控制台的 conf 目录下。
—将 连接节点所属机构的机构证书 (nodes/127.0.0.1/agencyA/agencyA.crt) 拷贝到控制台的 conf 目录下。
—生成 控制台的私钥和证书。通常,控制台会用一个独立的SDK身份连接。可以通过generate_sdk_cert.sh脚本来生成。1
2
3
4
5# 在 nodes/127.0.0.1/agencyA 目录下生成sdk证书
bash build_chain.sh -g -s sdk_agencyA -o agencyA
# 这会在 nodes/127.0.0.1/agencyA/sdk_agencyA 目录下生成证书
# 将这些证书(sdk_agencyA.key, sdk_agencyA.crt)拷贝到控制台的 conf 目录下
cp nodes/127.0.0.1/agencyA/sdk_agencyA/* ~/fisco-bcos/console/conf/
—配置 applicationContext.xml:修改控制台 conf/applicationContext.xml 文件,
将其 channelConnect 部分的 nodes 配置为要连接的节点信息(IP和Channel端口),例如连接 agencyA 的 node01
2
3
4
5<property name="nodes">
<list>
<value>127.0.0.1:8546</value>
</list>
</property>
1.3启动控制台1
2cd ~/fisco-bcos/console
bash start.sh
3.在控制台中获取节点信息,获取群组信息,退出控制台的操作
假设控制台已成功启动并连接到节点。
1.1获取节点信息1
getPeer
1.2获取群组信息1
2
3
4getGroupList
#列出当前节点所加入的所有群组ID。
getGroupInfo 1
#查看特定群组的详细信息(例如群组1)
1.3退出控制台
在控制台命令行中输入:1
quit
或者直接按 Ctrl+C。



