import { Address, Commitment, GetAccountInfoApi, GetBalanceApi, GetMinimumBalanceForRentExemptionApi, GetMultipleAccountsApi, GetProgramAccountsApi, GetSlotApi, GetTokenAccountBalanceApi, Rpc } from '@solana/kit';
import type { LedgerInstant } from '../utils/ledger';
import { KaminoObligation } from './obligation';
import { KaminoReserve, KaminoReserveRpcApi, ReserveWithAddress } from './reserve';
import { LendingMarket, ReferrerTokenState, Reserve, UserMetadata } from '../@codegen/klend/accounts';
import { AllOracleAccounts, ObligationType, ReserveKind } from '../utils';
import Decimal from 'decimal.js';
import { Scope } from '@kamino-finance/scope-sdk';
import { OraclePrices } from '@kamino-finance/scope-sdk/dist/@codegen/scope/accounts/OraclePrices';
import { KaminoPrices } from '@kamino-finance/kliquidity-sdk';
import { PermissionedOp } from './permission';
export type KaminoMarketRpcApi = GetAccountInfoApi & GetMultipleAccountsApi & GetProgramAccountsApi & GetSlotApi & GetMinimumBalanceForRentExemptionApi & GetTokenAccountBalanceApi & GetBalanceApi;
export interface ReserveRewardInfo {
rewardsPerSecond: Decimal;
rewardsRemaining: Decimal;
rewardApr: Decimal;
rewardMint: Address;
totalInvestmentUsd: Decimal;
rewardPrice: number;
}
export declare class KaminoMarket {
private readonly rpc;
readonly address: Address;
state: LendingMarket;
reserves: Map
;
reservesActive: Map;
readonly programId: Address;
readonly farmsProgramId: Address;
private readonly recentSlotDurationMs;
readonly scopeFeeds: Set;
private constructor();
/**
* TESTING ONLY!
*
* Used to create mock markets for testing
*/
static createMarket(rpc: Rpc, state: LendingMarket, marketAddress: Address, reserves: Map, recentSlotDurationMs: number, programId?: Address): KaminoMarket;
/**
* Load a new market with all of its associated reserves
* @param rpc
* @param marketAddress
* @param recentSlotDurationMs
* @param programId
* @param withReserves
*/
static load(rpc: Rpc, marketAddress: Address, recentSlotDurationMs: number, programId?: Address, withReserves?: boolean, farmsProgramId?: Address): Promise;
static loadWithReserves(connection: Rpc, market: LendingMarket, reserves: Map, marketAddress: Address, recentSlotDurationMs: number, programId?: Address, farmsProgramId?: Address): KaminoMarket;
static loadMultiple(connection: Rpc, markets: Address[], recentSlotDurationMs: number, programId?: Address, withReserves?: boolean, oracleAccounts?: AllOracleAccounts, farmsProgramId?: Address): Promise