import { RootHex, Slot } from "@lodestar/types";
import { IBlockInput } from "../chain/blocks/blockInput/index.js";
export declare enum PendingBlockType {
    /**
     * We got a block root (from a gossip attestation, for exxample) but we don't have the block in forkchoice.
     */
    UNKNOWN_BLOCK_ROOT = "UnknownBlockRoot",
    /**
     * During gossip time, we may get a block but the parent root is unknown (not in forkchoice).
     */
    UNKNOWN_PARENT = "unknown_parent",
    /**
     * During gossip we wait for a set amount of time to receive the complete block input but if it does not
     * arrive in time we turn to req/resp to pull the remainder so that it can be processed
     */
    INCOMPLETE_BLOCK_INPUT = "IncompleteBlockInput",
    UNKNOWN_DATA = "unknown_data"
}
export declare enum PendingBlockInputStatus {
    pending = "pending",
    fetching = "fetching",
    downloaded = "downloaded",
    processing = "processing"
}
export type PendingBlockInput = {
    status: PendingBlockInputStatus;
    blockInput: IBlockInput;
    timeAddedSec: number;
    timeSyncedSec?: number;
    peerIdStrings: Set<string>;
};
export type PendingRootHex = {
    status: PendingBlockInputStatus.pending | PendingBlockInputStatus.fetching;
    rootHex: RootHex;
    timeAddedSec: number;
    timeSyncedSec?: number;
    peerIdStrings: Set<string>;
};
export type BlockInputSyncCacheItem = PendingBlockInput | PendingRootHex;
export declare function isPendingBlockInput(pending: BlockInputSyncCacheItem): pending is PendingBlockInput;
export declare function getBlockInputSyncCacheItemRootHex(block: BlockInputSyncCacheItem): RootHex;
export declare function getBlockInputSyncCacheItemSlot(block: BlockInputSyncCacheItem): Slot | string;
//# sourceMappingURL=types.d.ts.map