@exponent-labs/market-three-math 0.1.8 → 0.9.1

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 (55) hide show
  1. package/build/addLiquidity.d.ts +65 -4
  2. package/build/addLiquidity.js +762 -36
  3. package/build/addLiquidity.js.map +1 -1
  4. package/build/bisect.d.ts +11 -0
  5. package/build/bisect.js +22 -12
  6. package/build/bisect.js.map +1 -1
  7. package/build/index.d.ts +5 -4
  8. package/build/index.js +14 -7
  9. package/build/index.js.map +1 -1
  10. package/build/liquidityHistogram.d.ts +6 -1
  11. package/build/liquidityHistogram.js +57 -12
  12. package/build/liquidityHistogram.js.map +1 -1
  13. package/build/quote.d.ts +1 -1
  14. package/build/quote.js +70 -84
  15. package/build/quote.js.map +1 -1
  16. package/build/swap.js +36 -18
  17. package/build/swap.js.map +1 -1
  18. package/build/swapV2.d.ts +6 -1
  19. package/build/swapV2.js +394 -52
  20. package/build/swapV2.js.map +1 -1
  21. package/build/types.d.ts +51 -0
  22. package/build/utils.d.ts +8 -2
  23. package/build/utils.js +37 -19
  24. package/build/utils.js.map +1 -1
  25. package/build/utilsV2.d.ts +9 -0
  26. package/build/utilsV2.js +131 -9
  27. package/build/utilsV2.js.map +1 -1
  28. package/build/withdrawLiquidity.js +12 -7
  29. package/build/withdrawLiquidity.js.map +1 -1
  30. package/build/ytTrades.d.ts +7 -0
  31. package/build/ytTrades.js +166 -146
  32. package/build/ytTrades.js.map +1 -1
  33. package/build/ytTradesLegacy.js +3 -4
  34. package/build/ytTradesLegacy.js.map +1 -1
  35. package/package.json +2 -2
  36. package/src/addLiquidity.ts +1012 -38
  37. package/src/bisect.ts +22 -11
  38. package/src/index.ts +11 -5
  39. package/src/liquidityHistogram.ts +54 -9
  40. package/src/quote.ts +73 -95
  41. package/src/swap.ts +35 -19
  42. package/src/swapV2.ts +999 -0
  43. package/src/types.ts +55 -0
  44. package/src/utils.ts +24 -3
  45. package/src/utilsV2.ts +337 -0
  46. package/src/withdrawLiquidity.ts +12 -6
  47. package/src/ytTrades.ts +191 -172
  48. package/src/ytTradesLegacy.ts +419 -0
  49. package/build/swap-v2.d.ts +0 -20
  50. package/build/swap-v2.js +0 -261
  51. package/build/swap-v2.js.map +0 -1
  52. package/build/swapLegacy.d.ts +0 -16
  53. package/build/swapLegacy.js +0 -229
  54. package/build/swapLegacy.js.map +0 -1
  55. package/src/swapLegacy.ts +0 -272
package/build/types.d.ts CHANGED
@@ -25,6 +25,20 @@ export interface SwapArgs {
25
25
  /** Is this a flash swap? */
26
26
  isCurrentFlashSwap: boolean;
27
27
  }
