@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.
- package/build/addLiquidity.d.ts +65 -4
- package/build/addLiquidity.js +762 -36
- package/build/addLiquidity.js.map +1 -1
- package/build/bisect.d.ts +11 -0
- package/build/bisect.js +22 -12
- package/build/bisect.js.map +1 -1
- package/build/index.d.ts +5 -4
- package/build/index.js +14 -7
- package/build/index.js.map +1 -1
- package/build/liquidityHistogram.d.ts +6 -1
- package/build/liquidityHistogram.js +57 -12
- package/build/liquidityHistogram.js.map +1 -1
- package/build/quote.d.ts +1 -1
- package/build/quote.js +70 -84
- package/build/quote.js.map +1 -1
- package/build/swap.js +36 -18
- package/build/swap.js.map +1 -1
- package/build/swapV2.d.ts +6 -1
- package/build/swapV2.js +394 -52
- package/build/swapV2.js.map +1 -1
- package/build/types.d.ts +51 -0
- package/build/utils.d.ts +8 -2
- package/build/utils.js +37 -19
- package/build/utils.js.map +1 -1
- package/build/utilsV2.d.ts +9 -0
- package/build/utilsV2.js +131 -9
- package/build/utilsV2.js.map +1 -1
- package/build/withdrawLiquidity.js +12 -7
- package/build/withdrawLiquidity.js.map +1 -1
- package/build/ytTrades.d.ts +7 -0
- package/build/ytTrades.js +166 -146
- package/build/ytTrades.js.map +1 -1
- package/build/ytTradesLegacy.js +3 -4
- package/build/ytTradesLegacy.js.map +1 -1
- package/package.json +2 -2
- package/src/addLiquidity.ts +1012 -38
- package/src/bisect.ts +22 -11
- package/src/index.ts +11 -5
- package/src/liquidityHistogram.ts +54 -9
- package/src/quote.ts +73 -95
- package/src/swap.ts +35 -19
- package/src/swapV2.ts +999 -0
- package/src/types.ts +55 -0
- package/src/utils.ts +24 -3
- package/src/utilsV2.ts +337 -0
- package/src/withdrawLiquidity.ts +12 -6
- package/src/ytTrades.ts +191 -172
- package/src/ytTradesLegacy.ts +419 -0
- package/build/swap-v2.d.ts +0 -20
- package/build/swap-v2.js +0 -261
- package/build/swap-v2.js.map +0 -1
- package/build/swapLegacy.d.ts +0 -16
- package/build/swapLegacy.js +0 -229
- package/build/swapLegacy.js.map +0 -1
- package/src/swapLegacy.ts +0 -272
package/build/quote.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
3
|
+
exports.QuoteDirection = void 0;
|
|
4
|
+
exports.getSwapQuote = getSwapQuote;
|
|
5
|
+
const swapV2_1 = require("./swapV2");
|
|
5
6
|
const types_1 = require("./types");
|
|
6
7
|
const ytTrades_1 = require("./ytTrades");
|
|
7
8
|
var QuoteDirection;
|
|
@@ -13,94 +14,79 @@ var QuoteDirection;
|
|
|
13
14
|
})(QuoteDirection || (exports.QuoteDirection = QuoteDirection = {}));
|
|
14
15
|
/**
|
|
15
16
|
* Calculate the expected output for a given input amount
|
|
16
|
-
* This is a convenience wrapper around
|
|
17
|
+
* This is a convenience wrapper around simulateSwapV2
|
|
17
18
|
*/
|
|
18
19
|
function getSwapQuote(marketState, amountIn, direction) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
currentTick: currentTickIndex,
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
if (direction === QuoteDirection.PtToSy) {
|
|
30
|
-
const { amountInConsumed, amountOut, lpFeeChargedOutToken, protocolFeeChargedOutToken } = (0, swap_1.simulateSwap)(marketStateMutated, {
|
|
31
|
-
direction: types_1.SwapDirection.PtToSy,
|
|
32
|
-
amountIn,
|
|
33
|
-
syExchangeRate: marketStateMutated.currentSyExchangeRate,
|
|
34
|
-
isCurrentFlashSwap: false,
|
|
35
|
-
});
|
|
36
|
-
return {
|
|
37
|
-
amountIn: amountInConsumed,
|
|
38
|
-
amountOut: amountOut,
|
|
39
|
-
lpFee: lpFeeChargedOutToken,
|
|
40
|
-
protocolFee: protocolFeeChargedOutToken,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
if (direction === QuoteDirection.SyToPt) {
|
|
44
|
-
const { amountInConsumed, amountOut, lpFeeChargedOutToken, protocolFeeChargedOutToken } = (0, swap_1.simulateSwap)(marketStateMutated, {
|
|
45
|
-
direction: types_1.SwapDirection.SyToPt,
|
|
46
|
-
amountIn,
|
|
47
|
-
syExchangeRate: marketStateMutated.currentSyExchangeRate,
|
|
48
|
-
isCurrentFlashSwap: false,
|
|
49
|
-
});
|
|
50
|
-
return {
|
|
51
|
-
amountIn: amountInConsumed,
|
|
52
|
-
amountOut: amountOut,
|
|
53
|
-
lpFee: lpFeeChargedOutToken,
|
|
54
|
-
protocolFee: protocolFeeChargedOutToken,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
if (direction === QuoteDirection.YtToSy) {
|
|
58
|
-
const { ytIn, netSyReceived, lpFee, protocolFee } = (0, ytTrades_1.simulateSellYt)(marketStateMutated, {
|
|
59
|
-
ytIn: amountIn,
|
|
60
|
-
syExchangeRate: marketStateMutated.currentSyExchangeRate,
|
|
61
|
-
});
|
|
62
|
-
return {
|
|
63
|
-
amountIn: ytIn,
|
|
64
|
-
amountOut: netSyReceived,
|
|
65
|
-
lpFee: lpFee,
|
|
66
|
-
protocolFee: protocolFee,
|
|
20
|
+
try {
|
|
21
|
+
const marketStateMutated = {
|
|
22
|
+
...marketState,
|
|
23
|
+
ticks: {
|
|
24
|
+
...marketState.ticks,
|
|
25
|
+
currentTick: marketState.ticks.currentTick,
|
|
26
|
+
},
|
|
67
27
|
};
|
|
28
|
+
if (direction === QuoteDirection.PtToSy) {
|
|
29
|
+
const { amountInConsumed, amountOut, lpFeeChargedOutToken, protocolFeeChargedOutToken } = (0, swapV2_1.simulateSwap)(marketStateMutated, {
|
|
30
|
+
direction: types_1.SwapDirection.PtToSy,
|
|
31
|
+
amountIn,
|
|
32
|
+
syExchangeRate: marketStateMutated.currentSyExchangeRate,
|
|
33
|
+
isCurrentFlashSwap: false,
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
amountIn: amountInConsumed,
|
|
37
|
+
amountOut: amountOut,
|
|
38
|
+
lpFee: lpFeeChargedOutToken,
|
|
39
|
+
protocolFee: protocolFeeChargedOutToken,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (direction === QuoteDirection.SyToPt) {
|
|
43
|
+
const { amountInConsumed, amountOut, lpFeeChargedOutToken, protocolFeeChargedOutToken } = (0, swapV2_1.simulateSwap)(marketStateMutated, {
|
|
44
|
+
direction: types_1.SwapDirection.SyToPt,
|
|
45
|
+
amountIn,
|
|
46
|
+
syExchangeRate: marketStateMutated.currentSyExchangeRate,
|
|
47
|
+
isCurrentFlashSwap: false,
|
|
48
|
+
});
|
|
49
|
+
return {
|
|
50
|
+
amountIn: amountInConsumed,
|
|
51
|
+
amountOut: amountOut,
|
|
52
|
+
lpFee: lpFeeChargedOutToken,
|
|
53
|
+
protocolFee: protocolFeeChargedOutToken,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (direction === QuoteDirection.YtToSy) {
|
|
57
|
+
const { ytIn, netSyReceived, lpFee, protocolFee } = (0, ytTrades_1.simulateSellYt)(marketStateMutated, {
|
|
58
|
+
ytIn: amountIn,
|
|
59
|
+
syExchangeRate: marketStateMutated.currentSyExchangeRate,
|
|
60
|
+
});
|
|
61
|
+
return {
|
|
62
|
+
amountIn: ytIn,
|
|
63
|
+
amountOut: netSyReceived,
|
|
64
|
+
lpFee: lpFee,
|
|
65
|
+
protocolFee: protocolFee,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
if (direction === QuoteDirection.SyToYt) {
|
|
69
|
+
const { ytOut, netSyCost, lpFee, protocolFee } = (0, ytTrades_1.simulateBuyYtWithSyIn)(marketStateMutated, {
|
|
70
|
+
syIn: amountIn,
|
|
71
|
+
syExchangeRate: marketStateMutated.currentSyExchangeRate,
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
amountIn: netSyCost,
|
|
75
|
+
amountOut: ytOut,
|
|
76
|
+
lpFee: lpFee,
|
|
77
|
+
protocolFee,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
throw new Error(`Unknown quote direction: ${direction}`);
|
|
68
81
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
syIn: amountIn,
|
|
72
|
-
syExchangeRate: marketStateMutated.currentSyExchangeRate,
|
|
73
|
-
});
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.error("Unable to get swap quote", error);
|
|
74
84
|
return {
|
|
75
|
-
amountIn
|
|
76
|
-
amountOut:
|
|
77
|
-
lpFee:
|
|
78
|
-
protocolFee,
|
|
85
|
+
amountIn,
|
|
86
|
+
amountOut: 0,
|
|
87
|
+
lpFee: 0,
|
|
88
|
+
protocolFee: 0,
|
|
79
89
|
};
|
|
80
90
|
}
|
|
81
|
-
throw new Error(`Unknown quote direction: ${direction}`);
|
|
82
|
-
}
|
|
83
|
-
exports.getSwapQuote = getSwapQuote;
|
|
84
|
-
/**
|
|
85
|
-
* Calculate the correct currentTick index for the market state
|
|
86
|
-
*
|
|
87
|
-
* IMPORTANT: currentTick must be a 1-based ARRAY INDEX, not apyBasePoints!
|
|
88
|
-
* The simulateSwap function uses findTickByIndex which does: ticksTree.at(index - 1)
|
|
89
|
-
*
|
|
90
|
-
* @returns The 1-based array index of the tick where impliedRate <= currentSpotPrice
|
|
91
|
-
*/
|
|
92
|
-
function calculateCurrentTickIndex(ticksData) {
|
|
93
|
-
// Find the tick with highest impliedRate <= currentSpotPrice
|
|
94
|
-
let currentTickApyBps = ticksData.ticksTree[0]?.apyBasePoints || 0;
|
|
95
|
-
for (const tick of ticksData.ticksTree) {
|
|
96
|
-
const tickRate = Number(tick.impliedRate);
|
|
97
|
-
if (tickRate <= ticksData.currentSpotPrice) {
|
|
98
|
-
currentTickApyBps = tick.apyBasePoints;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// Find the array index (0-based) of this tick
|
|
102
|
-
const arrayIndex = ticksData.ticksTree.findIndex((t) => t.apyBasePoints === currentTickApyBps);
|
|
103
|
-
// Convert to 1-based index for simulateSwap
|
|
104
|
-
return arrayIndex !== -1 ? arrayIndex + 1 : 1;
|
|
105
91
|
}
|
|
106
92
|
//# sourceMappingURL=quote.js.map
|
package/build/quote.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../src/quote.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../src/quote.ts"],"names":[],"mappings":"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"}
|
package/build/swap.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.simulateSwap =
|
|
3
|
+
exports.simulateSwap = simulateSwap;
|
|
4
4
|
/**
|
|
5
5
|
* CLMM Swap simulation - V2
|
|
6
6
|
* Updated to match the latest Rust on-chain implementation
|
|
@@ -61,23 +61,23 @@ function simulateSwap(marketState, args) {
|
|
|
61
61
|
iterations++;
|
|
62
62
|
if (debug)
|
|
63
63
|
console.log(`\n--- Iteration ${iterations}, amountInLeft=${amountInLeft} ---`);
|
|
64
|
-
// Get right boundary of current interval
|
|
65
|
-
const rightBoundaryIndexOpt = (0, utils_1.
|
|
64
|
+
// Get right boundary of current interval (successor tick index)
|
|
65
|
+
const rightBoundaryIndexOpt = (0, utils_1.getSuccessorTickIdxByIdx)(ticks, currentLeftBoundaryIndex);
|
|
66
66
|
if (debug)
|
|
67
67
|
console.log(`rightBoundary=${rightBoundaryIndexOpt}`);
|
|
68
68
|
if (rightBoundaryIndexOpt === null) {
|
|
69
69
|
if (args.direction === types_1.SwapDirection.SyToPt) {
|
|
70
70
|
// Cross to create a new interval
|
|
71
|
-
const
|
|
72
|
-
if (
|
|
71
|
+
const predecessorIdx = (0, utils_1.getPredecessorTickIdxByIdx)(ticks, currentLeftBoundaryIndex);
|
|
72
|
+
if (predecessorIdx === null)
|
|
73
73
|
break;
|
|
74
74
|
// Update active liquidity by subtracting liquidity_net at boundary
|
|
75
|
-
const boundaryTick = (0, utils_1.
|
|
75
|
+
const boundaryTick = (0, utils_1.findTickByIndex)(ticks, currentLeftBoundaryIndex);
|
|
76
76
|
// When crossing downward (SyToPt), update state
|
|
77
|
-
currentPriceSpot = (0, utils_1.getImpliedRate)(
|
|
78
|
-
currentLeftBoundaryIndex =
|
|
77
|
+
currentPriceSpot = (0, utils_1.getImpliedRate)(boundaryTick?.apyBasePoints ?? 0); // Boundary we're crossing
|
|
78
|
+
currentLeftBoundaryIndex = predecessorIdx; // New left boundary
|
|
79
79
|
if (boundaryTick) {
|
|
80
|
-
activeLiquidityU64 = (0, utils_1.bigIntMax)(0n, activeLiquidityU64 - boundaryTick.
|
|
80
|
+
activeLiquidityU64 = (0, utils_1.bigIntMax)(0n, activeLiquidityU64 - boundaryTick.liquidityNet);
|
|
81
81
|
activeLiquidityF64 = Number(activeLiquidityU64);
|
|
82
82
|
}
|
|
83
83
|
continue;
|
|
@@ -132,7 +132,17 @@ function simulateSwap(marketState, args) {
|
|
|
132
132
|
const syOutGross = Math.floor(lTradeF64 * (cEffOld - cEffNew));
|
|
133
133
|
const syOutGrossClamped = Math.min(syOutGross, Number(principalSy));
|
|
134
134
|
if (syOutGrossClamped > 0) {
|
|
135
|
-
|
|
135
|
+
// For flash swaps, fee is based on YT value = (pt - sy × sy_exchange_rate) / sy_exchange_rate (in SY terms)
|
|
136
|
+
let totalFeeOut;
|
|
137
|
+
if (args.isCurrentFlashSwap) {
|
|
138
|
+
const syOutBase = syOutGrossClamped * args.syExchangeRate;
|
|
139
|
+
const ytValueBase = ptInSegment - syOutBase;
|
|
140
|
+
const ytValueSy = ytValueBase / args.syExchangeRate;
|
|
141
|
+
totalFeeOut = (0, utils_1.getFeeFromAmount)(Math.max(0, Math.floor(ytValueSy)), lpFeeRate);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
totalFeeOut = (0, utils_1.getFeeFromAmount)(syOutGrossClamped, lpFeeRate);
|
|
145
|
+
}
|
|
136
146
|
const protocolFeeOut = Math.floor((totalFeeOut * protocolFeeBps) / BASE_POINTS);
|
|
137
147
|
const lpFeeOut = totalFeeOut - protocolFeeOut;
|
|
138
148
|
const syOutNet = syOutGrossClamped - totalFeeOut;
|
|
@@ -165,7 +175,7 @@ function simulateSwap(marketState, args) {
|
|
|
165
175
|
}
|
|
166
176
|
if (deltaCToLeftBoundary <= eps) {
|
|
167
177
|
// Cross boundary to the left
|
|
168
|
-
const predecessor = (0, utils_1.
|
|
178
|
+
const predecessor = (0, utils_1.getPredecessorTickIdxByIdx)(ticks, currentLeftBoundaryIndex);
|
|
169
179
|
if (predecessor === null)
|
|
170
180
|
break;
|
|
171
181
|
// Update active liquidity by subtracting liquidity_net at boundary
|
|
@@ -174,7 +184,7 @@ function simulateSwap(marketState, args) {
|
|
|
174
184
|
activeLiquidityU64 = (0, utils_1.bigIntMax)(0n, activeLiquidityU64 - boundaryTick.liquidityNet);
|
|
175
185
|
activeLiquidityF64 = Number(activeLiquidityU64);
|
|
176
186
|
}
|
|
177
|
-
currentPriceSpot = (0, utils_1.getImpliedRate)(
|
|
187
|
+
currentPriceSpot = (0, utils_1.getImpliedRate)(boundaryTick?.apyBasePoints ?? 0);
|
|
178
188
|
currentLeftBoundaryIndex = predecessor;
|
|
179
189
|
continue;
|
|
180
190
|
}
|
|
@@ -195,7 +205,7 @@ function simulateSwap(marketState, args) {
|
|
|
195
205
|
}
|
|
196
206
|
if (ptOutGrossU64 === 0n) {
|
|
197
207
|
// Nothing to pay out; try to cross
|
|
198
|
-
const predecessor = (0, utils_1.
|
|
208
|
+
const predecessor = (0, utils_1.getPredecessorTickIdxByIdx)(ticks, currentLeftBoundaryIndex);
|
|
199
209
|
if (predecessor === null)
|
|
200
210
|
break;
|
|
201
211
|
// Update active liquidity
|
|
@@ -204,12 +214,21 @@ function simulateSwap(marketState, args) {
|
|
|
204
214
|
activeLiquidityU64 = (0, utils_1.bigIntMax)(0n, activeLiquidityU64 - boundaryTick.liquidityNet);
|
|
205
215
|
activeLiquidityF64 = Number(activeLiquidityU64);
|
|
206
216
|
}
|
|
207
|
-
currentPriceSpot = (0, utils_1.getImpliedRate)(
|
|
217
|
+
currentPriceSpot = (0, utils_1.getImpliedRate)(boundaryTick?.apyBasePoints ?? 0);
|
|
208
218
|
currentLeftBoundaryIndex = predecessor;
|
|
209
219
|
continue;
|
|
210
220
|
}
|
|
211
221
|
// Fees in token_out (PT)
|
|
212
|
-
|
|
222
|
+
// For flash swaps, fee is based on YT value = pt - sy × sy_exchange_rate
|
|
223
|
+
let totalFeeOut;
|
|
224
|
+
if (args.isCurrentFlashSwap) {
|
|
225
|
+
const syInBase = Number(syInSegmentU64) * args.syExchangeRate;
|
|
226
|
+
const ytValue = Number(ptOutGrossU64) - syInBase;
|
|
227
|
+
totalFeeOut = (0, utils_1.getFeeFromAmount)(Math.max(0, Math.floor(ytValue)), lpFeeRate);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
totalFeeOut = (0, utils_1.getFeeFromAmount)(Number(ptOutGrossU64), lpFeeRate);
|
|
231
|
+
}
|
|
213
232
|
const protocolFeeOut = Math.floor((totalFeeOut * protocolFeeBps) / BASE_POINTS);
|
|
214
233
|
const lpFeeOut = totalFeeOut - protocolFeeOut;
|
|
215
234
|
const ptOutNet = Number(ptOutGrossU64) - totalFeeOut;
|
|
@@ -222,7 +241,7 @@ function simulateSwap(marketState, args) {
|
|
|
222
241
|
currentPriceSpot = spotPriceNew;
|
|
223
242
|
// If we hit boundary, cross
|
|
224
243
|
if (Math.abs(currentPriceSpot - anchorULeft) <= eps && amountInLeft > 0) {
|
|
225
|
-
const predecessor = (0, utils_1.
|
|
244
|
+
const predecessor = (0, utils_1.getPredecessorTickIdxByIdx)(ticks, currentLeftBoundaryIndex);
|
|
226
245
|
if (predecessor === null)
|
|
227
246
|
break;
|
|
228
247
|
// Update active liquidity
|
|
@@ -231,7 +250,7 @@ function simulateSwap(marketState, args) {
|
|
|
231
250
|
activeLiquidityU64 = (0, utils_1.bigIntMax)(0n, activeLiquidityU64 - boundaryTick.liquidityNet);
|
|
232
251
|
activeLiquidityF64 = Number(activeLiquidityU64);
|
|
233
252
|
}
|
|
234
|
-
currentPriceSpot = (0, utils_1.getImpliedRate)(
|
|
253
|
+
currentPriceSpot = (0, utils_1.getImpliedRate)(boundaryTick?.apyBasePoints ?? 0);
|
|
235
254
|
currentLeftBoundaryIndex = predecessor;
|
|
236
255
|
}
|
|
237
256
|
}
|
|
@@ -245,5 +264,4 @@ function simulateSwap(marketState, args) {
|
|
|
245
264
|
finalTickIndex: currentLeftBoundaryIndex,
|
|
246
265
|
};
|
|
247
266
|
}
|
|
248
|
-
exports.simulateSwap = simulateSwap;
|
|
249
267
|
//# sourceMappingURL=swap.js.map
|
package/build/swap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../src/swap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../src/swap.ts"],"names":[],"mappings":"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"}
|
package/build/swapV2.d.ts
CHANGED
|
@@ -3,9 +3,14 @@
|
|
|
3
3
|
* Closely mirrors the Rust on-chain implementation from swap.rs
|
|
4
4
|
* Uses TicksWrapper to simulate RB-tree behavior
|
|
5
5
|
*/
|
|
6
|
-
import { MarketThreeState, SwapArgs, SwapOutcomeV2 } from "./types";
|
|
6
|
+
import { MarketThreeState, SwapArgs, SwapExactOutArgs, SwapOutcomeV2 } from "./types";
|
|
7
7
|
/**
|
|
8
8
|
* Simulate a swap on the CLMM market (V2 - mirrors Rust closely)
|
|
9
9
|
* This is a pure function that does not mutate the market state
|
|
10
10
|
*/
|
|
11
11
|
export declare function simulateSwap(marketState: MarketThreeState, args: SwapArgs): SwapOutcomeV2;
|
|
12
|
+
/**
|
|
13
|
+
* Simulate a swap exact-out on the CLMM market.
|
|
14
|
+
* Mirrors on-chain swap_exact_out (currently only SyToPt is supported).
|
|
15
|
+
*/
|
|
16
|
+
export declare function simulateSwapExactOut(marketState: MarketThreeState, args: SwapExactOutArgs): SwapOutcomeV2;
|