import { Address, TransactionSigner } from '@solana/kit';
import { BorrowRateCurve, PythConfiguration, ReserveConfig, ScopeConfiguration, SwitchboardConfiguration } from '../@codegen/klend/types';
import Decimal from 'decimal.js';
import { Fraction } from '../classes';
import { LendingMarket } from '../lib';
export type ScopeOracleConfig = {
    name: string;
    oracleType: string;
    oracleId: number;
    oracleAccount: Address;
    twapEnabled: boolean;
    twapSourceId: number;
    max_age: number;
};
export type CreateKaminoMarketParams = {
    admin: TransactionSigner;
};
export type AddAssetToMarketParams = {
    admin: TransactionSigner;
    adminLiquiditySource: Address;
    marketAddress: Address;
    assetConfig: AssetConfig;
};
export interface AssetConfig {
    readonly mint: Address;
    readonly tokenName: string;
    readonly mintDecimals: number;
    readonly mintTokenProgram: Address;
    assetReserveConfigParams: AssetReserveConfigParams;
    setAssetConfigParams(assetReserveConfigParams: AssetReserveConfigParams): void;
    getReserveConfig(): ReserveConfig;
}
export declare class AssetReserveConfig implements AssetConfig {
    readonly mint: Address;
    readonly tokenName: string;
    readonly mintDecimals: number;
    readonly mintTokenProgram: Address;
    assetReserveConfigParams: AssetReserveConfigParams;
    constructor(fields: {
        mint: Address;
        mintTokenProgram: Address;
        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: Address;
    readonly tokenName: string;
    readonly mintDecimals: number;
    readonly mintTokenProgram: Address;
    private reserveConfig;
    assetReserveConfigParams: AssetReserveConfigParams;
    constructor(mint: Address, mintTokenProgram: Address, reserveConfig: ReserveConfig);
    setAssetConfigParams(assetReserveConfigParams: AssetReserveConfigParams): void;
    setReserveConfig(reserveConfig: ReserveConfig): void;
    getReserveConfig(): ReserveConfig;
}
export declare class CollateralConfig implements AssetConfig {
    readonly mint: Address;
    readonly tokenName: string;
    readonly mintDecimals: number;
    readonly mintTokenProgram: Address;
    assetReserveConfigParams: AssetReserveConfigParams;
    constructor(fields: {
        mint: Address;
        mintTokenProgram: Address;
        tokenName: string;
        mintDecimals: number;
        priceFeed: PriceFeed;
        loanToValuePct: number;
        liquidationThresholdPct: number;
    });
    setAssetConfigParams(assetReserveConfigParams: AssetReserveConfigParams): void;
    getReserveConfig(): ReserveConfig;
}
export declare class DebtConfig implements AssetConfig {
    readonly mint: Address;
    readonly tokenName: string;
    readonly mintDecimals: number;
    readonly mintTokenProgram: Address;
    assetReserveConfigParams: AssetReserveConfigParams;
    borrowLimitOutsideElevationGroup?: Decimal;
    debtWithdrawalCapConfigCapacity?: Decimal;
    constructor(fields: {
        mint: Address;
        mintTokenProgram: Address;
        tokenName: string;
        mintDecimals: number;
        priceFeed: PriceFeed;
        borrowRateCurve: BorrowRateCurve;
        borrowLimitOutsideElevationGroup?: Decimal;
        debtWithdrawalCapConfigCapacity?: Decimal;
    });
    setAssetConfigParams(assetReserveConfigParams: AssetReserveConfigParams): void;
    getReserveConfig(): ReserveConfig;
}
export type PriceFeed = {
    scopePriceConfigAddress?: Address;
    scopeChain?: number[];
    scopeTwapChain?: number[];
    pythPrice?: Address;
    switchboardPrice?: Address;
    switchboardTwapPrice?: Address;
};
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 getDefaultConfigParams: () => 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: Address;
    state: LendingMarket;
};
//# sourceMappingURL=managerTypes.d.ts.map