import { Algodv2, LogicSigAccount, Transaction } from "algosdk";
import BalanceDelta from "./balanceDelta";
import { Network, PoolType, PoolStatus } from "./config";
export default class Pool {
    algod: Algodv2;
    network: Network;
    poolType: PoolType;
    managerApplicationId: number;
    asset1Id: number;
    asset2Id: number;
    validatorIndex: number;
    logicSig: LogicSigAccount;
    poolStatus: PoolStatus;
    applicationId: number;
    address: string;
    lpAssetId: number;
    asset1Balance: number;
    asset2Balance: number;
    lpCirculation: number;
    swapFee: number;
    private initialAmplificationFactor;
    private initialAmplificationFactorTime;
    private futureAmplificationFactor;
    private futureAmplificationFactorTime;
    private t;
    constructor(algod: Algodv2, network: Network, poolType: PoolType, asset1Id: number, asset2Id: number);
    loadState(): Promise<PoolStatus>;
    getPoolPrice(assetId: number): Promise<number>;
    signTxnWithLogicSig(txn: Transaction): Promise<{
        txID: string;
        blob: Uint8Array;
    }>;
    getCreatePoolTxn(sender: string): Promise<Transaction>;
    getInitializePoolTxns(sender: string, poolApplicationID: number): Promise<Transaction[]>;
    getLPTokenOptInTxn(sender: string): Promise<Transaction[]>;
    getPoolTxns(sender: string, asset1Amount: number, asset2Amount: number, maximumSlippage: number, doOptIn?: boolean, assignGroup?: boolean, fee?: number): Promise<Transaction[]>;
    getBurnTxns(sender: string, burnAmount: number, assignGroup?: boolean): Promise<Transaction[]>;
    getSwapExactForTxns(sender: string, swapInAsset: number, swapInAmount: number, minAmountToReceive: number, doOptIn?: boolean, assignGroup?: boolean, fee?: number): Promise<Transaction[]>;
    getSwapForExactTxns(sender: string, swapInAsset: number, swapInAmount: number, amountToReceive: number, doOptIn?: boolean, assignGroup?: boolean, fee?: number): Promise<Transaction[]>;
    getZapLPTransactions(sender: string, zapInAsset: number, zapInAmount: number, maximumSlippageSwap: number, doOptIn?: boolean, doOptInLP?: boolean, assignGroup?: boolean, maximumSlippageLP?: number): Promise<Transaction[]>;
    getNanoZapTransactions(sender: string, asset1InputAmount: number, asset2InputAmount: number, maximumSlippageSwap: number, doOptIn?: boolean, doOptInLP?: boolean, assignGroup?: boolean, maximumSlippageLP?: number): Promise<Transaction[]>;
    getNanoUnzapTxns(sender: string, assetId: number, assetAmount: number, lpTokenAmount: number, maximumSlippage: number, doOptIn?: boolean, assignGroup?: boolean, fee?: number): Promise<Transaction[]>;
    getEmptyPoolQuote(asset1PooledAmount: number, asset2PooledAmount: number): Promise<BalanceDelta>;
    getPoolQuote(assetId: number, assetAmount: number, whatIfDelta1?: number, whatIfDelta2?: number): BalanceDelta;
    getBurnQuote(lpAmount: number): Promise<BalanceDelta>;
    getSwapExactForQuote(swapInAssetId: number, swapInAmount: number): BalanceDelta;
    getSwapForExactQuote(swapOutAssetId: number, swapOutAmount: number): BalanceDelta;
    getAmplificationFactor(): number;
    binarySearch(lower: any, upper: any, objective: any): any;
    getNanoZapQuote(asset1InputAmount: number, asset2InputAmount: number): Promise<BalanceDelta>;
    getNanoUnzapQuote(assetId: number, assetAmount: number, lpTokenAmount: number): Promise<BalanceDelta>;
    getMaxNanoUnzapQuote(assetId: number, lpTokenAmount: number): Promise<BalanceDelta>;
}
