架构
Hub 是一个单进程守护程序,负责接收来自客户端、其他 hub 和 farcaster 合约的数据。它包含四个主要组件:
- 存储引擎 - 校验消息有效性,将其持久化存储到磁盘并触发事件。
- P2P 引擎 - 建立 gossipsub 网络以与其他 hub 交换消息。
- 同步引擎 - 处理当 gossip 未能传递消息时的边缘情况。
- RPC 服务器 - 提供读写 hub 数据的 API 接口。
存储引擎
Hubble 接收到的消息会被转发至存储引擎,随后被分发到对应的 CRDT 集合。经过 CRDT 集合验证后,消息将被持久化存储至 RocksDB,同时向监听器发送事件通知。
CRDT 集合的实现严格遵循 Farcaster 协议规范。该引擎还会追踪 Farcaster 合约的状态,这对于验证 Signer CRDT 集合至关重要。
P2P 引擎
Hubble 通过基于 LibP2P 构建的 GossipSub 网络与其他节点建立连接。被存储引擎合并的消息会立即通过 gossip 协议广播给所有对等节点。
在测试阶段,Hubble 仅与可信节点建立连接,并采用简单的网络拓扑结构。启动时必须预先配置已知实例才能建立对等连接。在后续版本中,网络拓扑将进行调整以更接近去信任的网状结构。
同步引擎
Hubble 会定期与其他节点执行 差异同步,以发现可能在 gossip 过程中丢失的消息。该功能通过每个 Hub 实例暴露的 gRPC API 实现。
RPC 服务器
Hubble 提供 gRPC 和 HTTP API 用于读写 hub 数据。向 farcaster 网络写入数据的主要方式是调用 hub 的 submitMessage
接口。hub 会验证消息的有效性,若符合协议规范,则将其存储到对应的 CRDT 集合并通过 gossip 协议传播给其他节点。hub 还提供其他 API 用于读取各集合的状态信息。