#peer #consensus #graph #dot #secure #events #reliable

parsec

异步、可靠、安全且高效的共识协议实现

6个版本

0.7.3 2020年11月23日
0.7.1 2020年6月2日
0.6.0 2020年2月26日
0.5.0 2018年7月10日
0.4.0 2016年4月13日

1152网络编程

每月 31 次下载

GPL-3.0 许可证

690KB
15K SLoC

PARSEC - 异步、可靠、安全且高效的共识协议

软件包 文档 Linux/macOS Windows 问题
Documentation Build Status Build status Stories in Ready
MaidSafe网站 SAFE开发者论坛 SAFE网络论坛

概述

示例文件夹中有一个基本示例。这允许您模拟一个运行Parsec协议并就一系列随机网络事件达成共识的节点网络。您还可以将每个节点的八卦图以dot格式输出到系统临时目录中的文件。这可以通过特性dump-graphs启用。例如,要运行一个由五个节点和十个网络事件组成的示例

cargo run --release --example=basic --features=mock,dump-graphs -- --initial-peers=5 --opaque=10

如果您的路径中有来自graphvizdot,则也会从每个这些dot文件生成SVG图形。如果没有,您可以将生成的dot文件的内容复制到在线转换器(例如http://viz-js.com)中,以查看八卦图。

详细教程

如果概述中的说明对您来说有点稀疏,请参阅教程以获取逐步指南。

实现状态

已实现的功能

  • PARSEC的初始实现
    • 在静态节点网络中演示了工作共识
  • 集成测试
    • 简单的测试表明,在节点数量较小且所有节点都在单个线程中模拟的网络中,已达成共识
    • 使用随机生成数据以进行浸泡测试
    • 进行了数万次运行,没有错误
  • 生成图形
    • 使用特性: dump-graphs,输出所有网络通信的dot表示
    • 这些图形是在每个共识决策时刻的快照(每个节点每个共识决策一个图形)
    • 图形用PARSEC协议的详细信息进行了注释,说明了最终如何达成共识
    • 可以使用dot从dot表示中获得图像(例如.svg)
  • 可重复性
    • 如果测试失败,会输出一个种子。这个种子可以用来重现失败的场景,有助于调查潜在的问题。
  • 简单示例
    • 创建了一个简单示例,以便测试各种场景。
    • 可以通过命令行参数配置对等节点数量、投票数量等。
  • 初始文档
    • API的早期文档可在此处找到。

即将推出的功能

  • 防止恶意行为
    • 处理分支(一个节点发送多个相同self_parent的事件)
    • 双重投票(一个节点对同一网络事件进行多次投票)
    • 检测恶意行为,导致达成共识以排除违规节点
  • 性能
    • 基准测试和优化代码
    • 在模拟网络中进行每秒交易数(TPS)的测量
      • 使用可以与竞争共识协议相比的设置
  • 广泛的测试
    • 实施广泛的测试,以模拟对抗性场景,以证明在“愉快路径”之外的鲁棒性
  • 广泛的文档
    • 文档将全面制作
  • 动态网络成员资格

许可证

根据通用公共许可证(GPL)版本3进行许可(LICENSE http://www.gnu.org/licenses/gpl-3.0.en.html)。

链接例外

Parsec根据GPLv3进行许可,带有链接例外。这意味着您可以从任何程序链接并使用库,无论是专有还是开源;付费或免费。但是,如果您修改Parsec,则必须根据GPLv3条款分发您修改版本的源代码。

有关更多详细信息,请参阅LICENSE文件。

贡献

想要贡献?太好了 🎉

有许多方式可以回报项目,无论是编写新代码、修复错误,还是只是报告错误。所有形式的贡献都受到鼓励!

有关如何贡献的说明,请参阅我们的贡献指南

依赖项

~2.6–3.5MB
~75K SLoC