import type { Address, Rpc, SolanaRpcApi } from '@solana/kit'; import type { EventEmitter } from './events.js'; import { AtomicSnapshotRef } from './route-snapshot.js'; import type { LeaderInfo } from './route-snapshot.js'; export interface LeaderDiscoveryProvider { getLeaders(slot: bigint, fanout: number): Promise<{ leaders: LeaderInfo[]; source: 'slotLeaders' | 'union'; }>; } export interface DefaultProviderDeps { rpc: Rpc; /** Cluster node map keyed by identity pubkey. Refreshed externally. */ clusterNodes: ReadonlyMap; /** Epoch schedule from getEpochSchedule(). */ epochSchedule: { slotsPerEpoch: bigint; firstNormalSlot: bigint; firstNormalEpoch: bigint; }; /** Current epoch info from getEpochInfo(). */ currentEpoch: { epoch: bigint; absoluteSlot: bigint; slotIndex: bigint; slotsInEpoch: bigint; }; } export interface LeaderCacheOptions { rpc: Rpc; /** Override the discovery provider. Default: createDefaultProvider. */ provider?: LeaderDiscoveryProvider; fanoutSlots: number; emit: EventEmitter; signal: AbortSignal; getCurrentSlot: () => bigint; snapshotRef: AtomicSnapshotRef; /** * Mutable Set owned by the caller (tpu-client). startLeaderCache will * populate it during init and refresh it alongside cluster nodes (~5 min). * Only `current` vote accounts with activatedStake > 0n are included; * delinquent validators are excluded because they are not leading slots. */ stakedIdentities?: Set
; } export declare function createDefaultProvider(getDeps: () => DefaultProviderDeps): LeaderDiscoveryProvider; export declare function startLeaderCache(opts: LeaderCacheOptions): Promise; //# sourceMappingURL=leader-cache.d.ts.map