@kamino-finance/klend-sdk
Version:
Typescript SDK for interacting with the Kamino Lending (klend) protocol
160 lines (149 loc) • 6.21 kB
text/typescript
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 ObligationLiquidityFields {
/** Reserve liquidity is borrowed from */
borrowReserve: PublicKey
/** Borrow rate used for calculating interest (big scaled fraction) */
cumulativeBorrowRateBsf: types.BigFractionBytesFields
padding: BN
/** Amount of liquidity borrowed plus interest (scaled fraction) */
borrowedAmountSf: BN
/** Liquidity market value in quote currency (scaled fraction) */
marketValueSf: BN
/** Risk adjusted liquidity market value in quote currency - DEBUG ONLY - use market_value instead */
borrowFactorAdjustedMarketValueSf: BN
/** Amount of liquidity borrowed outside of an elevation group */
borrowedAmountOutsideElevationGroups: BN
padding2: Array<BN>
}
export interface ObligationLiquidityJSON {
/** Reserve liquidity is borrowed from */
borrowReserve: string
/** Borrow rate used for calculating interest (big scaled fraction) */
cumulativeBorrowRateBsf: types.BigFractionBytesJSON
padding: string
/** Amount of liquidity borrowed plus interest (scaled fraction) */
borrowedAmountSf: string
/** Liquidity market value in quote currency (scaled fraction) */
marketValueSf: string
/** Risk adjusted liquidity market value in quote currency - DEBUG ONLY - use market_value instead */
borrowFactorAdjustedMarketValueSf: string
/** Amount of liquidity borrowed outside of an elevation group */
borrowedAmountOutsideElevationGroups: string
padding2: Array<string>
}
/** Obligation liquidity state */
export class ObligationLiquidity {
/** Reserve liquidity is borrowed from */
readonly borrowReserve: PublicKey
/** Borrow rate used for calculating interest (big scaled fraction) */
readonly cumulativeBorrowRateBsf: types.BigFractionBytes
readonly padding: BN
/** Amount of liquidity borrowed plus interest (scaled fraction) */
readonly borrowedAmountSf: BN
/** Liquidity market value in quote currency (scaled fraction) */
readonly marketValueSf: BN
/** Risk adjusted liquidity market value in quote currency - DEBUG ONLY - use market_value instead */
readonly borrowFactorAdjustedMarketValueSf: BN
/** Amount of liquidity borrowed outside of an elevation group */
readonly borrowedAmountOutsideElevationGroups: BN
readonly padding2: Array<BN>
constructor(fields: ObligationLiquidityFields) {
this.borrowReserve = fields.borrowReserve
this.cumulativeBorrowRateBsf = new types.BigFractionBytes({
...fields.cumulativeBorrowRateBsf,
})
this.padding = fields.padding
this.borrowedAmountSf = fields.borrowedAmountSf
this.marketValueSf = fields.marketValueSf
this.borrowFactorAdjustedMarketValueSf =
fields.borrowFactorAdjustedMarketValueSf
this.borrowedAmountOutsideElevationGroups =
fields.borrowedAmountOutsideElevationGroups
this.padding2 = fields.padding2
}
static layout(property?: string) {
return borsh.struct(
[
borsh.publicKey("borrowReserve"),
types.BigFractionBytes.layout("cumulativeBorrowRateBsf"),
borsh.u64("padding"),
borsh.u128("borrowedAmountSf"),
borsh.u128("marketValueSf"),
borsh.u128("borrowFactorAdjustedMarketValueSf"),
borsh.u64("borrowedAmountOutsideElevationGroups"),
borsh.array(borsh.u64(), 7, "padding2"),
],
property
)
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
static fromDecoded(obj: any) {
return new ObligationLiquidity({
borrowReserve: obj.borrowReserve,
cumulativeBorrowRateBsf: types.BigFractionBytes.fromDecoded(
obj.cumulativeBorrowRateBsf
),
padding: obj.padding,
borrowedAmountSf: obj.borrowedAmountSf,
marketValueSf: obj.marketValueSf,
borrowFactorAdjustedMarketValueSf: obj.borrowFactorAdjustedMarketValueSf,
borrowedAmountOutsideElevationGroups:
obj.borrowedAmountOutsideElevationGroups,
padding2: obj.padding2,
})
}
static toEncodable(fields: ObligationLiquidityFields) {
return {
borrowReserve: fields.borrowReserve,
cumulativeBorrowRateBsf: types.BigFractionBytes.toEncodable(
fields.cumulativeBorrowRateBsf
),
padding: fields.padding,
borrowedAmountSf: fields.borrowedAmountSf,
marketValueSf: fields.marketValueSf,
borrowFactorAdjustedMarketValueSf:
fields.borrowFactorAdjustedMarketValueSf,
borrowedAmountOutsideElevationGroups:
fields.borrowedAmountOutsideElevationGroups,
padding2: fields.padding2,
}
}
toJSON(): ObligationLiquidityJSON {
return {
borrowReserve: this.borrowReserve.toString(),
cumulativeBorrowRateBsf: this.cumulativeBorrowRateBsf.toJSON(),
padding: this.padding.toString(),
borrowedAmountSf: this.borrowedAmountSf.toString(),
marketValueSf: this.marketValueSf.toString(),
borrowFactorAdjustedMarketValueSf:
this.borrowFactorAdjustedMarketValueSf.toString(),
borrowedAmountOutsideElevationGroups:
this.borrowedAmountOutsideElevationGroups.toString(),
padding2: this.padding2.map((item) => item.toString()),
}
}
static fromJSON(obj: ObligationLiquidityJSON): ObligationLiquidity {
return new ObligationLiquidity({
borrowReserve: new PublicKey(obj.borrowReserve),
cumulativeBorrowRateBsf: types.BigFractionBytes.fromJSON(
obj.cumulativeBorrowRateBsf
),
padding: new BN(obj.padding),
borrowedAmountSf: new BN(obj.borrowedAmountSf),
marketValueSf: new BN(obj.marketValueSf),
borrowFactorAdjustedMarketValueSf: new BN(
obj.borrowFactorAdjustedMarketValueSf
),
borrowedAmountOutsideElevationGroups: new BN(
obj.borrowedAmountOutsideElevationGroups
),
padding2: obj.padding2.map((item) => new BN(item)),
})
}
toEncodable() {
return ObligationLiquidity.toEncodable(this)
}
}