@meteora-ag/cp-amm-sdk 1.0.1-rc.12 → 1.0.1-rc.13

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.js CHANGED
@@ -22,12 +22,8 @@ var __async = (__this, __arguments, generator) => {
22
22
 
23
23
  // src/CpAmm.ts
24
24
  var _anchor = require('@coral-xyz/anchor');
25
-
26
-
27
-
28
25
  var _spltoken = require('@solana/spl-token');
29
26
  var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant);
30
- var _decimaljs = require('decimal.js'); var _decimaljs2 = _interopRequireDefault(_decimaljs);
31
27
 
32
28
  // src/idl/cp_amm.json
33
29
  var cp_amm_default = {
@@ -6288,71 +6284,7 @@ function deriveEventAuthority(programId) {
6288
6284
  );
6289
6285
  }
6290
6286
 
6291
- // src/math/index.ts
6292
-
6293
-
6294
-
6295
- // src/types.ts
6296
- var Rounding = /* @__PURE__ */ ((Rounding2) => {
6297
- Rounding2[Rounding2["Up"] = 0] = "Up";
6298
- Rounding2[Rounding2["Down"] = 1] = "Down";
6299
- return Rounding2;
6300
- })(Rounding || {});
6301
- var ActivationPoint = /* @__PURE__ */ ((ActivationPoint2) => {
6302
- ActivationPoint2[ActivationPoint2["Timestamp"] = 0] = "Timestamp";
6303
- ActivationPoint2[ActivationPoint2["Slot"] = 1] = "Slot";
6304
- return ActivationPoint2;
6305
- })(ActivationPoint || {});
6306
- var FeeSchedulerMode = /* @__PURE__ */ ((FeeSchedulerMode2) => {
6307
- FeeSchedulerMode2[FeeSchedulerMode2["Linear"] = 0] = "Linear";
6308
- FeeSchedulerMode2[FeeSchedulerMode2["Exponential"] = 1] = "Exponential";
6309
- return FeeSchedulerMode2;
6310
- })(FeeSchedulerMode || {});
6311
- var CollectFeeMode = /* @__PURE__ */ ((CollectFeeMode2) => {
6312
- CollectFeeMode2[CollectFeeMode2["BothToken"] = 0] = "BothToken";
6313
- CollectFeeMode2[CollectFeeMode2["OnlyB"] = 1] = "OnlyB";
6314
- return CollectFeeMode2;
6315
- })(CollectFeeMode || {});
6316
- var TradeDirection = /* @__PURE__ */ ((TradeDirection2) => {
6317
- TradeDirection2[TradeDirection2["AtoB"] = 0] = "AtoB";
6318
- TradeDirection2[TradeDirection2["BtoA"] = 1] = "BtoA";
6319
- return TradeDirection2;
6320
- })(TradeDirection || {});
6321
- var ActivationType = /* @__PURE__ */ ((ActivationType2) => {
6322
- ActivationType2[ActivationType2["Slot"] = 0] = "Slot";
6323
- ActivationType2[ActivationType2["Timestamp"] = 1] = "Timestamp";
6324
- return ActivationType2;
6325
- })(ActivationType || {});
6326
-
6327
- // src/math/index.ts
6328
- function shlDiv(x, y, offset, rounding) {
6329
- const scale = new (0, _anchor.BN)(1).shln(offset);
6330
- return mulDiv(x, scale, y, rounding);
6331
- }
6332
- function mulDiv(x, y, denominator, rounding) {
6333
- const { div, mod } = x.mul(y).divmod(denominator);
6334
- if (rounding == 0 /* Up */ && !mod.isZero()) {
6335
- return div.add(new (0, _anchor.BN)(1));
6336
- }
6337
- return div;
6338
- }
6339
- function divCeil(a, b) {
6340
- if (a.isZero()) {
6341
- return new (0, _anchor.BN)(0);
6342
- }
6343
- return a.add(b.sub(new (0, _anchor.BN)(1))).div(b);
6344
- }
6345
- function decimalToQ64(num) {
6346
- return new (0, _anchor.BN)(num.mul(_decimaljs2.default.pow(2, 64)).floor().toFixed());
6347
- }
6348
- function priceToSqrtPrice(initPrice, tokenADecimal, tokenBDecimal) {
6349
- const sqrtPriceQ64 = decimalToQ64(
6350
- initPrice.mul(_decimaljs2.default.pow(10, tokenBDecimal - tokenADecimal)).sqrt()
6351
- );
6352
- return sqrtPriceQ64;
6353
- }
6354
-
6355
- // src/utils/token.ts
6287
+ // src/helpers/token.ts
6356
6288
 
6357
6289
 
6358
6290
 
@@ -6451,9 +6383,41 @@ function getNftOwner(connection, nftMint) {
6451
6383
  });
6452
6384
  }
6453
6385
 
6454
- // src/utils/fee.ts
6386
+ // src/helpers/fee.ts
6455
6387
 
6456
6388
 
6389
+ // src/types.ts
6390
+ var Rounding = /* @__PURE__ */ ((Rounding2) => {
6391
+ Rounding2[Rounding2["Up"] = 0] = "Up";
6392
+ Rounding2[Rounding2["Down"] = 1] = "Down";
6393
+ return Rounding2;
6394
+ })(Rounding || {});
6395
+ var ActivationPoint = /* @__PURE__ */ ((ActivationPoint2) => {
6396
+ ActivationPoint2[ActivationPoint2["Timestamp"] = 0] = "Timestamp";
6397
+ ActivationPoint2[ActivationPoint2["Slot"] = 1] = "Slot";
6398
+ return ActivationPoint2;
6399
+ })(ActivationPoint || {});
6400
+ var FeeSchedulerMode = /* @__PURE__ */ ((FeeSchedulerMode2) => {
6401
+ FeeSchedulerMode2[FeeSchedulerMode2["Linear"] = 0] = "Linear";
6402
+ FeeSchedulerMode2[FeeSchedulerMode2["Exponential"] = 1] = "Exponential";
6403
+ return FeeSchedulerMode2;
6404
+ })(FeeSchedulerMode || {});
6405
+ var CollectFeeMode = /* @__PURE__ */ ((CollectFeeMode3) => {
6406
+ CollectFeeMode3[CollectFeeMode3["BothToken"] = 0] = "BothToken";
6407
+ CollectFeeMode3[CollectFeeMode3["OnlyB"] = 1] = "OnlyB";
6408
+ return CollectFeeMode3;
6409
+ })(CollectFeeMode || {});
6410
+ var TradeDirection = /* @__PURE__ */ ((TradeDirection3) => {
6411
+ TradeDirection3[TradeDirection3["AtoB"] = 0] = "AtoB";
6412
+ TradeDirection3[TradeDirection3["BtoA"] = 1] = "BtoA";
6413
+ return TradeDirection3;
6414
+ })(TradeDirection || {});
6415
+ var ActivationType = /* @__PURE__ */ ((ActivationType2) => {
6416
+ ActivationType2[ActivationType2["Slot"] = 0] = "Slot";
6417
+ ActivationType2[ActivationType2["Timestamp"] = 1] = "Timestamp";
6418
+ return ActivationType2;
6419
+ })(ActivationType || {});
6420
+
6457
6421
  // src/math/feeMath.ts
