///
///
import { Database } from '@liskhq/lisk-db';
import { EventEmitter } from 'events';
import * as liskP2P from '@liskhq/lisk-p2p';
import { Logger } from '../../logger';
import { NetworkConfig } from '../../types';
import { Endpoint } from './endpoint';
interface NodeInfoOptions {
[key: string]: unknown;
readonly lastBlockID: Buffer;
readonly height: number;
readonly maxHeightPrevoted: number;
readonly blockVersion: number;
readonly legacy?: Buffer[];
}
interface NetworkConstructor {
readonly options: NetworkConfig;
}
interface P2PRequestPacket extends liskP2P.p2pTypes.P2PRequestPacket {
readonly peerId: string;
}
interface P2PMessagePacket extends liskP2P.p2pTypes.P2PMessagePacket {
readonly peerId: string;
}
type P2PRPCEndpointHandler = (input: {
data: unknown;
peerId: string;
}) => unknown;
type P2PEventHandler = (input: {
data: Buffer | undefined;
peerId: string;
}) => void;
interface NetworkInitArgs {
chainID: Buffer;
logger: Logger;
nodeDB: Database;
}
export declare class Network {
readonly events: EventEmitter;
private readonly _options;
private readonly _endpoint;
private _logger;
private _nodeDB;
private _chainID;
private _secret;
private _p2p;
private _endpoints;
private _eventHandlers;
private _saveIntervalID?;
private _nodeInfoOptions;
constructor({ options }: NetworkConstructor);
init(args: NetworkInitArgs): Promise;
start(): Promise;
stop(): Promise;
get endpoint(): Endpoint;
registerEndpoint(endpoint: string, handler: P2PRPCEndpointHandler): void;
registerHandler(event: string, handler: P2PEventHandler): void;
request(requestPacket: liskP2P.p2pTypes.P2PRequestPacket): Promise;
send(sendPacket: liskP2P.p2pTypes.P2PMessagePacket): void;
requestFromPeer(requestPacket: P2PRequestPacket): Promise;
sendToPeer(sendPacket: P2PMessagePacket): void;
broadcast(broadcastPacket: liskP2P.p2pTypes.P2PMessagePacket): void;
getConnectedPeers(): ReadonlyArray;
getNetworkStats(): liskP2P.p2pTypes.NetworkStats;
getDisconnectedPeers(): ReadonlyArray;
applyPenaltyOnPeer(penaltyPacket: liskP2P.p2pTypes.P2PPenalty): void;
applyNodeInfo(data: Partial): void;
}
export {};