@meteora-ag/dlmm 1.6.0-rc.16 → 1.6.0-rc.18

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/index.mjs CHANGED
@@ -19,7 +19,7 @@ import {
19
19
  SystemProgram as SystemProgram2,
20
20
  Transaction
21
21
  } from "@solana/web3.js";
22
- import Decimal7 from "decimal.js";
22
+ import Decimal8 from "decimal.js";
23
23
 
24
24
  // src/dlmm/constants/index.ts
25
25
  import { LAMPORTS_PER_SOL, PublicKey } from "@solana/web3.js";
@@ -12992,26 +12992,20 @@ import BN18 from "bn.js";
12992
12992
 
12993
12993
  // src/dlmm/helpers/rebalance/liquidity_strategy/bidAsk.ts
12994
12994
  import BN15 from "bn.js";
12995
- function findMinY0(amountY, minDeltaId, maxDeltaId) {
12996
- const binCount = maxDeltaId.sub(minDeltaId).addn(1);
12997
- const totalWeight = binCount.mul(binCount.addn(1)).divn(2);
12998
- return amountY.div(totalWeight);
12999
- }
13000
- function findBaseDeltaY(amountY, minDeltaId, maxDeltaId, minY0) {
12995
+ function findBaseDeltaY(amountY, minDeltaId, maxDeltaId) {
13001
12996
  if (minDeltaId.gt(maxDeltaId) || amountY.lte(new BN15(0))) {
13002
12997
  return new BN15(0);
13003
12998
  }
13004
12999
  if (minDeltaId.eq(maxDeltaId)) {
13005
13000
  return amountY;
13006
13001
  }
13007
- const m1 = minDeltaId.neg();
13002
+ const m1 = minDeltaId.neg().subn(1);
13008
13003
  const m2 = maxDeltaId.neg();
13009
13004
  const b = m2.neg().mul(m1.sub(m2).addn(1));
13010
13005
  const c = m1.mul(m1.addn(1)).divn(2);
13011
13006
  const d = m2.mul(m2.subn(1)).divn(2);
13012
13007
  const a = b.add(c.sub(d));
13013
- const e = minY0;
13014
- return amountY.sub(e).div(a);
13008
+ return amountY.div(a);
13015
13009
  }
13016
13010
  function findY0AndDeltaY(amountY, minDeltaId, maxDeltaId, activeId) {
13017
13011
  if (minDeltaId.gt(maxDeltaId) || amountY.isZero()) {
@@ -13020,9 +13014,8 @@ function findY0AndDeltaY(amountY, minDeltaId, maxDeltaId, activeId) {
13020
13014
  delta: new BN15(0)
13021
13015
  };
13022
13016
  }
13023
- const minY0 = findMinY0(amountY, minDeltaId, maxDeltaId);
13024
- let baseDeltaY = findBaseDeltaY(amountY, minDeltaId, maxDeltaId, minY0);
13025
- const y0 = baseDeltaY.neg().mul(maxDeltaId).add(minY0);
13017
+ let baseDeltaY = findBaseDeltaY(amountY, minDeltaId, maxDeltaId);
13018
+ const y0 = baseDeltaY.neg().mul(maxDeltaId).add(baseDeltaY);
13026
13019
  while (true) {
13027
13020
  const amountInBins = getAmountInBinsBidSide(
13028
13021
  activeId,
@@ -13044,26 +13037,14 @@ function findY0AndDeltaY(amountY, minDeltaId, maxDeltaId, activeId) {
13044
13037
  }
13045
13038
  }
13046
13039
  }
13047
- function findMinX0(amountX, minDeltaId, maxDeltaId, activeId, binStep) {
13048
- const minBinId = activeId.add(minDeltaId);
13049
- const maxBinId = activeId.add(maxDeltaId);
13050
- let totalWeight = new BN15(0);
13051
- for (let binId = minBinId.toNumber(); binId <= maxBinId.toNumber(); binId++) {
13052
- const binDelta = binId - minBinId.toNumber() + 1;
13053
- const binPrice = getQPriceFromId(new BN15(binId), binStep);
13054
- const weight = new BN15(binDelta).mul(binPrice);
13055
- totalWeight = totalWeight.add(weight);
13056
- }
13057
- return amountX.shln(SCALE_OFFSET).div(totalWeight);
13058
- }
13059
- function findBaseDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId, minX0) {
13040
+ function findBaseDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId) {
13060
13041
  if (minDeltaId.gt(maxDeltaId) || amountX.lte(new BN15(0))) {
13061
13042
  return new BN15(0);
13062
13043
  }
13063
13044
  let b = new BN15(0);
13064
13045
  let c = new BN15(0);
13065
13046
  let m1 = minDeltaId;
13066
- let m2 = maxDeltaId;
13047
+ let m2 = maxDeltaId.addn(1);
13067
13048
  for (let m = m1.toNumber(); m <= m2.toNumber(); m++) {
13068
13049
  const binId = activeId.addn(m);
13069
13050
  const pm = getQPriceFromId(binId.neg(), binStep);
@@ -13072,8 +13053,7 @@ function findBaseDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId, minX
13072
13053
  const cDelta = new BN15(m).mul(pm);
13073
13054
  c = c.add(cDelta);
13074
13055
  }
13075
- console.log(amountX.sub(minX0).shln(SCALE_OFFSET).div(c.sub(b)).toString());
13076
- return amountX.sub(minX0).shln(SCALE_OFFSET).div(c.sub(b));
13056
+ return amountX.shln(SCALE_OFFSET).div(c.sub(b));
13077
13057
  }
13078
13058
  function findX0AndDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId) {
13079
13059
  if (minDeltaId.gt(maxDeltaId) || amountX.lte(new BN15(0)) || amountX.isZero()) {
@@ -13082,18 +13062,14 @@ function findX0AndDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId) {
13082
13062
  delta: new BN15(0)
13083
13063
  };
13084
13064
  }