6458
6422
 
6459
6423
  var MAX_EXPONENTIAL = new (0, _anchor.BN)(524288);
@@ -6558,51 +6522,32 @@ function pow(base, exp) {
6558
6522
  return result;
6559
6523
  }
6560
6524
 
6561
- // src/utils/fee.ts
6562
- function getBaseFeeNumerator(feeSchedulerMode, cliffFeeNumerator, period, reductionFactor) {
6563
- let feeNumerator;
6564
- if (feeSchedulerMode == 0 /* Linear */) {
6565
- feeNumerator = cliffFeeNumerator.sub(period.mul(reductionFactor));
6566
- } else {
6567
- const bps = reductionFactor.shln(SCALE_OFFSET).div(new (0, _anchor.BN)(BASIS_POINT_MAX));
6568
- const base = ONE.sub(bps);
6569
- const result = pow(base, period);
6570
- feeNumerator = cliffFeeNumerator.mul(result).shrn(SCALE_OFFSET);
6571
- }
6572
- return feeNumerator;
6573
- }
6574
- function getDynamicFeeNumerator(volatilityAccumulator, binStep, variableFeeControl) {
6575
- const squareVfaBin = volatilityAccumulator.mul(binStep).pow(new (0, _anchor.BN)(2));
6576
- const vFee = squareVfaBin.mul(variableFeeControl);
6577
- return vFee.addn(99999999999).divn(1e11);
6525
+ // src/math/index.ts
6526
+
6527
+ var _decimaljs = require('decimal.js'); var _decimaljs2 = _interopRequireDefault(_decimaljs);
6528
+ function shlDiv(x, y, offset, rounding) {
6529
+ const scale = new (0, _anchor.BN)(1).shln(offset);
6530
+ return mulDiv(x, scale, y, rounding);
6578
6531
  }
6579
- function getFeeNumerator(currentPoint, activationPoint, numberOfPeriod, periodFrequency, feeSchedulerMode, cliffFeeNumerator, reductionFactor, dynamicFeeParams) {
6580
- if (Number(periodFrequency) == 0) {
6581
- return cliffFeeNumerator;
6532
+ function mulDiv(x, y, denominator, rounding) {
6533
+ const { div, mod } = x.mul(y).divmod(denominator);
6534
+ if (rounding == 0 /* Up */ && !mod.isZero()) {
6535
+ return div.add(new (0, _anchor.BN)(1));
6582
6536
  }
6583
- const period = new (0, _anchor.BN)(currentPoint).lt(activationPoint) ? new (0, _anchor.BN)(numberOfPeriod) : _anchor.BN.min(
6584
- new (0, _anchor.BN)(numberOfPeriod),
6585
- new (0, _anchor.BN)(currentPoint).sub(activationPoint).div(periodFrequency)
6586
- );
6587
- let feeNumerator = getBaseFeeNumerator(
6588
- feeSchedulerMode,
6589
- cliffFeeNumerator,
6590
- period,
6591
- reductionFactor
6592
- );
6593
- if (dynamicFeeParams) {
6594
- const { volatilityAccumulator, binStep, variableFeeControl } = dynamicFeeParams;
6595
- const dynamicFeeNumberator = getDynamicFeeNumerator(
6596
- volatilityAccumulator,
6597
- binStep,
6598
- variableFeeControl
6599
- );
6600
- feeNumerator.add(dynamicFeeNumberator);
6537
+ return div;
6538
+ }
6539
+ function divCeil(a, b) {
6540
+ if (a.isZero()) {
6541
+ return new (0, _anchor.BN)(0);
6601
6542
  }
6602
- return feeNumerator.gt(new (0, _anchor.BN)(MAX_FEE_NUMERATOR)) ? new (0, _anchor.BN)(MAX_FEE_NUMERATOR) : feeNumerator;
6543
+ return a.add(b.sub(new (0, _anchor.BN)(1))).div(b);
6544
+ }
6545
+ function getInitPriceQ64(tokenAAmount, tokenBAmount) {
6546
+ const sqrtInitPrice = new (0, _decimaljs2.default)(tokenBAmount.toString()).div(new (0, _decimaljs2.default)(tokenAAmount.toString())).sqrt();
6547
+ return new (0, _anchor.BN)(sqrtInitPrice.mul(_decimaljs2.default.pow(2, 64)).floor().toFixed());
6603
6548
  }
6604
6549
 
6605
- // src/utils/curve.ts
6550
+ // src/helpers/curve.ts
6606
6551
 
6607
6552
  function getNextSqrtPrice(amount, sqrtPrice, liquidity, aToB) {
6608
6553
  let result;
@@ -6635,92 +6580,6 @@ function getDeltaAmountB(lowerSqrtPrice, upperSqrtPrice, liquidity, rounding) {
6635
6580
  }
6636
6581
  return result;
6637
6582
  }
6638
- function calculateSwap(inAmount, sqrtPrice, liquidity, tradeFeeNumerator, aToB, collectFeeMode) {
6639
- let outAmount;
6640
- let lpFee;
6641
- if (collectFeeMode === 0 /* BothToken */) {
6642
- if (aToB) {
6643
- const nextSqrtPrice = getNextSqrtPrice(
6644
- inAmount,
6645
- sqrtPrice,
6646
- liquidity,
6647
- true
6648
- );
6649
- outAmount = getDeltaAmountB(
6650
- nextSqrtPrice,
6651
- sqrtPrice,
6652
- liquidity,
6653
- 1 /* Down */
6654
- );
6655
- lpFee = mulDiv(
6656
- outAmount,
6657
- tradeFeeNumerator,
6658
- new (0, _anchor.BN)(FEE_DENOMINATOR),
6659
- 1 /* Down */
6660
- );
6661
- } else {
6662
- const nextSqrtPrice = getNextSqrtPrice(
6663
- inAmount,
6664
- sqrtPrice,
6665
- liquidity,
6666
- false
6667
- );
6668
- outAmount = getDeltaAmountA(
6669
- sqrtPrice,
6670
- nextSqrtPrice,
6671
- liquidity,
6672
- 1 /* Down */
6673
- );
6674
- lpFee = mulDiv(
6675
- outAmount,
6676
- tradeFeeNumerator,
6677
- new (0, _anchor.BN)(new (0, _anchor.BN)(FEE_DENOMINATOR)),
6678
- 1 /* Down */
6679
- );
6680
- }
6681
- } else {
6682
- const nextSqrtPrice = getNextSqrtPrice(
6683
- inAmount,
6684
- sqrtPrice,
6685
- liquidity,
6686
- true
6687
- );
6688
- outAmount = getDeltaAmountB(
6689
- nextSqrtPrice,
6690
- sqrtPrice,
6691
- liquidity,
6692
- 1 /* Down */
6693
- );
6694
- lpFee = mulDiv(
6695
- outAmount,
6696
- tradeFeeNumerator,
6697
- new (0, _anchor.BN)(FEE_DENOMINATOR),
6698
- 1 /* Down */
6699
- );
6700
- if (aToB) {
6701
- } else {
6702
- lpFee = mulDiv(
6703
- inAmount,
6704
- tradeFeeNumerator,
6705
- new (0, _anchor.BN)(FEE_DENOMINATOR),
6706
- 1 /* Down */
6707
- );
6708
- const nextSqrtPrice2 = getNextSqrtPrice(
6709
- inAmount.sub(lpFee),
6710
- sqrtPrice,
6711
- liquidity,
6712
- false
6713
- );
6714
- outAmount = getDeltaAmountA(
6715
- sqrtPrice,
6716
- nextSqrtPrice2,
6717
- liquidity,
6718
- 1 /* Down */
6719
- );
6720
- }
6721
- }
6722
- return { amountOutExcludedlpFee: outAmount.sub(lpFee), lpFee };
6723
- }
6724
6583
  function getLiquidityDeltaFromAmountA(maxAmountA, lowerSqrtPrice, upperSqrtPrice) {
6725
6584
  const prod = maxAmountA.mul(upperSqrtPrice.mul(lowerSqrtPrice));
6726
6585
  const delta = upperSqrtPrice.sub(lowerSqrtPrice);
@@ -6743,7 +6602,89 @@ function getAmountBFromLiquidityDelta(liquidity, currentSqrtPrice) {
6743
6602
  return prod.shrn(SCALE_OFFSET * 2);
6744
6603
  }
6745
6604
 
6746
- // src/utils/computeUnits.ts
6605
+ // src/helpers/fee.ts
6606
+ function getBaseFeeNumerator(feeSchedulerMode, cliffFeeNumerator, period, reductionFactor) {
6607
+ let feeNumerator;
6608
+ if (feeSchedulerMode == 0 /* Linear */) {
6609
+ feeNumerator = cliffFeeNumerator.sub(period.mul(reductionFactor));
6610
+ } else {
6611
+ const bps = reductionFactor.shln(SCALE_OFFSET).div(new (0, _anchor.BN)(BASIS_POINT_MAX));
6612
+ const base = ONE.sub(bps);
6613
+ const result = pow(base, period);
6614
+ feeNumerator = cliffFeeNumerator.mul(result).shrn(SCALE_OFFSET);
6615
+ }
6616
+ return feeNumerator;
6617
+ }
6618
+ function getDynamicFeeNumerator(volatilityAccumulator, binStep, variableFeeControl) {
6619
+ const squareVfaBin = volatilityAccumulator.mul(binStep).pow(new (0, _anchor.BN)(2));
6620
+ const vFee = squareVfaBin.mul(variableFeeControl);
6621
+ return vFee.addn(99999999999).divn(1e11);
6622
+ }
6623
+ function getFeeNumerator(currentPoint, activationPoint, numberOfPeriod, periodFrequency, feeSchedulerMode, cliffFeeNumerator, reductionFactor, dynamicFeeParams) {
6624
+ if (Number(periodFrequency) == 0) {
6625
+ return cliffFeeNumerator;
6626
+ }
6627
+ const period = new (0, _anchor.BN)(currentPoint).lt(activationPoint) ? new (0, _anchor.BN)(numberOfPeriod) : _anchor.BN.min(
6628
+ new (0, _anchor.BN)(numberOfPeriod),
6629
+ new (0, _anchor.BN)(currentPoint).sub(activationPoint).div(periodFrequency)
6630
+ );
6631
+ let feeNumerator = getBaseFeeNumerator(
6632
+ feeSchedulerMode,
6633
+ cliffFeeNumerator,
6634
+ period,
6635
+ reductionFactor
6636
+ );
6637
+ if (dynamicFeeParams) {
6638
+ const { volatilityAccumulator, binStep, variableFeeControl } = dynamicFeeParams;
6639
+ const dynamicFeeNumberator = getDynamicFeeNumerator(
6640
+ volatilityAccumulator,
6641
+ binStep,
6642
+ variableFeeControl
6643
+ );
6644
+ feeNumerator.add(dynamicFeeNumberator);
6645
+ }
6646
+ return feeNumerator.gt(new (0, _anchor.BN)(MAX_FEE_NUMERATOR)) ? new (0, _anchor.BN)(MAX_FEE_NUMERATOR) : feeNumerator;
6647
+ }
6648
+ function getFeeMode(collectFeeMode, btoA) {
6649
+ const feeOnInput = btoA && collectFeeMode === 1 /* OnlyB */;
6650
+ const feesOnTokenA = btoA && collectFeeMode === 0 /* BothToken */;
6651
+ return {
6652
+ feeOnInput,
6653
+ feesOnTokenA
6654
+ };
6655
+ }
6656
+ function getTotalFeeOnAmount(amount, tradeFeeNumerator) {
6657
+ return mulDiv(
6658
+ amount,
6659
+ tradeFeeNumerator,
6660
+ new (0, _anchor.BN)(FEE_DENOMINATOR),
6661
+ 0 /* Up */
6662
+ );
6663
+ }
6664
+ function getSwapAmount(inAmount, sqrtPrice, liquidity, tradeFeeNumerator, aToB, collectFeeMode) {
6665
+ let feeMode = getFeeMode(collectFeeMode, !aToB);
6666
+ let actualInAmount = inAmount;
6667
+ let totalFee = new (0, _anchor.BN)(0);
6668
+ if (feeMode.feeOnInput) {
6669
+ totalFee = getTotalFeeOnAmount(inAmount, tradeFeeNumerator);
6670
+ actualInAmount = inAmount.sub(totalFee);
6671
+ }
6672
+ const outAmount = aToB ? getDeltaAmountB(
6673
+ getNextSqrtPrice(actualInAmount, sqrtPrice, liquidity, true),
6674
+ sqrtPrice,
6675
+ liquidity,
6676
+ 1 /* Down */
6677
+ ) : getDeltaAmountA(
6678
+ sqrtPrice,
6679
+ getNextSqrtPrice(actualInAmount, sqrtPrice, liquidity, false),
6680
+ liquidity,
6681
+ 1 /* Down */
6682
+ );
6683
+ const actualOutAmount = feeMode.feeOnInput ? outAmount : (totalFee = getTotalFeeOnAmount(outAmount, tradeFeeNumerator), outAmount.sub(totalFee));
6684
+ return { actualOutAmount, totalFee };
6685
+ }
6686
+
6687
+ // src/helpers/computeUnits.ts
6747
6688
 
6748
6689
 
6749
6690
 
@@ -6818,20 +6759,20 @@ var getEstimatedComputeUnitIxWithBuffer = (connection, instructions, feePayer, b
6818
6759
  return _web3js.ComputeBudgetProgram.setComputeUnitLimit({ units });
6819
6760
  });
6820
6761
 
6821
- // src/utils/utils.ts
6762
+ // src/helpers/utils.ts
6822
6763
 
6823
6764
 
6824
- var getMaxAmountWithSlippage = (amount, slippageRate) => {
6825
- const slippage = (100 + slippageRate) / 100 * BASIS_POINT_MAX;
6765
+ var getMaxAmountWithSlippage = (amount, rate) => {
6766
+ const slippage = (100 + rate) / 100 * BASIS_POINT_MAX;
6826
6767
  return amount.mul(new (0, _anchor.BN)(slippage)).div(new (0, _anchor.BN)(BASIS_POINT_MAX));
6827
6768
  };
6828
- var getMinAmountWithSlippage = (amount, slippageRate) => {
6829
- const slippage = (100 - slippageRate) / 100 * BASIS_POINT_MAX;
6769
+ var getMinAmountWithSlippage = (amount, rate) => {
6770
+ const slippage = (100 - rate) / 100 * BASIS_POINT_MAX;
6830
6771
  return amount.mul(new (0, _anchor.BN)(slippage)).div(new (0, _anchor.BN)(BASIS_POINT_MAX));
6831
6772
  };
6832
- var getPriceImpact = (amount, amountWithoutSlippage) => {
6833
- const diff = amountWithoutSlippage.sub(amount);
6834
- return new (0, _decimaljs2.default)(diff.toString()).div(new (0, _decimaljs2.default)(amountWithoutSlippage.toString())).mul(100).toNumber();
6773
+ var getPriceImpact = (actualAmount, idealAmount) => {
6774
+ const diff = idealAmount.sub(actualAmount);
6775
+ return new (0, _decimaljs2.default)(diff.toString()).div(new (0, _decimaljs2.default)(idealAmount.toString())).mul(100).toNumber();
6835
6776
  };
6836
6777
  var getCurrentPrice = (sqrtPrice, tokenADecimal, tokenBDecimal) => {
6837
6778
  const rawSqrtPrice = sqrtPrice.shrn(SCALE_OFFSET);
@@ -6847,7 +6788,7 @@ var getUnClaimReward = (positionState) => {
6847
6788
  };
6848
6789
  };
6849
6790
 
6850
- // src/utils/accountFilters.ts
6791
+ // src/helpers/accountFilters.ts
6851
6792
  var positionByPoolFilter = (pool) => {
6852
6793
  return {
6853
6794
  memcmp: {
@@ -6864,28 +6805,23 @@ var CpAmm = class {
6864
6805
  connection
6865
6806
  });
6866
6807
  }
6808
+ /**
6809
+ * Returns the Anchor program instance.
6810
+ * @returns The AmmProgram instance.
6811
+ */
6867
6812
  getProgram() {
6868
6813
  return this._program;
6869
6814
  }
6870
6815
  /**
6871
- Prepares token ordering, calculates the initial sqrtPrice in Q64 format,
6872
- @private
6873
- @async
6874
- @param {PublicKey} tokenX - One token mint address in the pair.
6875
- @param {PublicKey} tokenY - The other token mint address in the pair.
6876
- @param {Decimal} initialPrice - The initial price ratio of tokenX/tokenY (will be inverted if needed).
6877
- @param {Decimal} liquidity - The initial liquidity value.
6878
- @returns {PreparedPoolCreation} Object containing the ordered token mints and their Q64 price/liquidity values.
6879
- */
6816
+ * Prepares parameters required for pool creation, including initial sqrt price and liquidity.
6817
+ * @private
6818
+ * @param {PreparePoolCreationParams} params - Initial token amounts for pool creation.
6819
+ * @returns init sqrt price and liquidity in Q64 format.
6820
+ */
6880
6821
  preparePoolCreationParams(params) {
6881
6822
  return __async(this, null, function* () {
6882
- const { tokenAAmount, tokenBAmount, tokenADecimal, tokenBDecimal } = params;
6883
- const initPrice = tokenBAmount.div(tokenAAmount);
6884
- const sqrtPriceQ64 = priceToSqrtPrice(
6885
- new (0, _decimaljs2.default)(initPrice.toString()),
6886
- tokenADecimal,
6887
- tokenBDecimal
6888
- );
6823
+ const { tokenAAmount, tokenBAmount } = params;
6824
+ const sqrtPriceQ64 = getInitPriceQ64(tokenAAmount, tokenBAmount);
6889
6825
  if (sqrtPriceQ64.lt(MIN_SQRT_PRICE) || sqrtPriceQ64.gt(MAX_SQRT_PRICE)) {
6890
6826
  throw new Error(`Invalid sqrt price: ${sqrtPriceQ64.toString()}`);
6891
6827
  }
@@ -6908,7 +6844,11 @@ var CpAmm = class {
6908
6844
  };
6909
6845
  });
6910
6846
  }
6911
- // fetcher
6847
+ /**
6848
+ * Fetches the Config state of the program.
6849
+ * @param config - Public key of the config account.
6850
+ * @returns Parsed ConfigState.
6851
+ */
6912
6852
  fetchConfigState(config) {
6913
6853
  return __async(this, null, function* () {
6914
6854
  const configState = yield this._program.account.config.fetchNullable(
@@ -6918,6 +6858,11 @@ var CpAmm = class {
6918
6858
  return configState;
6919
6859
  });
6920
6860
  }
6861
+ /**
6862
+ * Fetches the Pool state.
6863
+ * @param pool - Public key of the pool.
6864
+ * @returns Parsed PoolState.
6865
+ */
6921
6866
  fetchPoolState(pool) {
6922
6867
  return __async(this, null, function* () {
6923
6868
  const poolState = yield this._program.account.pool.fetchNullable(pool);
@@ -6925,6 +6870,11 @@ var CpAmm = class {
6925
6870
  return poolState;
6926
6871
  });
6927
6872
  }
6873
+ /**
6874
+ * Fetches the Position state.
6875
+ * @param position - Public key of the position.
6876
+ * @returns Parsed PositionState.
6877
+ */
6928
6878
  fetchPositionState(position) {
6929
6879
  return __async(this, null, function* () {
6930
6880
  const positionState = yield this._program.account.position.fetchNullable(
@@ -6934,24 +6884,42 @@ var CpAmm = class {
6934
6884
  return positionState;
6935
6885
  });
6936
6886
  }
6887
+ /**
6888
+ * Retrieves all config accounts.
6889
+ * @returns Array of config public keys and their states.
6890
+ */
6937
6891
  getAllConfigs() {
6938
6892
  return __async(this, null, function* () {
6939
6893
  const configAccounts = yield this._program.account.config.all();
6940
6894
  return configAccounts;
6941
6895
  });
6942
6896
  }
6897
+ /**
6898
+ * Retrieves all pool accounts.
6899
+ * @returns Array of pool public keys and their states.
6900
+ */
6943
6901
  getAllPools() {
6944
6902
  return __async(this, null, function* () {
6945
6903
  const poolAccounts = yield this._program.account.pool.all();
6946
6904
  return poolAccounts;
6947
6905
  });
6948
6906
  }
6907
+ /**
6908
+ * Retrieves all position accounts.
6909
+ * @returns Array of position public keys and their states.
6910
+ */
6949
6911
  getAllPositions() {
6950
6912
  return __async(this, null, function* () {
6951
6913
  const poolAccounts = yield this._program.account.position.all();
6952
6914
  return poolAccounts;
6953
6915
  });
6954
6916
  }
6917
+ /**
6918
+ * Gets all positions of a user for a specific pool.
6919
+ * @param pool - Public key of the pool.
6920
+ * @param user - Public key of the user.
6921
+ * @returns List of user positions for the pool.
6922
+ */
6955
6923
  getUserPositionByPool(pool, user) {
6956
6924
  return __async(this, null, function* () {
6957
6925
  const positions = yield this._program.account.position.all([
@@ -6970,6 +6938,11 @@ var CpAmm = class {
6970
6938
  return result;
6971
6939
  });
6972
6940
  }
6941
+ /**
6942
+ * Gets all positions of a user across all pools.
6943
+ * @param user - Public key of the user.
6944
+ * @returns Array of user positions.
6945
+ */
6973
6946
  getPositionsByUser(user) {
6974
6947
  return __async(this, null, function* () {
6975
6948
  const positions = yield this._program.account.position.all();
@@ -6986,6 +6959,11 @@ var CpAmm = class {
6986
6959
  return result;
6987
6960
  });
6988
6961
  }
6962
+ /**
6963
+ * Calculates swap quote based on input amount and pool state.
6964
+ * @param params - Swap parameters including input amount, pool state, slippage, etc.
6965
+ * @returns Swap quote including expected output amount, fee, and price impact.
6966
+ */
6989
6967
  getQuote(params) {
6990
6968
  return __async(this, null, function* () {
6991
6969
  var _a;
@@ -7028,7 +7006,7 @@ var CpAmm = class {
7028
7006
  reductionFactor,
7029
7007
  dynamicFeeParams
7030
7008
  );
7031
- const { amountOutExcludedlpFee, lpFee } = calculateSwap(
7009
+ const { actualOutAmount, totalFee } = getSwapAmount(
7032
7010
  inAmount,
7033
7011
  sqrtPriceQ64,
7034
7012
  liquidityQ64,
@@ -7037,28 +7015,22 @@ var CpAmm = class {
7037
7015
  collectFeeMode
7038
7016
  );
7039
7017
  const minSwapOutAmount = getMinAmountWithSlippage(
7040
- amountOutExcludedlpFee,
7018
+ actualOutAmount,
7041
7019
  slippage
7042
7020
  );
7043
7021
  return {
7044
7022
  swapInAmount: inAmount,
7045
- swapOutAmount: amountOutExcludedlpFee,
7023
+ swapOutAmount: actualOutAmount,
7046
7024
  minSwapOutAmount,
7047
- totalFee: lpFee,
7048
- priceImpact: getPriceImpact(minSwapOutAmount, amountOutExcludedlpFee)
7025
+ totalFee,
7026
+ priceImpact: getPriceImpact(minSwapOutAmount, actualOutAmount)
7049
7027
  };
7050
7028
  });
7051
7029
  }
7052
7030
  /**
7053
7031
  * Computes the liquidity delta based on the provided token amounts and pool state.
7054
7032
  *
7055
- * @param {LiquidityDeltaParams} params - The parameters for liquidity calculation, including:
7056
- * - tokenX: The mint address of token X.
7057
- * - tokenY: The mint address of token Y.
7058
- * - maxAmountX: The maximum amount of token X available.
7059
- * - maxAmountY: The maximum amount of token Y available.
7060
- * - pool: The address of the liquidity pool.
7061
- *
7033
+ * @param {LiquidityDeltaParams} params - The parameters for liquidity calculation
7062
7034
  * @returns {Promise<BN>} - The computed liquidity delta in Q64 value.
7063
7035
  */
7064
7036
  getLiquidityDelta(params) {
@@ -7083,6 +7055,11 @@ var CpAmm = class {
7083
7055
  return liquidityDeltaFromAmountA.gte(liquidityDeltaFromAmountB) ? liquidityDeltaFromAmountB : liquidityDeltaFromAmountA;
7084
7056
  });
7085
7057
  }
7058
+ /**
7059
+ * Builds a transaction to create a permissionless pool.
7060
+ * @param params - Parameters for pool creation.
7061
+ * @returns Transaction builder.
7062
+ */
7086
7063
  createPool(params) {
7087
7064
  return __async(this, null, function* () {
7088
7065
  const {
@@ -7095,17 +7072,13 @@ var CpAmm = class {
7095
7072
  activationPoint,
7096
7073
  tokenAAmount,
7097
7074
  tokenBAmount,
7098
- tokenADecimal,
7099
- tokenBDecimal,
7100
7075
  tokenAProgram,
7101
7076
  tokenBProgram
7102
7077
  } = params;
7103
7078
  const { sqrtPriceQ64, liquidityQ64 } = yield this.preparePoolCreationParams(
7104
7079
  {
7105
7080
  tokenAAmount,
7106
- tokenBAmount,
7107
- tokenADecimal,
7108
- tokenBDecimal
7081
+ tokenBAmount
7109
7082
  }
7110
7083
  );
7111
7084
  const poolAuthority = derivePoolAuthority(this._program.programId);
@@ -7202,6 +7175,11 @@ var CpAmm = class {
7202
7175
  return tx;
7203
7176
  });
7204
7177
  }
7178
+ /**
7179
+ * Builds a transaction to create a customizable pool.
7180
+ * @param params - Parameters for customizable pool creation.
7181
+ * @returns Transaction and related addresses.
7182
+ */
7205
7183
  createCustomPool(params) {
7206
7184
  return __async(this, null, function* () {
7207
7185
  const {
@@ -7225,9 +7203,7 @@ var CpAmm = class {
7225
7203
  const { sqrtPriceQ64, liquidityQ64 } = yield this.preparePoolCreationParams(
7226
7204
  {
7227
7205
  tokenAAmount,
7228
- tokenBAmount,
7229
- tokenADecimal,
7230
- tokenBDecimal
7206
+ tokenBAmount
7231
7207
  }
7232
7208
  );
7233
7209
  const poolAuthority = derivePoolAuthority(this._program.programId);
@@ -7328,6 +7304,11 @@ var CpAmm = class {
7328
7304
  return { tx: transaction, pool, position };
7329
7305
  });
7330
7306
  }
7307
+ /**
7308
+ * Builds a transaction to create a position.
7309
+ * @param {CreatePositionParams} params - Parameters for position creation.
7310
+ * @returns Transaction builder.
7311
+ */
7331
7312
  createPosition(params) {
7332
7313
  return __async(this, null, function* () {
7333
7314
  const { owner, payer, pool, positionNft } = params;
@@ -7355,6 +7336,11 @@ var CpAmm = class {
7355
7336
  }).transaction();
7356
7337
  });
7357
7338
  }
7339
+ /**
7340
+ * Builds a transaction to add liquidity to an existing position.
7341
+ * @param {AddLiquidityParams} params - Parameters for adding liquidity.
7342
+ * @returns Transaction builder.
7343
+ */
7358
7344
  addLiquidity(params) {
7359
7345
  return __async(this, null, function* () {
7360
7346
  const {
@@ -7447,6 +7433,11 @@ var CpAmm = class {
7447
7433
  }).preInstructions(preInstructions).postInstructions(postInstructions).transaction();
7448
7434
  });
7449
7435
  }
7436
+ /**
7437
+ * Builds a transaction to remove liquidity from a position.
7438
+ * @param {RemoveLiquidityParams} params - Parameters for removing liquidity.
7439
+ * @returns Transaction builder.
7440
+ */
7450
7441
  removeLiquidity(params) {
7451
7442
  return __async(this, null, function* () {
7452
7443
  const {
@@ -7523,6 +7514,11 @@ var CpAmm = class {
7523
7514
  }).preInstructions(preInstructions).postInstructions(postInstructions).transaction();
7524
7515
  });
7525
7516
  }
7517
+ /**
7518
+ * Builds a transaction to perform a swap in the pool.
7519
+ * @param {SwapParams} params - Parameters for swapping tokens.
7520
+ * @returns Transaction builder.
7521
+ */
7526
7522
  swap(params) {
7527
7523
  return __async(this, null, function* () {
7528
7524
  const {
@@ -7601,6 +7597,11 @@ var CpAmm = class {
7601
7597
  }).preInstructions(preInstructions).postInstructions(postInstructions).transaction();
7602
7598
  });
7603
7599
  }
7600
+ /**
7601
+ * Builds a transaction to lock a position with vesting schedule.
7602
+ * @param {LockPositionParams} params - Locking parameters.
7603
+ * @returns Transaction builder.
7604
+ */
7604
7605
  lockPosition(params) {
7605
7606
  return __async(this, null, function* () {
7606
7607
  const {
@@ -7642,6 +7643,11 @@ var CpAmm = class {
7642
7643
  }).transaction();
7643
7644
  });
7644
7645
  }
7646
+ /**
7647
+ * Builds a transaction to permanently lock a position.
7648
+ * @param {PermanentLockParams} params - Parameters for permanent locking.
7649
+ * @returns Transaction builder.
7650
+ */
7645
7651
  permanentLockPosition(params) {
7646
7652
  return __async(this, null, function* () {
7647
7653
  const { owner, position, positionNftMint, pool, unlockedLiquidity } = params;
@@ -7659,6 +7665,11 @@ var CpAmm = class {
7659
7665
  }).transaction();
7660
7666
  });
7661
7667
  }
7668
+ /**
7669
+ * Builds a transaction to refresh vesting status of a position.
7670
+ * @param {RefreshVestingParams} params - Refresh vesting parameters.
7671
+ * @returns Transaction builder.
7672
+ */
7662
7673
  refreshVesting(params) {
7663
7674
  return __async(this, null, function* () {
7664
7675
  const { owner, position, positionNftMint, pool, vestings } = params;
@@ -7682,6 +7693,11 @@ var CpAmm = class {
7682
7693
  ).transaction();
7683
7694
  });
7684
7695
  }
7696
+ /**
7697
+ * Builds a transaction to claim position fee rewards.
7698
+ * @param {ClaimPositionFeeParams} params - Parameters for claiming position fee.
7699
+ * @returns Transaction builder.
7700
+ */
7685
7701
  claimPositionFee(params) {
7686
7702
  return __async(this, null, function* () {
7687
7703
  const {
@@ -7751,6 +7767,11 @@ var CpAmm = class {
7751
7767
  }).preInstructions(preInstructions).postInstructions(postInstructions).transaction();
7752
7768
  });
7753
7769
  }
7770
+ /**
7771
+ * Builds a transaction to update reward duration.
7772
+ * @param {UpdateRewardDurationParams} params - Parameters including pool and new duration.
7773
+ * @returns Transaction builder.
7774
+ */
7754
7775
  updateRewardDuration(params) {
7755
7776
  return __async(this, null, function* () {
7756
7777
  const { pool, admin, rewardIndex, newDuration } = params;
@@ -7762,6 +7783,11 @@ var CpAmm = class {
7762
7783
  }).transaction();
7763
7784
  });
7764
7785
  }
7786
+ /**
7787
+ * Builds a transaction to update reward funder address.
7788
+ * @param {UpdateRewardFunderParams} params - Parameters including pool and new funder address.
7789
+ * @returns Transaction builder.
7790
+ */
7765
7791
  updateRewardFunder(params) {
7766
7792
  return __async(this, null, function* () {
7767
7793
  const { pool, admin, rewardIndex, newFunder } = params;
@@ -7773,6 +7799,11 @@ var CpAmm = class {
7773
7799
  }).transaction();
7774
7800
  });
7775
7801
  }
7802
+ /**
7803
+ * Builds a transaction to fund rewards in a pool.
7804
+ * @param {FundRewardParams} params - Funding parameters.
7805
+ * @returns Transaction builder.
7806
+ */
7776
7807
  fundReward(params) {
7777
7808
  return __async(this, null, function* () {
7778
7809
  const { rewardIndex, carryForward, pool, funder, amount } = params;
@@ -7810,6 +7841,11 @@ var CpAmm = class {
7810
7841
  }).transaction();
7811
7842
  });
7812
7843
  }
7844
+ /**
7845
+ * Builds a transaction to withdraw ineligible rewards from a pool.
7846
+ * @param {WithdrawIneligibleRewardParams} params - Parameters for withdrawal.
7847
+ * @returns Transaction builder.
7848
+ */
7813
7849
  withdrawIneligibleReward(params) {
7814
7850
  return __async(this, null, function* () {
7815
7851
  const { rewardIndex, pool, funder } = params;
@@ -7846,6 +7882,11 @@ var CpAmm = class {
7846
7882
  }).preInstructions(preInstructions).postInstructions(postInstructions).transaction();
7847
7883
  });
7848
7884
  }
7885
+ /**
7886
+ * Builds a transaction to claim partner fee rewards.
7887
+ * @param {ClaimPartnerFeeParams} params - Claim parameters including amounts and partner address.
7888
+ * @returns Transaction builder.
7889
+ */
7849
7890
  claimPartnerFee(params) {
7850
7891
  return __async(this, null, function* () {
7851
7892
  const { partner, pool, maxAmountA, maxAmountB } = params;
@@ -7910,6 +7951,11 @@ var CpAmm = class {
7910
7951
  }).preInstructions(preInstructions).postInstructions(postInstructions).transaction();
7911
7952
  });
7912
7953
  }
7954
+ /**
7955
+ * Builds a transaction to claim reward from a position.
7956
+ * @param {ClaimRewardParams} params - Parameters for claiming reward.
7957
+ * @returns Transaction builder.
7958
+ */
7913
7959
  claimReward(params) {
7914
7960
  return __async(this, null, function* () {
7915
7961
  const { user, position, rewardIndex } = params;
@@ -8012,5 +8058,6 @@ var index_default = cp_amm_default;
8012
8058
 
8013
8059
 
8014
8060
 
8015
- exports.ActivationPoint = ActivationPoint; exports.ActivationType = ActivationType; exports.BASIS_POINT_MAX = BASIS_POINT_MAX; exports.CP_AMM_PROGRAM_ID = CP_AMM_PROGRAM_ID; exports.CollectFeeMode = CollectFeeMode; exports.CpAmm = CpAmm; exports.FEE_DENOMINATOR = FEE_DENOMINATOR; exports.FeeSchedulerMode = FeeSchedulerMode; exports.MAX_CU_BUFFER = MAX_CU_BUFFER; exports.MAX_FEE_NUMERATOR = MAX_FEE_NUMERATOR; exports.MAX_SQRT_PRICE = MAX_SQRT_PRICE; exports.MIN_CU_BUFFER = MIN_CU_BUFFER; exports.MIN_SQRT_PRICE = MIN_SQRT_PRICE; exports.Rounding = Rounding; exports.SCALE_OFFSET = SCALE_OFFSET; exports.TradeDirection = TradeDirection; exports.calculateSwap = calculateSwap; exports.default = index_default; exports.deriveClaimFeeOperatorAddress = deriveClaimFeeOperatorAddress; exports.deriveConfigAddress = deriveConfigAddress; exports.deriveCustomizablePoolAddress = deriveCustomizablePoolAddress; exports.deriveEventAuthority = deriveEventAuthority; exports.derivePoolAddress = derivePoolAddress; exports.derivePoolAuthority = derivePoolAuthority; exports.derivePositionAddress = derivePositionAddress; exports.derivePositionNftAccount = derivePositionNftAccount; exports.deriveRewardVaultAddress = deriveRewardVaultAddress; exports.deriveTokenBadgeAddress = deriveTokenBadgeAddress; exports.deriveTokenVaultAddress = deriveTokenVaultAddress; exports.getAmountAFromLiquidityDelta = getAmountAFromLiquidityDelta; exports.getAmountBFromLiquidityDelta = getAmountBFromLiquidityDelta; exports.getBaseFeeNumerator = getBaseFeeNumerator; exports.getCurrentPrice = getCurrentPrice; exports.getDeltaAmountA = getDeltaAmountA; exports.getDeltaAmountB = getDeltaAmountB; exports.getDynamicFeeNumerator = getDynamicFeeNumerator; exports.getEstimatedComputeUnitIxWithBuffer = getEstimatedComputeUnitIxWithBuffer; exports.getEstimatedComputeUnitUsageWithBuffer = getEstimatedComputeUnitUsageWithBuffer; exports.getFeeNumerator = getFeeNumerator; exports.getFirstKey = getFirstKey; exports.getLiquidityDeltaFromAmountA = getLiquidityDeltaFromAmountA; exports.getLiquidityDeltaFromAmountB = getLiquidityDeltaFromAmountB; exports.getMaxAmountWithSlippage = getMaxAmountWithSlippage; exports.getMinAmountWithSlippage = getMinAmountWithSlippage; exports.getNextSqrtPrice = getNextSqrtPrice; exports.getNftOwner = getNftOwner; exports.getOrCreateATAInstruction = getOrCreateATAInstruction; exports.getPriceImpact = getPriceImpact; exports.getSecondKey = getSecondKey; exports.getSimulationComputeUnits = getSimulationComputeUnits; exports.getTokenDecimals = getTokenDecimals; exports.getTokenProgram = getTokenProgram; exports.getUnClaimReward = getUnClaimReward; exports.unwrapSOLInstruction = unwrapSOLInstruction; exports.wrapSOLInstruction = wrapSOLInstruction;
8061
+
8062
+ exports.ActivationPoint = ActivationPoint; exports.ActivationType = ActivationType; exports.BASIS_POINT_MAX = BASIS_POINT_MAX; exports.CP_AMM_PROGRAM_ID = CP_AMM_PROGRAM_ID; exports.CollectFeeMode = CollectFeeMode; exports.CpAmm = CpAmm; exports.FEE_DENOMINATOR = FEE_DENOMINATOR; exports.FeeSchedulerMode = FeeSchedulerMode; exports.MAX_CU_BUFFER = MAX_CU_BUFFER; exports.MAX_FEE_NUMERATOR = MAX_FEE_NUMERATOR; exports.MAX_SQRT_PRICE = MAX_SQRT_PRICE; exports.MIN_CU_BUFFER = MIN_CU_BUFFER; exports.MIN_SQRT_PRICE = MIN_SQRT_PRICE; exports.Rounding = Rounding; exports.SCALE_OFFSET = SCALE_OFFSET; exports.TradeDirection = TradeDirection; exports.default = index_default; exports.deriveClaimFeeOperatorAddress = deriveClaimFeeOperatorAddress; exports.deriveConfigAddress = deriveConfigAddress; exports.deriveCustomizablePoolAddress = deriveCustomizablePoolAddress; exports.deriveEventAuthority = deriveEventAuthority; exports.derivePoolAddress = derivePoolAddress; exports.derivePoolAuthority = derivePoolAuthority; exports.derivePositionAddress = derivePositionAddress; exports.derivePositionNftAccount = derivePositionNftAccount; exports.deriveRewardVaultAddress = deriveRewardVaultAddress; exports.deriveTokenBadgeAddress = deriveTokenBadgeAddress; exports.deriveTokenVaultAddress = deriveTokenVaultAddress; exports.getAmountAFromLiquidityDelta = getAmountAFromLiquidityDelta; exports.getAmountBFromLiquidityDelta = getAmountBFromLiquidityDelta; exports.getBaseFeeNumerator = getBaseFeeNumerator; exports.getCurrentPrice = getCurrentPrice; exports.getDeltaAmountA = getDeltaAmountA; exports.getDeltaAmountB = getDeltaAmountB; exports.getDynamicFeeNumerator = getDynamicFeeNumerator; exports.getEstimatedComputeUnitIxWithBuffer = getEstimatedComputeUnitIxWithBuffer; exports.getEstimatedComputeUnitUsageWithBuffer = getEstimatedComputeUnitUsageWithBuffer; exports.getFeeNumerator = getFeeNumerator; exports.getFirstKey = getFirstKey; exports.getLiquidityDeltaFromAmountA = getLiquidityDeltaFromAmountA; exports.getLiquidityDeltaFromAmountB = getLiquidityDeltaFromAmountB; exports.getMaxAmountWithSlippage = getMaxAmountWithSlippage; exports.getMinAmountWithSlippage = getMinAmountWithSlippage; exports.getNextSqrtPrice = getNextSqrtPrice; exports.getNftOwner = getNftOwner; exports.getOrCreateATAInstruction = getOrCreateATAInstruction; exports.getPriceImpact = getPriceImpact; exports.getSecondKey = getSecondKey; exports.getSimulationComputeUnits = getSimulationComputeUnits; exports.getSwapAmount = getSwapAmount; exports.getTokenDecimals = getTokenDecimals; exports.getTokenProgram = getTokenProgram; exports.getUnClaimReward = getUnClaimReward; exports.positionByPoolFilter = positionByPoolFilter; exports.unwrapSOLInstruction = unwrapSOLInstruction; exports.wrapSOLInstruction = wrapSOLInstruction;
8016
8063
  //# sourceMappingURL=index.js.map