当前位置: 首页 > news >正文

Fisco Bcos学习 - 搭建星形拓扑组网

文章目录

    • 一、前言
    • 二、环境准备与依赖安装
      • 2.1 系统要求
      • 2.2 依赖安装
    • 三、星形拓扑设计与节点规划
    • 四、使用build_chain.sh构建星形拓扑
      • 4.1 创建操作目录并获取脚本
      • 4.2 生成星形拓扑配置文件
      • 4.3 执行构建命令
      • 4.4 查看生成的节点文件
    • 五、启动节点与共识验证
      • 5.1 启动所有节点
      • 5.2 查看群组共识状态
    • 六、配置控制台与交易验证
      • 6.1 获取并配置控制台
      • 6.2 配置控制台连接信息
      • 6.3 启动控制台并发送交易
      • 6.4 查看交易日志
    • 七、节点加入群组操作
      • 7.1 准备节点配置
      • 7.2 获取节点ID
      • 7.3 通过控制台添加节点
      • 7.4 验证新节点共识情况
    • 停止节点

一、前言

在区块链技术的实际应用中,组网拓扑结构的选择直接影响系统的性能、安全性和可扩展性。星形拓扑作为一种常见的组网方式,其核心特点是存在一个中心节点,该节点同时属于多个群组,而其他节点则分别属于不同的群组。这种结构特别适合于存在中心机构的业务场景,例如金融领域中的多方协作系统,其中中心机构需要参与多个业务群组的共识,而其他机构则仅参与各自相关的群组。

FISCO BCOS作为企业级联盟链平台,对星形拓扑提供了良好的支持。本文将详细记录如何使用FISCO BCOS搭建一个典型的星形拓扑区块链网络,包括环境准备、节点配置、启动验证等完整流程。

二、环境准备与依赖安装

在搭建星形拓扑区块链之前,需要先准备好运行环境并安装必要的依赖软件。FISCO BCOS对运行环境的要求如下:

2.1 系统要求

  • CentOS/Ubuntu/Mac OS等主流操作系统
  • Java 8及以上版本(用于控制台)
  • 足够的磁盘空间和内存(根据节点数量和业务需求调整)

2.2 依赖安装

使用以下命令安装必要的依赖软件:

# CentOS系统
$ sudo yum install -y openssl curl# Ubuntu系统
$ sudo apt install -y openssl curl# Mac OS系统
$ brew install openssl curl

三、星形拓扑设计与节点规划

本次实践将搭建一个典型的星形拓扑区块链网络,具体规划如下:

  • 中心机构(agencyA):在127.0.0.1上部署2个节点,同时属于group1、group2、group3三个群组
  • 机构B(agencyB):在127.0.0.1上部署2个节点,仅属于group1群组
  • 机构C(agencyC):在127.0.0.1上部署2个节点,仅属于group2群组
  • 机构D(agencyD):在127.0.0.1上部署2个节点,仅属于group3群组

注意:在实际应用场景中,不建议将多个节点部署在同一台机器上,应根据机器负载选择合适的节点部署方式。中心节点由于需要参与多个群组的共识,负载较高,建议单独部署在性能较好的机器上。

四、使用build_chain.sh构建星形拓扑

FISCO BCOS提供了便捷的build_chain.sh脚本,用于快速构建区块链节点配置。以下是构建星形拓扑的详细步骤:

4.1 创建操作目录并获取脚本

# 创建fisco目录并进入
$ mkdir -p ~/fisco && cd ~/fisco# 下载build_chain.sh脚本并赋予执行权限
$ curl -LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.4.1/build_chain.sh && chmod u+x build_chain.sh

4.2 生成星形拓扑配置文件

首先需要创建一个配置文件,定义各个机构的节点分布和所属群组:

# 生成配置文件ipconf
$ cat > ipconf << EOF
127.0.0.1:2 agencyA 1,2,3
127.0.0.1:2 agencyB 1
127.0.0.1:2 agencyC 2
127.0.0.1:2 agencyD 3
EOF# 查看配置文件内容
$ cat ipconf

配置文件中的每行参数含义如下:

  • ip:num:物理机IP及该机器上的节点数目
  • agency_name:机构名称
  • group_list:节点所属的群组列表,多个群组用逗号分隔

4.3 执行构建命令

# 执行build_chain.sh脚本构建星形拓扑
$ bash build_chain.sh -f ipconf -p 30300,20200,8545

执行上述命令后,脚本将自动生成所需的节点配置文件、证书和密钥等。构建过程中会显示各个机构和节点的处理信息,完成后会输出详细的构建结果:

==============================================================
[INFO] FISCO-BCOS Path   : ./bin/fisco-bcos
[INFO] IP List File      : ipconf
[INFO] Start Port        : 30300 20200 8545
[INFO] Server IP         : 127.0.0.1:2 127.0.0.1:2 127.0.0.1:2 127.0.0.1:2
[INFO] State Type        : storage
[INFO] RPC listen IP     : 127.0.0.1
[INFO] Output Dir        : /home/ubuntu16/fisco/nodes
[INFO] CA Key Path       : /home/ubuntu16/fisco/nodes/cert/ca.key
==============================================================
[INFO] All completed. Files in /home/ubuntu16/fisco/nodes

4.4 查看生成的节点文件

构建完成后,节点文件将存储在nodes目录下,目录结构如下:

nodes
|-- 127.0.0.1
|   |-- fisco-bcos
|   |-- node0
|   |   |-- conf  # 节点配置目录
|   |   |   |-- ca.crt
|   |   |   |-- group.1.genesis
|   |   |   |-- group.1.ini
|   |   |   |-- group.2.genesis
|   |   |   |-- group.2.ini
|   |   |   |-- group.3.genesis
|   |   |   |-- group.3.ini
|   |   |   |-- node.crt
|   |   |   |-- node.key
|   |   |   `-- node.nodeid  # 节点ID信息
|   |   |-- config.ini  # 节点配置文件
|   |   |-- start.sh  # 节点启动脚本
|   |   `-- stop.sh   # 节点停止脚本
|   |-- node1
|   |   |-- conf
|   |   ...

五、启动节点与共识验证

5.1 启动所有节点

进入节点目录并使用提供的脚本启动所有节点:

# 进入节点目录
$ cd ~/fisco/nodes/127.0.0.1# 启动所有节点
$ bash start_all.sh# 查看节点进程
$ ps aux | grep fisco-bcos

5.2 查看群组共识状态

节点启动后,可以通过日志查看各个群组的共识情况。正常共识的节点会输出+++日志,其中包含群组ID、区块高度、交易数量等信息:

# 查看node0在group1的共识情况
$ tail -f node0/log/* | grep "g:1.*++"
info|2019-02-11 15:33:09.914042| [g:1][p:264][CONSENSUS][SEALER]++++++++Generating seal on,blkNum=1,tx=0,nodeIdx=2,hash=72254a42....# 查看node0在group2的共识情况
$ tail -f node0/log/* | grep "g:2.*++"
info|2019-02-11 15:33:31.021697| [g:2][p:520][CONSENSUS][SEALER]++++++++Generating seal on,blkNum=1,tx=0,nodeIdx=3,hash=ef59cf17...# 查看node3在group1的共识情况
$ tail -f node3/log/*| grep "g:1.*++"
info|2019-02-11 15:39:43.927167| [g:1][p:264][CONSENSUS][SEALER]++++++++Generating seal on,blkNum=1,tx=0,nodeIdx=3,hash=5e94bf63...

六、配置控制台与交易验证

6.1 获取并配置控制台

控制台是FISCO BCOS提供的重要工具,用于与区块链节点交互,实现合约部署、交易发送等功能:

# 回到fisco目录
$ cd ~/fisco# 获取控制台
$ curl -LO https://github.com/FISCO-BCOS/console/releases/download/v1.0.9/download_console.sh && bash download_console.sh# 进入控制台目录
$ cd console# 拷贝节点证书到控制台配置目录
$ cp ~/fisco/nodes/127.0.0.1/sdk/* conf/# 获取节点的channel_listen_port
$ grep "channel_listen_port" ~/fisco/nodes/127.0.0.1/node*/config.ini

6.2 配置控制台连接信息

创建控制台配置文件conf/applicationContext.xml,配置连接到各个群组的节点信息:

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsdhttp://www.springframework.org/schema/aophttp://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>127.0.0.1:20200</value></list></property></bean><bean id="group2"  class="org.fisco.bcos.channel.handler.ChannelConnections"><property name="groupId" value="2" /><property name="connectionsStr"><list><value>127.0.0.1:20200</value></list></property></bean><bean id="group3"  class="org.fisco.bcos.channel.handler.ChannelConnections"><property name="groupId" value="3" /><property name="connectionsStr"><list><value>127.0.0.1:20200</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="orgID" value="fisco" /><property name="allChannelConnections" ref="groupChannelConnectionsConfig"></property></bean>
</beans>

6.3 启动控制台并发送交易

# 启动控制台
$ bash start.sh# 向group1发送交易,部署HelloWorld合约
[group:1]> deploy HelloWorld
contract address:0x8c17cf316c1063ab6c89df875e96c9f0f5b2f744# 查看group1区块高度
[group:1]> getBlockNumber
1# 切换到group2并发送交易
[group:1]> switch 2
Switched to group 2.
[group:2]> deploy HelloWorld
contract address:0x8c17cf316c1063ab6c89df875e96c9f0f5b2f744
[group:2]> getBlockNumber
1# 切换到group3并发送交易
[group:2]> switch 3
Switched to group 3.
[group:3]> deploy HelloWorld
contract address:0x8c17cf316c1063ab6c89df875e96c9f0f5b2f744
[group:3]> getBlockNumber
1

