import { Program, Wallet } from "@coral-xyz/anchor";
import { AccountInfo, AddressLookupTableAccount, GetProgramAccountsResponse, PublicKey, TransactionSignature } from "@solana/web3.js";
import { BasketsIDL } from "./basketsIDL";
import { BuyStateChainData, RebalanceInfo, TokenSettings, JupSwapData, TransactionToSend } from "./config";
import { Basket } from "./basketState";
export declare class BuyState {
    ownAddress: PublicKey;
    data: BuyStateChainData;
    basket: Basket;
    constructor(ownAddress: PublicKey, buyStateData: BuyStateChainData, basket: Basket);
    static loadFromRawData(program: Program<BasketsIDL>, rawData: {
        pubkey: PublicKey;
        account: AccountInfo<Buffer>;
    }, basket?: Basket): Promise<BuyState>;
    static loadMultiple(program: Program<BasketsIDL>, rawDatas: GetProgramAccountsResponse): Promise<BuyState[]>;
    static loadFromPubkey(program: Program<BasketsIDL>, buyState: PublicKey, basket?: Basket): Promise<BuyState>;
    static computeMintAmountWithMultipleTokens(tokenList: TokenSettings[], basket: Basket, contribution: {
        token: PublicKey;
        amount: number;
    }[], oraclePrices: number[]): number;
    static computeMintAmountWithSingleToken(tokenList: TokenSettings[], basket: Basket, tokenSettings: TokenSettings, amount: number, oraclePrices: number[]): number;
    static singleTokenDeposit(program: Program<BasketsIDL>, wallet: Wallet, tokenList: TokenSettings[], basket: Basket, tokenMint: PublicKey, amount: number, lamports: number, updateOracles: boolean): Promise<TransactionSignature>;
    static createNew(program: Program<BasketsIDL>, wallet: Wallet, tokenList: TokenSettings[], basket: Basket, amount: number, lamports?: number): Promise<BuyState>;
    update(program: Program<BasketsIDL>): Promise<void>;
    getBuyStateRebalanceInfo(tokenList: TokenSettings[]): RebalanceInfo[];
    rebalanceBuyState(program: Program<BasketsIDL>, wallet: Wallet, tokenList: TokenSettings[], jupSwapDatas: JupSwapData[], lamports: number, updateOraclesTxData: TransactionToSend[], lookups: AddressLookupTableAccount[]): Promise<TransactionSignature[]>;
    mint(program: Program<BasketsIDL>, swbProgram: Program, wallet: Wallet, tokenList: TokenSettings[], lookups: AddressLookupTableAccount[], lamports: number, updateOracles: boolean): Promise<TransactionSignature[]>;
    claimTokens(program: Program<BasketsIDL>, wallet: Wallet, tokenList: TokenSettings[], lamports?: number): Promise<TransactionSignature[]>;
}
