@kamino-finance/klend-sdk
Version:
Typescript SDK for interacting with the Kamino Lending (klend) protocol
138 lines • 4.61 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LendingObligation = exports.LeverageObligation = exports.MultiplyObligation = exports.VanillaObligation = exports.ObligationTypeTag = void 0;
exports.getObligationTypeFromObligation = getObligationTypeFromObligation;
const web3_js_1 = require("@solana/web3.js");
var ObligationTypeTag;
(function (ObligationTypeTag) {
ObligationTypeTag[ObligationTypeTag["Vanilla"] = 0] = "Vanilla";
ObligationTypeTag[ObligationTypeTag["Multiply"] = 1] = "Multiply";
ObligationTypeTag[ObligationTypeTag["Lending"] = 2] = "Lending";
ObligationTypeTag[ObligationTypeTag["Leverage"] = 3] = "Leverage";
})(ObligationTypeTag || (exports.ObligationTypeTag = ObligationTypeTag = {}));
class VanillaObligation {
programId;
static tag = 0;
constructor(programId) {
this.programId = programId;
}
toArgs() {
const initObligationArgs = {
tag: VanillaObligation.tag,
id: 0,
seed1: web3_js_1.PublicKey.default,
seed2: web3_js_1.PublicKey.default,
};
return initObligationArgs;
}
toPda(market, user) {
return getObligationPdaWithArgs(market, user, this.toArgs(), this.programId);
}
}
exports.VanillaObligation = VanillaObligation;
class MultiplyObligation {
collToken;
debtToken;
programId;
static tag = 1;
constructor(collToken, debtToken, programId) {
this.collToken = collToken;
this.debtToken = debtToken;
this.programId = programId;
}
toArgs() {
const initObligationArgs = {
tag: MultiplyObligation.tag,
id: 0,
seed1: this.collToken,
seed2: this.debtToken,
};
return initObligationArgs;
}
toPda(market, user) {
return getObligationPdaWithArgs(market, user, this.toArgs(), this.programId);
}
}
exports.MultiplyObligation = MultiplyObligation;
class LeverageObligation {
collToken;
debtToken;
programId;
static tag = 3;
constructor(collToken, debtToken, programId) {
this.collToken = collToken;
this.debtToken = debtToken;
this.programId = programId;
}
toArgs() {
const initObligationArgs = {
tag: LeverageObligation.tag,
id: 0,
seed1: this.collToken,
seed2: this.debtToken,
};
return initObligationArgs;
}
toPda(market, user) {
return getObligationPdaWithArgs(market, user, this.toArgs(), this.programId);
}
}
exports.LeverageObligation = LeverageObligation;
class LendingObligation {
token;
programId;
static tag = 2;
constructor(token, programId) {
this.token = token;
this.programId = programId;
}
toArgs() {
const initObligationArgs = {
tag: LendingObligation.tag,
id: 0,
seed1: this.token,
seed2: this.token,
};
return initObligationArgs;
}
toPda(market, user) {
return getObligationPdaWithArgs(market, user, this.toArgs(), this.programId);
}
}
exports.LendingObligation = LendingObligation;
function getObligationPdaWithArgs(market, user, args, programId) {
const seed = [
Buffer.from([args.tag]),
Buffer.from([args.id]),
user.toBuffer(),
market.toBuffer(),
args.seed1.toBuffer(),
args.seed2.toBuffer(),
];
const [obligationAddress, _obligationAddressBump] = web3_js_1.PublicKey.findProgramAddressSync(seed, programId);
return obligationAddress;
}
function getObligationTypeFromObligation(kaminoMarket, obligation) {
switch (obligation.obligationTag) {
case VanillaObligation.tag: {
return new VanillaObligation(kaminoMarket.programId);
break;
}
case MultiplyObligation.tag: {
return new MultiplyObligation(obligation.getDeposits()[0].mintAddress, obligation.getBorrows()[0].mintAddress, kaminoMarket.programId);
break;
}
case LeverageObligation.tag: {
return new LeverageObligation(obligation.getDeposits()[0].mintAddress, obligation.getBorrows()[0].mintAddress, kaminoMarket.programId);
break;
}
case LendingObligation.tag: {
return new LendingObligation(obligation.getDeposits()[0].mintAddress, kaminoMarket.programId);
break;
}
default: {
throw new Error('Invalid obligation type');
}
}
}
//# sourceMappingURL=ObligationType.js.map