fuel-core 中的网络系统提供基于 libp2p 构建的 P2P 通信能力,实现节点发现、交易广播、区块同步和对等节点管理。本文档涵盖完整的网络堆栈,包括对等节点发现、Gossip 协议、请求-响应模式和连接管理。
有关 GraphQL 客户端接口的信息,请参阅客户端接口。有关交易生命周期和交易池管理的详细信息,请参阅交易池。
网络系统围绕几个关键组件组织,这些组件协同工作以提供完整的 P2P 网络解决方案。
来源: crates/services/p2p/src/service.rs432-470 crates/services/p2p/src/p2p_service.rs104-145 crates/services/p2p/src/behavior.rs47-75
来源: crates/services/p2p/src/behavior.rs77-182 crates/services/p2p/src/config.rs274-297
FuelP2PService 是 P2P 操作的主要入口点,管理 libp2p 网络集群并协调不同协议。
主要职责
Swarm<FuelBehaviour>来源: crates/services/p2p/src/p2p_service.rs104-145 crates/services/p2p/src/p2p_service.rs217-308
Task 结构体编排 P2P 操作并与 Fuel-core 的其他服务集成
来源: crates/services/p2p/src/service.rs447-470 crates/services/p2p/src/service.rs128-189
P2P 配置通过类型安全的初始化模式进行管理
| 配置类别 | 关键参数 | 目的 |
|---|---|---|
| 网络身份 | keypair, network_name, checksum | 节点身份和网络隔离 |
| 连接限制 | max_functional_peers_connected, max_discovery_peers_connected | 资源管理 |
| 协议设置 | gossipsub_config, heartbeat_config | 协议特定调优 |
| 发现 | bootstrap_nodes, reserved_nodes, enable_mdns | 对等节点发现配置 |
| 请求-响应 | set_request_timeout, max_concurrent_streams | 直接通信设置 |
来源: crates/services/p2p/src/config.rs54-152 bin/fuel-core/src/cli/run/p2p.rs36-212
系统使用多种发现机制来查找和连接对等节点
来源: crates/services/p2p/src/discovery/discovery_config.rs103-181 crates/services/p2p/src/discovery.rs52-72
PeerManager 处理对等节点生命周期、信誉评分和连接限制
来源: crates/services/p2p/src/peer_manager.rs71-87 crates/services/p2p/src/peer_manager.rs97-108 crates/services/p2p/src/peer_manager.rs148-171
Gossipsub 处理网络中的交易和预确认广播
主题
NEW_TX_GOSSIP_TOPIC: 交易广播TX_PRECONFIRMATIONS_GOSSIP_TOPIC: 预确认广播来源: crates/services/p2p/src/gossipsub/config.rs230-250 crates/services/p2p/src/service.rs477-495
用于数据同步的直接点对点通信
| 消息类型 | 目的 | 响应类型 |
|---|---|---|
SealedHeaders(Range<u32>) | 区块头同步 | Vec<SealedBlockHeader> |
Transactions(Range<u32>) | 交易同步 | Vec<Transactions> |
TxPoolAllTransactionsIds | 交易池枚举 | Vec<TxId> |
TxPoolFullTransactions(Vec<TxId>) | 交易池数据检索 | Vec<Option<NetworkableTransactionPool>> |
来源: crates/services/p2p/src/request_response/messages.rs22-28 crates/services/p2p/src/request_response/messages.rs54-62
持续对等节点健康监测和区块高度跟踪
来源: crates/services/p2p/src/heartbeat/handler.rs86-104 crates/services/p2p/src/heartbeat/handler.rs152-230
来源: crates/services/p2p/src/p2p_service.rs565-589 crates/services/p2p/src/service.rs936-1067
主任务循环处理各种类型的请求
来源: crates/services/p2p/src/service.rs951-1037 crates/services/p2p/src/service.rs594-683
FuelBehaviour 结合了多种 libp2p 行为
来源: crates/services/p2p/src/behavior.rs47-75 crates/services/p2p/src/behavior.rs162-181
连接限制和对等节点管理确保资源效率
来源: crates/services/p2p/src/peer_manager.rs245-277 crates/services/p2p/src/peer_manager.rs311-340
来源: crates/services/p2p/src/service.rs839-924 crates/services/p2p/src/config.rs161-204
P2P 系统与 fuel-core 的 CLI 集成以进行配置
| CLI 参数 | 配置字段 | 默认 |
|---|---|---|
--enable-p2p | enable_p2p | false |
--keypair | keypair | 启用时必需 |
--peering-port | tcp_port | 30333 |
--max-peers-connected | max_functional_peers_connected | 50 |
--bootstrap-nodes | bootstrap_nodes | [] |
--reserved-nodes | reserved_nodes | [] |
--enable-mdns | enable_mdns | false |
来源: bin/fuel-core/src/cli/run/p2p.rs36-212 bin/fuel-core/src/cli/run/p2p.rs260-356