@kamino-finance/klend-sdk
Version:
Typescript SDK for interacting with the Kamino Lending (klend) protocol
309 lines • 16.2 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReserveConfig = void 0;
const bn_js_1 = __importDefault(require("bn.js")); // eslint-disable-line @typescript-eslint/no-unused-vars
const types = __importStar(require("../types")); // eslint-disable-line @typescript-eslint/no-unused-vars
const borsh = __importStar(require("@coral-xyz/borsh"));
/** Reserve configuration values */
class ReserveConfig {
/** Status of the reserve Active/Obsolete/Hidden */
status;
/** Asset tier -> 0 - regular (collateral & debt), 1 - isolated collateral, 2 - isolated debt */
assetTier;
/** Flat rate that goes to the host */
hostFixedInterestRateBps;
/** [DEPRECATED] Boost for side (debt or collateral) */
reserved2;
/** [DEPRECATED] Reward points multiplier per obligation type */
reserved3;
/** Protocol take rate is the amount borrowed interest protocol receives, as a percentage */
protocolTakeRatePct;
/** Cut of the liquidation bonus that the protocol receives, as a percentage */
protocolLiquidationFeePct;
/**
* Target ratio of the value of borrows to deposits, as a percentage
* 0 if use as collateral is disabled
*/
loanToValuePct;
/** Loan to value ratio at which an obligation can be liquidated, as percentage */
liquidationThresholdPct;
/** Minimum bonus a liquidator receives when repaying part of an unhealthy obligation, as bps */
minLiquidationBonusBps;
/** Maximum bonus a liquidator receives when repaying part of an unhealthy obligation, as bps */
maxLiquidationBonusBps;
/** Bad debt liquidation bonus for an undercollateralized obligation, as bps */
badDebtLiquidationBonusBps;
/** Time in seconds that must pass before redemptions are enabled after the deposit limit is crossed */
deleveragingMarginCallPeriodSecs;
/**
* The rate at which the deleveraging threshold decreases in slots per bps
* e.g. 1 bps per hour would be 7200 slots per bps (assuming 2 slots per second)
*/
deleveragingThresholdSlotsPerBps;
/** Program owner fees assessed, separate from gains due to interest accrual */
fees;
/** Borrow rate curve based on utilization */
borrowRateCurve;
/** Borrow factor in percentage - used for risk adjustment */
borrowFactorPct;
/** Maximum deposit limit of liquidity in native units, u64::MAX for inf */
depositLimit;
/** Maximum amount borrowed, u64::MAX for inf, 0 to disable borrows (protected deposits) */
borrowLimit;
/** Token id from TokenInfos struct */
tokenInfo;
/** Deposit withdrawl caps - deposit & redeem */
depositWithdrawalCap;
/** Debt withdrawl caps - borrow & repay */
debtWithdrawalCap;
elevationGroups;
disableUsageAsCollOutsideEmode;
utilizationLimitBlockBorrowingAbove;
reserved1;
/**
* Maximum amount liquidity of this reserve borrowed outside all elevation groups
* - u64::MAX for inf
* - 0 to disable borrows outside elevation groups
*/
borrowLimitOutsideElevationGroup;
/**
* Defines the maximum amount (in lamports of elevation group debt asset)
* that can be borrowed when this reserve is used as collateral.
* - u64::MAX for inf
* - 0 to disable borrows in this elevation group (expected value for the debt asset)
*/
borrowLimitAgainstThisCollateralInElevationGroup;
constructor(fields) {
this.status = fields.status;
this.assetTier = fields.assetTier;
this.hostFixedInterestRateBps = fields.hostFixedInterestRateBps;
this.reserved2 = fields.reserved2;
this.reserved3 = fields.reserved3;
this.protocolTakeRatePct = fields.protocolTakeRatePct;
this.protocolLiquidationFeePct = fields.protocolLiquidationFeePct;
this.loanToValuePct = fields.loanToValuePct;
this.liquidationThresholdPct = fields.liquidationThresholdPct;
this.minLiquidationBonusBps = fields.minLiquidationBonusBps;
this.maxLiquidationBonusBps = fields.maxLiquidationBonusBps;
this.badDebtLiquidationBonusBps = fields.badDebtLiquidationBonusBps;
this.deleveragingMarginCallPeriodSecs =
fields.deleveragingMarginCallPeriodSecs;
this.deleveragingThresholdSlotsPerBps =
fields.deleveragingThresholdSlotsPerBps;
this.fees = new types.ReserveFees({ ...fields.fees });
this.borrowRateCurve = new types.BorrowRateCurve({
...fields.borrowRateCurve,
});
this.borrowFactorPct = fields.borrowFactorPct;
this.depositLimit = fields.depositLimit;
this.borrowLimit = fields.borrowLimit;
this.tokenInfo = new types.TokenInfo({ ...fields.tokenInfo });
this.depositWithdrawalCap = new types.WithdrawalCaps({
...fields.depositWithdrawalCap,
});
this.debtWithdrawalCap = new types.WithdrawalCaps({
...fields.debtWithdrawalCap,
});
this.elevationGroups = fields.elevationGroups;
this.disableUsageAsCollOutsideEmode = fields.disableUsageAsCollOutsideEmode;
this.utilizationLimitBlockBorrowingAbove =
fields.utilizationLimitBlockBorrowingAbove;
this.reserved1 = fields.reserved1;
this.borrowLimitOutsideElevationGroup =
fields.borrowLimitOutsideElevationGroup;
this.borrowLimitAgainstThisCollateralInElevationGroup =
fields.borrowLimitAgainstThisCollateralInElevationGroup;
}
static layout(property) {
return borsh.struct([
borsh.u8("status"),
borsh.u8("assetTier"),
borsh.u16("hostFixedInterestRateBps"),
borsh.array(borsh.u8(), 2, "reserved2"),
borsh.array(borsh.u8(), 8, "reserved3"),
borsh.u8("protocolTakeRatePct"),
borsh.u8("protocolLiquidationFeePct"),
borsh.u8("loanToValuePct"),
borsh.u8("liquidationThresholdPct"),
borsh.u16("minLiquidationBonusBps"),
borsh.u16("maxLiquidationBonusBps"),
borsh.u16("badDebtLiquidationBonusBps"),
borsh.u64("deleveragingMarginCallPeriodSecs"),
borsh.u64("deleveragingThresholdSlotsPerBps"),
types.ReserveFees.layout("fees"),
types.BorrowRateCurve.layout("borrowRateCurve"),
borsh.u64("borrowFactorPct"),
borsh.u64("depositLimit"),
borsh.u64("borrowLimit"),
types.TokenInfo.layout("tokenInfo"),
types.WithdrawalCaps.layout("depositWithdrawalCap"),
types.WithdrawalCaps.layout("debtWithdrawalCap"),
borsh.array(borsh.u8(), 20, "elevationGroups"),
borsh.u8("disableUsageAsCollOutsideEmode"),
borsh.u8("utilizationLimitBlockBorrowingAbove"),
borsh.array(borsh.u8(), 2, "reserved1"),
borsh.u64("borrowLimitOutsideElevationGroup"),
borsh.array(borsh.u64(), 32, "borrowLimitAgainstThisCollateralInElevationGroup"),
], property);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
static fromDecoded(obj) {
return new ReserveConfig({
status: obj.status,
assetTier: obj.assetTier,
hostFixedInterestRateBps: obj.hostFixedInterestRateBps,
reserved2: obj.reserved2,
reserved3: obj.reserved3,
protocolTakeRatePct: obj.protocolTakeRatePct,
protocolLiquidationFeePct: obj.protocolLiquidationFeePct,
loanToValuePct: obj.loanToValuePct,
liquidationThresholdPct: obj.liquidationThresholdPct,
minLiquidationBonusBps: obj.minLiquidationBonusBps,
maxLiquidationBonusBps: obj.maxLiquidationBonusBps,
badDebtLiquidationBonusBps: obj.badDebtLiquidationBonusBps,
deleveragingMarginCallPeriodSecs: obj.deleveragingMarginCallPeriodSecs,
deleveragingThresholdSlotsPerBps: obj.deleveragingThresholdSlotsPerBps,
fees: types.ReserveFees.fromDecoded(obj.fees),
borrowRateCurve: types.BorrowRateCurve.fromDecoded(obj.borrowRateCurve),
borrowFactorPct: obj.borrowFactorPct,
depositLimit: obj.depositLimit,
borrowLimit: obj.borrowLimit,
tokenInfo: types.TokenInfo.fromDecoded(obj.tokenInfo),
depositWithdrawalCap: types.WithdrawalCaps.fromDecoded(obj.depositWithdrawalCap),
debtWithdrawalCap: types.WithdrawalCaps.fromDecoded(obj.debtWithdrawalCap),
elevationGroups: obj.elevationGroups,
disableUsageAsCollOutsideEmode: obj.disableUsageAsCollOutsideEmode,
utilizationLimitBlockBorrowingAbove: obj.utilizationLimitBlockBorrowingAbove,
reserved1: obj.reserved1,
borrowLimitOutsideElevationGroup: obj.borrowLimitOutsideElevationGroup,
borrowLimitAgainstThisCollateralInElevationGroup: obj.borrowLimitAgainstThisCollateralInElevationGroup,
});
}
static toEncodable(fields) {
return {
status: fields.status,
assetTier: fields.assetTier,
hostFixedInterestRateBps: fields.hostFixedInterestRateBps,
reserved2: fields.reserved2,
reserved3: fields.reserved3,
protocolTakeRatePct: fields.protocolTakeRatePct,
protocolLiquidationFeePct: fields.protocolLiquidationFeePct,
loanToValuePct: fields.loanToValuePct,
liquidationThresholdPct: fields.liquidationThresholdPct,
minLiquidationBonusBps: fields.minLiquidationBonusBps,
maxLiquidationBonusBps: fields.maxLiquidationBonusBps,
badDebtLiquidationBonusBps: fields.badDebtLiquidationBonusBps,
deleveragingMarginCallPeriodSecs: fields.deleveragingMarginCallPeriodSecs,
deleveragingThresholdSlotsPerBps: fields.deleveragingThresholdSlotsPerBps,
fees: types.ReserveFees.toEncodable(fields.fees),
borrowRateCurve: types.BorrowRateCurve.toEncodable(fields.borrowRateCurve),
borrowFactorPct: fields.borrowFactorPct,
depositLimit: fields.depositLimit,
borrowLimit: fields.borrowLimit,
tokenInfo: types.TokenInfo.toEncodable(fields.tokenInfo),
depositWithdrawalCap: types.WithdrawalCaps.toEncodable(fields.depositWithdrawalCap),
debtWithdrawalCap: types.WithdrawalCaps.toEncodable(fields.debtWithdrawalCap),
elevationGroups: fields.elevationGroups,
disableUsageAsCollOutsideEmode: fields.disableUsageAsCollOutsideEmode,
utilizationLimitBlockBorrowingAbove: fields.utilizationLimitBlockBorrowingAbove,
reserved1: fields.reserved1,
borrowLimitOutsideElevationGroup: fields.borrowLimitOutsideElevationGroup,
borrowLimitAgainstThisCollateralInElevationGroup: fields.borrowLimitAgainstThisCollateralInElevationGroup,
};
}
toJSON() {
return {
status: this.status,
assetTier: this.assetTier,
hostFixedInterestRateBps: this.hostFixedInterestRateBps,
reserved2: this.reserved2,
reserved3: this.reserved3,
protocolTakeRatePct: this.protocolTakeRatePct,
protocolLiquidationFeePct: this.protocolLiquidationFeePct,
loanToValuePct: this.loanToValuePct,
liquidationThresholdPct: this.liquidationThresholdPct,
minLiquidationBonusBps: this.minLiquidationBonusBps,
maxLiquidationBonusBps: this.maxLiquidationBonusBps,
badDebtLiquidationBonusBps: this.badDebtLiquidationBonusBps,
deleveragingMarginCallPeriodSecs: this.deleveragingMarginCallPeriodSecs.toString(),
deleveragingThresholdSlotsPerBps: this.deleveragingThresholdSlotsPerBps.toString(),
fees: this.fees.toJSON(),
borrowRateCurve: this.borrowRateCurve.toJSON(),
borrowFactorPct: this.borrowFactorPct.toString(),
depositLimit: this.depositLimit.toString(),
borrowLimit: this.borrowLimit.toString(),
tokenInfo: this.tokenInfo.toJSON(),
depositWithdrawalCap: this.depositWithdrawalCap.toJSON(),
debtWithdrawalCap: this.debtWithdrawalCap.toJSON(),
elevationGroups: this.elevationGroups,
disableUsageAsCollOutsideEmode: this.disableUsageAsCollOutsideEmode,
utilizationLimitBlockBorrowingAbove: this.utilizationLimitBlockBorrowingAbove,
reserved1: this.reserved1,
borrowLimitOutsideElevationGroup: this.borrowLimitOutsideElevationGroup.toString(),
borrowLimitAgainstThisCollateralInElevationGroup: this.borrowLimitAgainstThisCollateralInElevationGroup.map((item) => item.toString()),
};
}
static fromJSON(obj) {
return new ReserveConfig({
status: obj.status,
assetTier: obj.assetTier,
hostFixedInterestRateBps: obj.hostFixedInterestRateBps,
reserved2: obj.reserved2,
reserved3: obj.reserved3,
protocolTakeRatePct: obj.protocolTakeRatePct,
protocolLiquidationFeePct: obj.protocolLiquidationFeePct,
loanToValuePct: obj.loanToValuePct,
liquidationThresholdPct: obj.liquidationThresholdPct,
minLiquidationBonusBps: obj.minLiquidationBonusBps,
maxLiquidationBonusBps: obj.maxLiquidationBonusBps,
badDebtLiquidationBonusBps: obj.badDebtLiquidationBonusBps,
deleveragingMarginCallPeriodSecs: new bn_js_1.default(obj.deleveragingMarginCallPeriodSecs),
deleveragingThresholdSlotsPerBps: new bn_js_1.default(obj.deleveragingThresholdSlotsPerBps),
fees: types.ReserveFees.fromJSON(obj.fees),
borrowRateCurve: types.BorrowRateCurve.fromJSON(obj.borrowRateCurve),
borrowFactorPct: new bn_js_1.default(obj.borrowFactorPct),
depositLimit: new bn_js_1.default(obj.depositLimit),
borrowLimit: new bn_js_1.default(obj.borrowLimit),
tokenInfo: types.TokenInfo.fromJSON(obj.tokenInfo),
depositWithdrawalCap: types.WithdrawalCaps.fromJSON(obj.depositWithdrawalCap),
debtWithdrawalCap: types.WithdrawalCaps.fromJSON(obj.debtWithdrawalCap),
elevationGroups: obj.elevationGroups,
disableUsageAsCollOutsideEmode: obj.disableUsageAsCollOutsideEmode,
utilizationLimitBlockBorrowingAbove: obj.utilizationLimitBlockBorrowingAbove,
reserved1: obj.reserved1,
borrowLimitOutsideElevationGroup: new bn_js_1.default(obj.borrowLimitOutsideElevationGroup),
borrowLimitAgainstThisCollateralInElevationGroup: obj.borrowLimitAgainstThisCollateralInElevationGroup.map((item) => new bn_js_1.default(item)),
});
}
toEncodable() {
return ReserveConfig.toEncodable(this);
}
}
exports.ReserveConfig = ReserveConfig;
//# sourceMappingURL=ReserveConfig.js.map