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

Fisco Bcos学习 - 搭建并行多组组网

文章目录

    • 一、前言
    • 二、并行多组与星形拓扑的架构对比
    • 三、搭建单群组四节点区块链基础环境
      • 3.1 环境准备与脚本获取
      • 3.2 构建单群组四节点网络
      • 3.3 启动节点并验证共识
    • 四、添加group2构建并行多组架构
      • 4.1 复制并修改群组配置文件
      • 4.2 重启节点并验证新群组共识
    • 五、控制台配置与多群组交易验证
      • 5.1 获取并配置控制台
      • 5.2 配置多群组连接信息
      • 5.3 发送跨群组交易并验证
      • 5.4 查看多群组出块日志

一、前言

在区块链技术的企业级应用中,多群组架构已成为满足复杂业务需求的重要解决方案。并行多组拓扑作为其中一种典型架构,其核心特点是每个节点均属于多个群组,能够实现不同业务的横向扩展或同一业务的纵向扩展。这种架构在金融、供应链、医疗等需要多方协作但数据隔离的场景中具有显著优势,例如:

  • 银行系统中不同业务线(如信贷、结算、理财)的隔离与并行处理
  • 供应链金融中不同核心企业主导的供应链网络共存
  • 医疗数据共享中不同医疗机构间的隐私保护与数据互通

FISCO BCOS 作为高性能的联盟链平台,对并行多组架构提供了完善的支持。本文将详细记录如何搭建一个四节点两群组的并行多组区块链网络,深入理解其技术原理与实践要点。

二、并行多组与星形拓扑的架构对比

在开展实践前,先明确并行多组与星形拓扑的核心区别:

对比维度星形拓扑并行多组拓扑
节点群组归属存在中心节点归属所有群组,其他节点归属单一群组所有节点均归属多个群组
业务场景适合存在中心机构的多方协作适合多业务线并行处理或同业务扩展
负载分布中心节点负载较高,其他节点负载较低节点负载相对均衡
典型应用金融监管平台(监管机构为中心节点)银行多业务线并行处理

三、搭建单群组四节点区块链基础环境

3.1 环境准备与脚本获取

首先创建操作目录并获取 build_chain.sh 脚本:

# 创建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

3.2 构建单群组四节点网络

使用 build_chain.sh 脚本构建单群组(group1)四节点区块链:

# 构建本机单群组四节点区块链
$ bash build_chain.sh -l "127.0.0.1:4" -o multi_nodes -p 20000,20100,7545

脚本执行后将输出详细的构建信息,包括节点配置路径、端口分配等:

Generating CA key ...
==============================================================
Generating keys ...
Processing IP: 127.0.0.1 Total: 4 Agency: agency Groups: 1
==============================================================
Generating configurations ...
Processing IP: 127.0.0.1 Total: 4 Agency: agency Groups: 1
==============================================================
[INFO] FISCO-BCOS Path   : bin/fisco-bcos
[INFO] Start Port        : 20000 20100 7545
[INFO] Server IP         : 127.0.0.1:4
[INFO] State Type        : storage
[INFO] RPC listen IP     : 127.0.0.1
[INFO] Output Dir        : /home/ubuntu16/fisco/multi_nodes
[INFO] CA Key Path       : /home/ubuntu16/fisco/multi_nodes/cert/ca.key
==============================================================
[INFO] All completed. Files in /home/ubuntu16/fisco/multi_nodes

3.3 启动节点并验证共识

进入节点目录启动所有节点,并通过日志验证共识状态:

