@kamino-finance/klend-sdk
Version:
Typescript SDK for interacting with the Kamino Lending (klend) protocol
154 lines • 6.03 kB
TypeScript
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