菜单

网络

相关源文件

fuel-core 中的网络系统提供基于 libp2p 构建的 P2P 通信能力,实现节点发现、交易广播、区块同步和对等节点管理。本文档涵盖完整的网络堆栈,包括对等节点发现、Gossip 协议、请求-响应模式和连接管理。

有关 GraphQL 客户端接口的信息,请参阅客户端接口。有关交易生命周期和交易池管理的详细信息,请参阅交易池

架构概述

网络系统围绕几个关键组件组织,这些组件协同工作以提供完整的 P2P 网络解决方案。

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

FuelP2PService 是 P2P 操作的主要入口点,管理 libp2p 网络集群并协调不同协议。

主要职责

  • 管理 libp2p Swarm<FuelBehaviour>
  • 处理出站和入站请求-响应映射
  • 发布 Gossipsub 消息
  • 处理对等事件和连接管理
  • 度量收集和对等评分

来源: 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 用于交易广播

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 组合

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

CLI 集成

P2P 系统与 fuel-core 的 CLI 集成以进行配置

CLI 参数配置字段默认
--enable-p2penable_p2pfalse
--keypairkeypair启用时必需
--peering-porttcp_port30333
--max-peers-connectedmax_functional_peers_connected50
--bootstrap-nodesbootstrap_nodes[]
--reserved-nodesreserved_nodes[]
--enable-mdnsenable_mdnsfalse

来源: bin/fuel-core/src/cli/run/p2p.rs36-212 bin/fuel-core/src/cli/run/p2p.rs260-356