import { BlockHeader } from '@liskhq/lisk-chain';
import { BFTHeader } from '../types';
export declare enum ForkStatus {
    IDENTICAL_BLOCK = 1,
    VALID_BLOCK = 2,
    DOUBLE_FORGING = 3,
    TIE_BREAK = 4,
    DIFFERENT_CHAIN = 5,
    DISCARD = 6
}
interface Slots {
    getSlotTime(slot: number): number;
    getSlotNumber(timeStamp: number): number;
    isWithinTimeslot(slot: number, time: number): boolean;
}
export declare const forgingSlot: (slots: Slots, block: BFTHeader) => number;
export declare const isBlockReceivedWithinForgingSlot: (slots: Slots, { timestamp, receivedAt }: BFTHeader) => boolean;
export declare const isLastAppliedBlockReceivedWithinForgingSlot: (slots: Slots, lastAppliedBlock: BFTHeader) => boolean;
export declare const isValidBlock: (lastBlock: BFTHeader, currentBlock: BFTHeader) => boolean;
export declare const isIdenticalBlock: (lastBlock: BFTHeader, currentBlock: BFTHeader) => boolean;
export declare const isDuplicateBlock: (lastBlock: BFTHeader, currentBlock: BFTHeader) => boolean;
export declare const isDoubleForging: (lastBlock: BFTHeader, currentBlock: BFTHeader) => boolean;
export declare const isTieBreak: ({ slots, lastAppliedBlock, receivedBlock, }: {
    readonly slots: Slots;
    readonly lastAppliedBlock: BFTHeader;
    readonly receivedBlock: BFTHeader;
}) => boolean;
interface DifferentChainCheckHeader {
    height: number;
    maxHeightPrevoted: number;
}
export declare const isDifferentChain: (lastBlock: DifferentChainCheckHeader, currentBlock: DifferentChainCheckHeader) => boolean;
export declare const forkChoice: (blockHeader: BlockHeader, lastBlockHeader: BlockHeader, slots: Slots) => ForkStatus;
export {};
