@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.
Files changed (65) hide show
  1. package/dist/classes/action.d.ts +23 -23
  2. package/dist/classes/action.d.ts.map +1 -1
  3. package/dist/classes/action.js +122 -195
  4. package/dist/classes/action.js.map +1 -1
  5. package/dist/classes/index.d.ts +1 -0
  6. package/dist/classes/index.d.ts.map +1 -1
  7. package/dist/classes/index.js +1 -0
  8. package/dist/classes/index.js.map +1 -1
  9. package/dist/classes/manager.d.ts +6 -1
  10. package/dist/classes/manager.d.ts.map +1 -1
  11. package/dist/classes/manager.js +16 -1
  12. package/dist/classes/manager.js.map +1 -1
  13. package/dist/classes/market.d.ts +3 -3
  14. package/dist/classes/market.d.ts.map +1 -1
  15. package/dist/classes/market.js +30 -16
  16. package/dist/classes/market.js.map +1 -1
  17. package/dist/classes/obligation.d.ts +2 -0
  18. package/dist/classes/obligation.d.ts.map +1 -1
  19. package/dist/classes/obligation.js +5 -0
  20. package/dist/classes/obligation.js.map +1 -1
  21. package/dist/classes/vault.js +1 -1
  22. package/dist/classes/vault.js.map +1 -1
  23. package/dist/lending_operations/repay_with_collateral_operations.d.ts +4 -4
  24. package/dist/lending_operations/repay_with_collateral_operations.d.ts.map +1 -1
  25. package/dist/lending_operations/repay_with_collateral_operations.js +10 -8
  26. package/dist/lending_operations/repay_with_collateral_operations.js.map +1 -1
  27. package/dist/lending_operations/swap_collateral_operations.d.ts +2 -2
  28. package/dist/lending_operations/swap_collateral_operations.d.ts.map +1 -1
  29. package/dist/lending_operations/swap_collateral_operations.js +11 -6
  30. package/dist/lending_operations/swap_collateral_operations.js.map +1 -1
  31. package/dist/leverage/calcs.d.ts +5 -10
  32. package/dist/leverage/calcs.d.ts.map +1 -1
  33. package/dist/leverage/calcs.js +6 -13
  34. package/dist/leverage/calcs.js.map +1 -1
  35. package/dist/leverage/operations.d.ts +9 -7
  36. package/dist/leverage/operations.d.ts.map +1 -1
  37. package/dist/leverage/operations.js +78 -72
  38. package/dist/leverage/operations.js.map +1 -1
  39. package/dist/leverage/types.d.ts +4 -4
  40. package/dist/leverage/types.d.ts.map +1 -1
  41. package/dist/utils/ObligationType.d.ts +1 -1
  42. package/dist/utils/ObligationType.d.ts.map +1 -1
  43. package/dist/utils/managerTypes.d.ts.map +1 -1
  44. package/dist/utils/managerTypes.js +7 -52
  45. package/dist/utils/managerTypes.js.map +1 -1
  46. package/dist/utils/oracle.d.ts +3 -3
  47. package/dist/utils/oracle.d.ts.map +1 -1
  48. package/dist/utils/oracle.js +4 -3
  49. package/dist/utils/oracle.js.map +1 -1
  50. package/package.json +2 -2
  51. package/src/classes/action.ts +143 -211
  52. package/src/classes/index.ts +1 -0
  53. package/src/classes/manager.ts +32 -1
  54. package/src/classes/market.ts +34 -25
  55. package/src/classes/obligation.ts +6 -0
  56. package/src/classes/vault.ts +1 -1
  57. package/src/client.ts +8 -3
  58. package/src/lending_operations/repay_with_collateral_operations.ts +15 -11
  59. package/src/lending_operations/swap_collateral_operations.ts +19 -7
  60. package/src/leverage/calcs.ts +2 -18
  61. package/src/leverage/operations.ts +114 -72
  62. package/src/leverage/types.ts +4 -4
  63. package/src/utils/ObligationType.ts +1 -1
  64. package/src/utils/managerTypes.ts +10 -52
  65. package/src/utils/oracle.ts +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/leverage/operations.ts"],"names":[],"mappings":"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"}
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, scopeFeed, budgetAndPriorityFeeIxs, quoteBufferBps, priceAinB, isKtoken, quoter, useV2Ixs, elevationGroupOverride, }) {
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, scopeFeed, calcs, budgetAndPriorityFeeIxs, {
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, scopeFeed, budgetAndPriorityFeeIxs, quoteBufferBps, priceAinB, isKtoken, quoter, swapper, elevationGroupOverride, useV2Ixs, }) {
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
- scopeFeed,
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, scopeFeed, initialInputs.calcs, budgetAndPriorityFeeIxs, {
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, scopeFeed, calcs, budgetAndPriorityFeeIxs, swapQuoteIxs, strategy, collIsKtoken, useV2Ixs, elevationGroupOverride) {
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 txns
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, scopeRefresh);
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.setupIxs,
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, scopeFeed, quoteBufferBps, isKtoken, quoter, useV2Ixs, }) {
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, scopeFeed, calcs, budgetAndPriorityFeeIxs, {
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, scopeFeed, quoteBufferBps, isKtoken, quoter, swapper, useV2Ixs, }) {
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
- scopeFeed,
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, scopeFeed, initialInputs.calcs, budgetAndPriorityFeeIxs, {
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, scopeFeed, calcs, budgetAndPriorityFeeIxs, swapQuoteIxs, strategy, collIsKtoken, useV2Ixs) {
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: Might be worth removing as it's only needed for Ktokens
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
- // 6. Repay borrowed tokens and Withdraw tokens from reserve that will be swapped to repay flash loan
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, { includeScopeRefresh: true, scopeFeed: scopeFeed });
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.setupIxs,
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, scopeFeed, quoteBufferBps, isKtoken, quoter, useV2Ixs, }) {
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, scopeFeed, collIsKtoken, {
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, scopeFeed, collIsKtoken, {
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, scopeFeed, quoteBufferBps, priceAinB, isKtoken, quoter, swapper, useV2Ixs, }) {
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
- scopeFeed,
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, scopeFeed, initialInputs.collIsKtoken, {
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, scopeFeed, initialInputs.collIsKtoken, {
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, scopeFeed, collIsKtoken, swapQuoteIxs, budgetAndPriorityFeeIxns, useV2Ixs) {
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, { includeScopeRefresh: true, scopeFeed: scopeFeed });
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, { includeScopeRefresh: true, scopeFeed: scopeFeed });
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.setupIxs,
801
- ...depositAction.lendingIxs,
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.setupIxs,
815
- ...depositAction.lendingIxs,
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, scopeFeed, collIsKtoken, swapQuoteIxs, budgetAndPriorityFeeIxns, useV2Ixs) {
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 scopeRefresh = scopeFeed ? { includeScopeRefresh: true, scopeFeed: scopeFeed } : undefined;
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, scopeRefresh);
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, { includeScopeRefresh: true, scopeFeed: scopeFeed });
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.setupIxs,
922
- ...repayAction.lendingIxs,
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