import { BN, Idl, Program } from "@coral-xyz/anchor";
import { Connection, PublicKey, Signer, TransactionInstruction, TransactionSignature } from "@solana/web3.js";
import { UserFarm } from "./models";
import { FarmState } from "./rpc_client/accounts";
import Decimal from "decimal.js";
import { Keypair } from "@solana/web3.js";
import { GlobalConfigOptionKind, FarmConfigOptionKind } from "./rpc_client/types/index";
import { FarmAndKey, UserAndKey } from "./models";
export declare const farmsId: PublicKey;
export declare class Farms {
    private readonly _connection;
    private readonly _provider;
    private readonly _farmsProgram;
    private readonly _farmsProgramId;
    constructor(connection: Connection);
    getConnection(): Connection;
    getProgramID(): PublicKey;
    getProgram(): Program<Idl>;
    getAllUserStatesForUser(user: PublicKey): Promise<Array<UserAndKey>>;
    getAllUserStates(): Promise<UserAndKey[]>;
    getFarmsForMint(mint: PublicKey): Promise<Array<FarmAndKey>>;
    getAllFarmStates(): Promise<FarmAndKey[]>;
    getAllFarmStatesByPubkeys(keys: string[]): Promise<FarmAndKey[]>;
    getStakedAmountForMintForFarm(mint: PublicKey, farm: PublicKey): Promise<Decimal>;
    getStakedAmountForMint(mint: PublicKey): Promise<Decimal>;
    getUserStateKeyForUserForFarm(user: PublicKey, farm: PublicKey): Promise<Array<PublicKey>>;
    getAllFarmsForUser(user: PublicKey): Promise<Map<string, UserFarm>>;
    executeTransaction(ix: TransactionInstruction[], signer: Keypair, extraSigners?: Signer[]): Promise<TransactionSignature>;
    createNewUserIx(user: PublicKey, farm: PublicKey): Promise<TransactionInstruction>;
    createNewUser(user: Keypair, farm: PublicKey): Promise<TransactionSignature>;
    stakeIx(user: PublicKey, farm: PublicKey, amountLamports: Decimal, stakeTokenMint: PublicKey): Promise<TransactionInstruction>;
    stake(user: Keypair, farm: PublicKey, amountLamports: Decimal, stakeTokenMint: PublicKey): Promise<TransactionSignature>;
    unstakeIx(user: PublicKey, farm: PublicKey, amountLamports: string): Promise<TransactionInstruction>;
    unstake(user: Keypair, farm: PublicKey, sharesAmount: string): Promise<TransactionSignature>;
    withdrawUnstakedDepositIx(user: PublicKey, userState: PublicKey, farmState: PublicKey, stakeTokenMint: PublicKey): Promise<TransactionInstruction>;
    withdrawUnstakedDeposit(user: Keypair, farmState: PublicKey, tokenMint: PublicKey, userState: PublicKey): Promise<TransactionSignature>;
    claimForUserForFarmRewardIx(user: PublicKey, farm: PublicKey, rewardMint: PublicKey, rewardIndex?: number): Promise<TransactionInstruction[]>;
    claimForUserForFarmReward(user: Keypair, farm: PublicKey, rewardMint: PublicKey, rewardIndex?: number): Promise<TransactionSignature>;
    claimForUserForFarmAllRewardsIx(user: PublicKey, farm: PublicKey): Promise<Array<TransactionInstruction>>;
    claimForUserForFarmAllRewards(user: Keypair, farm: PublicKey): Promise<Array<TransactionSignature>>;
    transferOwnershipIx(user: PublicKey, userState: PublicKey, newUser: PublicKey): Promise<TransactionInstruction>;
    transferOwnership(user: Keypair, userState: PublicKey, newUser: PublicKey): Promise<TransactionSignature>;
    transferOwnershipAllUserStatesIx(user: PublicKey, newUser: PublicKey): Promise<Array<TransactionInstruction>>;
    transferOwnershipAllUserStates(user: Keypair, newUser: PublicKey): Promise<Array<TransactionSignature>>;
    createFarmIx(admin: PublicKey, farm: Keypair, globalConfig: PublicKey, stakeTokenMint: PublicKey): Promise<TransactionInstruction[]>;
    createFarm(admin: Keypair, globalConfig: PublicKey, farm: Keypair, mint: PublicKey): Promise<TransactionSignature>;
    addRewardToFarmIx(admin: PublicKey, globalConfig: PublicKey, farm: PublicKey, mint: PublicKey): Promise<TransactionInstruction>;
    addRewardToFarm(admin: Keypair, globalConfig: PublicKey, farm: PublicKey, mint: PublicKey): Promise<TransactionSignature>;
    addRewardAmountToFarmIx(admin: PublicKey, farm: PublicKey, mint: PublicKey, amount: Decimal): Promise<TransactionInstruction>;
    addRewardAmountToFarm(admin: Keypair, farm: PublicKey, mint: PublicKey, amount: Decimal): Promise<TransactionSignature>;
    updateRewardToFarmIx(admin: PublicKey, farm: PublicKey, mint: PublicKey, mode: FarmConfigOptionKind, value: number): Promise<TransactionInstruction>;
    updateRewardToFarm(admin: Keypair, farm: PublicKey, mint: PublicKey, mode: FarmConfigOptionKind, value: number): Promise<TransactionSignature>;
    refreshFarmIx(farm: PublicKey): Promise<TransactionInstruction>;
    refreshFarm(payer: Keypair, farm: PublicKey): Promise<TransactionSignature>;
    refreshUserIx(userState: PublicKey, farmState: PublicKey): Promise<TransactionInstruction>;
    refreshUser(payer: Keypair, userState: PublicKey, farmState: PublicKey): Promise<TransactionSignature>;
    createGlobalConfigIxs(admin: PublicKey, globalConfig: Keypair): Promise<TransactionInstruction[]>;
    createGlobalConfig(admin: Keypair, globalConfig: Keypair): Promise<TransactionSignature>;
    updateGlobalConfigIx(admin: PublicKey, globalConfig: PublicKey, mode: GlobalConfigOptionKind, flagValue: string, flagValueType: string): Promise<TransactionInstruction>;
    updateGlobalConfig(admin: Keypair, globalConfig: PublicKey, mode: GlobalConfigOptionKind, flagValue: string, flagValueType: string): Promise<TransactionSignature>;
    withdrawTreasuryIx(admin: PublicKey, globalConfig: PublicKey, rewardMint: PublicKey, amount: BN, withdrawAta?: PublicKey): Promise<TransactionInstruction>;
    withdrawTreasury(admin: Keypair, globalConfig: PublicKey, rewardMint: PublicKey, amount: BN, withdrawAta?: PublicKey): Promise<TransactionSignature>;
}
export declare function getCurrentTimeUnit(conn: Connection, farm: FarmState): Promise<Decimal>;
export declare function getCurrentRps(conn: Connection, farm: FarmState, rewardIndex: number): Promise<number>;
