— https://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 共识算法:
f = (n-1)/3,需要 2f+1 票达成一致PbftMsg / HQMsg:定义节点间通信的消息结构,包含类型、节点 ID、视图编号、序列号、时间戳和数据等字段TimerManager:基于 ScheduledExecutorService 的异步延时执行工具,用于超时检测和定时任务实验结果/
├── 不存在拜占庭/ # 无拜占庭节点场景
│ ├── tps/ # 吞吐量 (TPS) 数据与图表
│ ├── 共识时间图/ # 共识耗时数据与图表
│ └── 节点间通信量/ # 通信开销数据与图表
└── 存在拜占庭/ # 有拜占庭节点场景
├── tps/
├── 共识时间图/
└── 节点间通信量/
实验数据包含 TPS(吞吐量)、共识时间、节点间通信量三类指标,每种指标均提供原始数据(.txt / .xlsx)和 MATLAB 绘图脚本(.m),可直接复现论文中的对比图表。
cd "论文代码\论文代码\代码\SHPbft2"
mvn clean compile
mvn exec:java -Dexec.mainClass="com.pbft.PbftMain"
或直接在 IDE 中运行 PbftMain.java 的 main 方法。
mvn exec:java -Dexec.mainClass="com.pbft.HQMain"
或直接在 IDE 中运行 HQMain.java 的 main 方法。
PbftMain.java 或 HQMain.java 中修改 size 变量(PBFT 默认 4,SHPBFT 默认 22)HQMain.java 中通过 nodes.get(id).setByzt() 设置net[] 数组中调整节点间延迟范围(默认 10~60ms)checkTimer() / checkHTimer() 方法中调整(投票超时默认 1000ms,请求超时默认 600ms)程序为控制台应用,运行后输出节点间消息交互的日志,可用于观察共识流程和统计性能指标。
方维维,王子岳,宋慧丽,王云鹏,丁毅. 一种面向区块链的优化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.