@kamino-finance/klend-sdk 4.0.2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/classes/action.d.ts +3 -1
- package/dist/classes/action.d.ts.map +1 -1
- package/dist/classes/action.js +62 -61
- package/dist/classes/action.js.map +1 -1
- package/dist/classes/obligation.d.ts +9 -0
- package/dist/classes/obligation.d.ts.map +1 -1
- package/dist/classes/obligation.js +8 -0
- package/dist/classes/obligation.js.map +1 -1
- package/dist/classes/reserve.d.ts +3 -1
- package/dist/classes/reserve.d.ts.map +1 -1
- package/dist/classes/reserve.js +32 -0
- package/dist/classes/reserve.js.map +1 -1
- package/dist/classes/shared.d.ts +8 -0
- package/dist/classes/shared.d.ts.map +1 -1
- package/dist/classes/shared.js +6 -1
- package/dist/classes/shared.js.map +1 -1
- package/dist/classes/vault.d.ts.map +1 -1
- package/dist/classes/vault.js +19 -5
- package/dist/classes/vault.js.map +1 -1
- package/dist/lending_operations/repay_with_collateral_calcs.d.ts +18 -1
- package/dist/lending_operations/repay_with_collateral_calcs.d.ts.map +1 -1
- package/dist/lending_operations/repay_with_collateral_calcs.js +62 -0
- package/dist/lending_operations/repay_with_collateral_calcs.js.map +1 -1
- package/dist/lending_operations/repay_with_collateral_operations.d.ts +27 -43
- package/dist/lending_operations/repay_with_collateral_operations.d.ts.map +1 -1
- package/dist/lending_operations/repay_with_collateral_operations.js +99 -152
- package/dist/lending_operations/repay_with_collateral_operations.js.map +1 -1
- package/dist/leverage/operations.d.ts +14 -3
- package/dist/leverage/operations.d.ts.map +1 -1
- package/dist/leverage/operations.js +184 -128
- package/dist/leverage/operations.js.map +1 -1
- package/dist/utils/ata.d.ts +12 -3
- package/dist/utils/ata.d.ts.map +1 -1
- package/dist/utils/ata.js +26 -39
- package/dist/utils/ata.js.map +1 -1
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +0 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/instruction.d.ts +1 -0
- package/dist/utils/instruction.d.ts.map +1 -1
- package/dist/utils/instruction.js +18 -0
- package/dist/utils/instruction.js.map +1 -1
- package/package.json +3 -3
- package/src/classes/action.ts +92 -98
- package/src/classes/obligation.ts +15 -6
- package/src/classes/reserve.ts +48 -1
- package/src/classes/shared.ts +10 -0
- package/src/classes/vault.ts +23 -19
- package/src/lending_operations/repay_with_collateral_calcs.ts +98 -1
- package/src/lending_operations/repay_with_collateral_operations.ts +233 -253
- package/src/leverage/operations.ts +227 -140
- package/src/utils/ata.ts +33 -56
- package/src/utils/index.ts +0 -2
- package/src/utils/instruction.ts +22 -0
- package/dist/utils/layout.d.ts +0 -14
- package/dist/utils/layout.d.ts.map +0 -1
- package/dist/utils/layout.js +0 -123
- package/dist/utils/layout.js.map +0 -1
- package/dist/utils/syncNative.d.ts +0 -11
- package/dist/utils/syncNative.d.ts.map +0 -1
- package/dist/utils/syncNative.js +0 -45
- package/dist/utils/syncNative.js.map +0 -1
- package/src/global.d.ts +0 -1
- package/src/utils/layout.ts +0 -118
- package/src/utils/syncNative.ts +0 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repay_with_collateral_calcs.d.ts","sourceRoot":"","sources":["../../src/lending_operations/repay_with_collateral_calcs.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"repay_with_collateral_calcs.d.ts","sourceRoot":"","sources":["../../src/lending_operations/repay_with_collateral_calcs.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAA2B,MAAM,YAAY,CAAC;AACpG,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,aAAa,EAC1B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,SAAS,GAClB;IACD,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,wBAAwB,EAAE,OAAO,CAAC;CACnC,CAsBA;AAED,eAAO,MAAM,oBAAoB,UAAW;IAC1C,OAAO,EAAE,aAAa,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,yBAAyB,EAAE,OAAO,CAAC;CACpC,KAAG;IACF,wBAAwB,EAAE,OAAO,CAAC;CAanC,CAAC;AAEF,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,SAAS,EAC1B,eAAe,EAAE,SAAS,EAC1B,UAAU,EAAE,gBAAgB,EAC5B,mBAAmB,EAAE,OAAO;;;EAkC7B;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,wCAAwC,EAAE,OAAO,CAAC;IAClD,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,SAAS,CAAC;IACzB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAoCV;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,wCAAwC,EAAE,OAAO,CAAC;CACnD,GAAG,OAAO,CAcV"}
|
|
@@ -3,9 +3,71 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.calcFlashRepayAmount = void 0;
|
|
7
|
+
exports.calcRepayAmountWithSlippage = calcRepayAmountWithSlippage;
|
|
8
|
+
exports.calcMaxWithdrawCollateral = calcMaxWithdrawCollateral;
|
|
6
9
|
exports.estimateDebtRepaymentWithColl = estimateDebtRepaymentWithColl;
|
|
7
10
|
exports.estimateCollNeededForDebtRepayment = estimateCollNeededForDebtRepayment;
|
|
8
11
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
12
|
+
const classes_1 = require("../classes");
|
|
13
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
14
|
+
function calcRepayAmountWithSlippage(kaminoMarket, debtReserve, currentSlot, obligation, amount, referrer) {
|
|
15
|
+
const irSlippageBpsForDebt = obligation
|
|
16
|
+
.estimateObligationInterestRate(kaminoMarket, debtReserve, obligation.state.borrows.find((borrow) => borrow.borrowReserve.equals(debtReserve.address)), currentSlot)
|
|
17
|
+
.toDecimalPlaces(debtReserve.state.liquidity.mintDecimals.toNumber(), decimal_js_1.default.ROUND_CEIL);
|
|
18
|
+
// add 0.1% to irSlippageBpsForDebt because we don't want to estimate slightly less than SC and end up not reapying enough
|
|
19
|
+
const repayAmount = amount
|
|
20
|
+
.mul(irSlippageBpsForDebt.mul(new decimal_js_1.default('1.001')))
|
|
21
|
+
.toDecimalPlaces(debtReserve.state.liquidity.mintDecimals.toNumber(), decimal_js_1.default.ROUND_CEIL);
|
|
22
|
+
const repayAmountLamports = (0, classes_1.numberToLamportsDecimal)(repayAmount, debtReserve.stats.decimals);
|
|
23
|
+
const { flashRepayAmountLamports } = (0, exports.calcFlashRepayAmount)({
|
|
24
|
+
reserve: debtReserve,
|
|
25
|
+
referralFeeBps: kaminoMarket.state.referralFeeBps,
|
|
26
|
+
hasReferral: !referrer.equals(web3_js_1.PublicKey.default),
|
|
27
|
+
flashBorrowAmountLamports: repayAmountLamports,
|
|
28
|
+
});
|
|
29
|
+
return { repayAmount, repayAmountLamports, flashRepayAmountLamports };
|
|
30
|
+
}
|
|
31
|
+
const calcFlashRepayAmount = (props) => {
|
|
32
|
+
const { reserve, referralFeeBps, hasReferral, flashBorrowAmountLamports } = props;
|
|
33
|
+
const { referrerFees, protocolFees } = reserve.calculateFlashLoanFees(flashBorrowAmountLamports, referralFeeBps, hasReferral);
|
|
34
|
+
const flashRepayAmountLamports = flashBorrowAmountLamports.add(referrerFees).add(protocolFees);
|
|
35
|
+
return {
|
|
36
|
+
flashRepayAmountLamports,
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
exports.calcFlashRepayAmount = calcFlashRepayAmount;
|
|
40
|
+
function calcMaxWithdrawCollateral(kaminoMarket, collReserveAddr, debtReserveAddr, obligation, repayAmountLamports) {
|
|
41
|
+
const collReserve = kaminoMarket.getReserveByAddress(collReserveAddr);
|
|
42
|
+
const debtReserve = kaminoMarket.getReserveByAddress(debtReserveAddr);
|
|
43
|
+
const debtOraclePx = debtReserve.getOracleMarketPrice();
|
|
44
|
+
const collOraclePx = collReserve.getOracleMarketPrice();
|
|
45
|
+
const { maxLtv: collMaxLtv } = obligation.getLtvForReserve(kaminoMarket, collReserve);
|
|
46
|
+
const debtBorrowFactor = debtReserve.getBorrowFactor();
|
|
47
|
+
const debtPosition = obligation.getBorrowByReserve(debtReserve.address);
|
|
48
|
+
const collPosition = obligation.getDepositByReserve(collReserve.address);
|
|
49
|
+
const initialCollValue = collPosition.amount.floor().div(collReserve.getMintFactor()).mul(collOraclePx);
|
|
50
|
+
const remainingDebtAmountLamports = debtPosition.amount.sub(repayAmountLamports);
|
|
51
|
+
const remainingDebtBfWeightedValue = remainingDebtAmountLamports.ceil().div(debtReserve.getMintFactor()).mul(debtBorrowFactor).mul(debtOraclePx);
|
|
52
|
+
let isClosingPosition = false;
|
|
53
|
+
if (remainingDebtAmountLamports.lte(new decimal_js_1.default(0)) && obligation.getBorrows().length === 1) {
|
|
54
|
+
isClosingPosition = true;
|
|
55
|
+
}
|
|
56
|
+
const numerator = initialCollValue.mul(collMaxLtv).sub(remainingDebtBfWeightedValue);
|
|
57
|
+
const denominator = collOraclePx.mul(collMaxLtv);
|
|
58
|
+
const maxCollWithdrawAmount = numerator.div(denominator);
|
|
59
|
+
const maxCollateralWithdrawalAmountLamports = maxCollWithdrawAmount.mul(collReserve.getMintFactor()).floor();
|
|
60
|
+
let withdrawableCollLamports;
|
|
61
|
+
if (isClosingPosition) {
|
|
62
|
+
// sanity check: we have extra collateral to swap, but we want to ensure we don't quote for way more than needed and get a bad px
|
|
63
|
+
const maxSwapCollLamportsWithBuffer = maxCollateralWithdrawalAmountLamports.mul('1.1');
|
|
64
|
+
withdrawableCollLamports = decimal_js_1.default.min(maxSwapCollLamportsWithBuffer, collPosition.amount).floor();
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
withdrawableCollLamports = decimal_js_1.default.max(new decimal_js_1.default(0), maxCollateralWithdrawalAmountLamports);
|
|
68
|
+
}
|
|
69
|
+
return { isClosingPosition, withdrawableCollLamports };
|
|
70
|
+
}
|
|
9
71
|
function estimateDebtRepaymentWithColl(props) {
|
|
10
72
|
const { collAmount, priceDebtToColl, slippagePct, flashBorrowReserveFlashLoanFeePercentage, kaminoMarket, debtTokenMint, obligation, currentSlot, } = props;
|
|
11
73
|
const slippage = slippagePct.div('100');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repay_with_collateral_calcs.js","sourceRoot":"","sources":["../../src/lending_operations/repay_with_collateral_calcs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repay_with_collateral_calcs.js","sourceRoot":"","sources":["../../src/lending_operations/repay_with_collateral_calcs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,58 +1,42 @@
|
|
|
1
1
|
import { KaminoMarket, KaminoObligation } from '../classes';
|
|
2
|
-
import { SwapInputs,
|
|
2
|
+
import { SwapInputs, SwapQuote, SwapQuoteIxsProvider, SwapQuoteProvider } from '../leverage';
|
|
3
3
|
import { ScopeRefresh } from '../utils';
|
|
4
|
-
import { PublicKey, TransactionInstruction } from '@solana/web3.js';
|
|
4
|
+
import { AddressLookupTableAccount, PublicKey, TransactionInstruction } from '@solana/web3.js';
|
|
5
5
|
import Decimal from 'decimal.js';
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}) => {
|
|
12
|
-
repayAmount: Decimal;
|
|
13
|
-
collToSwapIn: Decimal;
|
|
14
|
-
swapDebtExpectedOut: Decimal;
|
|
6
|
+
export type RepayWithCollIxsResponse<QuoteResponse> = {
|
|
7
|
+
ixs: TransactionInstruction[];
|
|
8
|
+
lookupTables: AddressLookupTableAccount[];
|
|
9
|
+
swapInputs: SwapInputs;
|
|
10
|
+
initialInputs: InitialInputs<QuoteResponse>;
|
|
15
11
|
};
|
|
16
|
-
export type InitialInputs = {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
export type InitialInputs<QuoteResponse> = {
|
|
13
|
+
debtRepayAmountLamports: Decimal;
|
|
14
|
+
flashRepayAmountLamports: Decimal;
|
|
15
|
+
swapQuote: SwapQuote<QuoteResponse>;
|
|
20
16
|
currentSlot: number;
|
|
17
|
+
klendAccounts: Array<PublicKey>;
|
|
21
18
|
};
|
|
22
|
-
|
|
23
|
-
repayAmount: Decimal;
|
|
24
|
-
priceDebtToColl: Decimal;
|
|
25
|
-
slippagePct: Decimal;
|
|
19
|
+
interface RepayWithCollSwapInputsProps<QuoteResponse> {
|
|
26
20
|
kaminoMarket: KaminoMarket;
|
|
27
21
|
debtTokenMint: PublicKey;
|
|
28
22
|
collTokenMint: PublicKey;
|
|
29
23
|
obligation: KaminoObligation;
|
|
30
|
-
currentSlot: number;
|
|
31
|
-
}) => {
|
|
32
|
-
swapInputs: SwapInputs;
|
|
33
|
-
initialInputs: InitialInputs;
|
|
34
|
-
};
|
|
35
|
-
export declare const getRepayWithCollIxns: (props: {
|
|
36
|
-
kaminoMarket: KaminoMarket;
|
|
37
|
-
budgetAndPriorityFeeIxns: TransactionInstruction[];
|
|
38
|
-
amount: Decimal;
|
|
39
|
-
debtTokenMint: PublicKey;
|
|
40
|
-
collTokenMint: PublicKey;
|
|
41
|
-
owner: PublicKey;
|
|
42
|
-
priceDebtToColl: Decimal;
|
|
43
|
-
slippagePct: Decimal;
|
|
44
|
-
isClosingPosition: boolean;
|
|
45
|
-
obligation: KaminoObligation;
|
|
46
24
|
referrer: PublicKey;
|
|
47
|
-
swapper: SwapIxnsProvider;
|
|
48
25
|
currentSlot: number;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
26
|
+
repayAmount: Decimal;
|
|
27
|
+
isClosingPosition: boolean;
|
|
28
|
+
budgetAndPriorityFeeIxs?: TransactionInstruction[];
|
|
29
|
+
scopeRefresh?: ScopeRefresh;
|
|
30
|
+
quoter: SwapQuoteProvider<QuoteResponse>;
|
|
31
|
+
}
|
|
32
|
+
export declare function getRepayWithCollSwapInputs<QuoteResponse>({ collTokenMint, currentSlot, debtTokenMint, kaminoMarket, obligation, quoter, referrer, repayAmount, isClosingPosition, budgetAndPriorityFeeIxs, scopeRefresh, }: RepayWithCollSwapInputsProps<QuoteResponse>): Promise<{
|
|
54
33
|
swapInputs: SwapInputs;
|
|
55
|
-
|
|
56
|
-
initialInputs: InitialInputs;
|
|
34
|
+
initialInputs: InitialInputs<QuoteResponse>;
|
|
57
35
|
}>;
|
|
36
|
+
interface RepayWithCollIxsProps<QuoteResponse> extends RepayWithCollSwapInputsProps<QuoteResponse> {
|
|
37
|
+
swapper: SwapQuoteIxsProvider<QuoteResponse>;
|
|
38
|
+
logger?: (msg: string, ...extra: any[]) => void;
|
|
39
|
+
}
|
|
40
|
+
export declare function getRepayWithCollIxs<QuoteResponse>({ repayAmount, isClosingPosition, budgetAndPriorityFeeIxs, collTokenMint, currentSlot, debtTokenMint, kaminoMarket, obligation, quoter, swapper, referrer, scopeRefresh, logger, }: RepayWithCollIxsProps<QuoteResponse>): Promise<RepayWithCollIxsResponse<QuoteResponse>>;
|
|
41
|
+
export {};
|
|
58
42
|
//# sourceMappingURL=repay_with_collateral_operations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repay_with_collateral_operations.d.ts","sourceRoot":"","sources":["../../src/lending_operations/repay_with_collateral_operations.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,YAAY,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"repay_with_collateral_operations.d.ts","sourceRoot":"","sources":["../../src/lending_operations/repay_with_collateral_operations.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,YAAY,EAAE,gBAAgB,EAAiB,MAAM,YAAY,CAAC;AACzF,OAAO,EAEL,UAAU,EACV,SAAS,EAET,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,YAAY,EAGb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,yBAAyB,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/F,OAAO,OAAO,MAAM,YAAY,CAAC;AAGjC,MAAM,MAAM,wBAAwB,CAAC,aAAa,IAAI;IACpD,GAAG,EAAE,sBAAsB,EAAE,CAAC;IAC9B,YAAY,EAAE,yBAAyB,EAAE,CAAC;IAC1C,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,aAAa,IAAI;IACzC,uBAAuB,EAAE,OAAO,CAAC;IACjC,wBAAwB,EAAE,OAAO,CAAC;IAClC,SAAS,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CACjC,CAAC;AAEF,UAAU,4BAA4B,CAAC,aAAa;IAClD,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,SAAS,CAAC;IACzB,aAAa,EAAE,SAAS,CAAC;IACzB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,uBAAuB,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACnD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;CAC1C;AAED,wBAAsB,0BAA0B,CAAC,aAAa,EAAE,EAC9D,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,MAAM,EACN,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,GACb,EAAE,4BAA4B,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC;IACvD,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;CAC7C,CAAC,CAoFD;AAED,UAAU,qBAAqB,CAAC,aAAa,CAAE,SAAQ,4BAA4B,CAAC,aAAa,CAAC;IAChG,OAAO,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC7C,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CACjD;AAED,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,EACvD,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,MAAM,EACN,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,MAAoB,GACrB,EAAE,qBAAqB,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAkDzF"}
|
|
@@ -1,179 +1,126 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
3
|
+
exports.getRepayWithCollSwapInputs = getRepayWithCollSwapInputs;
|
|
4
|
+
exports.getRepayWithCollIxs = getRepayWithCollIxs;
|
|
7
5
|
const spl_token_1 = require("@solana/spl-token");
|
|
8
6
|
const classes_1 = require("../classes");
|
|
9
7
|
const leverage_1 = require("../leverage");
|
|
10
8
|
const utils_1 = require("../utils");
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
const repayWithCollCalcs = (props) => {
|
|
14
|
-
// Initialize local variables from the props object
|
|
15
|
-
const { repayAmount, priceDebtToColl, slippagePct, flashLoanFeePct } = props;
|
|
16
|
-
const slippage = slippagePct.div('100');
|
|
17
|
-
const flashLoanFee = flashLoanFeePct.div('100');
|
|
18
|
-
const swapDebtExpectedOut = repayAmount.mul(new decimal_js_1.default(1.0).add(flashLoanFee));
|
|
19
|
-
const collToSwapIn = swapDebtExpectedOut.mul(new decimal_js_1.default(1.0).add(slippage)).mul(priceDebtToColl);
|
|
20
|
-
return {
|
|
21
|
-
repayAmount,
|
|
22
|
-
collToSwapIn,
|
|
23
|
-
swapDebtExpectedOut,
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
exports.repayWithCollCalcs = repayWithCollCalcs;
|
|
27
|
-
const getRepayWithCollSwapInputs = (props) => {
|
|
28
|
-
const { repayAmount, priceDebtToColl, slippagePct, kaminoMarket, debtTokenMint, collTokenMint, obligation, currentSlot, } = props;
|
|
9
|
+
const repay_with_collateral_calcs_1 = require("./repay_with_collateral_calcs");
|
|
10
|
+
async function getRepayWithCollSwapInputs({ collTokenMint, currentSlot, debtTokenMint, kaminoMarket, obligation, quoter, referrer, repayAmount, isClosingPosition, budgetAndPriorityFeeIxs, scopeRefresh, }) {
|
|
29
11
|
const collReserve = kaminoMarket.getReserveByMint(collTokenMint);
|
|
30
12
|
const debtReserve = kaminoMarket.getReserveByMint(debtTokenMint);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
13
|
+
if (!collReserve) {
|
|
14
|
+
throw new Error(`Collateral reserve with mint ${collReserve} not found in market ${kaminoMarket.getAddress()}`);
|
|
15
|
+
}
|
|
16
|
+
if (!debtReserve) {
|
|
17
|
+
throw new Error(`Debt reserve with mint ${debtReserve} not found in market ${kaminoMarket.getAddress()}`);
|
|
18
|
+
}
|
|
19
|
+
const { repayAmountLamports, flashRepayAmountLamports } = (0, repay_with_collateral_calcs_1.calcRepayAmountWithSlippage)(kaminoMarket, debtReserve, currentSlot, obligation, repayAmount, referrer);
|
|
20
|
+
const debtPosition = obligation.getBorrowByReserve(debtReserve.address);
|
|
21
|
+
const collPosition = obligation.getDepositByReserve(collReserve.address);
|
|
22
|
+
if (!debtPosition) {
|
|
23
|
+
throw new Error(`Debt position not found for ${debtReserve.stats.symbol} reserve ${debtReserve.address} in obligation ${obligation.obligationAddress}`);
|
|
24
|
+
}
|
|
25
|
+
if (!collPosition) {
|
|
26
|
+
throw new Error(`Collateral position not found for ${collReserve.stats.symbol} reserve ${collReserve.address} in obligation ${obligation.obligationAddress}`);
|
|
27
|
+
}
|
|
28
|
+
const { withdrawableCollLamports } = (0, repay_with_collateral_calcs_1.calcMaxWithdrawCollateral)(kaminoMarket, collReserve.address, debtReserve.address, obligation, repayAmountLamports);
|
|
29
|
+
const swapQuoteInputs = {
|
|
30
|
+
inputAmountLamports: withdrawableCollLamports,
|
|
31
|
+
inputMint: collTokenMint,
|
|
32
|
+
outputMint: debtTokenMint,
|
|
33
|
+
};
|
|
34
|
+
// Build the repay & withdraw collateral tx to get the number of accounts
|
|
35
|
+
const klendIxs = await buildRepayWithCollateralIxs(kaminoMarket, debtReserve, collReserve, obligation, referrer, currentSlot, budgetAndPriorityFeeIxs, scopeRefresh, {
|
|
36
|
+
preActionIxs: [],
|
|
37
|
+
swapIxs: [],
|
|
38
|
+
lookupTables: [],
|
|
39
|
+
}, isClosingPosition, repayAmountLamports, withdrawableCollLamports);
|
|
40
|
+
const uniqueKlendAccounts = (0, utils_1.uniqueAccounts)(klendIxs);
|
|
41
|
+
const swapQuote = await quoter(swapQuoteInputs, uniqueKlendAccounts);
|
|
42
|
+
const swapQuotePxDebtToColl = swapQuote.priceAInB;
|
|
43
|
+
const collSwapInLamports = flashRepayAmountLamports.div(debtReserve.getMintFactor()).div(swapQuotePxDebtToColl).mul(collReserve.getMintFactor()).ceil();
|
|
45
44
|
return {
|
|
46
45
|
swapInputs: {
|
|
47
|
-
inputAmountLamports:
|
|
48
|
-
.ceil()
|
|
49
|
-
.toNumber(),
|
|
46
|
+
inputAmountLamports: collSwapInLamports,
|
|
50
47
|
inputMint: collTokenMint,
|
|
51
48
|
outputMint: debtTokenMint,
|
|
52
49
|
},
|
|
53
50
|
initialInputs: {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
debtRepayAmountLamports: repayAmountLamports,
|
|
52
|
+
flashRepayAmountLamports,
|
|
53
|
+
swapQuote,
|
|
57
54
|
currentSlot,
|
|
55
|
+
klendAccounts: uniqueKlendAccounts,
|
|
58
56
|
},
|
|
59
57
|
};
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
.estimateObligationInterestRate(kaminoMarket, debtReserve, obligation?.state.borrows.find((borrow) => borrow.borrowReserve?.equals(debtReserve.address)), currentSlot)
|
|
71
|
-
.toDecimalPlaces(debtReserve?.state.liquidity.mintDecimals.toNumber(), decimal_js_1.default.ROUND_CEIL);
|
|
72
|
-
// add 0.1% to irSlippageBpsForDebt because we don't want to estimate slightly less than SC and end up not reapying enough
|
|
73
|
-
const repayAmount = amount
|
|
74
|
-
.mul(irSlippageBpsForDebt.mul(new decimal_js_1.default('1.001')))
|
|
75
|
-
.toDecimalPlaces(debtReserve?.state.liquidity.mintDecimals.toNumber(), decimal_js_1.default.ROUND_CEIL);
|
|
76
|
-
const calcs = (0, exports.repayWithCollCalcs)({
|
|
58
|
+
}
|
|
59
|
+
async function getRepayWithCollIxs({ repayAmount, isClosingPosition, budgetAndPriorityFeeIxs, collTokenMint, currentSlot, debtTokenMint, kaminoMarket, obligation, quoter, swapper, referrer, scopeRefresh, logger = console.log, }) {
|
|
60
|
+
const { swapInputs, initialInputs } = await getRepayWithCollSwapInputs({
|
|
61
|
+
collTokenMint,
|
|
62
|
+
currentSlot,
|
|
63
|
+
debtTokenMint,
|
|
64
|
+
kaminoMarket,
|
|
65
|
+
obligation,
|
|
66
|
+
quoter,
|
|
67
|
+
referrer,
|
|
77
68
|
repayAmount,
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
69
|
+
isClosingPosition,
|
|
70
|
+
budgetAndPriorityFeeIxs,
|
|
71
|
+
scopeRefresh,
|
|
81
72
|
});
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
73
|
+
const { debtRepayAmountLamports, flashRepayAmountLamports, swapQuote } = initialInputs;
|
|
74
|
+
const { inputAmountLamports: collSwapInLamports } = swapInputs;
|
|
75
|
+
const collReserve = kaminoMarket.getReserveByMint(collTokenMint);
|
|
76
|
+
const debtReserve = kaminoMarket.getReserveByMint(debtTokenMint);
|
|
77
|
+
logger(`Expected to swap in: ${collSwapInLamports.div(collReserve.getMintFactor())} ${collReserve.symbol}, for: ${flashRepayAmountLamports.div(debtReserve.getMintFactor())} ${debtReserve.symbol}, quoter px: ${swapQuote.priceAInB} ${debtReserve.symbol}/${collReserve.symbol}`);
|
|
78
|
+
const swapResponse = await swapper(swapInputs, initialInputs.klendAccounts, swapQuote);
|
|
79
|
+
const ixs = await buildRepayWithCollateralIxs(kaminoMarket, debtReserve, collReserve, obligation, referrer, currentSlot, budgetAndPriorityFeeIxs, scopeRefresh, swapResponse, isClosingPosition, debtRepayAmountLamports, swapInputs.inputAmountLamports);
|
|
80
|
+
return {
|
|
81
|
+
ixs,
|
|
82
|
+
lookupTables: swapResponse.lookupTables,
|
|
83
|
+
swapInputs,
|
|
84
|
+
initialInputs,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
async function buildRepayWithCollateralIxs(market, debtReserve, collReserve, obligation, referrer, currentSlot, budgetAndPriorityFeeIxs, scopeRefresh, swapQuoteIxs, isClosingPosition, debtRepayAmountLamports, collWithdrawLamports) {
|
|
88
|
+
// 1. Create atas & budget txns
|
|
89
|
+
const budgetIxns = budgetAndPriorityFeeIxs || (0, utils_1.getComputeBudgetAndPriorityFeeIxns)(1_400_000);
|
|
90
|
+
const atas = [
|
|
91
|
+
{ mint: collReserve.getLiquidityMint(), tokenProgram: collReserve.getLiquidityTokenProgram() },
|
|
92
|
+
{ mint: debtReserve.getLiquidityMint(), tokenProgram: debtReserve.getLiquidityTokenProgram() },
|
|
93
|
+
{ mint: collReserve.getCTokenMint(), tokenProgram: spl_token_1.TOKEN_PROGRAM_ID },
|
|
89
94
|
];
|
|
90
|
-
const
|
|
91
|
-
const {
|
|
92
|
-
//
|
|
95
|
+
const atasAndIxs = (0, utils_1.createAtasIdempotent)(obligation.state.owner, atas);
|
|
96
|
+
const [, { ata: debtTokenAta }] = atasAndIxs;
|
|
97
|
+
// 2. Flash borrow & repay the debt to repay amount needed
|
|
93
98
|
const { flashBorrowIxn, flashRepayIxn } = (0, leverage_1.getFlashLoanInstructions)({
|
|
94
|
-
borrowIxnIndex: budgetIxns.length +
|
|
95
|
-
walletPublicKey: owner,
|
|
96
|
-
lendingMarketAuthority:
|
|
97
|
-
lendingMarketAddress:
|
|
99
|
+
borrowIxnIndex: budgetIxns.length + atasAndIxs.length,
|
|
100
|
+
walletPublicKey: obligation.state.owner,
|
|
101
|
+
lendingMarketAuthority: market.getLendingMarketAuthority(),
|
|
102
|
+
lendingMarketAddress: market.getAddress(),
|
|
98
103
|
reserve: debtReserve,
|
|
99
|
-
amountLamports:
|
|
104
|
+
amountLamports: debtRepayAmountLamports,
|
|
100
105
|
destinationAta: debtTokenAta,
|
|
101
|
-
referrerAccount:
|
|
102
|
-
referrerTokenState:
|
|
103
|
-
programId:
|
|
106
|
+
referrerAccount: market.programId,
|
|
107
|
+
referrerTokenState: market.programId,
|
|
108
|
+
programId: market.programId,
|
|
104
109
|
});
|
|
105
|
-
const requestElevationGroup = obligation.state.elevationGroup !== 0
|
|
106
|
-
//
|
|
107
|
-
const repayAndWithdrawAction = await classes_1.KaminoAction.buildRepayAndWithdrawTxns(
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
const
|
|
110
|
+
const requestElevationGroup = !isClosingPosition && obligation.state.elevationGroup !== 0;
|
|
111
|
+
// 3. Repay using the flash borrowed funds & withdraw collateral to swap and pay the flash loan
|
|
112
|
+
const repayAndWithdrawAction = await classes_1.KaminoAction.buildRepayAndWithdrawTxns(market, isClosingPosition ? utils_1.U64_MAX : debtRepayAmountLamports.toString(), debtReserve.getLiquidityMint(), isClosingPosition ? utils_1.U64_MAX : collWithdrawLamports.toString(), collReserve.getLiquidityMint(), obligation.state.owner, currentSlot, obligation, 0, false, requestElevationGroup, undefined, isClosingPosition, referrer, scopeRefresh);
|
|
113
|
+
// 4. Swap collateral to debt to repay flash loan
|
|
114
|
+
const { preActionIxs, swapIxs } = swapQuoteIxs;
|
|
115
|
+
const swapInstructions = (0, utils_1.removeBudgetAndAtaIxns)(swapIxs, []);
|
|
116
|
+
return [
|
|
111
117
|
...budgetIxns,
|
|
112
|
-
...
|
|
113
|
-
|
|
114
|
-
...
|
|
115
|
-
...
|
|
116
|
-
...
|
|
117
|
-
|
|
118
|
-
...repayAndWithdrawAction.cleanupIxs,
|
|
119
|
-
...[flashRepayIxn],
|
|
120
|
-
...closeAtasIxns,
|
|
118
|
+
...atasAndIxs.map((x) => x.createAtaIx),
|
|
119
|
+
flashBorrowIxn,
|
|
120
|
+
...preActionIxs,
|
|
121
|
+
...classes_1.KaminoAction.actionToIxs(repayAndWithdrawAction),
|
|
122
|
+
...swapInstructions,
|
|
123
|
+
flashRepayIxn,
|
|
121
124
|
];
|
|
122
|
-
|
|
123
|
-
ixns.forEach((ixn) => {
|
|
124
|
-
ixn.keys.forEach((key) => {
|
|
125
|
-
uniqueAccounts.add(key.pubkey);
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
const totalKlendAccounts = uniqueAccounts.toArray().length;
|
|
129
|
-
// return early to avoid extra swapper calls
|
|
130
|
-
if (getTotalKlendAccountsOnly) {
|
|
131
|
-
return {
|
|
132
|
-
ixns: [],
|
|
133
|
-
lookupTablesAddresses: [],
|
|
134
|
-
swapInputs: { inputAmountLamports: 0, inputMint: web3_js_1.PublicKey.default, outputMint: web3_js_1.PublicKey.default },
|
|
135
|
-
totalKlendAccounts: totalKlendAccounts,
|
|
136
|
-
initialInputs: {
|
|
137
|
-
repayAmount,
|
|
138
|
-
priceDebtToColl,
|
|
139
|
-
slippagePct,
|
|
140
|
-
currentSlot,
|
|
141
|
-
},
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
console.log('Expected to swap in', calcs.collToSwapIn.toString(), 'coll for', calcs.swapDebtExpectedOut.toString(), 'debt');
|
|
145
|
-
const swapInputs = {
|
|
146
|
-
inputAmountLamports: (0, classes_1.numberToLamportsDecimal)(calcs.collToSwapIn, collReserve.stats.decimals).ceil().toNumber(),
|
|
147
|
-
inputMint: collTokenMint,
|
|
148
|
-
outputMint: debtTokenMint,
|
|
149
|
-
};
|
|
150
|
-
// 3. Swap collateral to debt to repay flash loan
|
|
151
|
-
const [swapIxns, lookupTablesAddresses] = await swapper(swapInputs.inputAmountLamports, swapInputs.inputMint, swapInputs.outputMint, slippagePct.toNumber());
|
|
152
|
-
const swapInstructions = (0, utils_1.removeBudgetAndAtaIxns)(swapIxns, []);
|
|
153
|
-
return {
|
|
154
|
-
ixns: [
|
|
155
|
-
...budgetIxns,
|
|
156
|
-
...createAtasIxns,
|
|
157
|
-
...[flashBorrowIxn],
|
|
158
|
-
...repayAndWithdrawAction.setupIxs,
|
|
159
|
-
...[repayAndWithdrawAction.lendingIxs[0]],
|
|
160
|
-
...repayAndWithdrawAction.inBetweenIxs,
|
|
161
|
-
...[repayAndWithdrawAction.lendingIxs[1]],
|
|
162
|
-
...repayAndWithdrawAction.cleanupIxs,
|
|
163
|
-
...swapInstructions,
|
|
164
|
-
...[flashRepayIxn],
|
|
165
|
-
...closeAtasIxns,
|
|
166
|
-
],
|
|
167
|
-
lookupTablesAddresses,
|
|
168
|
-
swapInputs,
|
|
169
|
-
totalKlendAccounts,
|
|
170
|
-
initialInputs: {
|
|
171
|
-
repayAmount,
|
|
172
|
-
priceDebtToColl,
|
|
173
|
-
slippagePct,
|
|
174
|
-
currentSlot,
|
|
175
|
-
},
|
|
176
|
-
};
|
|
177
|
-
};
|
|
178
|
-
exports.getRepayWithCollIxns = getRepayWithCollIxns;
|
|
125
|
+
}
|
|
179
126
|
//# sourceMappingURL=repay_with_collateral_operations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repay_with_collateral_operations.js","sourceRoot":"","sources":["../../src/lending_operations/repay_with_collateral_operations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repay_with_collateral_operations.js","sourceRoot":"","sources":["../../src/lending_operations/repay_with_collateral_operations.ts"],"names":[],"mappings":";;AAmDA,gEAmGC;AAOD,kDAgEC;AA7ND,iDAAqD;AACrD,wCAAyF;AACzF,0CAOqB;AACrB,oCAOkB;AAGlB,+EAAuG;AA+BhG,KAAK,UAAU,0BAA0B,CAAgB,EAC9D,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,MAAM,EACN,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,GACgC;IAI5C,MAAM,WAAW,GAAG,YAAY,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,YAAY,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACjE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,WAAW,wBAAwB,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAClH,CAAC;IACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,WAAW,wBAAwB,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC5G,CAAC;IAED,MAAM,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,GAAG,IAAA,yDAA2B,EACnF,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,WAAW,EACX,QAAQ,CACT,CAAC;IAEF,MAAM,YAAY,GAAG,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,UAAU,CAAC,mBAAmB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACzE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,+BAA+B,WAAW,CAAC,KAAK,CAAC,MAAM,YAAY,WAAW,CAAC,OAAO,kBAAkB,UAAU,CAAC,iBAAiB,EAAE,CACvI,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,qCAAqC,WAAW,CAAC,KAAK,CAAC,MAAM,YAAY,WAAW,CAAC,OAAO,kBAAkB,UAAU,CAAC,iBAAiB,EAAE,CAC7I,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,wBAAwB,EAAE,GAAG,IAAA,uDAAyB,EAC5D,YAAY,EACZ,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,OAAO,EACnB,UAAU,EACV,mBAAmB,CACpB,CAAC;IAEF,MAAM,eAAe,GAAe;QAClC,mBAAmB,EAAE,wBAAwB;QAC7C,SAAS,EAAE,aAAa;QACxB,UAAU,EAAE,aAAa;KAC1B,CAAC;IAEF,yEAAyE;IACzE,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAChD,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,uBAAuB,EACvB,YAAY,EACZ;QACE,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,EAAE;KACjB,EACD,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,CACzB,CAAC;IACF,MAAM,mBAAmB,GAAG,IAAA,sBAAc,EAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;IAErE,MAAM,qBAAqB,GAAG,SAAS,CAAC,SAAS,CAAC;IAClD,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAExJ,OAAO;QACL,UAAU,EAAE;YACV,mBAAmB,EAAE,kBAAkB;YACvC,SAAS,EAAE,aAAa;YACxB,UAAU,EAAE,aAAa;SAC1B;QACD,aAAa,EAAE;YACb,uBAAuB,EAAE,mBAAmB;YAC5C,wBAAwB;YACxB,SAAS;YACT,WAAW;YACX,aAAa,EAAE,mBAAmB;SACnC;KACF,CAAC;AACJ,CAAC;AAOM,KAAK,UAAU,mBAAmB,CAAgB,EACvD,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,MAAM,EACN,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,MAAM,GAAG,OAAO,CAAC,GAAG,GACiB;IACrC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM,0BAA0B,CAAC;QACrE,aAAa;QACb,WAAW;QACX,aAAa;QACb,YAAY;QACZ,UAAU;QACV,MAAM;QACN,QAAQ;QACR,WAAW;QACX,iBAAiB;QACjB,uBAAuB;QACvB,YAAY;KACb,CAAC,CAAC;IACH,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IACvF,MAAM,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,GAAG,UAAU,CAAC;IAE/D,MAAM,WAAW,GAAG,YAAY,CAAC,gBAAgB,CAAC,aAAa,CAAE,CAAC;IAClE,MAAM,WAAW,GAAG,YAAY,CAAC,gBAAgB,CAAC,aAAa,CAAE,CAAC;IAElE,MAAM,CACJ,wBAAwB,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,IACzE,WAAW,CAAC,MACd,UAAU,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,IAAI,WAAW,CAAC,MAAM,gBACvF,SAAS,CAAC,SACZ,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,CAC/C,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACvF,MAAM,GAAG,GAAG,MAAM,2BAA2B,CAC3C,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,CAAC,mBAAmB,CAC/B,CAAC;IAEF,OAAO;QACL,GAAG;QACH,YAAY,EAAE,YAAY,CAAC,YAAY;QACvC,UAAU;QACV,aAAa;KACd,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,2BAA2B,CACxC,MAAoB,EACpB,WAA0B,EAC1B,WAA0B,EAC1B,UAA4B,EAC5B,QAAmB,EACnB,WAAmB,EACnB,uBAA6D,EAC7D,YAAsC,EACtC,YAA0B,EAC1B,iBAA0B,EAC1B,uBAAgC,EAChC,oBAA6B;IAE7B,+BAA+B;IAC/B,MAAM,UAAU,GAAG,uBAAuB,IAAI,IAAA,0CAAkC,EAAC,SAAS,CAAC,CAAC;IAE5F,MAAM,IAAI,GAAG;QACX,EAAE,IAAI,EAAE,WAAW,CAAC,gBAAgB,EAAE,EAAE,YAAY,EAAE,WAAW,CAAC,wBAAwB,EAAE,EAAE;QAC9F,EAAE,IAAI,EAAE,WAAW,CAAC,gBAAgB,EAAE,EAAE,YAAY,EAAE,WAAW,CAAC,wBAAwB,EAAE,EAAE;QAC9F,EAAE,IAAI,EAAE,WAAW,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,4BAAgB,EAAE;KACtE,CAAC;IAEF,MAAM,UAAU,GAAG,IAAA,4BAAoB,EAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,GAAG,UAAU,CAAC;IAE7C,0DAA0D;IAC1D,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,IAAA,mCAAwB,EAAC;QACjE,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;QACrD,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK;QACvC,sBAAsB,EAAE,MAAM,CAAC,yBAAyB,EAAE;QAC1D,oBAAoB,EAAE,MAAM,CAAC,UAAU,EAAE;QACzC,OAAO,EAAE,WAAW;QACpB,cAAc,EAAE,uBAAuB;QACvC,cAAc,EAAE,YAAY;QAC5B,eAAe,EAAE,MAAM,CAAC,SAAS;QACjC,kBAAkB,EAAE,MAAM,CAAC,SAAS;QACpC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC;IAEH,MAAM,qBAAqB,GAAG,CAAC,iBAAiB,IAAI,UAAU,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,CAAC;IAE1F,+FAA+F;IAC/F,MAAM,sBAAsB,GAAG,MAAM,sBAAY,CAAC,yBAAyB,CACzE,MAAM,EACN,iBAAiB,CAAC,CAAC,CAAC,eAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,QAAQ,EAAE,EAChE,WAAW,CAAC,gBAAgB,EAAE,EAC9B,iBAAiB,CAAC,CAAC,CAAC,eAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAC7D,WAAW,CAAC,gBAAgB,EAAE,EAC9B,UAAU,CAAC,KAAK,CAAC,KAAK,EACtB,WAAW,EACX,UAAU,EACV,CAAC,EACD,KAAK,EACL,qBAAqB,EACrB,SAAS,EACT,iBAAiB,EACjB,QAAQ,EACR,YAAY,CACb,CAAC;IAEF,iDAAiD;IACjD,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;IAC/C,MAAM,gBAAgB,GAAG,IAAA,8BAAsB,EAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE7D,OAAO;QACL,GAAG,UAAU;QACb,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QACvC,cAAc;QACd,GAAG,YAAY;QACf,GAAG,sBAAY,CAAC,WAAW,CAAC,sBAAsB,CAAC;QACnD,GAAG,gBAAgB;QACnB,aAAa;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -1,13 +1,24 @@
|
|
|
1
|
-
import { Connection, PublicKey, TransactionInstruction } from '@solana/web3.js';
|
|
1
|
+
import { AddressLookupTableAccount, Connection, PublicKey, TransactionInstruction } from '@solana/web3.js';
|
|
2
2
|
import Decimal from 'decimal.js';
|
|
3
3
|
import { KaminoMarket, KaminoObligation } from '../classes';
|
|
4
4
|
import { ObligationTypeTag } from '../utils';
|
|
5
5
|
import { Kamino, InstructionsWithLookupTables, StrategyWithAddress, TokenAmounts } from '@kamino-finance/kliquidity-sdk';
|
|
6
|
-
export type SwapIxnsProvider = (amountInLamports: number,
|
|
6
|
+
export type SwapIxnsProvider = (amountInLamports: number, inputMint: PublicKey, outputMint: PublicKey, slippagePct: number, amountDebtAtaBalance?: Decimal) => Promise<[TransactionInstruction[], PublicKey[]]>;
|
|
7
|
+
export type SwapQuoteProvider<QuoteResponse> = (inputs: SwapInputs, klendAccounts: Array<PublicKey>) => Promise<SwapQuote<QuoteResponse>>;
|
|
8
|
+
export type SwapQuoteIxsProvider<QuoteResponse> = (inputs: SwapInputs, klendAccounts: Array<PublicKey>, quote: SwapQuote<QuoteResponse>) => Promise<SwapQuoteIxs>;
|
|
9
|
+
export type SwapQuote<QuoteResponse> = {
|
|
10
|
+
priceAInB: Decimal;
|
|
11
|
+
quoteResponse?: QuoteResponse;
|
|
12
|
+
};
|
|
13
|
+
export type SwapQuoteIxs = {
|
|
14
|
+
preActionIxs: TransactionInstruction[];
|
|
15
|
+
swapIxs: TransactionInstruction[];
|
|
16
|
+
lookupTables: AddressLookupTableAccount[];
|
|
17
|
+
};
|
|
7
18
|
export type PriceAinBProvider = (mintA: PublicKey, mintB: PublicKey) => Promise<Decimal>;
|
|
8
19
|
export type IsKtokenProvider = (token: PublicKey | string) => Promise<boolean>;
|
|
9
20
|
export type SwapInputs = {
|
|
10
|
-
inputAmountLamports:
|
|
21
|
+
inputAmountLamports: Decimal;
|
|
11
22
|
inputMint: PublicKey;
|
|
12
23
|
outputMint: PublicKey;
|
|
13
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/leverage/operations.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/leverage/operations.ts"],"names":[],"mappings":"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"}
|