@kamino-finance/klend-sdk 5.11.3-beta.1 → 5.11.4
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/dist/classes/action.d.ts +23 -23
- package/dist/classes/action.d.ts.map +1 -1
- package/dist/classes/action.js +122 -195
- package/dist/classes/action.js.map +1 -1
- package/dist/classes/index.d.ts +1 -0
- package/dist/classes/index.d.ts.map +1 -1
- package/dist/classes/index.js +1 -0
- package/dist/classes/index.js.map +1 -1
- package/dist/classes/manager.d.ts +6 -1
- package/dist/classes/manager.d.ts.map +1 -1
- package/dist/classes/manager.js +16 -1
- package/dist/classes/manager.js.map +1 -1
- package/dist/classes/market.d.ts +3 -3
- package/dist/classes/market.d.ts.map +1 -1
- package/dist/classes/market.js +30 -16
- package/dist/classes/market.js.map +1 -1
- package/dist/classes/obligation.d.ts +2 -0
- package/dist/classes/obligation.d.ts.map +1 -1
- package/dist/classes/obligation.js +5 -0
- package/dist/classes/obligation.js.map +1 -1
- package/dist/classes/vault.js +1 -1
- package/dist/classes/vault.js.map +1 -1
- package/dist/lending_operations/repay_with_collateral_operations.d.ts +4 -4
- package/dist/lending_operations/repay_with_collateral_operations.d.ts.map +1 -1
- package/dist/lending_operations/repay_with_collateral_operations.js +10 -8
- package/dist/lending_operations/repay_with_collateral_operations.js.map +1 -1
- package/dist/lending_operations/swap_collateral_operations.d.ts +2 -2
- package/dist/lending_operations/swap_collateral_operations.d.ts.map +1 -1
- package/dist/lending_operations/swap_collateral_operations.js +11 -6
- package/dist/lending_operations/swap_collateral_operations.js.map +1 -1
- package/dist/leverage/calcs.d.ts +5 -10
- package/dist/leverage/calcs.d.ts.map +1 -1
- package/dist/leverage/calcs.js +6 -13
- package/dist/leverage/calcs.js.map +1 -1
- package/dist/leverage/operations.d.ts +9 -7
- package/dist/leverage/operations.d.ts.map +1 -1
- package/dist/leverage/operations.js +78 -72
- package/dist/leverage/operations.js.map +1 -1
- package/dist/leverage/types.d.ts +4 -4
- package/dist/leverage/types.d.ts.map +1 -1
- package/dist/utils/ObligationType.d.ts +1 -1
- package/dist/utils/ObligationType.d.ts.map +1 -1
- package/dist/utils/managerTypes.d.ts.map +1 -1
- package/dist/utils/managerTypes.js +7 -52
- package/dist/utils/managerTypes.js.map +1 -1
- package/dist/utils/oracle.d.ts +3 -3
- package/dist/utils/oracle.d.ts.map +1 -1
- package/dist/utils/oracle.js +4 -3
- package/dist/utils/oracle.js.map +1 -1
- package/package.json +2 -2
- package/src/classes/action.ts +143 -211
- package/src/classes/index.ts +1 -0
- package/src/classes/manager.ts +32 -1
- package/src/classes/market.ts +34 -25
- package/src/classes/obligation.ts +6 -0
- package/src/classes/vault.ts +1 -1
- package/src/client.ts +8 -3
- package/src/lending_operations/repay_with_collateral_operations.ts +15 -11
- package/src/lending_operations/swap_collateral_operations.ts +19 -7
- package/src/leverage/calcs.ts +2 -18
- package/src/leverage/operations.ts +114 -72
- package/src/leverage/types.ts +4 -4
- package/src/utils/ObligationType.ts +1 -1
- package/src/utils/managerTypes.ts +10 -52
- package/src/utils/oracle.ts +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/leverage/operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEtF,OAAO,EAEL,YAAY,EACZ,gBAAgB,EAChB,aAAa,
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/leverage/operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ 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.getScopeRefreshIx = void 0;
|
|
6
7
|
exports.getDepositWithLeverageSwapInputs = getDepositWithLeverageSwapInputs;
|
|
7
8
|
exports.getDepositWithLeverageIxns = getDepositWithLeverageIxns;
|
|
8
9
|
exports.getWithdrawWithLeverageSwapInputs = getWithdrawWithLeverageSwapInputs;
|
|
@@ -20,7 +21,7 @@ const calcs_1 = require("./calcs");
|
|
|
20
21
|
const spl_token_1 = require("@solana/spl-token");
|
|
21
22
|
const utils_2 = require("./utils");
|
|
22
23
|
const CreationParameters_1 = require("@kamino-finance/kliquidity-sdk/dist/utils/CreationParameters");
|
|
23
|
-
async function getDepositWithLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint, collTokenMint, depositAmount, priceDebtToColl, slippagePct, obligation, referrer, currentSlot, targetLeverage, selectedTokenMint, kamino, obligationTypeTagOverride,
|
|
24
|
+
async function getDepositWithLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint, collTokenMint, depositAmount, priceDebtToColl, slippagePct, obligation, referrer, currentSlot, targetLeverage, selectedTokenMint, kamino, obligationTypeTagOverride, scopeRefreshConfig, budgetAndPriorityFeeIxs, quoteBufferBps, priceAinB, isKtoken, quoter, useV2Ixs, elevationGroupOverride, }) {
|
|
24
25
|
const collReserve = kaminoMarket.getReserveByMint(collTokenMint);
|
|
25
26
|
const debtReserve = kaminoMarket.getReserveByMint(debtTokenMint);
|
|
26
27
|
const solTokenReserve = kaminoMarket.getReserveByMint(spl_token_1.NATIVE_MINT);
|
|
@@ -44,7 +45,7 @@ async function getDepositWithLeverageSwapInputs({ owner, kaminoMarket, debtToken
|
|
|
44
45
|
throw Error('Obligation type tag not supported for leverage, please use 1 - multiply or 3 - leverage');
|
|
45
46
|
}
|
|
46
47
|
// Build the repay & withdraw collateral tx to get the number of accounts
|
|
47
|
-
const klendIxs = await buildDepositWithLeverageIxns(kaminoMarket, debtReserve, collReserve, owner, obligation ? obligation : obligationType, referrer, currentSlot, depositTokenIsSol,
|
|
48
|
+
const klendIxs = await buildDepositWithLeverageIxns(kaminoMarket, debtReserve, collReserve, owner, obligation ? obligation : obligationType, referrer, currentSlot, depositTokenIsSol, scopeRefreshConfig, calcs, budgetAndPriorityFeeIxs, {
|
|
48
49
|
preActionIxs: [],
|
|
49
50
|
swapIxs: [],
|
|
50
51
|
lookupTables: [],
|
|
@@ -122,7 +123,7 @@ async function getDepositWithLeverageCalcs(depositAmount, selectedTokenIsCollTok
|
|
|
122
123
|
}
|
|
123
124
|
return calcs;
|
|
124
125
|
}
|
|
125
|
-
async function getDepositWithLeverageIxns({ owner, kaminoMarket, debtTokenMint, collTokenMint, depositAmount, priceDebtToColl, slippagePct, obligation, referrer, currentSlot, targetLeverage, selectedTokenMint, kamino, obligationTypeTagOverride,
|
|
126
|
+
async function getDepositWithLeverageIxns({ owner, kaminoMarket, debtTokenMint, collTokenMint, depositAmount, priceDebtToColl, slippagePct, obligation, referrer, currentSlot, targetLeverage, selectedTokenMint, kamino, obligationTypeTagOverride, scopeRefreshConfig, budgetAndPriorityFeeIxs, quoteBufferBps, priceAinB, isKtoken, quoter, swapper, elevationGroupOverride, useV2Ixs, }) {
|
|
126
127
|
const { swapInputs, initialInputs } = await getDepositWithLeverageSwapInputs({
|
|
127
128
|
owner,
|
|
128
129
|
kaminoMarket,
|
|
@@ -138,7 +139,7 @@ async function getDepositWithLeverageIxns({ owner, kaminoMarket, debtTokenMint,
|
|
|
138
139
|
selectedTokenMint,
|
|
139
140
|
kamino,
|
|
140
141
|
obligationTypeTagOverride,
|
|
141
|
-
|
|
142
|
+
scopeRefreshConfig,
|
|
142
143
|
budgetAndPriorityFeeIxs,
|
|
143
144
|
quoteBufferBps,
|
|
144
145
|
priceAinB,
|
|
@@ -170,7 +171,7 @@ async function getDepositWithLeverageIxns({ owner, kaminoMarket, debtTokenMint,
|
|
|
170
171
|
const debtReserve = kaminoMarket.getReserveByMint(debtTokenMint);
|
|
171
172
|
const solTokenReserve = kaminoMarket.getReserveByMint(spl_token_1.NATIVE_MINT);
|
|
172
173
|
const depositTokenIsSol = !solTokenReserve ? false : selectedTokenMint.equals(solTokenReserve.getLiquidityMint());
|
|
173
|
-
const ixs = await buildDepositWithLeverageIxns(kaminoMarket, debtReserve, collReserve, owner, initialInputs.obligation, referrer, currentSlot, depositTokenIsSol,
|
|
174
|
+
const ixs = await buildDepositWithLeverageIxns(kaminoMarket, debtReserve, collReserve, owner, initialInputs.obligation, referrer, currentSlot, depositTokenIsSol, scopeRefreshConfig, initialInputs.calcs, budgetAndPriorityFeeIxs, {
|
|
174
175
|
preActionIxs: [],
|
|
175
176
|
swapIxs: swapIxs,
|
|
176
177
|
lookupTables: lookupTables,
|
|
@@ -182,13 +183,13 @@ async function getDepositWithLeverageIxns({ owner, kaminoMarket, debtTokenMint,
|
|
|
182
183
|
initialInputs,
|
|
183
184
|
};
|
|
184
185
|
}
|
|
185
|
-
async function buildDepositWithLeverageIxns(market, debtReserve, collReserve, owner, obligation, referrer, currentSlot, depositTokenIsSol,
|
|
186
|
+
async function buildDepositWithLeverageIxns(market, debtReserve, collReserve, owner, obligation, referrer, currentSlot, depositTokenIsSol, scopeRefreshConfig, calcs, budgetAndPriorityFeeIxs, swapQuoteIxs, strategy, collIsKtoken, useV2Ixs, elevationGroupOverride) {
|
|
186
187
|
const budgetIxns = budgetAndPriorityFeeIxs || (0, utils_1.getComputeBudgetAndPriorityFeeIxns)(3000000);
|
|
187
188
|
const collTokenMint = collReserve.getLiquidityMint();
|
|
188
189
|
const debtTokenMint = debtReserve.getLiquidityMint();
|
|
189
190
|
const collTokenAta = (0, spl_token_1.getAssociatedTokenAddressSync)(collTokenMint, owner, false, collReserve.getLiquidityTokenProgram());
|
|
190
191
|
const debtTokenAta = (0, spl_token_1.getAssociatedTokenAddressSync)(debtTokenMint, owner, false, debtReserve.getLiquidityTokenProgram());
|
|
191
|
-
// 1. Create atas & budget
|
|
192
|
+
// 1. Create atas & budget ixns
|
|
192
193
|
let mintsToCreateAtas;
|
|
193
194
|
if (collIsKtoken) {
|
|
194
195
|
const secondTokenAta = strategy.strategy.tokenAMint.equals(debtTokenMint)
|
|
@@ -241,10 +242,11 @@ async function buildDepositWithLeverageIxns(market, debtReserve, collReserve, ow
|
|
|
241
242
|
if (depositTokenIsSol) {
|
|
242
243
|
fillWsolAtaIxns.push(...(0, utils_1.getTransferWsolIxns)(owner, (0, spl_token_1.getAssociatedTokenAddressSync)(spl_token_1.NATIVE_MINT, owner), (0, classes_2.numberToLamportsDecimal)(calcs.initDepositInSol, utils_1.SOL_DECIMALS).ceil()));
|
|
243
244
|
}
|
|
245
|
+
const scopeRefreshIxn = await (0, exports.getScopeRefreshIx)(market, collReserve, debtReserve, obligation, scopeRefreshConfig);
|
|
244
246
|
// 2. Flash borrow & repay the collateral amount needed for given leverage
|
|
245
247
|
// if user deposits coll, then we borrow the diff, else we borrow the entire amount
|
|
246
248
|
const { flashBorrowIxn, flashRepayIxn } = (0, instructions_1.getFlashLoanInstructions)({
|
|
247
|
-
borrowIxnIndex: budgetIxns.length + atasAndCreateIxns.length + fillWsolAtaIxns.length,
|
|
249
|
+
borrowIxnIndex: budgetIxns.length + atasAndCreateIxns.length + fillWsolAtaIxns.length + (scopeRefreshIxn.length > 0 ? 1 : 0),
|
|
248
250
|
walletPublicKey: owner,
|
|
249
251
|
lendingMarketAuthority: market.getLendingMarketAuthority(),
|
|
250
252
|
lendingMarketAddress: market.getAddress(),
|
|
@@ -257,33 +259,32 @@ async function buildDepositWithLeverageIxns(market, debtReserve, collReserve, ow
|
|
|
257
259
|
programId: market.programId,
|
|
258
260
|
});
|
|
259
261
|
// 3. Deposit initial tokens + borrowed tokens into reserve
|
|
260
|
-
const scopeRefresh = scopeFeed ? { includeScopeRefresh: true, scopeFeed: scopeFeed } : undefined;
|
|
261
262
|
const kaminoDepositAndBorrowAction = await classes_1.KaminoAction.buildDepositAndBorrowTxns(market, (0, classes_2.numberToLamportsDecimal)(!collIsKtoken ? calcs.collTokenToDeposit : calcs.collTokenToDeposit, collReserve.stats.decimals)
|
|
262
263
|
.floor()
|
|
263
264
|
.toString(), collTokenMint, (0, classes_2.numberToLamportsDecimal)(!collIsKtoken ? calcs.debtTokenToBorrow : calcs.debtTokenToBorrow, debtReserve.stats.decimals)
|
|
264
265
|
.ceil()
|
|
265
|
-
.toString(), debtTokenMint, owner, obligation, useV2Ixs, 0, false, elevationGroupOverride === 0 ? false : true, // emode
|
|
266
|
+
.toString(), debtTokenMint, owner, obligation, useV2Ixs, undefined, 0, false, elevationGroupOverride === 0 ? false : true, // emode
|
|
266
267
|
false, // to be checked and created in a setup tx in the UI
|
|
267
268
|
false, // to be checked and created in a setup tx in the UI
|
|
268
|
-
referrer, currentSlot
|
|
269
|
+
referrer, currentSlot);
|
|
269
270
|
// 4. Swap
|
|
270
271
|
const { swapIxs } = swapQuoteIxs;
|
|
271
272
|
const swapInstructions = (0, utils_1.removeBudgetAndAtaIxns)(swapIxs, []);
|
|
272
273
|
if (!collIsKtoken) {
|
|
273
274
|
return [
|
|
275
|
+
...scopeRefreshIxn,
|
|
274
276
|
...budgetIxns,
|
|
275
277
|
...atasAndCreateIxns.map((x) => x.createAtaIx),
|
|
276
278
|
...fillWsolAtaIxns,
|
|
277
279
|
...[flashBorrowIxn],
|
|
278
|
-
...kaminoDepositAndBorrowAction
|
|
279
|
-
...classes_1.KaminoAction.actionToLendingIxs(kaminoDepositAndBorrowAction),
|
|
280
|
-
...kaminoDepositAndBorrowAction.cleanupIxs,
|
|
280
|
+
...classes_1.KaminoAction.actionToIxs(kaminoDepositAndBorrowAction),
|
|
281
281
|
...swapInstructions,
|
|
282
282
|
...[flashRepayIxn],
|
|
283
283
|
];
|
|
284
284
|
}
|
|
285
285
|
else {
|
|
286
286
|
return [
|
|
287
|
+
...scopeRefreshIxn,
|
|
287
288
|
...budgetIxns,
|
|
288
289
|
...atasAndCreateIxns.map((x) => x.createAtaIx),
|
|
289
290
|
...fillWsolAtaIxns,
|
|
@@ -296,7 +297,7 @@ async function buildDepositWithLeverageIxns(market, debtReserve, collReserve, ow
|
|
|
296
297
|
];
|
|
297
298
|
}
|
|
298
299
|
}
|
|
299
|
-
async function getWithdrawWithLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint, collTokenMint, deposited, borrowed, obligation, referrer, currentSlot, withdrawAmount, priceCollToDebt, slippagePct, isClosingPosition, selectedTokenMint, budgetAndPriorityFeeIxs, kamino,
|
|
300
|
+
async function getWithdrawWithLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint, collTokenMint, deposited, borrowed, obligation, referrer, currentSlot, withdrawAmount, priceCollToDebt, slippagePct, isClosingPosition, selectedTokenMint, budgetAndPriorityFeeIxs, kamino, scopeRefreshConfig, quoteBufferBps, isKtoken, quoter, useV2Ixs, }) {
|
|
300
301
|
const collReserve = kaminoMarket.getReserveByMint(collTokenMint);
|
|
301
302
|
const debtReserve = kaminoMarket.getReserveByMint(debtTokenMint);
|
|
302
303
|
const flashLoanFee = debtReserve.getFlashLoanFee() || new decimal_js_1.default(0);
|
|
@@ -306,7 +307,7 @@ async function getWithdrawWithLeverageSwapInputs({ owner, kaminoMarket, debtToke
|
|
|
306
307
|
const solTokenReserve = kaminoMarket.getReserveByMint(spl_token_1.NATIVE_MINT);
|
|
307
308
|
const depositTokenIsSol = !solTokenReserve ? false : selectedTokenMint.equals(solTokenReserve.getLiquidityMint());
|
|
308
309
|
const calcs = (0, calcs_1.withdrawLeverageCalcs)(kaminoMarket, collReserve, debtReserve, priceCollToDebt, withdrawAmount, deposited, borrowed, currentSlot, isClosingPosition, selectedTokenIsCollToken, selectedTokenMint, obligation, flashLoanFee, slippagePct);
|
|
309
|
-
const klendIxs = await buildWithdrawWithLeverageIxns(kaminoMarket, debtReserve, collReserve, owner, obligation, referrer, currentSlot, isClosingPosition, depositTokenIsSol,
|
|
310
|
+
const klendIxs = await buildWithdrawWithLeverageIxns(kaminoMarket, debtReserve, collReserve, owner, obligation, referrer, currentSlot, isClosingPosition, depositTokenIsSol, scopeRefreshConfig, calcs, budgetAndPriorityFeeIxs, {
|
|
310
311
|
preActionIxs: [],
|
|
311
312
|
swapIxs: [],
|
|
312
313
|
lookupTables: [],
|
|
@@ -341,7 +342,7 @@ async function getWithdrawWithLeverageSwapInputs({ owner, kaminoMarket, debtToke
|
|
|
341
342
|
},
|
|
342
343
|
};
|
|
343
344
|
}
|
|
344
|
-
async function getWithdrawWithLeverageIxns({ owner, kaminoMarket, debtTokenMint, collTokenMint, obligation, deposited, borrowed, referrer, currentSlot, withdrawAmount, priceCollToDebt, slippagePct, isClosingPosition, selectedTokenMint, budgetAndPriorityFeeIxs, kamino,
|
|
345
|
+
async function getWithdrawWithLeverageIxns({ owner, kaminoMarket, debtTokenMint, collTokenMint, obligation, deposited, borrowed, referrer, currentSlot, withdrawAmount, priceCollToDebt, slippagePct, isClosingPosition, selectedTokenMint, budgetAndPriorityFeeIxs, kamino, scopeRefreshConfig, quoteBufferBps, isKtoken, quoter, swapper, useV2Ixs, }) {
|
|
345
346
|
const collReserve = kaminoMarket.getReserveByMint(collTokenMint);
|
|
346
347
|
const debtReserve = kaminoMarket.getReserveByMint(debtTokenMint);
|
|
347
348
|
const solTokenReserve = kaminoMarket.getReserveByMint(spl_token_1.NATIVE_MINT);
|
|
@@ -363,7 +364,7 @@ async function getWithdrawWithLeverageIxns({ owner, kaminoMarket, debtTokenMint,
|
|
|
363
364
|
selectedTokenMint,
|
|
364
365
|
budgetAndPriorityFeeIxs,
|
|
365
366
|
kamino,
|
|
366
|
-
|
|
367
|
+
scopeRefreshConfig,
|
|
367
368
|
quoteBufferBps,
|
|
368
369
|
isKtoken,
|
|
369
370
|
quoter,
|
|
@@ -389,7 +390,7 @@ async function getWithdrawWithLeverageIxns({ owner, kaminoMarket, debtTokenMint,
|
|
|
389
390
|
console.log('Strategy lookup table not found');
|
|
390
391
|
}
|
|
391
392
|
}
|
|
392
|
-
const ixs = await buildWithdrawWithLeverageIxns(kaminoMarket, debtReserve, collReserve, owner, obligation, referrer, currentSlot, isClosingPosition, depositTokenIsSol,
|
|
393
|
+
const ixs = await buildWithdrawWithLeverageIxns(kaminoMarket, debtReserve, collReserve, owner, obligation, referrer, currentSlot, isClosingPosition, depositTokenIsSol, scopeRefreshConfig, initialInputs.calcs, budgetAndPriorityFeeIxs, {
|
|
393
394
|
preActionIxs: [],
|
|
394
395
|
swapIxs,
|
|
395
396
|
lookupTables,
|
|
@@ -402,7 +403,7 @@ async function getWithdrawWithLeverageIxns({ owner, kaminoMarket, debtTokenMint,
|
|
|
402
403
|
initialInputs: initialInputs,
|
|
403
404
|
};
|
|
404
405
|
}
|
|
405
|
-
async function buildWithdrawWithLeverageIxns(market, debtReserve, collReserve, owner, obligation, referrer, currentSlot, isClosingPosition, depositTokenIsSol,
|
|
406
|
+
async function buildWithdrawWithLeverageIxns(market, debtReserve, collReserve, owner, obligation, referrer, currentSlot, isClosingPosition, depositTokenIsSol, scopeRefreshConfig, calcs, budgetAndPriorityFeeIxs, swapQuoteIxs, strategy, collIsKtoken, useV2Ixs) {
|
|
406
407
|
const collTokenMint = collReserve.getLiquidityMint();
|
|
407
408
|
const debtTokenMint = debtReserve.getLiquidityMint();
|
|
408
409
|
const debtTokenAta = (0, spl_token_1.getAssociatedTokenAddressSync)(debtTokenMint, owner, false, debtReserve.getLiquidityTokenProgram());
|
|
@@ -461,7 +462,7 @@ async function buildWithdrawWithLeverageIxns(market, debtReserve, collReserve, o
|
|
|
461
462
|
closeWsolAtaIxns.push((0, spl_token_1.createCloseAccountInstruction)(wsolAta, owner, owner, [], spl_token_1.TOKEN_PROGRAM_ID));
|
|
462
463
|
}
|
|
463
464
|
const budgetIxns = budgetAndPriorityFeeIxs || (0, utils_1.getComputeBudgetAndPriorityFeeIxns)(3000000);
|
|
464
|
-
// TODO:
|
|
465
|
+
// TODO: Mihai/Marius check if we can improve this logic and not convert any SOL
|
|
465
466
|
// This is here so that we have enough wsol to repay in case the kAB swapped to sol after estimates is not enough
|
|
466
467
|
const fillWsolAtaIxns = [];
|
|
467
468
|
if (debtTokenMint.equals(spl_token_1.NATIVE_MINT)) {
|
|
@@ -469,11 +470,12 @@ async function buildWithdrawWithLeverageIxns(market, debtReserve, collReserve, o
|
|
|
469
470
|
const balanceToWrap = halfSolBalance < 0.1 ? halfSolBalance : 0.1;
|
|
470
471
|
fillWsolAtaIxns.push(...(0, utils_1.getTransferWsolIxns)(owner, (0, spl_token_1.getAssociatedTokenAddressSync)(spl_token_1.NATIVE_MINT, owner), (0, classes_2.numberToLamportsDecimal)(balanceToWrap, utils_1.SOL_DECIMALS).ceil()));
|
|
471
472
|
}
|
|
473
|
+
const scopeRefreshIxn = await (0, exports.getScopeRefreshIx)(market, collReserve, debtReserve, obligation, scopeRefreshConfig);
|
|
472
474
|
// 2. Prepare the flash borrow and flash repay amounts and ixns
|
|
473
475
|
// We borrow exactly how much we need to repay
|
|
474
476
|
// and repay that + flash amount fee
|
|
475
477
|
const { flashBorrowIxn, flashRepayIxn } = (0, instructions_1.getFlashLoanInstructions)({
|
|
476
|
-
borrowIxnIndex: budgetIxns.length + atasAndCreateIxns.length + fillWsolAtaIxns.length,
|
|
478
|
+
borrowIxnIndex: budgetIxns.length + atasAndCreateIxns.length + fillWsolAtaIxns.length + (scopeRefreshIxn.length > 0 ? 1 : 0),
|
|
477
479
|
walletPublicKey: owner,
|
|
478
480
|
lendingMarketAuthority: market.getLendingMarketAuthority(),
|
|
479
481
|
lendingMarketAddress: market.getAddress(),
|
|
@@ -485,27 +487,26 @@ async function buildWithdrawWithLeverageIxns(market, debtReserve, collReserve, o
|
|
|
485
487
|
referrerTokenState: market.programId,
|
|
486
488
|
programId: market.programId,
|
|
487
489
|
});
|
|
488
|
-
//
|
|
490
|
+
// 3. Repay borrowed tokens and Withdraw tokens from reserve that will be swapped to repay flash loan
|
|
489
491
|
const repayAndWithdrawAction = await classes_1.KaminoAction.buildRepayAndWithdrawTxns(market, isClosingPosition ? utils_1.U64_MAX : (0, classes_2.numberToLamportsDecimal)(calcs.repayAmount, debtReserve.stats.decimals).floor().toString(), debtTokenMint, isClosingPosition
|
|
490
492
|
? utils_1.U64_MAX
|
|
491
|
-
: (0, classes_2.numberToLamportsDecimal)(calcs.depositTokenWithdrawAmount, collReserve.stats.decimals).ceil().toString(), collTokenMint, owner, currentSlot, obligation, useV2Ixs, 0, false, false, // to be checked and created in a setup tx in the UI (won't be the case for withdraw anyway as this would be created in deposit)
|
|
493
|
+
: (0, classes_2.numberToLamportsDecimal)(calcs.depositTokenWithdrawAmount, collReserve.stats.decimals).ceil().toString(), collTokenMint, owner, currentSlot, obligation, useV2Ixs, undefined, 0, false, false, // to be checked and created in a setup tx in the UI (won't be the case for withdraw anyway as this would be created in deposit)
|
|
492
494
|
false, // to be checked and created in a setup tx in the UI (won't be the case for withdraw anyway as this would be created in deposit)
|
|
493
|
-
isClosingPosition, referrer
|
|
495
|
+
isClosingPosition, referrer);
|
|
494
496
|
const swapInstructions = (0, utils_1.removeBudgetAndAtaIxns)(swapQuoteIxs.swapIxs, []);
|
|
495
497
|
return [
|
|
498
|
+
...scopeRefreshIxn,
|
|
496
499
|
...budgetIxns,
|
|
497
500
|
...atasAndCreateIxns.map((x) => x.createAtaIx),
|
|
498
501
|
...fillWsolAtaIxns,
|
|
499
502
|
...[flashBorrowIxn],
|
|
500
|
-
...repayAndWithdrawAction
|
|
501
|
-
...classes_1.KaminoAction.actionToLendingIxs(repayAndWithdrawAction),
|
|
502
|
-
...repayAndWithdrawAction.cleanupIxs,
|
|
503
|
+
...classes_1.KaminoAction.actionToIxs(repayAndWithdrawAction),
|
|
503
504
|
...swapInstructions,
|
|
504
505
|
...[flashRepayIxn],
|
|
505
506
|
...closeWsolAtaIxns,
|
|
506
507
|
];
|
|
507
508
|
}
|
|
508
|
-
async function getAdjustLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint, collTokenMint, obligation, depositedLamports, borrowedLamports, referrer, currentSlot, targetLeverage, priceCollToDebt, priceDebtToColl, slippagePct, budgetAndPriorityFeeIxs, kamino,
|
|
509
|
+
async function getAdjustLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint, collTokenMint, obligation, depositedLamports, borrowedLamports, referrer, currentSlot, targetLeverage, priceCollToDebt, priceDebtToColl, slippagePct, budgetAndPriorityFeeIxs, kamino, scopeRefreshConfig, quoteBufferBps, isKtoken, quoter, useV2Ixs, }) {
|
|
509
510
|
const collReserve = kaminoMarket.getReserveByMint(collTokenMint);
|
|
510
511
|
const debtReserve = kaminoMarket.getReserveByMint(debtTokenMint);
|
|
511
512
|
const deposited = (0, classes_1.lamportsToNumberDecimal)(depositedLamports, collReserve.stats.decimals);
|
|
@@ -516,14 +517,11 @@ async function getAdjustLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint,
|
|
|
516
517
|
const currentLeverage = obligation.refreshedStats.leverage;
|
|
517
518
|
const isDepositViaLeverage = targetLeverage.gte(new decimal_js_1.default(currentLeverage));
|
|
518
519
|
let flashLoanFee;
|
|
519
|
-
let borrowFee;
|
|
520
520
|
if (isDepositViaLeverage) {
|
|
521
521
|
flashLoanFee = collReserve.getFlashLoanFee() || new decimal_js_1.default(0);
|
|
522
|
-
borrowFee = collReserve.getBorrowFee() || new decimal_js_1.default(0);
|
|
523
522
|
}
|
|
524
523
|
else {
|
|
525
524
|
flashLoanFee = debtReserve.getFlashLoanFee() || new decimal_js_1.default(0);
|
|
526
|
-
borrowFee = debtReserve.getBorrowFee() || new decimal_js_1.default(0);
|
|
527
525
|
}
|
|
528
526
|
const { adjustDepositPosition, adjustBorrowPosition } = (0, calcs_1.calcAdjustAmounts)({
|
|
529
527
|
currentDepositPosition: deposited,
|
|
@@ -531,7 +529,6 @@ async function getAdjustLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint,
|
|
|
531
529
|
targetLeverage: targetLeverage,
|
|
532
530
|
priceCollToDebt: priceCollToDebt,
|
|
533
531
|
flashLoanFee: new decimal_js_1.default(flashLoanFee),
|
|
534
|
-
borrowFee,
|
|
535
532
|
});
|
|
536
533
|
const isDeposit = adjustDepositPosition.gte(0) && adjustBorrowPosition.gte(0);
|
|
537
534
|
if (isDepositViaLeverage !== isDeposit) {
|
|
@@ -540,7 +537,7 @@ async function getAdjustLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint,
|
|
|
540
537
|
if (isDeposit) {
|
|
541
538
|
const calcs = await (0, calcs_1.adjustDepositLeverageCalcs)(kaminoMarket, owner, debtReserve, adjustDepositPosition, adjustBorrowPosition, priceDebtToColl, flashLoanFee, slippagePct, collIsKtoken);
|
|
542
539
|
// Build the repay & withdraw collateral tx to get the number of accounts
|
|
543
|
-
const klendIxs = await buildIncreaseLeverageIxns(owner, kaminoMarket, collTokenMint, debtTokenMint, obligation, referrer, currentSlot, calcs, strategy,
|
|
540
|
+
const klendIxs = await buildIncreaseLeverageIxns(owner, kaminoMarket, collTokenMint, debtTokenMint, obligation, referrer, currentSlot, calcs, strategy, scopeRefreshConfig, collIsKtoken, {
|
|
544
541
|
preActionIxs: [],
|
|
545
542
|
swapIxs: [],
|
|
546
543
|
lookupTables: [],
|
|
@@ -560,7 +557,6 @@ async function getAdjustLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint,
|
|
|
560
557
|
targetLeverage: targetLeverage,
|
|
561
558
|
priceCollToDebt: new decimal_js_1.default(1).div(swapQuote.priceAInB),
|
|
562
559
|
flashLoanFee: new decimal_js_1.default(flashLoanFee),
|
|
563
|
-
borrowFee,
|
|
564
560
|
});
|
|
565
561
|
const calcsQuotePrice = await (0, calcs_1.adjustDepositLeverageCalcs)(kaminoMarket, owner, debtReserve, adjustDepositPositionQuotePrice, adjustBorrowPositionQuotePrice, swapQuote.priceAInB, flashLoanFee, slippagePct, collIsKtoken);
|
|
566
562
|
const swapInputAmountQuotePrice = (0, classes_2.numberToLamportsDecimal)(!collIsKtoken ? calcsQuotePrice.borrowAmount : calcsQuotePrice.amountToFlashBorrowDebt, debtReserve.state.liquidity.mintDecimals.toNumber()).ceil();
|
|
@@ -590,7 +586,7 @@ async function getAdjustLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint,
|
|
|
590
586
|
}
|
|
591
587
|
else {
|
|
592
588
|
const calcs = (0, calcs_1.adjustWithdrawLeverageCalcs)(adjustDepositPosition, adjustBorrowPosition, flashLoanFee, slippagePct);
|
|
593
|
-
const klendIxs = await buildDecreaseLeverageIxns(owner, kaminoMarket, collTokenMint, debtTokenMint, obligation, referrer, currentSlot, calcs, strategy,
|
|
589
|
+
const klendIxs = await buildDecreaseLeverageIxns(owner, kaminoMarket, collTokenMint, debtTokenMint, obligation, referrer, currentSlot, calcs, strategy, scopeRefreshConfig, collIsKtoken, {
|
|
594
590
|
preActionIxs: [],
|
|
595
591
|
swapIxs: [],
|
|
596
592
|
lookupTables: [],
|
|
@@ -610,7 +606,6 @@ async function getAdjustLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint,
|
|
|
610
606
|
targetLeverage: targetLeverage,
|
|
611
607
|
priceCollToDebt: swapQuote.priceAInB,
|
|
612
608
|
flashLoanFee: new decimal_js_1.default(flashLoanFee),
|
|
613
|
-
borrowFee,
|
|
614
609
|
});
|
|
615
610
|
const calcsQuotePrice = (0, calcs_1.adjustWithdrawLeverageCalcs)(adjustDepositPositionQuotePrice, adjustBorrowPositionQuotePrice, flashLoanFee, slippagePct);
|
|
616
611
|
const swapInputAmountQuotePrice = (0, classes_2.numberToLamportsDecimal)(calcsQuotePrice.withdrawAmountWithSlippageAndFlashLoanFee, collReserve.state.liquidity.mintDecimals.toNumber()).ceil();
|
|
@@ -635,7 +630,7 @@ async function getAdjustLeverageSwapInputs({ owner, kaminoMarket, debtTokenMint,
|
|
|
635
630
|
};
|
|
636
631
|
}
|
|
637
632
|
}
|
|
638
|
-
async function getAdjustLeverageIxns({ owner, kaminoMarket, debtTokenMint, collTokenMint, obligation, depositedLamports, borrowedLamports, referrer, currentSlot, targetLeverage, priceCollToDebt, priceDebtToColl, slippagePct, budgetAndPriorityFeeIxs, kamino,
|
|
633
|
+
async function getAdjustLeverageIxns({ owner, kaminoMarket, debtTokenMint, collTokenMint, obligation, depositedLamports, borrowedLamports, referrer, currentSlot, targetLeverage, priceCollToDebt, priceDebtToColl, slippagePct, budgetAndPriorityFeeIxs, kamino, scopeRefreshConfig, quoteBufferBps, priceAinB, isKtoken, quoter, swapper, useV2Ixs, }) {
|
|
639
634
|
const { swapInputs, initialInputs } = await getAdjustLeverageSwapInputs({
|
|
640
635
|
owner,
|
|
641
636
|
kaminoMarket,
|
|
@@ -652,7 +647,7 @@ async function getAdjustLeverageIxns({ owner, kaminoMarket, debtTokenMint, collT
|
|
|
652
647
|
slippagePct,
|
|
653
648
|
budgetAndPriorityFeeIxs,
|
|
654
649
|
kamino,
|
|
655
|
-
|
|
650
|
+
scopeRefreshConfig,
|
|
656
651
|
quoteBufferBps,
|
|
657
652
|
priceAinB,
|
|
658
653
|
isKtoken,
|
|
@@ -673,7 +668,7 @@ async function getAdjustLeverageIxns({ owner, kaminoMarket, debtTokenMint, collT
|
|
|
673
668
|
}
|
|
674
669
|
const { swapIxs, lookupTables } = await depositSwapper(swapInputs, initialInputs.klendAccounts, initialInputs.swapQuote);
|
|
675
670
|
// TODO: marius why are we not using both adjustDepositPosition & adjustBorrowPosition
|
|
676
|
-
const ixs = await buildIncreaseLeverageIxns(owner, kaminoMarket, collTokenMint, debtTokenMint, obligation, referrer, currentSlot, initialInputs.calcs, initialInputs.strategy,
|
|
671
|
+
const ixs = await buildIncreaseLeverageIxns(owner, kaminoMarket, collTokenMint, debtTokenMint, obligation, referrer, currentSlot, initialInputs.calcs, initialInputs.strategy, scopeRefreshConfig, initialInputs.collIsKtoken, {
|
|
677
672
|
preActionIxs: [],
|
|
678
673
|
swapIxs,
|
|
679
674
|
lookupTables,
|
|
@@ -699,7 +694,7 @@ async function getAdjustLeverageIxns({ owner, kaminoMarket, debtTokenMint, collT
|
|
|
699
694
|
}
|
|
700
695
|
// 5. Get swap ixns
|
|
701
696
|
const { swapIxs, lookupTables } = await withdrawSwapper(swapInputs, initialInputs.klendAccounts, initialInputs.swapQuote);
|
|
702
|
-
const ixs = await buildDecreaseLeverageIxns(owner, kaminoMarket, collTokenMint, debtTokenMint, obligation, referrer, currentSlot, initialInputs.calcs, initialInputs.strategy,
|
|
697
|
+
const ixs = await buildDecreaseLeverageIxns(owner, kaminoMarket, collTokenMint, debtTokenMint, obligation, referrer, currentSlot, initialInputs.calcs, initialInputs.strategy, scopeRefreshConfig, initialInputs.collIsKtoken, {
|
|
703
698
|
preActionIxs: [],
|
|
704
699
|
swapIxs,
|
|
705
700
|
lookupTables,
|
|
@@ -715,7 +710,7 @@ async function getAdjustLeverageIxns({ owner, kaminoMarket, debtTokenMint, collT
|
|
|
715
710
|
/**
|
|
716
711
|
* Deposit and borrow tokens if leverage increased
|
|
717
712
|
*/
|
|
718
|
-
async function buildIncreaseLeverageIxns(owner, kaminoMarket, collTokenMint, debtTokenMint, obligation, referrer, currentSlot, calcs, strategy,
|
|
713
|
+
async function buildIncreaseLeverageIxns(owner, kaminoMarket, collTokenMint, debtTokenMint, obligation, referrer, currentSlot, calcs, strategy, scopeRefreshConfig, collIsKtoken, swapQuoteIxs, budgetAndPriorityFeeIxns, useV2Ixs) {
|
|
719
714
|
const collReserve = kaminoMarket.getReserveByMint(collTokenMint);
|
|
720
715
|
const debtReserve = kaminoMarket.getReserveByMint(debtTokenMint);
|
|
721
716
|
const debtTokenAta = (0, spl_token_1.getAssociatedTokenAddressSync)(debtTokenMint, owner, false, debtReserve.getLiquidityTokenProgram());
|
|
@@ -770,9 +765,10 @@ async function buildIncreaseLeverageIxns(owner, kaminoMarket, collTokenMint, deb
|
|
|
770
765
|
];
|
|
771
766
|
}
|
|
772
767
|
const atasAndCreateIxns = (0, utils_1.createAtasIdempotent)(owner, mintsToCreateAtas);
|
|
768
|
+
const scopeRefreshIxn = await (0, exports.getScopeRefreshIx)(kaminoMarket, collReserve, debtReserve, obligation, scopeRefreshConfig);
|
|
773
769
|
// 2. Create borrow flash loan instruction
|
|
774
770
|
const { flashBorrowIxn, flashRepayIxn } = (0, instructions_1.getFlashLoanInstructions)({
|
|
775
|
-
borrowIxnIndex: budgetIxns.length + atasAndCreateIxns.length, // TODO: how about user metadata ixns
|
|
771
|
+
borrowIxnIndex: budgetIxns.length + atasAndCreateIxns.length + (scopeRefreshIxn.length > 0 ? 1 : 0), // TODO: how about user metadata ixns
|
|
776
772
|
walletPublicKey: owner,
|
|
777
773
|
lendingMarketAuthority: kaminoMarket.getLendingMarketAuthority(),
|
|
778
774
|
lendingMarketAddress: kaminoMarket.getAddress(),
|
|
@@ -784,39 +780,33 @@ async function buildIncreaseLeverageIxns(owner, kaminoMarket, collTokenMint, deb
|
|
|
784
780
|
referrerTokenState: kaminoMarket.programId,
|
|
785
781
|
programId: kaminoMarket.programId,
|
|
786
782
|
});
|
|
787
|
-
const depositAction = await classes_1.KaminoAction.buildDepositTxns(kaminoMarket, (0, classes_2.numberToLamportsDecimal)(calcs.adjustDepositPosition, collReserve.stats.decimals).floor().toString(), collTokenMint, owner, obligation, useV2Ixs, 0, false, false, false, // to be checked and create in a setup tx in the UI (won't be the case for adjust anyway as this would be created in deposit)
|
|
783
|
+
const depositAction = await classes_1.KaminoAction.buildDepositTxns(kaminoMarket, (0, classes_2.numberToLamportsDecimal)(calcs.adjustDepositPosition, collReserve.stats.decimals).floor().toString(), collTokenMint, owner, obligation, useV2Ixs, undefined, 0, false, false, false, // to be checked and create in a setup tx in the UI (won't be the case for adjust anyway as this would be created in deposit)
|
|
788
784
|
false, // to be checked and create in a setup tx in the UI (won't be the case for adjust anyway as this would be created in deposit)
|
|
789
|
-
referrer, currentSlot
|
|
785
|
+
referrer, currentSlot);
|
|
790
786
|
// 4. Borrow tokens in borrow token reserve that will be swapped to repay flash loan
|
|
791
|
-
const borrowAction = await classes_1.KaminoAction.buildBorrowTxns(kaminoMarket, (0, classes_2.numberToLamportsDecimal)(calcs.borrowAmount, debtReserve.stats.decimals).ceil().toString(), debtTokenMint, owner, obligation, useV2Ixs, 0, false, false, false, // to be checked and create in a setup tx in the UI (won't be the case for adjust anyway as this would be created in deposit)
|
|
787
|
+
const borrowAction = await classes_1.KaminoAction.buildBorrowTxns(kaminoMarket, (0, classes_2.numberToLamportsDecimal)(calcs.borrowAmount, debtReserve.stats.decimals).ceil().toString(), debtTokenMint, owner, obligation, useV2Ixs, undefined, 0, false, false, false, // to be checked and create in a setup tx in the UI (won't be the case for adjust anyway as this would be created in deposit)
|
|
792
788
|
false, // to be checked and create in a setup tx in the UI (won't be the case for adjust anyway as this would be created in deposit)
|
|
793
|
-
referrer, currentSlot
|
|
789
|
+
referrer, currentSlot);
|
|
794
790
|
const swapInstructions = (0, utils_1.removeBudgetAndAtaIxns)(swapQuoteIxs.swapIxs, []);
|
|
795
791
|
const ixs = !collIsKtoken
|
|
796
792
|
? [
|
|
793
|
+
...scopeRefreshIxn,
|
|
797
794
|
...budgetIxns,
|
|
798
795
|
...atasAndCreateIxns.map((x) => x.createAtaIx),
|
|
799
796
|
...[flashBorrowIxn],
|
|
800
|
-
...depositAction
|
|
801
|
-
...
|
|
802
|
-
...depositAction.cleanupIxs,
|
|
803
|
-
...borrowAction.setupIxs,
|
|
804
|
-
...borrowAction.lendingIxs,
|
|
805
|
-
...borrowAction.cleanupIxs,
|
|
797
|
+
...classes_1.KaminoAction.actionToIxs(depositAction),
|
|
798
|
+
...classes_1.KaminoAction.actionToIxs(borrowAction),
|
|
806
799
|
...swapInstructions,
|
|
807
800
|
...[flashRepayIxn],
|
|
808
801
|
]
|
|
809
802
|
: [
|
|
803
|
+
...scopeRefreshIxn,
|
|
810
804
|
...budgetIxns,
|
|
811
805
|
...atasAndCreateIxns.map((x) => x.createAtaIx),
|
|
812
806
|
...[flashBorrowIxn],
|
|
813
807
|
...swapInstructions,
|
|
814
|
-
...depositAction
|
|
815
|
-
...
|
|
816
|
-
...depositAction.cleanupIxs,
|
|
817
|
-
...borrowAction.setupIxs,
|
|
818
|
-
...borrowAction.lendingIxs,
|
|
819
|
-
...borrowAction.cleanupIxs,
|
|
808
|
+
...classes_1.KaminoAction.actionToIxs(depositAction),
|
|
809
|
+
...classes_1.KaminoAction.actionToIxs(borrowAction),
|
|
820
810
|
...[flashRepayIxn],
|
|
821
811
|
];
|
|
822
812
|
return ixs;
|
|
@@ -824,7 +814,7 @@ async function buildIncreaseLeverageIxns(owner, kaminoMarket, collTokenMint, deb
|
|
|
824
814
|
/**
|
|
825
815
|
* Withdraw and repay tokens if leverage decreased
|
|
826
816
|
*/
|
|
827
|
-
async function buildDecreaseLeverageIxns(owner, kaminoMarket, collTokenMint, debtTokenMint, obligation, referrer, currentSlot, calcs, strategy,
|
|
817
|
+
async function buildDecreaseLeverageIxns(owner, kaminoMarket, collTokenMint, debtTokenMint, obligation, referrer, currentSlot, calcs, strategy, scopeRefreshConfig, collIsKtoken, swapQuoteIxs, budgetAndPriorityFeeIxns, useV2Ixs) {
|
|
828
818
|
const collReserve = kaminoMarket.getReserveByMint(collTokenMint);
|
|
829
819
|
const debtReserve = kaminoMarket.getReserveByMint(debtTokenMint);
|
|
830
820
|
const debtTokenAta = (0, spl_token_1.getAssociatedTokenAddressSync)(debtTokenMint, owner, false, debtReserve.getLiquidityTokenProgram());
|
|
@@ -889,9 +879,10 @@ async function buildDecreaseLeverageIxns(owner, kaminoMarket, collTokenMint, deb
|
|
|
889
879
|
const balanceToWrap = halfSolBalance < 0.1 ? halfSolBalance : 0.1;
|
|
890
880
|
fillWsolAtaIxns.push(...(0, utils_1.getTransferWsolIxns)(owner, wsolAta, (0, classes_2.numberToLamportsDecimal)(balanceToWrap, debtReserve.stats.decimals).ceil()));
|
|
891
881
|
}
|
|
882
|
+
const scopeRefreshIxn = await (0, exports.getScopeRefreshIx)(kaminoMarket, collReserve, debtReserve, obligation, scopeRefreshConfig);
|
|
892
883
|
// 3. Flash borrow & repay amount to repay (debt)
|
|
893
884
|
const { flashBorrowIxn, flashRepayIxn } = (0, instructions_1.getFlashLoanInstructions)({
|
|
894
|
-
borrowIxnIndex: budgetIxns.length + atasAndCreateIxns.length + fillWsolAtaIxns.length,
|
|
885
|
+
borrowIxnIndex: budgetIxns.length + atasAndCreateIxns.length + fillWsolAtaIxns.length + (scopeRefreshIxn.length > 0 ? 1 : 0),
|
|
895
886
|
walletPublicKey: owner,
|
|
896
887
|
lendingMarketAuthority: kaminoMarket.getLendingMarketAuthority(),
|
|
897
888
|
lendingMarketAddress: kaminoMarket.getAddress(),
|
|
@@ -904,30 +895,45 @@ async function buildDecreaseLeverageIxns(owner, kaminoMarket, collTokenMint, deb
|
|
|
904
895
|
programId: kaminoMarket.programId,
|
|
905
896
|
});
|
|
906
897
|
// 4. Actually do the repay of the flash borrowed amounts
|
|
907
|
-
const
|
|
908
|
-
const repayAction = await classes_1.KaminoAction.buildRepayTxns(kaminoMarket, (0, classes_2.numberToLamportsDecimal)(decimal_js_1.default.abs(calcs.adjustBorrowPosition), debtReserve.stats.decimals).floor().toString(), debtTokenMint, owner, obligation, useV2Ixs, currentSlot, undefined, 0, false, false, false, // to be checked and create in a setup tx in the UI (won't be the case for adjust anyway as this would be created in deposit)
|
|
898
|
+
const repayAction = await classes_1.KaminoAction.buildRepayTxns(kaminoMarket, (0, classes_2.numberToLamportsDecimal)(decimal_js_1.default.abs(calcs.adjustBorrowPosition), debtReserve.stats.decimals).floor().toString(), debtTokenMint, owner, obligation, useV2Ixs, undefined, currentSlot, undefined, 0, false, false, false, // to be checked and create in a setup tx in the UI (won't be the case for adjust anyway as this would be created in deposit)
|
|
909
899
|
false, // to be checked and create in a setup tx in the UI (won't be the case for adjust anyway as this would be created in deposit)
|
|
910
|
-
referrer
|
|
900
|
+
referrer);
|
|
911
901
|
// 6. Withdraw collateral (a little bit more to be able to pay for the slippage on swap)
|
|
912
|
-
const withdrawAction = await classes_1.KaminoAction.buildWithdrawTxns(kaminoMarket, (0, classes_2.numberToLamportsDecimal)(calcs.withdrawAmountWithSlippageAndFlashLoanFee, collReserve.stats.decimals).ceil().toString(), collTokenMint, owner, obligation, useV2Ixs, 0, false, false, false, // to be checked and create in a setup tx in the UI (won't be the case for adjust anyway as this would be created in deposit)
|
|
902
|
+
const withdrawAction = await classes_1.KaminoAction.buildWithdrawTxns(kaminoMarket, (0, classes_2.numberToLamportsDecimal)(calcs.withdrawAmountWithSlippageAndFlashLoanFee, collReserve.stats.decimals).ceil().toString(), collTokenMint, owner, obligation, useV2Ixs, undefined, 0, false, false, false, // to be checked and create in a setup tx in the UI (won't be the case for adjust anyway as this would be created in deposit)
|
|
913
903
|
false, // to be checked and create in a setup tx in the UI (won't be the case for adjust anyway as this would be created in deposit)
|
|
914
|
-
referrer, currentSlot
|
|
904
|
+
referrer, currentSlot);
|
|
915
905
|
const swapInstructions = (0, utils_1.removeBudgetAndAtaIxns)(swapQuoteIxs.swapIxs, []);
|
|
916
906
|
const ixns = [
|
|
907
|
+
...scopeRefreshIxn,
|
|
917
908
|
...budgetIxns,
|
|
918
909
|
...atasAndCreateIxns.map((x) => x.createAtaIx),
|
|
919
910
|
...fillWsolAtaIxns,
|
|
920
911
|
...[flashBorrowIxn],
|
|
921
|
-
...repayAction
|
|
922
|
-
...
|
|
923
|
-
...repayAction.cleanupIxs,
|
|
924
|
-
...withdrawAction.setupIxs,
|
|
925
|
-
...withdrawAction.lendingIxs,
|
|
926
|
-
...withdrawAction.cleanupIxs,
|
|
912
|
+
...classes_1.KaminoAction.actionToIxs(repayAction),
|
|
913
|
+
...classes_1.KaminoAction.actionToIxs(withdrawAction),
|
|
927
914
|
...swapInstructions,
|
|
928
915
|
...[flashRepayIxn],
|
|
929
916
|
...closeWsolAtaIxns,
|
|
930
917
|
];
|
|
931
918
|
return ixns;
|
|
932
919
|
}
|
|
920
|
+
const getScopeRefreshIx = async (market, collReserve, debtReserve, obligation, scopeRefreshConfig) => {
|
|
921
|
+
const allReserves = obligation && (0, classes_1.isKaminoObligation)(obligation)
|
|
922
|
+
? new utils_1.PublicKeySet([
|
|
923
|
+
...obligation.getDeposits().map((x) => x.reserveAddress),
|
|
924
|
+
...obligation.getBorrows().map((x) => x.reserveAddress),
|
|
925
|
+
collReserve.address,
|
|
926
|
+
debtReserve.address,
|
|
927
|
+
]).toArray()
|
|
928
|
+
: new utils_1.PublicKeySet([collReserve.address, debtReserve.address]).toArray();
|
|
929
|
+
const tokenIds = (0, classes_1.getTokenIdsForScopeRefresh)(market, allReserves);
|
|
930
|
+
const scopeRefreshIxns = [];
|
|
931
|
+
if (tokenIds.length > 0 && scopeRefreshConfig) {
|
|
932
|
+
scopeRefreshIxns.push(await scopeRefreshConfig.scope.refreshPriceListIx({
|
|
933
|
+
feed: scopeRefreshConfig.scopeFeed,
|
|
934
|
+
}, tokenIds));
|
|
935
|
+
}
|
|
936
|
+
return scopeRefreshIxns;
|
|
937
|
+
};
|
|
938
|
+
exports.getScopeRefreshIx = getScopeRefreshIx;
|
|
933
939
|
//# sourceMappingURL=operations.js.map
|