UNPKG

@kamino-finance/klend-sdk

Version:

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

244 lines 10.6 kB
import { AccountInfo, Connection, PublicKey, TransactionInstruction } from '@solana/web3.js'; import Decimal from 'decimal.js'; import { MarketWithAddress, TokenOracleData } from '../utils'; import { FeeCalculation, Fees, ReserveDataType, ReserveRewardYield } from './shared'; import { Reserve } from '../idl_codegen/accounts'; import { ReserveConfig, UpdateConfigModeKind } from '../idl_codegen/types'; import { ConfigUpdater } from './configItems'; import { ActionType } from './action'; import { BorrowCapsAndCounters, KaminoMarket } from './market'; import { KaminoPrices } from '@kamino-finance/kliquidity-sdk'; export declare const DEFAULT_RECENT_SLOT_DURATION_MS = 450; export declare class KaminoReserve { state: Reserve; address: PublicKey; symbol: string; tokenOraclePrice: TokenOracleData; stats: ReserveDataType; private farmData; private buffer; private connection; private readonly recentSlotDurationMs; constructor(state: Reserve, address: PublicKey, tokenOraclePrice: TokenOracleData, connection: Connection, recentSlotDurationMs: number); static initialize(accountData: AccountInfo<Buffer>, address: PublicKey, state: Reserve, tokenOraclePrice: TokenOracleData, connection: Connection, recentSlotDurationMs: number): KaminoReserve; /** * @returns the parsed token symbol of the reserve */ getTokenSymbol(): 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: number, 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: number, 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: number, 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 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: number): 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: number): Decimal; getBorrowFactor(): Decimal; calculateSupplyAPR(slot: number, referralFeeBps: number): number; getEstimatedDebtAndSupply(slot: number, referralFeeBps: number): { totalBorrow: Decimal; totalSupply: Decimal; }; getEstimatedAccumulatedProtocolFees(slot: number, referralFeeBps: number): { accumulatedProtocolFees: Decimal; compoundedVariableProtocolFee: Decimal; compoundedFixedHostFee: Decimal; }; calculateUtilizationRatio(): number; getEstimatedUtilizationRatio(slot: number, referralFeeBps: number): number; calcSimulatedUtilizationRatio(amount: Decimal, action: ActionType, slot: number, referralFeeBps: number, outflowAmount?: Decimal): number; getMaxBorrowAmountWithCollReserve(market: KaminoMarket, collReserve: KaminoReserve, slot: number): Decimal; calcSimulatedBorrowRate(amount: Decimal, action: ActionType, slot: number, referralFeeBps: number, outflowAmount?: Decimal): number; calcSimulatedBorrowAPR(amount: Decimal, action: ActionType, slot: number, referralFeeBps: number, outflowAmount?: Decimal): number; calcSimulatedSupplyAPR(amount: Decimal, action: ActionType, slot: number, referralFeeBps: number, outflowAmount?: Decimal): number; slotAdjustmentFactor(): number; calculateBorrowRate(): number; calculateEstimatedBorrowRate(slot: number, referralFeeBps: number): number; calculateBorrowAPR(slot: number, referralFeeBps: number): number; /** * @returns the mint of the reserve liquidity token */ getLiquidityMint(): PublicKey; /** * @returns the token program of the reserve liquidity mint */ getLiquidityTokenProgram(): PublicKey; /** * @returns the mint of the reserve collateral token , i.e. the cToken minted for depositing the liquidity token */ getCTokenMint(): PublicKey; calculateFees(amountLamports: Decimal, borrowFeeRate: Decimal, feeCalculation: FeeCalculation, referralFeeBps: number, hasReferrer: boolean): Fees; calculateFlashLoanFees(flashLoanAmountLamports: Decimal, referralFeeBps: number, hasReferrer: boolean): Fees; setBuffer(buffer: AccountInfo<Buffer> | null): void; load(tokenOraclePrice: TokenOracleData): Promise<void>; totalSupplyAPY(currentSlot: number): number; totalBorrowAPY(currentSlot: number): number; loadFarmStates(): Promise<void>; getRewardYields(prices: KaminoPrices): Promise<ReserveRewardYield[]>; private calculateRewardYield; private getRewardPerTimeUnitSecond; 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?: PublicKey[]): Decimal[]; } export declare function createReserveIxs(connection: Connection, owner: PublicKey, ownerLiquiditySource: PublicKey, lendingMarket: PublicKey, liquidityMint: PublicKey, reserveAddress: PublicKey, programId: PublicKey): Promise<TransactionInstruction[]>; export declare function updateReserveConfigIx(signer: PublicKey, marketAddress: PublicKey, reserveAddress: PublicKey, mode: UpdateConfigModeKind, value: Uint8Array, programId: PublicKey, skipConfigIntegrityValidation?: boolean): TransactionInstruction; export declare const RESERVE_CONFIG_UPDATER: ConfigUpdater<UpdateConfigModeKind, ReserveConfig>; export declare function updateEntireReserveConfigIx(signer: PublicKey, marketAddress: PublicKey, reserveAddress: PublicKey, reserveConfig: ReserveConfig, programId: PublicKey): TransactionInstruction; export declare function parseForChangesReserveConfigAndGetIxs(marketWithAddress: MarketWithAddress, reserve: Reserve | undefined, reserveAddress: PublicKey, reserveConfig: ReserveConfig, programId: PublicKey): TransactionInstruction[]; export type ReserveWithAddress = { address: PublicKey; state: Reserve; }; //# sourceMappingURL=reserve.d.ts.map