1 个不稳定版本
0.0.0 | 2023年3月31日 |
---|
#8 在 #拜占庭
2KB
HotStuff-rs
HotStuff-rs是一个用于拜占庭容错状态机复制的Rust编程语言库,旨在用于生产系统。
HotStuff-rs实现了HotStuff共识协议的一种变体,但增加了块同步和动态验证者集等扩展,使此库适用于现实世界的用例(而不仅仅是研究系统)。HotStuff-rs具有一些理想的属性
- 可证明的安全性:面对任何时刻多达1/3的投票力量是拜占庭的情况。
- 最优性能:共识在(平均)1个往返时间。
- 简单性:一个小API(应用)用于插入任意有状态的应用。
- 模块化:可插拔的网络、状态持久化和视图同步机制。
- 动态验证者集:可以根据状态更新进行更新,而无需任何停机时间:对于PoS区块链应用是必需的。
- 功能齐全:包含块同步协议以及(即将推出)默认的网络、状态和节拍器实现:您编写应用程序,我们处理复制。
术语
- App:实现App特质的用户代码。这可以是任何可以用确定性状态机表达的业务逻辑,即:类型为
(Blockchain, App State, Validator Set, Block) -> (Next Blockchain, Next App State, Next Validator Set)
的纯函数。 - 副本:一个使用公钥标识的过程,它托管了HotStuff-rs协议的实现,例如,这个库。有两种类型的副本:副本:验证者和监听者,每个副本都包含一个应用程序实例。
- 区块链:一组不断增长的块,可以将其视为更新副本应用程序状态和验证者集的指令。
- 应用程序状态:应用程序可以用来存储任何内容的关键值存储;具有相同区块链的两个副本保证具有相同的应用程序状态。
- 验证者集:可以投票进行共识决定的副本集合。
- 进展协议:副本使用它通过共识创建新块并扩展区块链的协议。
- 同步协议:新协议或之前离线的副本用来快速赶上区块链头部的方法。
从哪里开始?
阅读文档:docs.rs。
提交问题
如果
- 你有功能请求/功能想法,
- 有任何问题(尤其是软件相关的问题),
- 认为你可能发现了错误。
请尽量适当地标记你的问题。
HotStuff 共识协议
HotStuff 通过构建一个 'BlockTree':一个块的有向无环图来工作。块是一个结构,具有一个 data
字段,应用程序可以自由地用任意的字节数组填充。在共识算法文献中,我们通常将共识算法称为维护状态机,该状态机根据命令更改其内部状态,因此选择了这个术语。
HotStuff 保证已提交的块是 不可变的。也就是说,只要至少有超过三分之二的有效投票力忠实执行协议,它们就永远不会被 取消。这种保证使应用程序能够有信心地进行难以撤销的操作。
一个块一旦其第三个确认被写入BlockTree,就变成了 已提交 的。对块 A
的确认是另一个块 B
,其中存在从 B
到 A
的路径。
选择第三个确认来定义提交——而不是第一个或第二个——并非随意。HotStuff 的安全性和活跃性属性实际上取决于这个条件。如果你真的想知道为什么是这样,你应该阅读论文。总结一下
- 经典的BFT共识算法,如PBFT,只需要2个确认即可进行提交,但这是以昂贵的领导者替换流程为代价的。
- Tendermint只需要2个确认即可进行提交,并且有一个简单的领导者替换流程,但需要一个显式的 '等待N秒' 步骤来保证活跃性。
HotStuff 是第一个具有简单领导者替换算法的共识算法,该算法没有 '等待N秒' 步骤,因此可以像网络延迟允许的那样快速进步。