6.4 查看交易日志

通过查看节点日志,可以确认交易是否成功上链:

# 查看group1出块情况
$ cat node0/log/* |grep "g:1.*Report"
info|2019-02-11 16:08:45.077484| [g:1][p:264][CONSENSUS][PBFT]^^^^^^^^Report,num=1,sealerIdx=1,hash=9b5487a6...,next=2,tx=1,nodeIdx=2# 查看group2出块情况
$ cat node0/log/* |grep "g:2.*Report"
info|2019-02-11 16:11:55.354881| [g:2][p:520][CONSENSUS][PBFT]^^^^^^^^Report,num=1,sealerIdx=0,hash=434b6e07...,next=2,tx=1,nodeIdx=0# 查看group3出块情况
$ cat node0/log/* |grep "g:3.*Report"
info|2019-02-11 16:14:33.930978| [g:3][p:776][CONSENSUS][PBFT]^^^^^^^^Report,num=1,sealerIdx=1,hash=3a42fcd1...,next=2,tx=1,nodeIdx=2

七、节点加入群组操作

在星形拓扑中,有时需要将新节点加入到已有的群组中。以下是将node2节点加入到group2群组的详细步骤:

7.1 准备节点配置

# 进入节点目录
$ cd ~/fisco/nodes/127.0.0.1# 从node0拷贝group2的配置到node2
$ cp node0/conf/group.2.* node2/conf# 重启node2
$ cd node2 && bash stop.sh && bash start.sh

7.2 获取节点ID

# 获取node2的节点ID
$ cat conf/node.nodeid
6dc585319e4cf7d73ede73819c6966ea4bed74aadbbcba1bbb777132f63d355965c3502bed7a04425d99cdcfb7694a1c133079e6d9b0ab080e3b874882b95ff4

7.3 通过控制台添加节点

# 启动控制台并连接到group2
$ cd ~/fisco/console && bash start.sh 2# 查看当前group2的共识节点列表
[group:2]> getSealerList# 添加node2到共识节点
[group:2]> addSealer 6dc585319e4cf7d73ede73819c6966ea4bed74aadbbcba1bbb777132f63d355965c3502bed7a04425d99cdcfb7694a1c133079e6d9b0ab080e3b874882b95ff4# 再次查看共识节点列表,确认node2已加入
[group:2]> getSealerList

7.4 验证新节点共识情况

# 查看node2在group2的共识日志
$ tail -f node2/log/* | grep "g:2.*++"
info|2019-02-11 18:41:31.625599| [g:2][p:520][CONSENSUS][SEALER]++++++++Generating seal on,blkNum=4,tx=0,nodeIdx=1,hash=c8a1ed9

停止节点

# 回到节点目录 && 停止节点
$ cd ~/fisco/nodes/127.0.0.1 && bash stop_all.sh
http://www.lqws.cn/news/521209.html

相关文章:

  • python基础
  • Android14音频子系统-Linux音频子系统ASoC-ALSA
  • Linux RDMA网络配置手册
  • 2026-软件工程-《软件质量测试与保证》-期末复习—习题汇总
  • 【编程基本功】Win11中Git安装配置全攻略,包含Git以及图形化工具TortoiseGit
  • Qt开发1--Qt概述,安装,创建第一个Qt项目
  • 2 Qt中的空窗口外观设置和常用的基础部件
  • 【笔记】Docker 配置阿里云镜像加速(公共地址即开即用,无需手动创建实例)
  • C#高级:Winform桌面开发中DataGridView的详解(新)
  • 在 GitLab CI 中配置多任务
  • Tomcat
  • 用Rust写平衡三进制乘法器
  • Hoare逻辑与分离逻辑:从程序验证到内存推理的演进
  • ES10(ES2019)新特性整理
  • 华为运维工程师面试题(英语试题,内部资料)
  • mysql 5.1 升级 mysql 5.7 升级 mariadb10
  • RabbitMq中使用自定义的线程池
  • 基于R语言的亚组分析与森林图绘制1
  • 微算法科技融合Grover算法与统一哈希函数的混合经典-量子算法技术,可在多领域高效提升文本处理效率
  • win11搭建Python开发环境指南
  • MAC、IP地址、TCP、UDP、SSL、OSI模型
  • 【MCP 实战4-1】开发 OpenSearch MCP server
  • 南北差异之——理解业务和理解产品
  • spring项目启动sheel脚本
  • 惯性导航——陀螺仪
  • 解决git pull,push 每次操作输入账号密码问题
  • 基于STM32的个人健康助手的设计
  • 鸿蒙应用开发中的数据存储:SQLite与Preferences全面解析
  • 基于 opencv+yolov8+easyocr的车牌追踪识别
  • Kotlin 协程:全面解析与深度探索