11个不稳定版本 (5个破坏性更新)
0.7.0 | 2019年7月30日 |
---|---|
0.6.0 | 2019年6月25日 |
0.5.0 | 2019年1月29日 |
0.4.0 | 2018年10月11日 |
0.2.0 | 2018年7月6日 |
#8 in #agreement
每月下载量 21
73KB
2K SLoC
Rhododendron
Rust中的基于futures的BFT。大部分功能实现,但尚未准备好用于生产。
大部分工作是通过agree
函数完成的
pub fn agree<C: Context, I, O>(context: C, nodes: usize, max_faulty: usize, input: I, output: O)
-> Agreement<C, I, O>
{
// ...
}
调用agree
有三个部分
- 一个
Context
,封装要协商的值类型,以及值的生成、评估和签名。 - 来自其他节点的消息输入流。
- 将到达所有其他诚实节点的消息输出汇。
这将产生一个可以在事件循环上运行的Agreement
,直到完成。
lib.rs
:
基于不同轮次旋转提议者的BFT协议,基于泛型的futures实现。
尝试在候选者上达成BFT协议。尚未准备好用于生产。
协议在n
个节点之间进行,其中最多max_faulty
个是错误的。max_faulty
应小于nodes
的1/3,否则可能无法达成协议。
通过调用带有泛型Context
、输入流和输出汇的agree
来启动协议。输入应该永远在逻辑上不会得出结论,并包含来自所有其他节点的消息,而输出汇
注意,即使在没有看到候选者的情况下,也可能见证达成协议。任何看到的候选者都将进行检查以确保其有效性。
尽管从技术上讲,协议将始终完成(假设最终交付了消息),但在实践中,这个未来可能在没有见证结论的情况下就结束了。
使用Agreement
未来的用户应安排它被外部导入的已达成值所抢占。
依赖关系
~2.6–4MB
~81K SLoC