# 进入节点目录
$ cd ~/fisco/multi_nodes/127.0.0.1# 启动所有节点
$ bash start_all.sh# 查看节点进程
$ ps aux | grep fisco-bcos# 查看node0在group1的共识日志
$ tail -f node0/log/* | grep "g:1.*++"
info|2019-02-11 20:59:52.065958| [g:1][p:264][CONSENSUS][SEALER]++++++++Generating seal on,blkNum=1,tx=0,nodeIdx=2,hash=da72649e...# 查看node1在group1的共识日志
$ tail -f node1/log/* | grep "g:1.*++"
info|2019-02-11 20:59:54.070297| [g:1][p:264][CONSENSUS][SEALER]++++++++Generating seal on,blkNum=1,tx=0,nodeIdx=0,hash=11c9354d...

四、添加group2构建并行多组架构

4.1 复制并修改群组配置文件

并行多组架构的核心是为现有节点添加新的群组配置:

# 进入节点目录
$ cd ~/fisco/multi_nodes/127.0.0.1# 复制group1配置文件作为group2基础
$ cp node0/conf/group.1.genesis node0/conf/group.2.genesis# 修改群组ID为2
$ sed -i "s/id=1/id=2/g" node0/conf/group.2.genesis# 验证修改结果
$ cat node0/conf/group.2.genesis | grep "id"
# 输出:id=2# 将group2配置复制到所有节点
$ cp node0/conf/group.2.genesis node1/conf/group.2.genesis
$ cp node0/conf/group.2.genesis node2/conf/group.2.genesis
$ cp node0/conf/group.2.genesis node3/conf/group.2.genesis

4.2 重启节点并验证新群组共识

# 停止并重启所有节点
$ bash stop_all.sh
$ bash start_all.sh# 查看node0在group2的共识日志
$ tail -f node0/log/* | grep "g:2.*++"
info|2019-02-11 21:13:28.541596| [g:2][p:520][CONSENSUS][SEALER]++++++++Generating seal on,blkNum=1,tx=0,nodeIdx=2,hash=f3562664...# 查看node1在group2的共识日志
$ tail -f node1/log/* | grep "g:2.*++"
info|2019-02-11 21:13:30.546011| [g:2][p:520][CONSENSUS][SEALER]++++++++Generating seal on,blkNum=1,tx=0,nodeIdx=0,hash=4b17e74f...

五、控制台配置与多群组交易验证

5.1 获取并配置控制台

# 回到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/multi_nodes/127.0.0.1/sdk/* conf/# 获取节点channel端口
$ grep "channel_listen_port" multi_nodes/127.0.0.1/node0/config.ini
# 输出:channel_listen_port=20100

5.2 配置多群组连接信息

创建控制台配置文件,同时连接group1和group2:

<?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:20100</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:20100</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>

5.3 发送跨群组交易并验证

# 启动控制台
$ bash start.sh# 查看group1初始块高
[group:1]> getBlockNumber
0# 向group1部署合约
[group:1]> deploy HelloWorld
contract address:0x8c17cf316c1063ab6c89df875e96c9f0f5b2f744# 确认group1块高增加
[group:1]> getBlockNumber
1# 切换到group2
[group:1]> switch 2
Switched to group 2.# 查看group2初始块高
[group:2]> getBlockNumber
0# 向group2部署合约
[group:2]> deploy HelloWorld
contract address:0x8c17cf316c1063ab6c89df875e96c9f0f5b2f744# 确认group2块高增加
[group:2]> getBlockNumber
1

5.4 查看多群组出块日志

# 查看group1出块日志
$ cat node0/log/* | grep "g:1.*Report"
info|2019-02-11 21:14:57.216548| [g:1][p:264][CONSENSUS][PBFT]^^^^^Report:,num=1,sealerIdx=3,hash=be961c98...,next=2,tx=1,nodeIdx=2# 查看group2出块日志
$ cat node0/log/* | grep "g:2.*Report"
info|2019-02-11 21:15:25.310565| [g:2][p:520][CONSENSUS][PBFT]^^^^^Report:,num=1,sealerIdx=3,hash=5d006230...,next=2,tx=1,nodeIdx=2
http://www.lqws.cn/news/525349.html

相关文章:

  • SQL关键字三分钟入门:DELETE —— 删除数据
  • 定位坐标系深度研究报告
  • C++学习笔记--Chapter Two--类的定义、对象的创建和使用、构造函数
  • 《解锁前端潜力:自动化流程搭建秘籍》
  • python学智能算法(十六)|机器学习支持向量机简单示例
  • HarmonyOS5 折叠屏适配测试:验证APP在展开/折叠状态下的界面自适应,以及会出现的问题
  • 数组题解——二分查找【LeetCode】
  • 八股文——JAVA基础:说一下C++与java的区别
  • 黑马python(十六)
  • GBDT:梯度提升决策树——集成学习中的预测利器
  • 设计模式-桥接模式、组合模式
  • Selenium 二次封装通用页面基类 BasePage —— Python 实践
  • 矩阵题解——螺旋矩阵【LeetCode】
  • 大模型推理-高通qnn基础
  • PYTHON从入门到实践5-列表操作
  • 超级好用的小软件:geek,卸载软件,2m大小
  • vue2简单的路由切换
  • OpenCV图像旋转:单点旋转与图片旋转
  • Windows10中设置多个虚拟IP方法
  • Linux size命令详解
  • Boss:攻击
  • Azure虚拟机添加磁盘
  • Docker、Docker composer与Docker desktop
  • H5录音、图文视频IndexDB储存最佳实践:用AI生成语音备忘录
  • Fisco Bcos学习 - 开发第一个区块链应用
  • 高防IP能不能防住500GDdos攻击
  • AI系列1-1: 离线部署通义大模型及持续修正-RedHat+NVIDA GPU
  • Java课后习题(编程题)
  • SpringBoot高校党务系统
  • 激光雷达全链路光学系统及探测器能量耦合分析