UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

138 lines • 6.07 kB
import { PeerScoreStatsDump } from "@chainsafe/libp2p-gossipsub/dist/src/score/peer-score.js"; import { PublishOpts } from "@chainsafe/libp2p-gossipsub/types"; import { Connection, PrivateKey } from "@libp2p/interface"; import { routes } from "@lodestar/api"; import { BeaconConfig } from "@lodestar/config"; import type { LoggerNode } from "@lodestar/logger/node"; import { ResponseIncoming } from "@lodestar/reqresp"; import { phase0 } from "@lodestar/types"; import { RegistryMetricCreator } from "../../metrics/index.js"; import { IClock } from "../../util/clock.js"; import { PeerIdStr } from "../../util/peerId.js"; import { NetworkEventBus } from "../events.js"; import { Eth2Gossipsub } from "../gossip/index.js"; import { Libp2p } from "../interface.js"; import { MetadataController } from "../metadata.js"; import { NetworkOptions } from "../options.js"; import { PeerAction, PeerScoreStats } from "../peers/index.js"; import { PeerManager } from "../peers/peerManager.js"; import { PeersData } from "../peers/peersData.js"; import { ReqRespBeaconNode } from "../reqresp/ReqRespBeaconNode.js"; import { GetReqRespHandlerFn, OutgoingRequestArgs } from "../reqresp/types.js"; import { LocalStatusCache } from "../statusCache.js"; import { CommitteeSubscription, IAttnetsService } from "../subnets/interface.js"; import { SyncnetsService } from "../subnets/syncnetsService.js"; import { NetworkCoreMetrics } from "./metrics.js"; import { INetworkCore, MultiaddrStr } from "./types.js"; type Mods = { libp2p: Libp2p; gossip: Eth2Gossipsub; reqResp: ReqRespBeaconNode; attnetsService: IAttnetsService; syncnetsService: SyncnetsService; peerManager: PeerManager; peersData: PeersData; metadata: MetadataController; logger: LoggerNode; config: BeaconConfig; clock: IClock; statusCache: LocalStatusCache; metrics: NetworkCoreMetrics | null; opts: NetworkOptions; }; export type BaseNetworkInit = { opts: NetworkOptions; config: BeaconConfig; privateKey: PrivateKey; peerStoreDir: string | undefined; logger: LoggerNode; metricsRegistry: RegistryMetricCreator | null; clock: IClock; events: NetworkEventBus; getReqRespHandler: GetReqRespHandlerFn; activeValidatorCount: number; initialStatus: phase0.Status; }; /** * This class is meant to work both: * - In a libp2p worker * - In the main thread * * libp2p holds the reference to the TCP transport socket. libp2p is in a worker, what components * must be in a worker too? * - MetadataController: Read by ReqRespBeaconNode, written by AttnetsService + SyncnetsService * - PeerRpcScoreStore * - ReqRespBeaconNode: Must be in worker, depends on libp2p * - Eth2Gossipsub: Must be in worker, depends on libp2p * - AttnetsService * - SyncnetsService * - PeerManager * - NetworkProcessor: Must be in the main thread, depends on chain */ export declare class NetworkCore implements INetworkCore { private readonly libp2p; private readonly attnetsService; private readonly syncnetsService; private readonly peerManager; private readonly peersData; private readonly reqResp; private readonly gossip; private readonly metadata; private readonly logger; private readonly config; private readonly clock; private readonly statusCache; private readonly metrics; private readonly opts; private readonly forkBoundariesByEpoch; private closed; constructor(modules: Mods); static init({ opts, config, privateKey, peerStoreDir, logger, metricsRegistry, events, clock, getReqRespHandler, activeValidatorCount, initialStatus, }: BaseNetworkInit): Promise<NetworkCore>; /** Destroy this instance. Can only be called once. */ close(): Promise<void>; scrapeMetrics(): Promise<string>; updateStatus(status: phase0.Status): Promise<void>; reportPeer(peer: PeerIdStr, action: PeerAction, actionName: string): Promise<void>; reStatusPeers(peers: PeerIdStr[]): Promise<void>; /** * Request att subnets up `toSlot`. Network will ensure to mantain some peers for each */ prepareBeaconCommitteeSubnets(subscriptions: CommitteeSubscription[]): Promise<void>; prepareSyncCommitteeSubnets(subscriptions: CommitteeSubscription[]): Promise<void>; /** * Subscribe to all gossip events. Safe to call multiple times */ subscribeGossipCoreTopics(): Promise<void>; /** * Unsubscribe from all gossip events. Safe to call multiple times */ unsubscribeGossipCoreTopics(): Promise<void>; isSubscribedToGossipCoreTopics(): Promise<boolean>; sendReqRespRequest(data: OutgoingRequestArgs): AsyncIterable<ResponseIncoming>; publishGossip(topic: string, data: Uint8Array, opts?: PublishOpts | undefined): Promise<number>; getNetworkIdentity(): Promise<routes.node.NetworkIdentity>; getConnectionsByPeer(): Map<string, Connection[]>; getConnectedPeers(): Promise<PeerIdStr[]>; getConnectedPeerCount(): Promise<number>; connectToPeer(peerIdStr: PeerIdStr, multiaddrStrArr: MultiaddrStr[]): Promise<void>; disconnectPeer(peerIdStr: PeerIdStr): Promise<void>; private _dumpPeer; dumpPeer(peerIdStr: string): Promise<routes.lodestar.LodestarNodePeer | undefined>; dumpPeers(): Promise<routes.lodestar.LodestarNodePeer[]>; dumpPeerScoreStats(): Promise<PeerScoreStats>; dumpGossipPeerScoreStats(): Promise<PeerScoreStatsDump>; dumpDiscv5KadValues(): Promise<string[]>; dumpMeshPeers(): Promise<Record<string, string[]>>; writeNetworkThreadProfile(): Promise<string>; writeDiscv5Profile(durationMs: number, dirpath: string): Promise<string>; writeNetworkHeapSnapshot(): Promise<string>; writeDiscv5HeapSnapshot(prefix: string, dirpath: string): Promise<string>; /** * Handle subscriptions through fork boundary transitions, @see FORK_EPOCH_LOOKAHEAD */ private onEpoch; private subscribeCoreTopicsAtBoundary; private unsubscribeCoreTopicsAtBoundary; } export {}; //# sourceMappingURL=networkCore.d.ts.map