28
+ export interface SwapExactOutArgs {
29
+ /** Direction of the swap (only SyToPt is supported) */
30
+ direction: SwapDirection;
31
+ /** Exact amount out target (net, after fees) */
32
+ amountOut: number;
33
+ /** Optional spot price limit (anti-sandwich) */
34
+ priceSpotLimit?: number;
35
+ /** SY exchange rate */
36
+ syExchangeRate: number;
37
+ /** Is this a flash swap? */
38
+ isCurrentFlashSwap: boolean;
39
+ /** Optional max input budget constraint */
40
+ amountInConstraint?: number;
41
+ }
28
42
  export interface SwapOutcome {
29
43
  /** Amount of input consumed */
30
44
  amountInConsumed: number;
@@ -39,6 +53,22 @@ export interface SwapOutcome {
39
53
  /** Final tick index after swap */
40
54
  finalTickIndex: number;
41
55
  }
56
+ export interface SwapOutcomeV2 {
57
+ /** Amount of input consumed */
58
+ amountInConsumed: number;
59
+ /** Amount out (after fees) */
60
+ amountOut: number;
61
+ /** LP fee charged in out token */
62
+ lpFeeChargedOutToken: number;
63
+ /** Protocol fee charged in out token */
64
+ protocolFeeChargedOutToken: number;
65
+ /** Final spot price after swap */
66
+ finalSpotPrice: number;
67
+ /** Final tick key after swap */
68
+ finalTickKey: number;
69
+ /** Post-trade market state after applying in-swap state updates */
70
+ postMarketState?: MarketThreeState;
71
+ }
42
72
  export interface AddLiquidityArgs {
43
73
  /** Lower tick key (ln implied rate in bps) */
44
74
  lowerTick: number;
@@ -70,4 +100,25 @@ export interface LiquidityNeeds {
70
100
  priceSplitForNeed: number;
71
101
  /** Tick index of the split point */
72
102
  priceSplitTickIdx: number;
103
+ /** Original max SY before CLMM trimming (for crossing tick scaling) */
104
+ originalMaxSy: number;
105
+ /** Original max PT before CLMM trimming (for crossing tick scaling) */
106
+ originalMaxPt: number;
107
+ /** PT distribution extent: current_spot - lower_price */
108
+ duLeftTotal: number;
109
+ /** SY distribution extent: eff_price_current - eff_price_upper */
110
+ deltaCRightTotal: number;
111
+ }
112
+ /** State of the crossing (current) tick for proportional distribution */
113
+ export interface CrossingTickState {
114
+ principalPt: number;
115
+ principalSy: number;
116
+ principalShareSupply: number;
117
+ }
118
+ /** Parameters for scaling crossing tick inputs from original max values */
119
+ export interface CrossingScaleParams {
120
+ originalMaxSy: number;
121
+ originalMaxPt: number;
122
+ duLeftTotal: number;
123
+ deltaCRightTotal: number;
73
124
  }
package/build/utils.d.ts CHANGED
@@ -70,7 +70,12 @@ export declare function getSuccessorTickKey(ticks: Ticks, currentTickKey: number
70
70
  * Find the successor tick by index in the tick tree
71
71
  * This is almost equivalent to the Rust successor_idx method
72
72
  */
73
- export declare function getSuccessorTickByIdx(ticks: Ticks, tickIdx: number): number | null;
73
+ export declare function getSuccessorTickIdxByIdx(ticks: Ticks, tickIdx: number): number | null;
74
+ /**
75
+ * Find the predecessor tick by index in the tick tree
76
+ * This is the inverse of getSuccessorTickIdxByIdx - finds the tick with the largest apyBasePoints that is still less than the current tick
77
+ */
78
+ export declare function getPredecessorTickIdxByIdx(ticks: Ticks, tickIdx: number): number | null;
74
79
  /**
75
80
  * Find the predecessor tick (next tick to the left)
76
81
  * In Rust: ticks.predecessor_idx(current_left_boundary_index)
@@ -90,7 +95,8 @@ export declare function getPredecessorTickKey(ticks: Ticks, currentTickKey: numb
90
95
  */
91
96
  export declare function getImpliedRate(tickKey: number): number;
92
97
  /**
93
- * Find a tick by its key
98
+ * Find a tick by its key (apyBasePoints)
99
+ * @returns tick and its 1-based index, or null if not found
94
100
  */
95
101
  export declare function findTickByKey(ticks: Ticks, tickKey: number): {
96
102
  tick: Tick;
package/build/utils.js CHANGED
@@ -1,6 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.calcPtPriceInAsset = exports.bigIntMin = exports.bigIntMax = exports.convertApyBpToApy = exports.convertApyToApyBp = exports.findTickByIndex = exports.findTickByKey = exports.getImpliedRate = exports.getPredecessorTickKey = exports.getSuccessorTickByIdx = exports.getSuccessorTickKey = exports.getActiveLiquidity = exports.getFeeFromAmount = exports.calculateFeeRate = exports.normalizedTimeRemaining = exports.EffSnap = void 0;
3
+ exports.EffSnap = void 0;
4
+ exports.normalizedTimeRemaining = normalizedTimeRemaining;
5
+ exports.calculateFeeRate = calculateFeeRate;
6
+ exports.getFeeFromAmount = getFeeFromAmount;
7
+ exports.getActiveLiquidity = getActiveLiquidity;
8
+ exports.getSuccessorTickKey = getSuccessorTickKey;
9
+ exports.getSuccessorTickIdxByIdx = getSuccessorTickIdxByIdx;
10
+ exports.getPredecessorTickIdxByIdx = getPredecessorTickIdxByIdx;
11
+ exports.getPredecessorTickKey = getPredecessorTickKey;
12
+ exports.getImpliedRate = getImpliedRate;
13
+ exports.findTickByKey = findTickByKey;
14
+ exports.findTickByIndex = findTickByIndex;
15
+ exports.convertApyToApyBp = convertApyToApyBp;
16
+ exports.convertApyBpToApy = convertApyBpToApy;
17
+ exports.bigIntMax = bigIntMax;
18
+ exports.bigIntMin = bigIntMin;
19
+ exports.calcPtPriceInAsset = calcPtPriceInAsset;
4
20
  const SECONDS_PER_YEAR = 365 * 24 * 60 * 60;
5
21
  // const BASE_POINTS = 10000
6
22
  /**
@@ -60,7 +76,6 @@ exports.EffSnap = EffSnap;
60
76
  function normalizedTimeRemaining(secondsRemaining) {
61
77
  return secondsRemaining / SECONDS_PER_YEAR;
62
78
  }
63
- exports.normalizedTimeRemaining = normalizedTimeRemaining;
64
79
  /**
65
80
  * Calculate current fee rate from fee rate root and time remaining
66
81
  * fee_rate = e^(ln_fee_rate_root * time_factor)
@@ -69,7 +84,6 @@ function calculateFeeRate(lnFeeRateRoot, secondsRemaining) {
69
84
  const timeFactor = normalizedTimeRemaining(secondsRemaining);
70
85
  return Math.exp(lnFeeRateRoot * timeFactor);
71
86
  }
72
- exports.calculateFeeRate = calculateFeeRate;
73
87
  /**
74
88
  * Calculate fee from amount
75
89
  * Returns the fee to charge given an amount and fee rate
@@ -78,7 +92,6 @@ exports.calculateFeeRate = calculateFeeRate;
78
92
  function getFeeFromAmount(amount, feeRate) {
79
93
  return Math.ceil(amount * (feeRate - 1.0));
80
94
  }
81
- exports.getFeeFromAmount = getFeeFromAmount;
82
95
  /**
83
96
  * Find the active liquidity at a given tick index
84
97
  * This is computed by summing liquidity_net up to the current tick
@@ -93,7 +106,6 @@ function getActiveLiquidity(ticks, tickIndex) {
93
106
  }
94
107
  return activeLiquidity;
95
108
  }
96
- exports.getActiveLiquidity = getActiveLiquidity;
97
109
  /**
98
110
  * Find the successor tick (next tick to the right)
99
111
  * In Rust: ticks.successor_idx(current_left_boundary_index)
@@ -112,12 +124,11 @@ function getSuccessorTickKey(ticks, currentTickKey) {
112
124
  }
113
125
  return minKey;
114
126
  }
115
- exports.getSuccessorTickKey = getSuccessorTickKey;
116
127
  /**
117
128
  * Find the successor tick by index in the tick tree
118
129
  * This is almost equivalent to the Rust successor_idx method
119
130
  */
120
- function getSuccessorTickByIdx(ticks, tickIdx) {
131
+ function getSuccessorTickIdxByIdx(ticks, tickIdx) {
121
132
  //TODO Refactor to make it more CPU efficient
122
133
  const tick = ticks.ticksTree.at(tickIdx - 1) ?? null;
123
134
  if (!tick)
@@ -129,7 +140,22 @@ function getSuccessorTickByIdx(ticks, tickIdx) {
129
140
  const successorTick = successorTicks.at(0) ?? null;
130
141
  return !!successorTick ? ticks.ticksTree.indexOf(successorTick) + 1 : null;
131
142
  }
132
- exports.getSuccessorTickByIdx = getSuccessorTickByIdx;
143
+ /**
144
+ * Find the predecessor tick by index in the tick tree
145
+ * This is the inverse of getSuccessorTickIdxByIdx - finds the tick with the largest apyBasePoints that is still less than the current tick
146
+ */
147
+ function getPredecessorTickIdxByIdx(ticks, tickIdx) {
148
+ //TODO Refactor to make it more CPU efficient
149
+ const tick = ticks.ticksTree.at(tickIdx - 1) ?? null;
150
+ if (!tick)
151
+ return null;
152
+ // Find ticks with apyBasePoints less than current tick
153
+ const predecessorTicks = ticks.ticksTree
154
+ .filter((t) => t.apyBasePoints < tick.apyBasePoints)
155
+ .sort((a, b) => b.apyBasePoints - a.apyBasePoints); // Sort descending to get the largest that's still less
156
+ const predecessorTick = predecessorTicks.at(0) ?? null;
157
+ return !!predecessorTick ? ticks.ticksTree.indexOf(predecessorTick) + 1 : null;
158
+ }
133
159
  /**
134
160
  * Find the predecessor tick (next tick to the left)
135
161
  * In Rust: ticks.predecessor_idx(current_left_boundary_index)
@@ -148,7 +174,6 @@ function getPredecessorTickKey(ticks, currentTickKey) {
148
174
  }
149
175
  return maxKey;
150
176
  }
151
- exports.getPredecessorTickKey = getPredecessorTickKey;
152
177
  /**
153
178
  * Get the spot price (implied rate) for a tick key
154
179
  * Tick key represents APY in parts per million (1e6)
@@ -162,46 +187,40 @@ function getImpliedRate(tickKey) {
162
187
  const TICK_KEY_BASE_POINTS = 1_000_000;
163
188
  return 1.0 + tickKey / TICK_KEY_BASE_POINTS;
164
189
  }
165
- exports.getImpliedRate = getImpliedRate;
166
190
  /**
167
- * Find a tick by its key
191
+ * Find a tick by its key (apyBasePoints)
192
+ * @returns tick and its 1-based index, or null if not found
168
193
  */
169
194
  function findTickByKey(ticks, tickKey) {
170
195
  const index = ticks.ticksTree.findIndex((t) => t.apyBasePoints === tickKey);
171
196
  if (index === -1)
172
197
  return null;
173
- return { tick: ticks.ticksTree[index - 1], index };
198
+ return { tick: ticks.ticksTree[index], index: index + 1 }; // Return 1-based index to match Rust
174
199
  }
175
- exports.findTickByKey = findTickByKey;
176
200
  /**
177
201
  * Find a tick by its index
178
202
  */
179
203
  function findTickByIndex(ticks, index) {
180
204
  return ticks.ticksTree.at(index - 1) ?? null;
181
205
  }
182
- exports.findTickByIndex = findTickByIndex;
183
206
  /**
184
207
  * Convert APY percentage to basis points
185
208
  */
186
209
  function convertApyToApyBp(apyPercent) {
187
210
  return Math.round(apyPercent * 100);
188
211
  }
189
- exports.convertApyToApyBp = convertApyToApyBp;
190
212
  /**
191
213
  * Convert basis points to APY percentage
192
214
  */
193
215
  function convertApyBpToApy(apyBp) {
194
216
  return apyBp / 100;
195
217
  }
196
- exports.convertApyBpToApy = convertApyBpToApy;
197
218
  function bigIntMax(...args) {
198
219
  return args.reduce((m, e) => (e > m ? e : m));
199
220
  }
200
- exports.bigIntMax = bigIntMax;
201
221
  function bigIntMin(...args) {
202
222
  return args.reduce((m, e) => (e < m ? e : m));
203
223
  }
204
- exports.bigIntMin = bigIntMin;
205
224
  /**
206
225
  * Calculate PT price in asset from current spot price and expiration timestamp
207
226
  * @param currentSpotPrice - Current spot price in format of 1 + percentage / 100
@@ -215,5 +234,4 @@ function calcPtPriceInAsset(currentSpotPrice, expirationTs) {
215
234
  const ptPriceInAsset = Math.exp(Math.log(1 + impliedApy) * (-secondsRemaining / SECONDS_PER_YEAR));
216
235
  return ptPriceInAsset;
217
236
  }
218
- exports.calcPtPriceInAsset = calcPtPriceInAsset;
219
237
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,8 @@ export declare class EffSnap {
30
30
  export declare class TicksWrapper {
31
31
  private ticksByKey;
32
32
  private sortedKeys;
33
+ private baseTicksTree;
34
+ private market;
33
35
  currentSpotPrice: number;
34
36
  currentTickKey: number;
35
37
  currentPrefixSum: bigint;
@@ -72,6 +74,13 @@ export declare class TicksWrapper {
72
74
  * Get liquidity net for a tick
73
75
  */
74
76
  getLiquidityNet(key: number): bigint;
77
+ private clamp01;
78
+ private ratioToPrecise;
79
+ private scaleByRatioFloor;
80
+ private splitPrincipalsAfterInsert;
81
+ upsertBoundaryTick(key: number, snap: EffSnap): void;
82
+ setPrincipals(key: number, principalPt: bigint, principalSy: bigint): void;
83
+ toTicks(currentTickKey: number, currentSpotPrice: number, currentPrefixSum: bigint): Ticks;
75
84
  }
76
85
  /**
77
86
  * Calculate normalized time remaining
package/build/utilsV2.js CHANGED
@@ -1,8 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getFeeFromAmount = exports.calculateFeeRate = exports.normalizedTimeRemaining = exports.TicksWrapper = exports.EffSnap = void 0;
3
+ exports.TicksWrapper = exports.EffSnap = void 0;
4
+ exports.normalizedTimeRemaining = normalizedTimeRemaining;
5
+ exports.calculateFeeRate = calculateFeeRate;
6
+ exports.getFeeFromAmount = getFeeFromAmount;
4
7
  const SECONDS_PER_YEAR = 365 * 24 * 60 * 60;
5
8
  const TICK_KEY_BASE_POINTS = 1_000_000;
9
+ const PRECISE_NUMBER_DENOM = 1000000000000000000n;
10
+ function cloneTick(tick) {
11
+ return {
12
+ ...tick,
13
+ farms: tick.farms.map((farm) => ({ ...farm })),
14
+ emissions: tick.emissions.map((emission) => ({ ...emission })),
15
+ };
16
+ }
6
17
  /**
7
18
  * Effective price snapshot
8
19
  * Matches the Rust EffSnap struct
@@ -41,6 +52,8 @@ exports.EffSnap = EffSnap;
41
52
  class TicksWrapper {
42
53
  ticksByKey; // key (apyBasePoints) -> Tick
43
54
  sortedKeys; // sorted list of keys for successor/predecessor
55
+ baseTicksTree;
56
+ market;
44
57
  currentSpotPrice;
45
58
  currentTickKey; // Store key instead of array index
46
59
  currentPrefixSum;
@@ -48,8 +61,10 @@ class TicksWrapper {
48
61
  feeGrowthIndexGlobalSy;
49
62
  constructor(ticks) {
50
63
  this.ticksByKey = new Map();
64
+ this.baseTicksTree = ticks.ticksTree.map(cloneTick);
65
+ this.market = ticks.market;
51
66
  // Build map from apyBasePoints -> Tick
52
- for (const tick of ticks.ticksTree) {
67
+ for (const tick of this.baseTicksTree) {
53
68
  if (tick.apyBasePoints > 0) {
54
69
  this.ticksByKey.set(tick.apyBasePoints, tick);
55
70
  }
@@ -63,7 +78,7 @@ class TicksWrapper {
63
78
  // Convert currentTick (1-based index) to key
64
79
  // In Rust, currentTick is stored as 1-based index into the ticks tree
65
80
  // We need to find the corresponding key (apyBasePoints)
66
- const currentTickFromArray = ticks.ticksTree[ticks.currentTick - 1];
81
+ const currentTickFromArray = this.baseTicksTree[ticks.currentTick - 1];
67
82
  if (currentTickFromArray && currentTickFromArray.apyBasePoints > 0) {
68
83
  this.currentTickKey = currentTickFromArray.apyBasePoints;
69
84
  }
@@ -77,7 +92,6 @@ class TicksWrapper {
77
92
  */
78
93
  findTickKeyBySpotPrice(spotPrice) {
79
94
  let closestKey = this.sortedKeys[0] || 0;
80
- // let prevKey: number | null = null
81
95
  // Iterate through sorted keys to ensure order
82
96
  for (const key of this.sortedKeys) {
83
97
  const tick = this.ticksByKey.get(key);
@@ -88,8 +102,6 @@ class TicksWrapper {
88
102
  // If diff is negative, return the previous key (the one we just passed)
89
103
  return closestKey;
90
104
  }
91
- // Update closest key and remember previous
92
- // prevKey = closestKey
93
105
  closestKey = key;
94
106
  }
95
107
  return closestKey;
@@ -152,6 +164,119 @@ class TicksWrapper {
152
164
  const tick = this.ticksByKey.get(key);
153
165
  return tick?.liquidityNet ?? 0n;
154
166
  }
167
+ clamp01(value) {
168
+ if (!Number.isFinite(value))
169
+ return 0;
170
+ if (value <= 0)
171
+ return 0;
172
+ if (value >= 1)
173
+ return 1;
174
+ return value;
175
+ }
176
+ ratioToPrecise(value) {
177
+ const clamped = this.clamp01(value);
178
+ if (clamped <= 0)
179
+ return 0n;
180
+ if (clamped >= 1)
181
+ return PRECISE_NUMBER_DENOM;
182
+ return BigInt(Math.round(clamped * Number(PRECISE_NUMBER_DENOM)));
183
+ }
184
+ scaleByRatioFloor(value, ratioScaled) {
185
+ return (value * ratioScaled) / PRECISE_NUMBER_DENOM;
186
+ }
187
+ splitPrincipalsAfterInsert(insertedKey, snap) {
188
+ const leftKey = this.predecessorKey(insertedKey);
189
+ const rightKey = this.successorKey(insertedKey);
190
+ if (leftKey == null || rightKey == null) {
191
+ return;
192
+ }
193
+ const leftTick = this.ticksByKey.get(leftKey);
194
+ const insertedTick = this.ticksByKey.get(insertedKey);
195
+ if (!leftTick || !insertedTick) {
196
+ return;
197
+ }
198
+ const lowerPrice = this.getSpotPrice(leftKey);
199
+ const insertedPrice = this.getSpotPrice(insertedKey);
200
+ const upperPrice = this.getSpotPrice(rightKey);
201
+ const du = upperPrice - lowerPrice;
202
+ const rLen = du <= 0 ? 0 : this.clamp01((insertedPrice - lowerPrice) / du);
203
+ const rLenScaled = this.ratioToPrecise(rLen);
204
+ const uPtR = Math.min(upperPrice, this.currentSpotPrice);
205
+ const duPtTot = uPtR - lowerPrice;
206
+ const duPtLeft = Math.min(insertedPrice, this.currentSpotPrice) - lowerPrice;
207
+ const rPt = duPtTot <= 0 ? 1 : this.clamp01(duPtLeft / duPtTot);
208
+ const rPtScaled = this.ratioToPrecise(rPt);
209
+ const uSyL = Math.max(lowerPrice, this.currentSpotPrice);
210
+ const cL = snap.getEffectivePrice(uSyL);
211
+ const cM = snap.getEffectivePrice(Math.min(Math.max(insertedPrice, this.currentSpotPrice), upperPrice));
212
+ const cR = snap.getEffectivePrice(upperPrice);
213
+ const dcTot = cL - cR;
214
+ const dcLeft = cL - cM;
215
+ const rSy = dcTot <= 0 ? 1 : this.clamp01(dcLeft / dcTot);
216
+ const rSyScaled = this.ratioToPrecise(rSy);
217
+ const ptLowerBefore = leftTick.principalPt;
218
+ const syLowerBefore = leftTick.principalSy;
219
+ const supplyLowerBefore = leftTick.principalShareSupply;
220
+ const ptLeft = this.scaleByRatioFloor(ptLowerBefore, rPtScaled);
221
+ const syLeft = this.scaleByRatioFloor(syLowerBefore, rSyScaled);
222
+ const supplyLeft = this.scaleByRatioFloor(supplyLowerBefore, rLenScaled);
223
+ leftTick.principalPt = ptLeft;
224
+ leftTick.principalSy = syLeft;
225
+ leftTick.principalShareSupply = supplyLeft;
226
+ insertedTick.principalPt += ptLowerBefore - ptLeft;
227
+ insertedTick.principalSy += syLowerBefore - syLeft;
228
+ insertedTick.principalShareSupply += supplyLowerBefore - supplyLeft;
229
+ }
230
+ upsertBoundaryTick(key, snap) {
231
+ if (this.ticksByKey.has(key)) {
232
+ return;
233
+ }
234
+ const templateTick = this.baseTicksTree[0];
235
+ const newTick = {
236
+ liquidityNet: 0n,
237
+ liquidityGross: 0n,
238
+ feeGrowthOutsidePt: 0n,
239
+ feeGrowthOutsideSy: 0n,
240
+ impliedRate: 1 + key / TICK_KEY_BASE_POINTS,
241
+ principalPt: 0n,
242
+ principalSy: 0n,
243
+ apyBasePoints: key,
244
+ principalShareSupply: 0n,
245
+ farms: templateTick ? templateTick.farms.map(() => ({ lastSeenIndex: 0 })) : [],
246
+ emissions: templateTick
247
+ ? templateTick.emissions.map(() => ({ lastSeenIndex: 0, lastPositionIndex: 0 }))
248
+ : [],
249
+ lastSplitEpoch: 0n,
250
+ frozenLiquidity: 0n,
251
+ };
252
+ this.baseTicksTree.push(newTick);
253
+ this.ticksByKey.set(key, newTick);
254
+ this.sortedKeys.push(key);
255
+ this.sortedKeys.sort((a, b) => a - b);
256
+ this.splitPrincipalsAfterInsert(key, snap);
257
+ }
258
+ setPrincipals(key, principalPt, principalSy) {
259
+ const tick = this.ticksByKey.get(key);
260
+ if (!tick)
261
+ return;
262
+ tick.principalPt = principalPt < 0n ? 0n : principalPt;
263
+ tick.principalSy = principalSy < 0n ? 0n : principalSy;
264
+ }
265
+ toTicks(currentTickKey, currentSpotPrice, currentPrefixSum) {
266
+ const currentTickIdx = this.baseTicksTree.findIndex((tick) => tick.apyBasePoints === currentTickKey);
267
+ const fallbackTickKey = this.findTickKeyBySpotPrice(currentSpotPrice);
268
+ const fallbackTickIdx = this.baseTicksTree.findIndex((tick) => tick.apyBasePoints === fallbackTickKey);
269
+ const resolvedCurrentTick = currentTickIdx >= 0 ? currentTickIdx + 1 : fallbackTickIdx >= 0 ? fallbackTickIdx + 1 : 0;
270
+ return {
271
+ currentTick: resolvedCurrentTick,
272
+ ticksTree: this.baseTicksTree.map(cloneTick),
273
+ market: this.market,
274
+ feeGrowthIndexGlobalPt: this.feeGrowthIndexGlobalPt,
275
+ feeGrowthIndexGlobalSy: this.feeGrowthIndexGlobalSy,
276
+ currentPrefixSum,
277
+ currentSpotPrice,
278
+ };
279
+ }
155
280
  }
156
281
  exports.TicksWrapper = TicksWrapper;
157
282
  /**
@@ -160,7 +285,6 @@ exports.TicksWrapper = TicksWrapper;
160
285
  function normalizedTimeRemaining(secondsRemaining) {
161
286
  return secondsRemaining / SECONDS_PER_YEAR;
162
287
  }
163
- exports.normalizedTimeRemaining = normalizedTimeRemaining;
164
288
  /**
165
289
  * Calculate current fee rate
166
290
  */
@@ -168,7 +292,6 @@ function calculateFeeRate(lnFeeRateRoot, secondsRemaining) {
168
292
  const timeFactor = normalizedTimeRemaining(secondsRemaining);
169
293
  return Math.exp(lnFeeRateRoot * timeFactor);
170
294
  }
171
- exports.calculateFeeRate = calculateFeeRate;
172
295
  /**
173
296
  * Calculate fee from amount
174
297
  * Mirrors Rust: ((amount as f64) * (fee_rate - 1.0)).ceil() as u64
@@ -176,5 +299,4 @@ exports.calculateFeeRate = calculateFeeRate;
176
299
  function getFeeFromAmount(amount, feeRate) {
177
300
  return Math.ceil(amount * (feeRate - 1.0));
178
301
  }
179
- exports.getFeeFromAmount = getFeeFromAmount;
180
302
  //# sourceMappingURL=utilsV2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilsV2.js","sourceRoot":"","sources":["../src/utilsV2.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utilsV2.js","sourceRoot":"","sources":["../src/utilsV2.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPtAndSyOnWithdrawLiquidity = void 0;
3
+ exports.getPtAndSyOnWithdrawLiquidity = getPtAndSyOnWithdrawLiquidity;
4
4
  const utils_1 = require("./utils");
5
5
  function projectAnchorSharesToCurrentTicks(ticks, rootShares) {
6
6
  const SENTINEL = 0xffffffff; // Sentinel value for tree traversal (matches Rust implementation)
7
- const stack = [...rootShares]; // Clone the trackers array
7
+ // Deep clone the trackers to avoid mutating the original objects (important for React Query caching)
8
+ const stack = rootShares.map((s) => ({
9
+ tickIdx: s.tickIdx,
10
+ rightTickIdx: s.rightTickIdx,
11
+ splitEpoch: s.splitEpoch,
12
+ lpShare: s.lpShare,
13
+ emissions: s.emissions.map((e) => ({ staged: e.staged, lastSeenIndex: e.lastSeenIndex })),
14
+ }));
8
15
  const newShares = []; // This will hold the leaf shares
9
16
  while (stack.length > 0) {
10
17
  const principalShare = stack.pop();
@@ -20,7 +27,7 @@ function projectAnchorSharesToCurrentTicks(ticks, rootShares) {
20
27
  const rightIndex = principalShare.rightTickIdx;
21
28
  if (rightIndex !== SENTINEL) {
22
29
  // Find the successor tick (the split point)
23
- const splitedIndex = (0, utils_1.getSuccessorTickByIdx)(ticks, principalShare.tickIdx);
30
+ const splitedIndex = (0, utils_1.getSuccessorTickIdxByIdx)(ticks, principalShare.tickIdx);
24
31
  if (splitedIndex === null) {
25
32
  //? No successor tick found for splitting
26
33
  continue;
@@ -145,7 +152,6 @@ function calculatePtSyRemoval(position, ticks, liquidityToRemove) {
145
152
  const myShares = share.lpShare;
146
153
  const tickNode = ticks.ticksTree.at(share.tickIdx - 1) ?? null;
147
154
  if (!tickNode) {
148
- //? Tick node not found for provided tickIdx
149
155
  continue;
150
156
  }
151
157
  const supply = tickNode.principalShareSupply;
@@ -154,10 +160,10 @@ function calculatePtSyRemoval(position, ticks, liquidityToRemove) {
154
160
  const burnShares = (myShares * liquidityToRemove) / position.lpBalance;
155
161
  // Calculate PT output for this tick
156
162
  // pt_out = principal_pt * burn_shares / supply
157
- const ptOut = (tickNode.principalPt * burnShares) / supply;
163
+ const ptOut = supply > 0n ? (tickNode.principalPt * burnShares) / supply : 0n;
158
164
  // Calculate SY output for this tick
159
165
  // sy_out = principal_sy * burn_shares / supply
160
- const syOut = (tickNode.principalSy * burnShares) / supply;
166
+ const syOut = supply > 0n ? (tickNode.principalSy * burnShares) / supply : 0n;
161
167
  totalPtOut += ptOut;
162
168
  totalSyOut += syOut;
163
169
  }
@@ -170,5 +176,4 @@ function getPtAndSyOnWithdrawLiquidity(marketEmissions, ticks, position, liquidi
170
176
  const updatedPosition = updateLpPositionShares(marketEmissions, ticks, position);
171
177
  return calculatePtSyRemoval(updatedPosition, ticks, liquidityToRemove);
172
178
  }
173
- exports.getPtAndSyOnWithdrawLiquidity = getPtAndSyOnWithdrawLiquidity;
174
179
  //# sourceMappingURL=withdrawLiquidity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"withdrawLiquidity.js","sourceRoot":"","sources":["../src/withdrawLiquidity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"withdrawLiquidity.js","sourceRoot":"","sources":["../src/withdrawLiquidity.ts"],"names":[],"mappings":"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"}
@@ -71,6 +71,13 @@ export interface SellYtSimulationArgs {
71
71
  syExchangeRate: number;
72
72
  /** Optional spot price limit (anti-sandwich) */
73
73
  priceSpotLimit?: number;
74
+ /**
75
+ * Safety margin in basis points to apply to the expected output.
76
+ * This can be used as an optional conservative buffer on top of the simulated output.
77
+ *
78
+ * Default: 0 (no buffer). Set to a positive value to reduce reported output.
79
+ */
80
+ safetyMarginBps?: number;
74
81
  }
75
82
  export interface SellYtSimulationResult {
76
83
  /** Amount of YT sold */