UNPKG

@kamino-finance/klend-sdk

Version:

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

154 lines 6.03 kB
import { Account, Address, Instruction, Option, Slot, TransactionSigner } from '@solana/kit'; import Decimal from 'decimal.js'; import { KaminoMarket, KaminoObligation } from '../classes'; import { ObligationType, ObligationTypeTag } from '../utils'; import { AddressLookupTable } from '@solana-program/address-lookup-table'; export type SwapQuoteProvider<QuoteResponse> = (inputs: SwapInputs, klendAccounts: Array<Address>) => Promise<SwapQuote<QuoteResponse>>; export type SwapIxsProvider<QuoteResponse> = (inputs: SwapInputs, klendAccounts: Array<Address>, quote: SwapQuote<QuoteResponse>) => Promise<Array<SwapIxs<QuoteResponse>>>; export type SwapQuote<QuoteResponse> = { priceAInB: Decimal; quoteResponse?: QuoteResponse; }; export type SwapIxs<QuoteResponse> = { preActionIxs: Instruction[]; swapIxs: Instruction[]; lookupTables: Account<AddressLookupTable>[]; quote: SwapQuote<QuoteResponse>; }; export type PriceAinBProvider = (mintA: Address, mintB: Address) => Promise<Decimal>; export type FlashLoanInfo = { flashBorrowReserve: Address; flashLoanFee: Decimal; }; export type LeverageIxsOutput = { instructions: Instruction[]; flashLoanInfo: FlashLoanInfo; }; export type SwapInputs = { inputAmountLamports: Decimal; minOutAmountLamports?: Decimal; inputMint: Address; outputMint: Address; }; export type BaseLeverageIxsResponse<QuoteResponse> = { ixs: Instruction[]; lookupTables: Account<AddressLookupTable>[]; swapInputs: SwapInputs; flashLoanInfo: FlashLoanInfo; quote?: QuoteResponse; }; export type LeverageInitialInputs<LeverageCalcsResult, QuoteResponse> = { calcs: LeverageCalcsResult; swapQuote: SwapQuote<QuoteResponse>; currentSlot: Slot; klendAccounts: Array<Address>; obligation: KaminoObligation | ObligationType | undefined; }; export interface BaseLeverageSwapInputsProps<QuoteResponse> { owner: TransactionSigner; kaminoMarket: KaminoMarket; debtTokenMint: Address; collTokenMint: Address; referrer: Option<Address>; currentSlot: Slot; slippagePct: Decimal; budgetAndPriorityFeeIxs?: Instruction[]; scopeRefreshIx: Instruction[]; quoteBufferBps: Decimal; quoter: SwapQuoteProvider<QuoteResponse>; useV2Ixs: boolean; } export type DepositLeverageIxsResponse<QuoteResponse> = BaseLeverageIxsResponse<QuoteResponse> & { initialInputs: LeverageInitialInputs<DepositLeverageCalcsResult, QuoteResponse>; }; export type DepositLeverageInitialInputs<QuoteResponse> = { calcs: DepositLeverageCalcsResult; swapQuote: SwapQuote<QuoteResponse>; currentSlot: Slot; klendAccounts: Array<Address>; obligation: KaminoObligation | ObligationType | undefined; }; export interface DepositWithLeverageSwapInputsProps<QuoteResponse> extends BaseLeverageSwapInputsProps<QuoteResponse> { obligation: KaminoObligation | null; obligationTypeTagOverride: ObligationTypeTag; depositAmount: Decimal; priceDebtToColl: Decimal; targetLeverage: Decimal; selectedTokenMint: Address; elevationGroupOverride?: number; } export interface DepositWithLeverageProps<QuoteResponse> extends DepositWithLeverageSwapInputsProps<QuoteResponse> { swapper: SwapIxsProvider<QuoteResponse>; } export type DepositLeverageCalcsResult = { flashBorrowInCollToken: Decimal; initDepositInSol: Decimal; debtTokenToBorrow: Decimal; collTokenToDeposit: Decimal; swapDebtTokenIn: Decimal; swapCollTokenExpectedOut: Decimal; }; export type WithdrawLeverageIxsResponse<QuoteResponse> = BaseLeverageIxsResponse<QuoteResponse> & { initialInputs: LeverageInitialInputs<WithdrawLeverageCalcsResult, QuoteResponse>; }; export type WithdrawLeverageInitialInputs<QuoteResponse> = { calcs: WithdrawLeverageCalcsResult; swapQuote: SwapQuote<QuoteResponse>; currentSlot: Slot; klendAccounts: Array<Address>; obligation: KaminoObligation | ObligationType | undefined; }; export interface WithdrawWithLeverageSwapInputsProps<QuoteResponse> extends BaseLeverageSwapInputsProps<QuoteResponse> { obligation: KaminoObligation; deposited: Decimal; borrowed: Decimal; withdrawAmount: Decimal; priceCollToDebt: Decimal; isClosingPosition: boolean; selectedTokenMint: Address; userSolBalanceLamports: number; } export interface WithdrawWithLeverageProps<QuoteResponse> extends WithdrawWithLeverageSwapInputsProps<QuoteResponse> { swapper: SwapIxsProvider<QuoteResponse>; } export type WithdrawLeverageCalcsResult = { withdrawAmount: Decimal; repayAmount: Decimal; collTokenSwapIn: Decimal; depositTokenWithdrawAmount: Decimal; debtTokenExpectedSwapOut: Decimal; }; export type AdjustLeverageIxsResponse<QuoteResponse> = BaseLeverageIxsResponse<QuoteResponse> & { initialInputs: LeverageInitialInputs<AdjustLeverageCalcsResult, QuoteResponse> & { isDeposit: boolean; }; }; export type AdjustLeverageInitialInputs<QuoteResponse> = { calcs: AdjustLeverageCalcsResult; swapQuote: SwapQuote<QuoteResponse>; currentSlot: Slot; klendAccounts: Array<Address>; isDeposit: boolean; obligation: KaminoObligation | ObligationType | undefined; }; export interface AdjustLeverageSwapInputsProps<QuoteResponse> extends BaseLeverageSwapInputsProps<QuoteResponse> { obligation: KaminoObligation; depositedLamports: Decimal; borrowedLamports: Decimal; targetLeverage: Decimal; priceCollToDebt: Decimal; priceDebtToColl: Decimal; withdrawSlotOffset?: number; userSolBalanceLamports: number; } export interface AdjustLeverageProps<QuoteResponse> extends AdjustLeverageSwapInputsProps<QuoteResponse> { swapper: SwapIxsProvider<QuoteResponse>; } export type AdjustLeverageCalcsResult = { adjustDepositPosition: Decimal; adjustBorrowPosition: Decimal; amountToFlashBorrowDebt: Decimal; borrowAmount: Decimal; withdrawAmountWithSlippageAndFlashLoanFee: Decimal; }; //# sourceMappingURL=types.d.ts.map