SPBFT

GitHubhttps://github.com/fangvv/SPBFT

本项目分享的是以下论文的核心代码(完整的版本貌似弄丢了…):

程序结构

论文代码/
└── 论文代码/
    └── 代码/
        └── SHPbft2/                         # Maven 项目根目录
            ├── pom.xml                      # Maven 构建配置(Java 1.8)
            ├── src/main/java/com/pbft/      # 核心源代码
            │   ├── PbftMain.java            # 经典 PBFT 启动入口
            │   ├── Pbft.java                # 经典 PBFT 共识算法实现
            │   ├── PbftMsg.java             # 经典 PBFT 消息模型
            │   ├── HQMain.java              # 优化版 PBFT (SHPBFT) 启动入口
            │   ├── HQ.java                  # 优化版 PBFT 共识算法实现
            │   ├── HQMsg.java               # 优化版 PBFT 消息模型
            │   └── TimerManager.java        # 异步定时调度工具
            └── src/main/resources/
                └── logback.xml              # 日志配置

程序功能

该项目实现了两种 PBFT 共识算法:

1. 经典 PBFT(Pbft.java)

2. 优化版 SHPBFT(HQ.java)

3. 消息模型

4. 定时调度

5. 实验数据

实验结果/
├── 不存在拜占庭/     # 无拜占庭节点场景
│   ├── tps/           # 吞吐量 (TPS) 数据与图表
│   ├── 共识时间图/    # 共识耗时数据与图表
│   └── 节点间通信量/  # 通信开销数据与图表
└── 存在拜占庭/       # 有拜占庭节点场景
    ├── tps/
    ├── 共识时间图/
    └── 节点间通信量/

实验数据包含 TPS(吞吐量)、共识时间、节点间通信量三类指标,每种指标均提供原始数据(.txt / .xlsx)和 MATLAB 绘图脚本(.m),可直接复现论文中的对比图表。

构建与运行

环境要求

构建项目

cd "论文代码\论文代码\代\SHPbft2"
mvn clean compile

运行经典 PBFT 模拟

mvn exec:java -Dexec.mainClass="com.pbft.PbftMain"

或直接在 IDE 中运行 PbftMain.javamain 方法。

运行优化版 SHPBFT 模拟

mvn exec:java -Dexec.mainClass="com.pbft.HQMain"

或直接在 IDE 中运行 HQMain.javamain 方法。

参数调整

程序为控制台应用,运行后输出节点间消息交互的日志,可用于观察共识流程和统计性能指标。

方维维,王子岳,宋慧丽,王云鹏,丁毅. 一种面向区块链的优化PBFT共识算法[J]. 北京交通大学学报, 2019, 43(5): 58-64. FANG Weiwei, WANG Ziyue, SONG Huili, WANG Yunpeng, DING Yi. An optimized PBFT consensus algorithm for blockchain. Beijing Jiaotong University, 2019, 43(5): 58-64.

@article{方维维2019一种面向区块链的优化,
title={一种面向区块链的优化 PBFT 共识算法},
author={方维维 and 王子岳 and 宋慧丽 and 王云鹏 and 丁毅},
journal={北京交通大学学报},
volume={43},
number={5},
pages={58},
year={2019}   }

仅供相关领域的研究人员参考。不足之处欢迎大家批评指正!

如有疑问,请联系论文二作:1042039220@qq.com

Please note that the open source code in this repository was mainly completed by the graduate student author during his master’s degree study. Since the author did not continue to engage in scientific research work after graduation, it is difficult to continue to maintain and update these codes. We sincerely apologize that these codes are for reference only.