UNPKG

@kamino-finance/klend-sdk

Version:

Typescript SDK for interacting with the Kamino Lending (klend) protocol

256 lines 11.4 kB
import { Address, Instruction, Slot, TransactionSigner, Rpc, GetMinimumBalanceForRentExemptionApi, Option, GetProgramAccountsApi, GetAccountInfoApi, GetMultipleAccountsApi } from '@solana/kit'; import Decimal from 'decimal.js'; import { AllOracleAccounts, MarketWithAddress, TokenOracleData } from '../utils'; import { FeeCalculation, Fees, ReserveDataType, ReserveRewardYield } from './shared'; import { Reserve } from '../@codegen/klend/accounts'; import { ReserveConfig, UpdateConfigModeKind } from '../@codegen/klend/types'; import { ConfigUpdater } from './configItems'; import { ActionType } from './action'; import { BorrowCapsAndCounters, KaminoMarket } from './market'; import { KaminoPrices } from '@kamino-finance/kliquidity-sdk'; export type KaminoReserveRpcApi = GetProgramAccountsApi & GetAccountInfoApi & GetMultipleAccountsApi; export declare const DEFAULT_RECENT_SLOT_DURATION_MS = 400; export declare class KaminoReserve { state: Reserve; address: Address; symbol: string; tokenOraclePrice: TokenOracleData; stats: ReserveDataType; private farmData; private rpc; private readonly recentSlotDurationMs; private metadata?; constructor(state: Reserve, address: Address, tokenOraclePrice: TokenOracleData, connection: Rpc<KaminoReserveRpcApi>, recentSlotDurationMs: number); static initialize(address: Address, state: Reserve, tokenOraclePrice: TokenOracleData, rpc: Rpc<KaminoReserveRpcApi>, recentSlotDurationMs: number): KaminoReserve; static initializeFromAddress(address: Address, rpc: Rpc<KaminoReserveRpcApi>, recentSlotDurationMs: number, reserveState?: Reserve, oracleAccounts?: AllOracleAccounts): Promise<KaminoReserve>; /** * @returns the parsed token symbol of the reserve */ getTokenSymbol(): string; /** * @returns list of logo names and human readable oracle descriptions */ getOracleMetadata(): Promise<[string, string][]>; /** * @returns the total borrowed amount of the reserve in lamports */ getBorrowedAmount(): Decimal; /** * @returns the available liquidity amount of the reserve in lamports */ getLiquidityAvailableAmount(): Decimal; /** * * @returns the last cached price stored in the reserve in USD */ getReserveMarketPrice(): Decimal; /** * @returns the current market price of the reserve in USD */ getOracleMarketPrice(): Decimal; /** * @returns the total accumulated protocol fees of the reserve */ getAccumulatedProtocolFees(): Decimal; /** * @returns the total accumulated referrer fees of the reserve */ getAccumulatedReferrerFees(): Decimal; /** * @returns the total pending referrer fees of the reserve */ getPendingReferrerFees(): Decimal; /** * * @returns the flash loan fee percentage of the reserve */ getFlashLoanFee: () => Decimal; /** * * @returns the origination fee percentage of the reserve */ getBorrowFee: () => Decimal; /** * * @returns the fixed interest rate allocated to the host */ getFixedHostInterestRate: () => Decimal; /** * Use getEstimatedTotalSupply() for the most accurate value * @returns the stale total liquidity supply of the reserve from the last refresh */ getTotalSupply(): Decimal; /** * Calculates the total liquidity supply of the reserve */ getEstimatedTotalSupply(slot: Slot, referralFeeBps: number): Decimal; /** * Use getEstimatedCumulativeBorrowRate() for the most accurate value * @returns the stale cumulative borrow rate of the reserve from the last refresh */ getCumulativeBorrowRate(): Decimal; /** * @Returns estimated cumulative borrow rate of the reserve */ getEstimatedCumulativeBorrowRate(currentSlot: Slot, referralFeeBps: number): Decimal; /** * Use getEstimatedCollateralExchangeRate() for the most accurate value * @returns the stale exchange rate between the collateral tokens and the liquidity - this is a decimal number scaled by 1e18 */ getCollateralExchangeRate(): Decimal; /** * * @returns the estimated exchange rate between the collateral tokens and the liquidity - this is a decimal number scaled by 1e18 */ getEstimatedCollateralExchangeRate(slot: Slot, referralFeeBps: number): Decimal; /** * * @returns the total USD value of the existing collateral in the reserve */ getDepositTvl: () => Decimal; /** * * Get the total USD value of the borrowed assets from the reserve */ getBorrowTvl: () => Decimal; /** * @returns 10^mint_decimals */ getMintFactor(): Decimal; /** * @returns mint_decimals of the liquidity token */ getMintDecimals(): number; /** * @returns the collateral farm address if it is set, otherwise none */ getCollateralFarmAddress(): Option<Address>; /** * @returns the debt farm address if it is set, otherwise none */ getDebtFarmAddress(): Option<Address>; /** * @Returns true if the total liquidity supply of the reserve is greater than the deposit limit */ depositLimitCrossed(): boolean; /** * @Returns true if the total borrowed amount of the reserve is greater than the borrow limit */ borrowLimitCrossed(): boolean; /** * * @returns the max capacity of the daily deposit withdrawal cap */ getDepositWithdrawalCapCapacity(): Decimal; /** * * @returns the current capacity of the daily deposit withdrawal cap */ getDepositWithdrawalCapCurrent(slot: Slot): Decimal; /** * * @returns the max capacity of the daily debt withdrawal cap */ getDebtWithdrawalCapCapacity(): Decimal; /** * * @returns the borrow limit of the reserve outside the elevation group */ getBorrowLimitOutsideElevationGroup(): Decimal; /** * * @returns the borrowed amount of the reserve outside the elevation group */ getBorrowedAmountOutsideElevationGroup(): Decimal; /** * * @returns the borrow limit against the collateral reserve in the elevation group */ getBorrowLimitAgainstCollateralInElevationGroup(elevationGroupIndex: number): Decimal; /** * * @returns the borrowed amount against the collateral reserve in the elevation group */ getBorrowedAmountAgainstCollateralInElevationGroup(elevationGroupIndex: number): Decimal; /** * * @returns the current capacity of the daily debt withdrawal cap */ getDebtWithdrawalCapCurrent(slot: Slot): Decimal; getBorrowFactor(): Decimal; calculateSupplyAPR(slot: Slot, referralFeeBps: number): number; getEstimatedDebtAndSupply(slot: Slot, referralFeeBps: number): { totalBorrow: Decimal; totalSupply: Decimal; }; getEstimatedAccumulatedProtocolFees(slot: Slot, referralFeeBps: number): { accumulatedProtocolFees: Decimal; compoundedVariableProtocolFee: Decimal; compoundedFixedHostFee: Decimal; }; calculateUtilizationRatio(): number; getEstimatedUtilizationRatio(slot: Slot, referralFeeBps: number): number; calcSimulatedUtilizationRatio(amount: Decimal, action: ActionType, slot: Slot, referralFeeBps: number, outflowAmount?: Decimal): number; getMaxBorrowAmountWithCollReserve(market: KaminoMarket, collReserve: KaminoReserve, slot: Slot): Decimal; calcSimulatedBorrowRate(amount: Decimal, action: ActionType, slot: Slot, referralFeeBps: number, outflowAmount?: Decimal): number; calcSimulatedBorrowAPR(amount: Decimal, action: ActionType, slot: Slot, referralFeeBps: number, outflowAmount?: Decimal): number; calcSimulatedSupplyAPR(amount: Decimal, action: ActionType, slot: Slot, referralFeeBps: number, outflowAmount?: Decimal): number; slotAdjustmentFactor(): number; calculateBorrowRate(): number; calculateEstimatedBorrowRate(slot: Slot, referralFeeBps: number): number; calculateBorrowAPR(slot: Slot, referralFeeBps: number): number; /** * @returns the mint of the reserve liquidity token */ getLiquidityMint(): Address; /** * @returns the token program of the reserve liquidity mint */ getLiquidityTokenProgram(): Address; /** * @returns the mint of the reserve collateral token , i.e. the cToken minted for depositing the liquidity token */ getCTokenMint(): Address; calculateFees(amountLamports: Decimal, borrowFeeRate: Decimal, feeCalculation: FeeCalculation, referralFeeBps: number, hasReferrer: boolean): Fees; calculateFlashLoanFees(flashLoanAmountLamports: Decimal, referralFeeBps: number, hasReferrer: boolean): Fees; load(tokenOraclePrice: TokenOracleData): Promise<void>; totalSupplyAPY(currentSlot: Slot): number; totalBorrowAPY(currentSlot: Slot): number; loadFarmStates(): Promise<void>; getRewardYields(prices: KaminoPrices): Promise<ReserveRewardYield[]>; private calculateRewardYield; private formatReserveData; /** * Compound current borrow rate over elapsed slots * * This also calculates protocol fees, which are taken for all obligations that have borrowed from current reserve. * * This also calculates referral fees, which are taken into pendingReferralFees. * * https://github.com/Kamino-Finance/klend/blob/release/1.3.0/programs/klend/src/state/reserve.rs#L517 * * @param slotsElapsed * @param referralFeeBps */ private compoundInterest; /** * Approximation to match the smart contract calculation * https://github.com/Kamino-Finance/klend/blob/release/1.3.0/programs/klend/src/state/reserve.rs#L1026 * @param rate * @param elapsedSlots * @private */ private approximateCompoundedInterest; getBorrowCapForReserve(market: KaminoMarket): BorrowCapsAndCounters; getLiquidityAvailableForDebtReserveGivenCaps(market: KaminoMarket, elevationGroups: number[], collateralReserves?: Address[]): Decimal[]; } export declare function createReserveIxs(rpc: Rpc<GetMinimumBalanceForRentExemptionApi>, owner: TransactionSigner, ownerLiquiditySource: Address, lendingMarket: Address, liquidityMint: Address, liquidityMintTokenProgram: Address, reserveAddress: TransactionSigner, programId: Address): Promise<Instruction[]>; export declare function updateReserveConfigIx(signer: TransactionSigner, marketAddress: Address, reserveAddress: Address, mode: UpdateConfigModeKind, value: Uint8Array, programId: Address, skipConfigIntegrityValidation?: boolean): Promise<Instruction>; export declare const RESERVE_CONFIG_UPDATER: ConfigUpdater<UpdateConfigModeKind, ReserveConfig>; export declare function updateEntireReserveConfigIx(signer: TransactionSigner, marketAddress: Address, reserveAddress: Address, reserveConfig: ReserveConfig, programId: Address): Promise<Instruction>; export declare function parseForChangesReserveConfigAndGetIxs(marketWithAddress: MarketWithAddress, reserve: Reserve | undefined, reserveAddress: Address, reserveConfig: ReserveConfig, programId: Address, lendingMarketOwner?: TransactionSigner): Promise<Instruction[]>; export type ReserveWithAddress = { address: Address; state: Reserve; }; //# sourceMappingURL=reserve.d.ts.map