3 个版本 (重大变更)

0.3.0 2023年7月28日
0.2.0 2023年7月8日
0.1.0 2023年6月1日

#20 in #gossip

AGPL-3.0-or-later

120KB
3K SLoC

联合化!

在 Rust 中进行基于范围的集合协调。一种协议,允许两个各自拥有一个集合的当事人有效地获得两个集合的并集。

其核心思想是我们有可以组合的指纹。这意味着如果我有集合 {A, B} 的一个指纹和一个 {C, D} 的一个指纹,我可以计算 {A, B, C, D} 的指纹,而无需逐个添加每个元素。因为这个特性,我们在这个库中把指纹称为 Monoid。有不同的方法来构建一个幺半群,它们都有不同的后果。在 mulhash_xs233 中的那个应该对审查攻击有抵抗力,而其他的不行!

也要考虑 ABCD 是什么。我们称它们为 Item,并对它们只施加一些约束:CopyDebugOrd。为了使用此协议,您还需要实现 Peano,这意味着您需要一个 zero 函数和一个返回当前元素之后元素的函数(使用 Ord 中的顺序)。通常,它们将是实际集合成员的哈希。

为了使用此协议,项目需要在一个树中。这棵树生活在 Node 内,你可以向其中添加项目。请注意,为了保持数据结构纯净,你必须保留 insert 函数的返回值。

您需要将 Node 包裹在一个 RangedNode 中。查看测试以了解如何操作。这是必需的,因为协议需要始终知道任何子树的最小和最大元素。

最后,使用 proto 模块中的 first_messagerespond_to_message 函数来运行协议。将消息发送给对方是你的责任(

依赖项

~4–7MB
~143K SLoC