import { Keypair, PublicKey } from "@solana/web3.js";
import * as anchor from "@coral-xyz/anchor";
import { GlobalConfigAccounts } from "./utils";
import Decimal from "decimal.js";
import { Cluster, UserAccounts, FarmAccounts } from "./utils";
import { Farms } from "../Farms";
export declare const SIZE_GLOBAL_CONFIG = 2136;
export declare const SIZE_FARM_STATE = 8336;
export type Env = {
    provider: anchor.AnchorProvider;
    program: anchor.Program;
    initialOwner: Keypair;
    cluster: Cluster;
};
export type Config = {
    strategyInfos: FarmInfo[];
};
export type FarmInfo = {
    address: PublicKey;
    owner: PublicKey;
    baseVaultAuthority: PublicKey;
    pool: PublicKey;
    globalConfig: PublicKey;
    tokenAMint: PublicKey;
    tokenAVault: PublicKey;
    tokenAVaultBump: number;
    tokenBMint: PublicKey;
    tokenBVault: PublicKey;
    tokenBVaultBump: number;
    sharesMint: PublicKey;
    sharesMintAuthority: PublicKey;
    sharesMintAuthorityBump: number;
    poolProgramId: PublicKey;
    yvaultsProgramId: PublicKey;
};
export declare function setUpProgram(args: {
    clusterOverride?: string;
    adminFilePath?: string;
    programOverride?: PublicKey;
}): Env;
export declare function createGlobalAccountsWithAirdrop(env: Env, owner: Keypair | undefined, rewardTokens: Array<PublicKey>): Promise<GlobalConfigAccounts>;
export declare function createGlobalAccounts(env: Env, owner?: Keypair): Promise<GlobalConfigAccounts>;
export declare function setUpGlobalConfigWithAirdrop(env: Env, owner: Keypair | undefined, rewardTokens: Array<PublicKey>): Promise<GlobalConfigAccounts>;
export declare function setUpGlobalConfig(env: Env, owner?: Keypair): Promise<GlobalConfigAccounts>;
export declare function createUser(env: Env, farmAccounts: FarmAccounts, solAirdropAmount: Decimal, tokenAirdropAmount: Decimal, rewardAirdropAmounts: Array<Decimal>, owner?: Keypair): Promise<UserAccounts>;
export declare function setUpUser(env: Env, farmAccounts: FarmAccounts, rewardTokens: Array<PublicKey>, owner?: Keypair): Promise<UserAccounts>;
export declare function createFarmAccountsWithAirdrops(env: Env, rewardTokens: Array<PublicKey>, tokenMint: PublicKey, solAirdropAmount: Decimal, rewardAirdropAmounts: Array<Decimal>, farmAdmin?: Keypair): Promise<FarmAccounts>;
export declare function createFarmAccounts(env: Env, rewardTokens: Array<PublicKey>, tokenMint: PublicKey, farmAdmin: Keypair): Promise<FarmAccounts>;
export declare function setUpFarmWithAirdrops(env: Env, globalAccounts: GlobalConfigAccounts, rewardTokens: Array<PublicKey>, farmAdmin?: Keypair, tokenMint?: PublicKey): Promise<FarmAccounts>;
export declare function setUpFarm(env: Env, globalConfig: PublicKey, tokenMint: PublicKey, farmAdmin: Keypair): Promise<FarmAccounts>;
export declare function setupFarmsEnvironment(env: Env, numRewardTokens: number, minClaimDurationSeconds?: number, rewardRps?: number): Promise<{
    farmsClient: Farms;
    farmAccounts: FarmAccounts;
    globalAccounts: GlobalConfigAccounts;
    userAccounts: UserAccounts;
    rewardTokens: PublicKey[];
}>;
