3 个版本 (重大变更)
0.3.0 | 2023年7月28日 |
---|---|
0.2.0 | 2023年7月8日 |
0.1.0 | 2023年6月1日 |
#20 in #gossip
120KB
3K SLoC
联合化!
在 Rust 中进行基于范围的集合协调。一种协议,允许两个各自拥有一个集合的当事人有效地获得两个集合的并集。
其核心思想是我们有可以组合的指纹。这意味着如果我有集合 {A, B}
的一个指纹和一个 {C, D}
的一个指纹,我可以计算 {A, B, C, D} 的指纹,而无需逐个添加每个元素。因为这个特性,我们在这个库中把指纹称为 Monoid
。有不同的方法来构建一个幺半群,它们都有不同的后果。在 mulhash_xs233
中的那个应该对审查攻击有抵抗力,而其他的不行!
也要考虑 A
、B
、C
和 D
是什么。我们称它们为 Item
,并对它们只施加一些约束:Copy
、Debug
和 Ord
。为了使用此协议,您还需要实现 Peano
,这意味着您需要一个 zero
函数和一个返回当前元素之后元素的函数(使用 Ord
中的顺序)。通常,它们将是实际集合成员的哈希。
为了使用此协议,项目需要在一个树中。这棵树生活在 Node
内,你可以向其中添加项目。请注意,为了保持数据结构纯净,你必须保留 insert
函数的返回值。
您需要将 Node
包裹在一个 RangedNode
中。查看测试以了解如何操作。这是必需的,因为协议需要始终知道任何子树的最小和最大元素。
最后,使用 proto
模块中的 first_message
和 respond_to_message
函数来运行协议。将消息发送给对方是你的责任(
依赖项
~4–7MB
~143K SLoC