UNPKG

@kamino-finance/klend-sdk

Version:

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

163 lines 5.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LendingObligation = exports.LeverageObligation = exports.MultiplyObligation = exports.VanillaObligation = exports.ObligationTypeTag = void 0; exports.getObligationPdaWithArgs = getObligationPdaWithArgs; exports.getObligationType = getObligationType; 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; id; static tag = 0; constructor(programId, id) { this.programId = programId; this.id = id ?? 0; } toArgs() { const initObligationArgs = { tag: VanillaObligation.tag, id: this.id, 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; id; static tag = 1; constructor(collToken, debtToken, programId, id) { this.collToken = collToken; this.debtToken = debtToken; this.programId = programId; this.id = id ?? 0; } toArgs() { const initObligationArgs = { tag: MultiplyObligation.tag, id: this.id, 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; id; static tag = 3; constructor(collToken, debtToken, programId, id) { this.collToken = collToken; this.debtToken = debtToken; this.programId = programId; this.id = id ?? 0; } toArgs() { const initObligationArgs = { tag: LeverageObligation.tag, id: this.id, 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; id; static tag = 2; constructor(token, programId, id) { this.token = token; this.programId = programId; this.id = id ?? 0; } 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 getObligationType(kaminoMarket, obligationTag, mintAddress1 = web3_js_1.PublicKey.default, mintAddress2 = web3_js_1.PublicKey.default) { switch (obligationTag) { case VanillaObligation.tag: { return new VanillaObligation(kaminoMarket.programId); } case MultiplyObligation.tag: { return new MultiplyObligation(mintAddress1, mintAddress2, kaminoMarket.programId); } case LeverageObligation.tag: { return new LeverageObligation(mintAddress1, mintAddress2, kaminoMarket.programId); } case LendingObligation.tag: { return new LendingObligation(mintAddress1, kaminoMarket.programId); } default: { throw new Error('Invalid obligation type'); } } } function getObligationTypeFromObligation(kaminoMarket, obligation) { switch (obligation.obligationTag) { case VanillaObligation.tag: { return new VanillaObligation(kaminoMarket.programId); } case MultiplyObligation.tag: { return new MultiplyObligation(obligation.getDeposits()[0].mintAddress, obligation.getBorrows()[0].mintAddress, kaminoMarket.programId); } case LeverageObligation.tag: { return new LeverageObligation(obligation.getDeposits()[0].mintAddress, obligation.getBorrows()[0].mintAddress, kaminoMarket.programId); } case LendingObligation.tag: { return new LendingObligation(obligation.getDeposits()[0].mintAddress, kaminoMarket.programId); } default: { throw new Error('Invalid obligation type'); } } } //# sourceMappingURL=ObligationType.js.map