UNPKG

@kamino-finance/klend-sdk

Version:

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

123 lines (112 loc) 3.72 kB
import { PublicKey } from "@solana/web3.js" // eslint-disable-line @typescript-eslint/no-unused-vars import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars import * as borsh from "@coral-xyz/borsh" export interface ReserveFeesFields { /** * Fee assessed on `BorrowObligationLiquidity`, as scaled fraction (60 bits fractional part) * Must be between `0` and `2^60`, such that `2^60 = 1`. A few examples for * clarity: * 1% = (1 << 60) / 100 = 11529215046068470 * 0.01% (1 basis point) = 115292150460685 * 0.00001% (Aave borrow fee) = 115292150461 */ borrowFeeSf: BN /** * Fee for flash loan, expressed as scaled fraction. * 0.3% (Aave flash loan fee) = 0.003 * 2^60 = 3458764513820541 */ flashLoanFeeSf: BN /** Used for allignment */ padding: Array<number> } export interface ReserveFeesJSON { /** * Fee assessed on `BorrowObligationLiquidity`, as scaled fraction (60 bits fractional part) * Must be between `0` and `2^60`, such that `2^60 = 1`. A few examples for * clarity: * 1% = (1 << 60) / 100 = 11529215046068470 * 0.01% (1 basis point) = 115292150460685 * 0.00001% (Aave borrow fee) = 115292150461 */ borrowFeeSf: string /** * Fee for flash loan, expressed as scaled fraction. * 0.3% (Aave flash loan fee) = 0.003 * 2^60 = 3458764513820541 */ flashLoanFeeSf: string /** Used for allignment */ padding: Array<number> } /** * Additional fee information on a reserve * * These exist separately from interest accrual fees, and are specifically for the program owner * and referral fee. The fees are paid out as a percentage of liquidity token amounts during * repayments and liquidations. */ export class ReserveFees { /** * Fee assessed on `BorrowObligationLiquidity`, as scaled fraction (60 bits fractional part) * Must be between `0` and `2^60`, such that `2^60 = 1`. A few examples for * clarity: * 1% = (1 << 60) / 100 = 11529215046068470 * 0.01% (1 basis point) = 115292150460685 * 0.00001% (Aave borrow fee) = 115292150461 */ readonly borrowFeeSf: BN /** * Fee for flash loan, expressed as scaled fraction. * 0.3% (Aave flash loan fee) = 0.003 * 2^60 = 3458764513820541 */ readonly flashLoanFeeSf: BN /** Used for allignment */ readonly padding: Array<number> constructor(fields: ReserveFeesFields) { this.borrowFeeSf = fields.borrowFeeSf this.flashLoanFeeSf = fields.flashLoanFeeSf this.padding = fields.padding } static layout(property?: string) { return borsh.struct( [ borsh.u64("borrowFeeSf"), borsh.u64("flashLoanFeeSf"), borsh.array(borsh.u8(), 8, "padding"), ], property ) } // eslint-disable-next-line @typescript-eslint/no-explicit-any static fromDecoded(obj: any) { return new ReserveFees({ borrowFeeSf: obj.borrowFeeSf, flashLoanFeeSf: obj.flashLoanFeeSf, padding: obj.padding, }) } static toEncodable(fields: ReserveFeesFields) { return { borrowFeeSf: fields.borrowFeeSf, flashLoanFeeSf: fields.flashLoanFeeSf, padding: fields.padding, } } toJSON(): ReserveFeesJSON { return { borrowFeeSf: this.borrowFeeSf.toString(), flashLoanFeeSf: this.flashLoanFeeSf.toString(), padding: this.padding, } } static fromJSON(obj: ReserveFeesJSON): ReserveFees { return new ReserveFees({ borrowFeeSf: new BN(obj.borrowFeeSf), flashLoanFeeSf: new BN(obj.flashLoanFeeSf), padding: obj.padding, }) } toEncodable() { return ReserveFees.toEncodable(this) } }