import { Address } from "@solana/kit";
import BN from "bn.js";
import * as types from "../types";
export interface StakeSystemFields {
    stakeList: types.ListFields;
    delayedUnstakeCoolingDown: BN;
    stakeDepositBumpSeed: number;
    stakeWithdrawBumpSeed: number;
    /** set by admin, how much slots before the end of the epoch, stake-delta can start */
    slotsForStakeDelta: BN;
    /**
     * Marks the start of stake-delta operations, meaning that if somebody starts a delayed-unstake ticket
     * after this var is set with epoch_num the ticket will have epoch_created = current_epoch+1
     * (the user must wait one more epoch, because their unstake-delta will be execute in this epoch)
     */
    lastStakeDeltaEpoch: BN;
    minStake: BN;
    /**
     * can be set by validator-manager-auth to allow a second run of stake-delta to stake late stakers in the last minute of the epoch
     * so we maximize user's rewards
     */
    extraStakeDeltaRuns: number;
}
export interface StakeSystemJSON {
    stakeList: types.ListJSON;
    delayedUnstakeCoolingDown: string;
    stakeDepositBumpSeed: number;
    stakeWithdrawBumpSeed: number;
    /** set by admin, how much slots before the end of the epoch, stake-delta can start */
    slotsForStakeDelta: string;
    /**
     * Marks the start of stake-delta operations, meaning that if somebody starts a delayed-unstake ticket
     * after this var is set with epoch_num the ticket will have epoch_created = current_epoch+1
     * (the user must wait one more epoch, because their unstake-delta will be execute in this epoch)
     */
    lastStakeDeltaEpoch: string;
    minStake: string;
    /**
     * can be set by validator-manager-auth to allow a second run of stake-delta to stake late stakers in the last minute of the epoch
     * so we maximize user's rewards
     */
    extraStakeDeltaRuns: number;
}
export declare class StakeSystem {
    readonly stakeList: types.List;
    readonly delayedUnstakeCoolingDown: BN;
    readonly stakeDepositBumpSeed: number;
    readonly stakeWithdrawBumpSeed: number;
    /** set by admin, how much slots before the end of the epoch, stake-delta can start */
    readonly slotsForStakeDelta: BN;
    /**
     * Marks the start of stake-delta operations, meaning that if somebody starts a delayed-unstake ticket
     * after this var is set with epoch_num the ticket will have epoch_created = current_epoch+1
     * (the user must wait one more epoch, because their unstake-delta will be execute in this epoch)
     */
    readonly lastStakeDeltaEpoch: BN;
    readonly minStake: BN;
    /**
     * can be set by validator-manager-auth to allow a second run of stake-delta to stake late stakers in the last minute of the epoch
     * so we maximize user's rewards
     */
    readonly extraStakeDeltaRuns: number;
    constructor(fields: StakeSystemFields);
    static layout(property?: string): import("buffer-layout").Layout<unknown>;
    static fromDecoded(obj: any): types.StakeSystem;
    static toEncodable(fields: StakeSystemFields): {
        stakeList: {
            account: Address;
            itemSize: number;
            count: number;
            newAccount: Address;
            copiedCount: number;
        };
        delayedUnstakeCoolingDown: BN;
        stakeDepositBumpSeed: number;
        stakeWithdrawBumpSeed: number;
        slotsForStakeDelta: BN;
        lastStakeDeltaEpoch: BN;
        minStake: BN;
        extraStakeDeltaRuns: number;
    };
    toJSON(): StakeSystemJSON;
    static fromJSON(obj: StakeSystemJSON): StakeSystem;
    toEncodable(): {
        stakeList: {
            account: Address;
            itemSize: number;
            count: number;
            newAccount: Address;
            copiedCount: number;
        };
        delayedUnstakeCoolingDown: BN;
        stakeDepositBumpSeed: number;
        stakeWithdrawBumpSeed: number;
        slotsForStakeDelta: BN;
        lastStakeDeltaEpoch: BN;
        minStake: BN;
        extraStakeDeltaRuns: number;
    };
}
//# sourceMappingURL=StakeSystem.d.ts.map