import { Algodv2, Transaction, SuggestedParams } from "algosdk";
import AssetAmount from "./../assetAmount";
import AlgofiUser from "./../algofiUser";
import { MarketType } from "./lendingConfig";
import LendingClient from "./lendingClient";
import MarketConfig from "./marketConfig";
import Oracle from "./oracle";
export declare class MarketRewardsProgram {
    programNumber: number;
    rewardsPerSecond: number;
    assetID: number;
    issued: number;
    claimed: number;
    index: bigint;
    constructor(state: {}, programIndex: number);
}
export default class Market {
    localMinBalance: number;
    algod: Algodv2;
    lendingClient: LendingClient;
    managerAppId: number;
    appId: number;
    address: string;
    marketType: MarketType;
    underlyingAssetId: number;
    bAssetId: number;
    optInEnabled: boolean;
    supplyLimited: boolean;
    borrowLimitted: boolean;
    borrowFactor: number;
    collateralFactor: number;
    flashLoanFee: number;
    flashLoanProtocolFee: number;
    maxFlashLoanRatio: number;
    liquidationIncentive: number;
    liquidationFee: number;
    reserveFactor: number;
    underlyingSupplyCap: number;
    underlyingBorrowCap: number;
    baseInterestRate: number;
    baseInterestSlope: number;
    quadraticInterestAmplificationFactor: number;
    targetUtilizationRatio: number;
    oracle: Oracle;
    underlyingCash: number;
    underlyingBorrowed: number;
    underlyingReserves: number;
    borrowShareCirculation: number;
    bAssetCirculation: number;
    activeBAssetCollateral: number;
    underlyingProtocolReserve: number;
    latestTime: number;
    borrowIndex: number;
    impliedBorrowIndex: number;
    totalSupplied: AssetAmount;
    totalBorrowed: AssetAmount;
    supplyAPR: number;
    borrowAPR: number;
    rewardsPrograms: any[];
    rewardsEscrowAccount: string;
    constructor(algod: Algodv2, lendingClient: LendingClient, managerAppId: number, marketConfig: MarketConfig);
    loadState(): Promise<void>;
    getUnderlyingSupplied(): number;
    getAPRs(totalSupplied: number, totalBorrowed: number): [number, number];
    convertUnderlyingToUSD(amount: number): number;
    convertUSDToUnderlying(amount: number): number;
    bAssetToAssetAmount(amount: number): AssetAmount;
    borrowSharesToAssetAmount(amount: number): AssetAmount;
    underlyingToBAssetAmount(amount: number): number;
    getMaximumWithdrawAmount(user: AlgofiUser, borrowUtilLimit?: number): AssetAmount;
    getMaximumBorrowAmount(user: AlgofiUser, borrowUtilLimit?: number): AssetAmount;
    getPreambleTransactions(params: SuggestedParams, user: AlgofiUser, needsUserPosition: boolean): Promise<[Transaction[], number]>;
    getMintTxns(user: AlgofiUser, underlyingAmount: number): Promise<Transaction[]>;
    getAddUnderlyingCollateralTxns(user: AlgofiUser, underlyingAmount: number): Promise<Transaction[]>;
    getAddBAssetCollateralTxns(user: AlgofiUser, bAssetAmount: number): Promise<Transaction[]>;
    getRemoveUnderlyingCollateralTxns(user: AlgofiUser, underlyingAmount: number, removeMax?: boolean): Promise<Transaction[]>;
    getRemoveBAssetCollateralTxns(user: AlgofiUser, bAssetAmount: number): Promise<Transaction[]>;
    getBurnTxns(user: AlgofiUser, bAssetAmount: number): Promise<Transaction[]>;
    getBorrowTxns(user: AlgofiUser, underlyingAmount: number): Promise<Transaction[]>;
    getRepayBorrowTxns(user: AlgofiUser, underlyingAmount: number, repayMax?: boolean): Promise<Transaction[]>;
    getClaimRewardsTxns(user: AlgofiUser): Promise<Transaction[]>;
    getSyncVaultTxns(user: AlgofiUser): Promise<Transaction[]>;
}
