54个版本 (35个重大变更)
0.44.0 | 2024年7月18日 |
---|---|
0.41.0 | 2024年6月24日 |
0.37.0 | 2024年3月18日 |
0.33.0 | 2023年12月13日 |
0.8.0-alpha.5 | 2020年3月24日 |
#8 in #gossip-protocol
9,855 每月下载量
在 33 个crate中使用 (5个直接使用)
2MB
41K SLoC
礼貌的Gossiping。
此crate在网络上提供Gossiping功能。
Gossip消息分为两类:“主题”和共识引擎ID。共识引擎ID与消息一起通过线路发送,而主题则不发送,假设可以隐式地从消息内容中推导出主题。
主题是与消息相关联的单个32字节标签,用于以不可见的方式对这些消息进行分组。共识代码可以调用 broadcast_topic
来尝试将单个主题下的所有消息发送给尚未拥有它们的所有对等节点,并调用 send_topic
将单个主题下的所有消息发送给特定的节点。
使用方法
- 实现
Network
特性,表示低级网络原语。它已在sc_network::NetworkService
中实现。 - 实现
Validator
特性。请参阅下面的章节。 - 确定一个
ConsensusEngineId
。每个Gossiping协议都应该有一个不同的ID。 - 使用这三个元素构建一个
GossipEngine
。 - 使用
GossipEngine
的方法来发送消息和接收传入的消息。
验证器是什么?
Validator
的主要作用是处理来自对等方的传入消息,并决定是否丢弃或处理它们。它还决定是否重新广播消息。
Validator
的次要作用是检查消息是否允许发送给指定的对等方。所有消息在发送之前都会与此过滤器进行核对。这使得验证器可以使用它所了解的关于连接对等方的信息,在任意时刻决定是否向它们发送消息 - 特别是等待直到对等方可以接收并处理消息后再发送。
最后,由于八卦验证器可以决定不重新广播消息,这为将邻居状态包嵌入到八卦协议中打开了大门。这些状态包通常包含一些轻量级信息,用于向对等方通知协议状态的当前视图。
许可证:GPL-3.0-or-later WITH Classpath-exception-2.0
依赖项
~74–115MB
~2M SLoC