#共识算法 #状态机 #区块链 #协议 #系统 #拜占庭 #复制

cogsworth_rs

可能将成为Cogsworth视图同步算法的实现,该算法与HotStuff-rs crate集成

1 个不稳定版本

0.0.0 2023年3月31日

#8#拜占庭

Apache-2.0

2KB

HotStuff-rs

HotStuff-rs是一个用于拜占庭容错状态机复制的Rust编程语言库,旨在用于生产系统。

HotStuff-rs实现了HotStuff共识协议的一种变体,但增加了块同步和动态验证者集等扩展,使此库适用于现实世界的用例(而不仅仅是研究系统)。HotStuff-rs具有一些理想的属性

  1. 可证明的安全性:面对任何时刻多达1/3的投票力量是拜占庭的情况。
  2. 最优性能:共识在(平均)1个往返时间。
  3. 简单性:一个小API(应用)用于插入任意有状态的应用。
  4. 模块化:可插拔的网络、状态持久化和视图同步机制。
  5. 动态验证者集:可以根据状态更新进行更新,而无需任何停机时间:对于PoS区块链应用是必需的。
  6. 功能齐全:包含块同步协议以及(即将推出)默认的网络、状态和节拍器实现:您编写应用程序,我们处理复制。

术语

  • App:实现App特质的用户代码。这可以是任何可以用确定性状态机表达的业务逻辑,即:类型为(Blockchain, App State, Validator Set, Block) -> (Next Blockchain, Next App State, Next Validator Set)的纯函数。
  • 副本:一个使用公钥标识的过程,它托管了HotStuff-rs协议的实现,例如,这个库。有两种类型的副本:副本:验证者和监听者,每个副本都包含一个应用程序实例。
  • 区块链:一组不断增长的块,可以将其视为更新副本应用程序状态和验证者集的指令。
  • 应用程序状态:应用程序可以用来存储任何内容的关键值存储;具有相同区块链的两个副本保证具有相同的应用程序状态。
  • 验证者集:可以投票进行共识决定的副本集合。
  • 进展协议:副本使用它通过共识创建新块并扩展区块链的协议。
  • 同步协议:新协议或之前离线的副本用来快速赶上区块链头部的方法。

从哪里开始?

阅读文档:docs.rs

提交问题

如果

  1. 你有功能请求/功能想法,
  2. 有任何问题(尤其是软件相关的问题),
  3. 认为你可能发现了错误。

请尽量适当地标记你的问题。

HotStuff 共识协议

HotStuff 通过构建一个 'BlockTree':一个块的有向无环图来工作。块是一个结构,具有一个 data 字段,应用程序可以自由地用任意的字节数组填充。在共识算法文献中,我们通常将共识算法称为维护状态机,该状态机根据命令更改其内部状态,因此选择了这个术语。

HotStuff 保证已提交的块是 不可变的。也就是说,只要至少有超过三分之二的有效投票力忠实执行协议,它们就永远不会被 取消。这种保证使应用程序能够有信心地进行难以撤销的操作。

A graphic depicting a Tree (DAG) of Blocks. Blocks are colored depending on how many confirmations they have.

一个块一旦其第三个确认被写入BlockTree,就变成了 已提交 的。对块 A 的确认是另一个块 B,其中存在从 BA 的路径。

选择第三个确认来定义提交——而不是第一个或第二个——并非随意。HotStuff 的安全性和活跃性属性实际上取决于这个条件。如果你真的想知道为什么是这样,你应该阅读论文。总结一下

  1. 经典的BFT共识算法,如PBFT,只需要2个确认即可进行提交,但这是以昂贵的领导者替换流程为代价的。
  2. Tendermint只需要2个确认即可进行提交,并且有一个简单的领导者替换流程,但需要一个显式的 '等待N秒' 步骤来保证活跃性。

HotStuff 是第一个具有简单领导者替换算法的共识算法,该算法没有 '等待N秒' 步骤,因此可以像网络延迟允许的那样快速进步。

无运行时依赖