13085
- const minX0 = findMinX0(amountX, minDeltaId, maxDeltaId, activeId, binStep);
13086
13065
  let baseDeltaX = findBaseDeltaX(
13087
13066
  amountX,
13088
13067
  minDeltaId,
13089
13068
  maxDeltaId,
13090
13069
  binStep,
13091
- activeId,
13092
- minX0
13070
+ activeId
13093
13071
  );
13094
- console.log("\u{1F680} ~ baseDeltaX:", baseDeltaX.toString());
13095
- const x0 = minDeltaId.neg().mul(baseDeltaX).add(minX0);
13096
- console.log("\u{1F680} ~ x0:", x0.toString());
13072
+ const x0 = minDeltaId.neg().mul(baseDeltaX).add(baseDeltaX);
13097
13073
  while (true) {
13098
13074
  const amountInBins = getAmountInBinsAskSide(
13099
13075
  activeId,
@@ -13123,6 +13099,58 @@ var BidAskStrategyParameterBuilder = class {
13123
13099
  findYParameters(amountY, minDeltaId, maxDeltaId, activeId) {
13124
13100
  return findY0AndDeltaY(amountY, minDeltaId, maxDeltaId, activeId);
13125
13101
  }
13102
+ suggestBalancedXParametersFromY(activeId, binStep, favorXInActiveBin, minDeltaId, maxDeltaId, amountY) {
13103
+ const deltaX = amountY.div(
13104
+ maxDeltaId.addn(1).mul(maxDeltaId.addn(2)).divn(2)
13105
+ );
13106
+ const x0 = minDeltaId.neg().mul(deltaX).add(deltaX);
13107
+ const totalAmountX = toAmountIntoBins(
13108
+ activeId,
13109
+ minDeltaId,
13110
+ maxDeltaId,
13111
+ deltaX,
13112
+ new BN15(0),
13113
+ x0,
13114
+ new BN15(0),
13115
+ binStep,
13116
+ favorXInActiveBin
13117
+ ).reduce((acc, bin) => {
13118
+ return acc.add(bin.amountX);
13119
+ }, new BN15(0));
13120
+ return {
13121
+ base: x0,
13122
+ delta: deltaX,
13123
+ amountX: totalAmountX
13124
+ };
13125
+ }
13126
+ suggestBalancedYParametersFromX(activeId, binStep, favorXInActiveBin, minDeltaId, maxDeltaId, amountXInQuoteValue) {
13127
+ const m1 = minDeltaId.neg().subn(1);
13128
+ const m2 = maxDeltaId.neg();
13129
+ const a1 = m2.neg().mul(m1.sub(m2).addn(1));
13130
+ const a2 = m1.mul(m1.addn(1)).divn(2);
13131
+ const a3 = m2.mul(m2.subn(1)).divn(2);
13132
+ const a = a1.add(a2.sub(a3));
13133
+ const deltaY = amountXInQuoteValue.div(a);
13134
+ const y0 = deltaY.neg().mul(m2).add(deltaY);
13135
+ const amountY = toAmountIntoBins(
13136
+ activeId,
13137
+ minDeltaId,
13138
+ maxDeltaId,
13139
+ new BN15(0),
13140
+ deltaY,
13141
+ new BN15(0),
13142
+ y0,
13143
+ binStep,
13144
+ favorXInActiveBin
13145
+ ).reduce((acc, bin) => {
13146
+ return acc.add(bin.amountY);
13147
+ }, new BN15(0));
13148
+ return {
13149
+ base: y0,
13150
+ delta: deltaY,
13151
+ amountY
13152
+ };
13153
+ }
13126
13154
  };
13127
13155
 
13128
13156
  // src/dlmm/helpers/rebalance/liquidity_strategy/curve.ts
@@ -13227,6 +13255,56 @@ var CurveStrategyParameterBuilder = class {
13227
13255
  findYParameters(amountY, minDeltaId, maxDeltaId, activeId) {
13228
13256
  return findY0AndDeltaY2(amountY, minDeltaId, maxDeltaId, activeId);
13229
13257
  }
13258
+ suggestBalancedXParametersFromY(activeId, binStep, favorXInActiveBin, minDeltaId, maxDeltaId, amountY) {
13259
+ const x0 = amountY.muln(2).div(maxDeltaId.addn(1));
13260
+ const deltaX = x0.neg().div(maxDeltaId);
13261
+ const totalAmountX = toAmountIntoBins(
13262
+ activeId,
13263
+ minDeltaId,
13264
+ maxDeltaId,
13265
+ deltaX,
13266
+ new BN16(0),
13267
+ x0,
13268
+ new BN16(0),
13269
+ binStep,
13270
+ favorXInActiveBin
13271
+ ).reduce((acc, bin) => {
13272
+ return acc.add(bin.amountX);
13273
+ }, new BN16(0));
13274
+ return {
13275
+ base: x0,
13276
+ delta: deltaX,
13277
+ amountX: totalAmountX
13278
+ };
13279
+ }
13280
+ suggestBalancedYParametersFromX(activeId, binStep, favorXInActiveBin, minDeltaId, maxDeltaId, amountXInQuoteValue) {
13281
+ const m1 = minDeltaId.neg();
13282
+ const m2 = maxDeltaId.neg();
13283
+ const a1 = m1.sub(m2).addn(1);
13284
+ const a2 = m1.mul(m1.addn(1)).divn(2);
13285
+ const a3 = m2.mul(m2.subn(1)).divn(2);
13286
+ const a = m1.sub(a3.sub(a2)).div(m1);
13287
+ const y0 = amountXInQuoteValue.div(a);
13288
+ const deltaY = y0.neg().div(m1);
13289
+ const amountY = toAmountIntoBins(
13290
+ activeId,
13291
+ minDeltaId,
13292
+ maxDeltaId,
13293
+ new BN16(0),
13294
+ deltaY,
13295
+ new BN16(0),
13296
+ y0,
13297
+ binStep,
13298
+ favorXInActiveBin
13299
+ ).reduce((acc, bin) => {
13300
+ return acc.add(bin.amountY);
13301
+ }, new BN16(0));
13302
+ return {
13303
+ base: y0,
13304
+ delta: deltaY,
13305
+ amountY
13306
+ };
13307
+ }
13230
13308
  };
13231
13309
 
13232
13310
  // src/dlmm/helpers/rebalance/liquidity_strategy/spot.ts
@@ -13290,9 +13368,52 @@ var SpotStrategyParameterBuilder = class {
13290
13368
  delta: new BN17(0)
13291
13369
  };
13292
13370
  }
13371
+ suggestBalancedXParametersFromY(activeId, binStep, favorXInActiveBin, minDeltaId, maxDeltaId, amountY) {
13372
+ const x0 = amountY.div(maxDeltaId.addn(1));
13373
+ const totalAmountX = toAmountIntoBins(
13374
+ activeId,
13375
+ minDeltaId,
13376
+ maxDeltaId,
13377
+ new BN17(0),
13378
+ new BN17(0),
13379
+ x0,
13380
+ new BN17(0),
13381
+ binStep,
13382
+ favorXInActiveBin
13383
+ ).reduce((acc, bin) => {
13384
+ return acc.add(bin.amountX);
13385
+ }, new BN17(0));
13386
+ return {
13387
+ base: new BN17(x0.toString()),
13388
+ delta: new BN17(0),
13389
+ amountX: totalAmountX
13390
+ };
13391
+ }
13392
+ suggestBalancedYParametersFromX(activeId, binStep, favorXInActiveBin, minDeltaId, maxDeltaId, amountXInQuoteValue) {
13393
+ const y0 = amountXInQuoteValue.div(maxDeltaId.sub(minDeltaId).addn(1));
13394
+ const amountY = toAmountIntoBins(
13395
+ activeId,
13396
+ minDeltaId,
13397
+ maxDeltaId,
13398
+ new BN17(0),
13399
+ new BN17(0),
13400
+ new BN17(0),
13401
+ y0,
13402
+ binStep,
13403
+ favorXInActiveBin
13404
+ ).reduce((acc, bin) => {
13405
+ return acc.add(bin.amountY);
13406
+ }, new BN17(0));
13407
+ return {
13408
+ base: y0,
13409
+ delta: new BN17(0),
13410
+ amountY
13411
+ };
13412
+ }
13293
13413
  };
