import { PeerId } from "@libp2p/interface";
import { Logger } from "@lodestar/utils";
import { GoodByeReasonCode } from "../../../constants/network.js";
import { PeerIdStr } from "../../../util/peerId.js";
import { NetworkCoreMetrics } from "../../core/metrics.js";
import { IPeerRpcScoreStore, PeerAction, PeerRpcScoreOpts, PeerScoreStats, ScoreState } from "./interface.js";
/**
 * A peer's score (perceived potential usefulness).
 * This simplistic version consists of a global score per peer which decays to 0 over time.
 * The decay rate applies equally to positive and negative scores.
 * Peer cool-down period will be checked before dialing and will only be dialed if score is not waiting to decay
 */
export declare class PeerRpcScoreStore implements IPeerRpcScoreStore {
    private readonly scores;
    private readonly metrics;
    private readonly logger;
    constructor(opts?: PeerRpcScoreOpts, metrics?: NetworkCoreMetrics | null, logger?: Logger | null);
    getScore(peer: PeerId): number;
    getGossipScore(peer: PeerId): number;
    getScoreState(peer: PeerId): ScoreState;
    isCoolingDown(peerIdStr: PeerIdStr): boolean;
    dumpPeerScoreStats(): PeerScoreStats;
    applyAction(peer: PeerId, action: PeerAction, actionName: string): void;
    /**
     * Apply a reconnection cool-down period to prevent automatic reconnection. Sets peer
     * banning period and updates gossip score to -1 so next update removes the negative
     * score
     */
    applyReconnectionCoolDown(peer: PeerIdStr, reason: GoodByeReasonCode): number;
    update(): void;
    updateGossipsubScore(peerId: PeerIdStr, newScore: number, ignore: boolean): void;
}
//# sourceMappingURL=store.d.ts.map