/// <reference types="node" />
import { PublicKey, Connection } from "@solana/web3.js";
import BN from "bn.js";
import * as types from "../types";
export interface FarmStateFields {
    farmAdmin: PublicKey;
    globalConfig: PublicKey;
    token: types.TokenInfoFields;
    rewardInfos: Array<types.RewardInfoFields>;
    numRewardTokens: BN;
    /** Data used to calculate the rewards of the user */
    numUsers: BN;
    /**
     * The number of token in the `farm_vault` staked (getting rewards and fees)
     * Set such as `farm_vault.amount = total_staked_amount + total_pending_amount`
     */
    totalStakedAmount: BN;
    farmVault: PublicKey;
    farmVaultsAuthority: PublicKey;
    farmVaultsAuthorityBump: BN;
    /**
     * Only used for delegate farms
     * Set to `default()` otherwise
     */
    delegateAuthority: PublicKey;
    /**
     * Raw representation of a `TimeUnit`
     * Seconds = 0, Slots = 1
     */
    timeUnit: number;
    padding0: Array<number>;
    /**
     * Withdraw authority for the farm, allowed to lock deposited funds and withdraw them
     * Set to `default()` if unused (only the depositors can withdraw their funds)
     */
    withdrawAuthority: PublicKey;
    /**
     * Delay between a user deposit and the moment it is considered as staked
     * 0 if unused
     */
    depositWarmupPeriod: number;
    /** Delay between a user unstake and the ability to withdraw his deposit. */
    withdrawalCooldownPeriod: number;
    /** Total active stake of tokens in the farm (scaled from `Decimal` representation). */
    totalActiveStakeScaled: BN;
    /**
     * Total pending stake of tokens in the farm (scaled from `Decimal` representation).
     * (can be used by `withdraw_authority` but don't get rewards or fees)
     */
    totalPendingStakeScaled: BN;
    /** Total pending amount of tokens in the farm */
    totalPendingAmount: BN;
    /** Slashed amounts from early withdrawal */
    slashedAmountCurrent: BN;
    slashedAmountCumulative: BN;
    slashedAmountSpillAddress: PublicKey;
    /** Locking stake */
    lockingMode: BN;
    lockingStartTimestamp: BN;
    lockingDuration: BN;
    lockingEarlyWithdrawalPenaltyBps: BN;
    depositCapAmount: BN;
    scopePrices: PublicKey;
    scopeOraclePriceId: BN;
    scopeOracleMaxAge: BN;
    pendingFarmAdmin: PublicKey;
    padding: Array<BN>;
}
export interface FarmStateJSON {
    farmAdmin: string;
    globalConfig: string;
    token: types.TokenInfoJSON;
    rewardInfos: Array<types.RewardInfoJSON>;
    numRewardTokens: string;
    /** Data used to calculate the rewards of the user */
    numUsers: string;
    /**
     * The number of token in the `farm_vault` staked (getting rewards and fees)
     * Set such as `farm_vault.amount = total_staked_amount + total_pending_amount`
     */
    totalStakedAmount: string;
    farmVault: string;
    farmVaultsAuthority: string;
    farmVaultsAuthorityBump: string;
    /**
     * Only used for delegate farms
     * Set to `default()` otherwise
     */
    delegateAuthority: string;
    /**
     * Raw representation of a `TimeUnit`
     * Seconds = 0, Slots = 1
     */
    timeUnit: number;
    padding0: Array<number>;
    /**
     * Withdraw authority for the farm, allowed to lock deposited funds and withdraw them
     * Set to `default()` if unused (only the depositors can withdraw their funds)
     */
    withdrawAuthority: string;
    /**
     * Delay between a user deposit and the moment it is considered as staked
     * 0 if unused
     */
    depositWarmupPeriod: number;
    /** Delay between a user unstake and the ability to withdraw his deposit. */
    withdrawalCooldownPeriod: number;
    /** Total active stake of tokens in the farm (scaled from `Decimal` representation). */
    totalActiveStakeScaled: string;
    /**
     * Total pending stake of tokens in the farm (scaled from `Decimal` representation).
     * (can be used by `withdraw_authority` but don't get rewards or fees)
     */
    totalPendingStakeScaled: string;
    /** Total pending amount of tokens in the farm */
    totalPendingAmount: string;
    /** Slashed amounts from early withdrawal */
    slashedAmountCurrent: string;
    slashedAmountCumulative: string;
    slashedAmountSpillAddress: string;
    /** Locking stake */
    lockingMode: string;
    lockingStartTimestamp: string;
    lockingDuration: string;
    lockingEarlyWithdrawalPenaltyBps: string;
    depositCapAmount: string;
    scopePrices: string;
    scopeOraclePriceId: string;
    scopeOracleMaxAge: string;
    pendingFarmAdmin: string;
    padding: Array<string>;
}
export declare class FarmState {
    readonly farmAdmin: PublicKey;
    readonly globalConfig: PublicKey;
    readonly token: types.TokenInfo;
    readonly rewardInfos: Array<types.RewardInfo>;
    readonly numRewardTokens: BN;
    /** Data used to calculate the rewards of the user */
    readonly numUsers: BN;
    /**
     * The number of token in the `farm_vault` staked (getting rewards and fees)
     * Set such as `farm_vault.amount = total_staked_amount + total_pending_amount`
     */
    readonly totalStakedAmount: BN;
    readonly farmVault: PublicKey;
    readonly farmVaultsAuthority: PublicKey;
    readonly farmVaultsAuthorityBump: BN;
    /**
     * Only used for delegate farms
     * Set to `default()` otherwise
     */
    readonly delegateAuthority: PublicKey;
    /**
     * Raw representation of a `TimeUnit`
     * Seconds = 0, Slots = 1
     */
    readonly timeUnit: number;
    readonly padding0: Array<number>;
    /**
     * Withdraw authority for the farm, allowed to lock deposited funds and withdraw them
     * Set to `default()` if unused (only the depositors can withdraw their funds)
     */
    readonly withdrawAuthority: PublicKey;
    /**
     * Delay between a user deposit and the moment it is considered as staked
     * 0 if unused
     */
    readonly depositWarmupPeriod: number;
    /** Delay between a user unstake and the ability to withdraw his deposit. */
    readonly withdrawalCooldownPeriod: number;
    /** Total active stake of tokens in the farm (scaled from `Decimal` representation). */
    readonly totalActiveStakeScaled: BN;
    /**
     * Total pending stake of tokens in the farm (scaled from `Decimal` representation).
     * (can be used by `withdraw_authority` but don't get rewards or fees)
     */
    readonly totalPendingStakeScaled: BN;
    /** Total pending amount of tokens in the farm */
    readonly totalPendingAmount: BN;
    /** Slashed amounts from early withdrawal */
    readonly slashedAmountCurrent: BN;
    readonly slashedAmountCumulative: BN;
    readonly slashedAmountSpillAddress: PublicKey;
    /** Locking stake */
    readonly lockingMode: BN;
    readonly lockingStartTimestamp: BN;
    readonly lockingDuration: BN;
    readonly lockingEarlyWithdrawalPenaltyBps: BN;
    readonly depositCapAmount: BN;
    readonly scopePrices: PublicKey;
    readonly scopeOraclePriceId: BN;
    readonly scopeOracleMaxAge: BN;
    readonly pendingFarmAdmin: PublicKey;
    readonly padding: Array<BN>;
    static readonly discriminator: Buffer;
    static readonly layout: any;
    constructor(fields: FarmStateFields);
    static fetch(c: Connection, address: PublicKey, programId?: PublicKey): Promise<FarmState | null>;
    static fetchMultiple(c: Connection, addresses: PublicKey[], programId?: PublicKey): Promise<Array<FarmState | null>>;
    static decode(data: Buffer): FarmState;
    toJSON(): FarmStateJSON;
    static fromJSON(obj: FarmStateJSON): FarmState;
}