13294
13414
 
13295
13415
  // src/dlmm/helpers/rebalance/liquidity_strategy/index.ts
13416
+ import Decimal7 from "decimal.js";
13296
13417
  function getLiquidityStrategyParameterBuilder(strategyType) {
13297
13418
  switch (strategyType) {
13298
13419
  case 0 /* Spot */:
@@ -14159,11 +14280,11 @@ var DLMM = class {
14159
14280
  return positionsMap;
14160
14281
  }
14161
14282
  static getPricePerLamport(tokenXDecimal, tokenYDecimal, price) {
14162
- return new Decimal7(price).mul(new Decimal7(10 ** (tokenYDecimal - tokenXDecimal))).toString();
14283
+ return new Decimal8(price).mul(new Decimal8(10 ** (tokenYDecimal - tokenXDecimal))).toString();
14163
14284
  }
14164
14285
  static getBinIdFromPrice(price, binStep, min) {
14165
- const binStepNum = new Decimal7(binStep).div(new Decimal7(BASIS_POINT_MAX));
14166
- const binId = new Decimal7(price).log().dividedBy(new Decimal7(1).add(binStepNum).log());
14286
+ const binStepNum = new Decimal8(binStep).div(new Decimal8(BASIS_POINT_MAX));
14287
+ const binId = new Decimal8(price).log().dividedBy(new Decimal8(1).add(binStepNum).log());
14167
14288
  return (min ? binId.floor() : binId.ceil()).toNumber();
14168
14289
  }
14169
14290
  /**
@@ -14775,8 +14896,8 @@ var DLMM = class {
14775
14896
  */
14776
14897
  static calculateFeeInfo(baseFactor, binStep, baseFeePowerFactor) {
14777
14898
  const baseFeeRate = new BN21(baseFactor).mul(new BN21(binStep)).mul(new BN21(10)).mul(new BN21(10).pow(new BN21(baseFeePowerFactor ?? 0)));
14778
- const baseFeeRatePercentage = new Decimal7(baseFeeRate.toString()).mul(new Decimal7(100)).div(new Decimal7(FEE_PRECISION.toString()));
14779
- const maxFeeRatePercentage = new Decimal7(MAX_FEE_RATE.toString()).mul(new Decimal7(100)).div(new Decimal7(FEE_PRECISION.toString()));
14899
+ const baseFeeRatePercentage = new Decimal8(baseFeeRate.toString()).mul(new Decimal8(100)).div(new Decimal8(FEE_PRECISION.toString()));
14900
+ const maxFeeRatePercentage = new Decimal8(MAX_FEE_RATE.toString()).mul(new Decimal8(100)).div(new Decimal8(FEE_PRECISION.toString()));
14780
14901
  return {
14781
14902
  baseFeeRatePercentage,
14782
14903
  maxFeeRatePercentage
@@ -14794,7 +14915,7 @@ var DLMM = class {
14794
14915
  this.lbPair.binStep,
14795
14916
  this.lbPair.parameters.baseFeePowerFactor
14796
14917
  );
14797
- const protocolFeePercentage = new Decimal7(protocolShare.toString()).mul(new Decimal7(100)).div(new Decimal7(BASIS_POINT_MAX));
14918
+ const protocolFeePercentage = new Decimal8(protocolShare.toString()).mul(new Decimal8(100)).div(new Decimal8(BASIS_POINT_MAX));
14798
14919
  return {
14799
14920
  baseFeeRatePercentage,
14800
14921
  maxFeeRatePercentage,
@@ -14826,7 +14947,7 @@ var DLMM = class {
14826
14947
  sParameters3,
14827
14948
  vParameterClone
14828
14949
  );
14829
- return new Decimal7(totalFee.toString()).div(new Decimal7(FEE_PRECISION.toString())).mul(100);
14950
+ return new Decimal8(totalFee.toString()).div(new Decimal8(FEE_PRECISION.toString())).mul(100);
14830
14951
  }
14831
14952
  /**
14832
14953
  * The function `getEmissionRate` returns the emission rates for two rewards.
@@ -14839,8 +14960,8 @@ var DLMM = class {
14839
14960
  ({ rewardRate, rewardDurationEnd }) => now > rewardDurationEnd.toNumber() ? void 0 : rewardRate
14840
14961
  );
14841
14962
  return {
14842
- rewardOne: rewardOneEmissionRate ? new Decimal7(rewardOneEmissionRate.toString()).div(PRECISION) : void 0,
14843
- rewardTwo: rewardTwoEmissionRate ? new Decimal7(rewardTwoEmissionRate.toString()).div(PRECISION) : void 0
14963
+ rewardOne: rewardOneEmissionRate ? new Decimal8(rewardOneEmissionRate.toString()).div(PRECISION) : void 0,
14964
+ rewardTwo: rewardTwoEmissionRate ? new Decimal8(rewardTwoEmissionRate.toString()).div(PRECISION) : void 0
14844
14965
  };
14845
14966
  }
14846
14967
  /**
@@ -14933,8 +15054,8 @@ var DLMM = class {
14933
15054
  * @returns {string} real price of bin
14934
15055
  */
14935
15056
  fromPricePerLamport(pricePerLamport) {
14936
- return new Decimal7(pricePerLamport).div(
14937
- new Decimal7(
15057
+ return new Decimal8(pricePerLamport).div(
15058
+ new Decimal8(
14938
15059
  10 ** (this.tokenY.mint.decimals - this.tokenX.mint.decimals)
14939
15060
  )
14940
15061
  ).toString();
@@ -15092,12 +15213,12 @@ var DLMM = class {
15092
15213
  const lowerBinArrayIndex = binIdToBinArrayIndex(currentMinBinId);
15093
15214
  const upperBinArrayIndex = binIdToBinArrayIndex(currentMaxBinId);
15094
15215
  const binArraysCount = (await this.binArraysToBeCreate(lowerBinArrayIndex, upperBinArrayIndex)).length;
15095
- const binArrayCost = new Decimal7(binArraysCount).mul(
15096
- new Decimal7(BIN_ARRAY_FEE)
15216
+ const binArrayCost = new Decimal8(binArraysCount).mul(
15217
+ new Decimal8(BIN_ARRAY_FEE)
15097
15218
  );
15098
15219
  return {
15099
- positionExtendCost: new Decimal7(positionExtendCost).div(
15100
- new Decimal7(LAMPORTS_PER_SOL2)
15220
+ positionExtendCost: new Decimal8(positionExtendCost).div(
15221
+ new Decimal8(LAMPORTS_PER_SOL2)
15101
15222
  ),
15102
15223
  binArrayCost
15103
15224
  };
@@ -16366,7 +16487,7 @@ var DLMM = class {
16366
16487
  activeId.toNumber(),
16367
16488
  this.lbPair.binStep
16368
16489
  );
16369
- const priceImpact = startPrice.sub(endPrice).abs().div(startPrice).mul(new Decimal7(100));
16490
+ const priceImpact = startPrice.sub(endPrice).abs().div(startPrice).mul(new Decimal8(100));
16370
16491
  actualInAmount = calculateTransferFeeIncludedAmount(
16371
16492
  actualInAmount.add(feeAmount),
16372
16493
  inMint,
@@ -16553,7 +16674,7 @@ var DLMM = class {
16553
16674
  ),
16554
16675
  swapForY
16555
16676
  );
16556
- const priceImpact = new Decimal7(totalOutAmount.toString()).sub(new Decimal7(outAmountWithoutSlippage.toString())).div(new Decimal7(outAmountWithoutSlippage.toString())).mul(new Decimal7(100)).abs();
16677
+ const priceImpact = new Decimal8(totalOutAmount.toString()).sub(new Decimal8(outAmountWithoutSlippage.toString())).div(new Decimal8(outAmountWithoutSlippage.toString())).mul(new Decimal8(100)).abs();
16557
16678
  const endPrice = getPriceOfBinByBinId(
16558
16679
  lastFilledActiveBinId.toNumber(),
16559
16680
  this.lbPair.binStep
@@ -17162,11 +17283,11 @@ var DLMM = class {
17162
17283
  let totalBinArraysCount = new BN21(0);
17163
17284
  let totalBinArraysLamports = new BN21(0);
17164
17285
  let binArrayBitmapLamports = new BN21(0);
17165
- const toLamportMultiplier = new Decimal7(
17286
+ const toLamportMultiplier = new Decimal8(
17166
17287
  10 ** (this.tokenY.mint.decimals - this.tokenX.mint.decimals)
17167
17288
  );
17168
- const minPricePerLamport = new Decimal7(minPrice).mul(toLamportMultiplier);
17169
- const maxPricePerLamport = new Decimal7(maxPrice).mul(toLamportMultiplier);
17289
+ const minPricePerLamport = new Decimal8(minPrice).mul(toLamportMultiplier);
17290
+ const maxPricePerLamport = new Decimal8(maxPrice).mul(toLamportMultiplier);
17170
17291
  const minBinId = new BN21(
17171
17292
  DLMM.getBinIdFromPrice(minPricePerLamport, this.lbPair.binStep, false)
17172
17293
  );
@@ -18157,7 +18278,6 @@ var DLMM = class {
18157
18278
  shouldClaimReward: true,
18158
18279
  pairAddress: this.pubkey
18159
18280
  });
18160
- console.log("\u{1F680} ~ DLMM ~ rebalancePosition:", rebalancePosition);
18161
18281
  const rebalanceStrategyBuilder = new BalancedStrategyBuilder(
18162
18282
  new BN21(rebalancePosition.lbPair.activeId),
18163
18283
  new BN21(rebalancePosition.lbPair.binStep),
@@ -18183,10 +18303,65 @@ var DLMM = class {
18183
18303
  withdraws,
18184
18304
  deposits
18185
18305
  );
18186
- console.log("\u{1F680} ~ DLMM ~ simulationResult:", simulationResult);
18306
+ const binArrayQuoteResult = await this.quoteBinArrayAccountsRentalCost(
18307
+ simulationResult.depositParams,
18308
+ simulationResult.withdrawParams,
18309
+ new BN21(rebalancePosition.lbPair.activeId)
18310
+ );
18187
18311
  return {
18188
18312
  rebalancePosition,
18189
- simulationResult
18313
+ simulationResult,
18314
+ ...binArrayQuoteResult
18315
+ };
18316
+ }
18317
+ async quoteBinArrayAccountsRentalCost(deposits, withdraws, activeId) {
18318
+ const { binArrayBitmap, binArrayIndexes } = getRebalanceBinArrayIndexesAndBitmapCoverage(
18319
+ deposits,
18320
+ withdraws,
18321
+ activeId.toNumber(),
18322
+ this.pubkey,
18323
+ this.program.programId
18324
+ );
18325
+ const binArrayPublicKeys = binArrayIndexes.map((index) => {
18326
+ const [binArrayPubkey] = deriveBinArray(
18327
+ this.pubkey,
18328
+ index,
18329
+ this.program.programId
18330
+ );
18331
+ return binArrayPubkey;
18332
+ });
18333
+ const accountPublicKeys = [...binArrayPublicKeys];
18334
+ if (!binArrayBitmap.equals(PublicKey10.default)) {
18335
+ accountPublicKeys.push(binArrayBitmap);
18336
+ }
18337
+ const accounts = await chunkedGetMultipleAccountInfos(
18338
+ this.program.provider.connection,
18339
+ binArrayPublicKeys
18340
+ );
18341
+ const binArrayAccounts = accounts.splice(0, binArrayPublicKeys.length);
18342
+ let binArrayCount = 0;
18343
+ let bitmapExtensionCost = 0;
18344
+ const binArraySet = /* @__PURE__ */ new Set();
18345
+ for (let i = 0; i < binArrayAccounts.length; i++) {
18346
+ const binArrayAccount = binArrayAccounts[i];
18347
+ const binArrayPubkey = binArrayPublicKeys[i];
18348
+ if (!binArrayAccount) {
18349
+ binArrayCount++;
18350
+ } else {
18351
+ binArraySet.add(binArrayPubkey.toBase58());
18352
+ }
18353
+ }
18354
+ if (!binArrayBitmap.equals(PublicKey10.default)) {
18355
+ const bitmapAccount = accounts.pop();
18356
+ if (!bitmapAccount) {
18357
+ bitmapExtensionCost = BIN_ARRAY_BITMAP_FEE;
18358
+ }
18359
+ }
18360
+ return {
18361
+ binArrayCost: binArrayCount * BIN_ARRAY_FEE,
18362
+ binArrayCount,
18363
+ binArrayExistence: binArraySet,
18364
+ bitmapExtensionCost
18190
18365
  };
18191
18366
  }
18192
18367
  /**
@@ -18216,9 +18391,15 @@ var DLMM = class {
18216
18391
  withdraws,
18217
18392
  deposits
18218
18393
  );
18394
+ const binArrayQuoteResult = await this.quoteBinArrayAccountsRentalCost(
18395
+ simulationResult.depositParams,
18396
+ simulationResult.withdrawParams,
18397
+ new BN21(rebalancePosition.lbPair.activeId)
18398
+ );
18219
18399
  return {
18220
18400
  rebalancePosition,
18221
- simulationResult
18401
+ simulationResult,
18402
+ ...binArrayQuoteResult
18222
18403
  };
18223
18404
  }
18224
18405
  /**
@@ -18296,12 +18477,10 @@ var DLMM = class {
18296
18477
  chunk,
18297
18478
  activeId
18298
18479
  );
18299
- console.log("\u{1F680} ~ DLMM ~ chunkedDepositParams:", chunkedDepositParams);
18300
18480
  const chunkedWithdrawParams = splitWithdrawParamsForChunk(
18301
18481
  withdrawParams,
18302
18482
  chunk
18303
18483
  );
18304
- console.log("\u{1F680} ~ DLMM ~ chunkedWithdrawParams:", chunkedWithdrawParams);
18305
18484
  if (chunkedDepositParams.length === 0 && chunkedWithdrawParams.length === 0)
18306
18485
  continue;
18307
18486
  const { slices, accounts: transferHookAccounts } = this.getPotentialToken2022IxDataAndAccounts(0 /* Liquidity */);
@@ -18667,8 +18846,8 @@ var DLMM = class {
18667
18846
  if (!bins.length)
18668
18847
  return null;
18669
18848
  const positionData = [];
18670
- let totalXAmount = new Decimal7(0);
18671
- let totalYAmount = new Decimal7(0);
18849
+ let totalXAmount = new Decimal8(0);
18850
+ let totalYAmount = new Decimal8(0);
18672
18851
  const ZERO = new BN21(0);
18673
18852
  let feeX = ZERO;
18674
18853
  let feeY = ZERO;
@@ -18679,8 +18858,8 @@ var DLMM = class {
18679
18858
  const posBinRewardInfo = positionRewardInfos[idx];
18680
18859
  const positionXAmount = binSupply.eq(ZERO) ? ZERO : posShare.mul(bin.xAmount).div(binSupply);
18681
18860
  const positionYAmount = binSupply.eq(ZERO) ? ZERO : posShare.mul(bin.yAmount).div(binSupply);
18682
- totalXAmount = totalXAmount.add(new Decimal7(positionXAmount.toString()));
18683
- totalYAmount = totalYAmount.add(new Decimal7(positionYAmount.toString()));
18861
+ totalXAmount = totalXAmount.add(new Decimal8(positionXAmount.toString()));
18862
+ totalYAmount = totalYAmount.add(new Decimal8(positionYAmount.toString()));
18684
18863
  const feeInfo = feeInfos[idx];
18685
18864
  const newFeeX = mulShr(
18686
18865
  posShares[idx].shrn(SCALE_OFFSET),
@@ -18844,7 +19023,7 @@ var DLMM = class {
18844
19023
  rewardPerTokenStored: [ZERO, ZERO],
18845
19024
  price: pricePerLamport,
18846
19025
  version: 2,
18847
- pricePerToken: new Decimal7(pricePerLamport).mul(new Decimal7(10 ** (baseTokenDecimal - quoteTokenDecimal))).toString()
19026
+ pricePerToken: new Decimal8(pricePerLamport).mul(new Decimal8(10 ** (baseTokenDecimal - quoteTokenDecimal))).toString()
18848
19027
  });
18849
19028
  } else {
18850
19029
  const bin = binArray.bins[i];
@@ -18858,7 +19037,7 @@ var DLMM = class {
18858
19037
  rewardPerTokenStored: bin.rewardPerTokenStored,
18859
19038
  price: pricePerLamport,
18860
19039
  version: binArray.version,
18861
- pricePerToken: new Decimal7(pricePerLamport).mul(new Decimal7(10 ** (baseTokenDecimal - quoteTokenDecimal))).toString()
19040
+ pricePerToken: new Decimal8(pricePerLamport).mul(new Decimal8(10 ** (baseTokenDecimal - quoteTokenDecimal))).toString()
18862
19041
  });
18863
19042
  }
18864
19043
  }