import { PublicKey } from '@solana/web3.js';
import { BorrowRateCurve, PythConfiguration, ReserveConfig, ScopeConfiguration, SwitchboardConfiguration } from '../idl_codegen/types';
import Decimal from 'decimal.js';
import { Fraction } from '../classes/fraction';
import { LendingMarket } from '../lib';
export type ScopeOracleConfig = {
    scopePriceConfigAddress: PublicKey;
    name: string;
    oracleType: string;
    oracleId: number;
    oracleAccount: PublicKey;
    twapEnabled: boolean;
    twapSourceId: number;
    max_age: number;
};
export type CreateKaminoMarketParams = {
    admin: PublicKey;
};
export type AddAssetToMarketParams = {
    admin: PublicKey;
    adminLiquiditySource: PublicKey;
    marketAddress: PublicKey;
    assetConfig: AssetConfig;
};
export interface AssetConfig {
    readonly mint: PublicKey;
    readonly tokenName: string;
    readonly mintDecimals: number;
    readonly mintTokenProgram: PublicKey;
    assetReserveConfigParams: AssetReserveConfigParams;
    setAssetConfigParams(assetReserveConfigParams: AssetReserveConfigParams): void;
    getReserveConfig(): ReserveConfig;
}
export declare class AssetReserveConfig implements AssetConfig {
    readonly mint: PublicKey;
    readonly tokenName: string;
    readonly mintDecimals: number;
    readonly mintTokenProgram: PublicKey;
    assetReserveConfigParams: AssetReserveConfigParams;
    constructor(fields: {
        mint: PublicKey;
        mintTokenProgram: PublicKey;
        tokenName: string;
        mintDecimals: number;
        priceFeed: PriceFeed;
        loanToValuePct: number;
        liquidationThresholdPct: number;
        borrowRateCurve: BorrowRateCurve;
        depositLimit: Decimal;
        borrowLimit: Decimal;
    });
    setAssetConfigParams(assetReserveConfigParams: AssetReserveConfigParams): void;
    getReserveConfig(): ReserveConfig;
}
export declare class AssetReserveConfigCli implements AssetConfig {
    readonly mint: PublicKey;
    readonly tokenName: string;
    readonly mintDecimals: number;
    readonly mintTokenProgram: PublicKey;
    private reserveConfig;
    assetReserveConfigParams: AssetReserveConfigParams;
    constructor(mint: PublicKey, mintTokenProgram: PublicKey, reserveConfig: ReserveConfig);
    setAssetConfigParams(assetReserveConfigParams: AssetReserveConfigParams): void;
    setReserveConfig(reserveConfig: ReserveConfig): void;
    getReserveConfig(): ReserveConfig;
}
export declare class CollateralConfig implements AssetConfig {
    readonly mint: PublicKey;
    readonly tokenName: string;
    readonly mintDecimals: number;
    readonly mintTokenProgram: PublicKey;
    assetReserveConfigParams: AssetReserveConfigParams;
    constructor(fields: {
        mint: PublicKey;
        mintTokenProgram: PublicKey;
        tokenName: string;
        mintDecimals: number;
        priceFeed: PriceFeed;
        loanToValuePct: number;
        liquidationThresholdPct: number;
    });
    setAssetConfigParams(assetReserveConfigParams: AssetReserveConfigParams): void;
    getReserveConfig(): ReserveConfig;
}
export declare class DebtConfig implements AssetConfig {
    readonly mint: PublicKey;
    readonly tokenName: string;
    readonly mintDecimals: number;
    readonly mintTokenProgram: PublicKey;
    assetReserveConfigParams: AssetReserveConfigParams;
    borrowLimitOutsideElevationGroup?: Decimal;
    debtWithdrawalCapConfigCapacity?: Decimal;
    constructor(fields: {
        mint: PublicKey;
        mintTokenProgram: PublicKey;
        tokenName: string;
        mintDecimals: number;
        priceFeed: PriceFeed;
        borrowRateCurve: BorrowRateCurve;
        borrowLimitOutsideElevationGroup?: Decimal;
        debtWithdrawalCapConfigCapacity?: Decimal;
    });
    setAssetConfigParams(assetReserveConfigParams: AssetReserveConfigParams): void;
    getReserveConfig(): ReserveConfig;
}
export type PriceFeed = {
    scopePriceConfigAddress?: PublicKey;
    scopeChain?: number[];
    scopeTwapChain?: number[];
    pythPrice?: PublicKey;
    switchboardPrice?: PublicKey;
    switchboardTwapPrice?: PublicKey;
};
export type AssetReserveConfigParams = {
    loanToValuePct: number;
    depositLimit: Decimal;
    borrowLimit: Decimal;
    maxLiquidationBonusBps: number;
    minLiquidationBonusBps: number;
    badDebtLiquidationBonusBps: number;
    liquidationThresholdPct: number;
    borrowFeeSf: Fraction;
    flashLoanFeeSf: Fraction;
    protocolTakeRate: number;
    elevationGroups: number[];
    priceFeed: PriceFeed | null;
    maxAgePriceSeconds: number;
    maxAgeTwapSeconds: number;
    borrowRateCurve: BorrowRateCurve;
};
export declare const DefaultConfigParams: AssetReserveConfigParams;
export declare const encodeTokenName: (tokenName: string) => number[];
export declare function getReserveOracleConfigs(priceFeed: PriceFeed | null): {
    pythConfiguration: PythConfiguration;
    switchboardConfiguration: SwitchboardConfiguration;
    scopeConfiguration: ScopeConfiguration;
};
export declare function parseOracleType(type: number): string;
export type MarketWithAddress = {
    address: PublicKey;
    state: LendingMarket;
};
//# sourceMappingURL=managerTypes.d.ts.map