@paraswap/dex-lib 2.23.4 → 2.24.1-algebra-event-based-quickswapv3.0

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 (148) hide show
  1. package/build/abi/algebra/AlgebraPool.abi.json +727 -0
  2. package/build/abi/algebra/AlgebraQuoter.abi.json +138 -0
  3. package/build/abi/algebra/AlgebraStateMulticall.abi.json +801 -0
  4. package/build/config.js +2 -2
  5. package/build/constants.d.ts +1 -0
  6. package/build/constants.js +1 -0
  7. package/build/constants.js.map +1 -1
  8. package/build/dex/algebra/algebra-pool.d.ts +41 -0
  9. package/build/dex/algebra/algebra-pool.js +272 -0
  10. package/build/dex/algebra/algebra-pool.js.map +1 -0
  11. package/build/dex/algebra/algebra.d.ts +53 -0
  12. package/build/dex/algebra/algebra.js +460 -0
  13. package/build/dex/algebra/algebra.js.map +1 -0
  14. package/build/dex/{woo-fi → algebra}/config.d.ts +1 -1
  15. package/build/dex/algebra/config.js +41 -0
  16. package/build/dex/algebra/config.js.map +1 -0
  17. package/build/dex/algebra/lib/AlgebraMath.d.ts +13 -0
  18. package/build/dex/algebra/lib/AlgebraMath.js +440 -0
  19. package/build/dex/algebra/lib/AlgebraMath.js.map +1 -0
  20. package/build/dex/algebra/lib/Constants.d.ts +5 -0
  21. package/build/dex/algebra/lib/Constants.js +10 -0
  22. package/build/dex/algebra/lib/Constants.js.map +1 -0
  23. package/build/dex/algebra/types.d.ts +75 -0
  24. package/build/dex/{woo-fi → algebra}/types.js.map +1 -1
  25. package/build/dex/algebra/utils.d.ts +4 -0
  26. package/build/dex/algebra/utils.js +60 -0
  27. package/build/dex/algebra/utils.js.map +1 -0
  28. package/build/dex/index.js +2 -0
  29. package/build/dex/index.js.map +1 -1
  30. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.d.ts +0 -2
  31. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js +3 -23
  32. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js.map +1 -1
  33. package/build/dex/quickswap/config.js +1 -8
  34. package/build/dex/quickswap/config.js.map +1 -1
  35. package/build/dex/quickswap/quickswap-v3.js +2 -1
  36. package/build/dex/quickswap/quickswap-v3.js.map +1 -1
  37. package/build/dex/uniswap-v3/config.js +32 -0
  38. package/build/dex/uniswap-v3/config.js.map +1 -1
  39. package/build/dex/uniswap-v3/contract-math/Tick.d.ts +2 -2
  40. package/build/dex/uniswap-v3/contract-math/Tick.js.map +1 -1
  41. package/build/dex/uniswap-v3/contract-math/TickBitMap.d.ts +2 -2
  42. package/build/dex/uniswap-v3/contract-math/TickBitMap.js.map +1 -1
  43. package/build/dex/uniswap-v3/contract-math/uniswap-v3-math.d.ts +19 -0
  44. package/build/dex/uniswap-v3/contract-math/uniswap-v3-math.js +2 -1
  45. package/build/dex/uniswap-v3/contract-math/uniswap-v3-math.js.map +1 -1
  46. package/build/dex/uniswap-v3/contract-math/utils.d.ts +4 -0
  47. package/build/dex/uniswap-v3/contract-math/utils.js +25 -1
  48. package/build/dex/uniswap-v3/contract-math/utils.js.map +1 -1
  49. package/build/dex/uniswap-v3/uniswap-v3-pool.d.ts +0 -2
  50. package/build/dex/uniswap-v3/uniswap-v3-pool.js +3 -23
  51. package/build/dex/uniswap-v3/uniswap-v3-pool.js.map +1 -1
  52. package/build/dex/uniswap-v3/uniswap-v3.js +5 -3
  53. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  54. package/build/dex/weth/config.js +3 -0
  55. package/build/dex/weth/config.js.map +1 -1
  56. package/build/utils.d.ts +10 -0
  57. package/build/utils.js +15 -1
  58. package/build/utils.js.map +1 -1
  59. package/package.json +1 -1
  60. package/src/abi/algebra/AlgebraPool.abi.json +727 -0
  61. package/src/abi/algebra/AlgebraQuoter.abi.json +138 -0
  62. package/src/abi/algebra/AlgebraStateMulticall.abi.json +801 -0
  63. package/src/config.ts +2 -2
  64. package/src/constants.ts +1 -0
  65. package/src/dex/algebra/algebra-e2e.test.ts +158 -0
  66. package/src/dex/algebra/algebra-events.test.ts +120 -0
  67. package/src/dex/algebra/algebra-integration.test.ts +257 -0
  68. package/src/dex/algebra/algebra-pool.ts +454 -0
  69. package/src/dex/algebra/algebra.ts +709 -0
  70. package/src/dex/algebra/config.ts +45 -0
  71. package/src/dex/algebra/lib/AlgebraMath.ts +676 -0
  72. package/src/dex/algebra/lib/Constants.ts +5 -0
  73. package/src/dex/algebra/types.ts +82 -0
  74. package/src/dex/algebra/utils.ts +68 -0
  75. package/src/dex/index.ts +2 -0
  76. package/src/dex/pancakeswap-v3/pancakeswap-v3-pool.ts +6 -41
  77. package/src/dex/quickswap/config.ts +1 -9
  78. package/src/dex/quickswap/quickswap-v3.ts +2 -1
  79. package/src/dex/uniswap-v3/config.ts +34 -0
  80. package/src/dex/uniswap-v3/contract-math/Tick.ts +2 -2
  81. package/src/dex/uniswap-v3/contract-math/TickBitMap.ts +6 -2
  82. package/src/dex/uniswap-v3/contract-math/uniswap-v3-math.ts +3 -3
  83. package/src/dex/uniswap-v3/contract-math/utils.ts +42 -0
  84. package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +110 -0
  85. package/src/dex/uniswap-v3/uniswap-v3-pool.ts +3 -41
  86. package/src/dex/uniswap-v3/uniswap-v3.ts +9 -3
  87. package/src/dex/weth/config.ts +3 -0
  88. package/src/utils.ts +17 -0
  89. package/.idea/aws.xml +0 -17
  90. package/.idea/codeStyles/Project.xml +0 -19
  91. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  92. package/.idea/misc.xml +0 -6
  93. package/.idea/modules.xml +0 -8
  94. package/.idea/paraswap-dex-lib.iml +0 -9
  95. package/.idea/vcs.xml +0 -6
  96. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3QuoterV2.abi.json +0 -285
  97. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3Router.abi.json +0 -583
  98. package/build/abi/woo-fi/WooFeeManager.abi.json +0 -318
  99. package/build/abi/woo-fi/WooPP.abi.json +0 -548
  100. package/build/abi/woo-fi/Wooracle.abi.json +0 -260
  101. package/build/dex/aave-v3/tokens/arbitrum.json +0 -50
  102. package/build/dex/aave-v3/tokens/avalanche.json +0 -74
  103. package/build/dex/aave-v3/tokens/fantom.json +0 -62
  104. package/build/dex/aave-v3/tokens/optimism.json +0 -50
  105. package/build/dex/aave-v3/tokens/polygon.json +0 -116
  106. package/build/dex/balancer-v2/LinearMath.d.ts +0 -19
  107. package/build/dex/balancer-v2/LinearMath.js +0 -179
  108. package/build/dex/balancer-v2/LinearMath.js.map +0 -1
  109. package/build/dex/balancer-v2/LinearPool.d.ts +0 -47
  110. package/build/dex/balancer-v2/LinearPool.js +0 -324
  111. package/build/dex/balancer-v2/LinearPool.js.map +0 -1
  112. package/build/dex/balancer-v2/PhantomStablePool.d.ts +0 -47
  113. package/build/dex/balancer-v2/PhantomStablePool.js +0 -294
  114. package/build/dex/balancer-v2/PhantomStablePool.js.map +0 -1
  115. package/build/dex/balancer-v2/StableMath.d.ts +0 -9
  116. package/build/dex/balancer-v2/StableMath.js +0 -272
  117. package/build/dex/balancer-v2/StableMath.js.map +0 -1
  118. package/build/dex/balancer-v2/balancer-v2-pool.d.ts +0 -75
  119. package/build/dex/balancer-v2/balancer-v2-pool.js +0 -417
  120. package/build/dex/balancer-v2/balancer-v2-pool.js.map +0 -1
  121. package/build/dex/pancakeswap-v3/types.d.ts +0 -14
  122. package/build/dex/pancakeswap-v3/types.js.map +0 -1
  123. package/build/dex/quickswap-v3.d.ts +0 -21
  124. package/build/dex/quickswap-v3.js +0 -40
  125. package/build/dex/quickswap-v3.js.map +0 -1
  126. package/build/dex/solidly/forks-override/ramses.d.ts +0 -8
  127. package/build/dex/solidly/forks-override/ramses.js +0 -15
  128. package/build/dex/solidly/forks-override/ramses.js.map +0 -1
  129. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.d.ts +0 -12
  130. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js +0 -23
  131. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js.map +0 -1
  132. package/build/dex/woo-fi/config.js +0 -141
  133. package/build/dex/woo-fi/config.js.map +0 -1
  134. package/build/dex/woo-fi/constants.d.ts +0 -5
  135. package/build/dex/woo-fi/constants.js +0 -20
  136. package/build/dex/woo-fi/constants.js.map +0 -1
  137. package/build/dex/woo-fi/types.d.ts +0 -48
  138. package/build/dex/woo-fi/types.js +0 -3
  139. package/build/dex/woo-fi/woo-fi-decimal-math.d.ts +0 -14
  140. package/build/dex/woo-fi/woo-fi-decimal-math.js +0 -42
  141. package/build/dex/woo-fi/woo-fi-decimal-math.js.map +0 -1
  142. package/build/dex/woo-fi/woo-fi-math.d.ts +0 -31
  143. package/build/dex/woo-fi/woo-fi-math.js +0 -300
  144. package/build/dex/woo-fi/woo-fi-math.js.map +0 -1
  145. package/build/dex/woo-fi/woo-fi.d.ts +0 -65
  146. package/build/dex/woo-fi/woo-fi.js +0 -480
  147. package/build/dex/woo-fi/woo-fi.js.map +0 -1
  148. /package/build/dex/{pancakeswap-v3 → algebra}/types.js +0 -0
@@ -0,0 +1,440 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AlgebraMath = void 0;
7
+ const core_1 = require("@paraswap/core");
8
+ const Tick_1 = require("../../uniswap-v3/contract-math/Tick");
9
+ const TickBitMap_1 = require("../../uniswap-v3/contract-math/TickBitMap");
10
+ const SqrtPriceMath_1 = require("../../uniswap-v3/contract-math/SqrtPriceMath");
11
+ const TickMath_1 = require("../../uniswap-v3/contract-math/TickMath");
12
+ const LiquidityMath_1 = require("../../uniswap-v3/contract-math/LiquidityMath");
13
+ const utils_1 = require("../../../utils");
14
+ const SwapMath_1 = require("../../uniswap-v3/contract-math/SwapMath");
15
+ const Constants_1 = require("./Constants");
16
+ const bigint_constants_1 = require("../../../bigint-constants");
17
+ const lodash_1 = __importDefault(require("lodash"));
18
+ const uniswap_v3_math_1 = require("../../uniswap-v3/contract-math/uniswap-v3-math");
19
+ const constants_1 = require("../../uniswap-v3/constants");
20
+ // % START OF COPY PASTA FROM UNISWAPV3 %
21
+ function _priceComputationCycles(poolState, ticksCopy, state, cache, sqrtPriceLimitX96, zeroForOne, exactInput) {
22
+ const latestFullCycleState = { ...state };
23
+ if (cache.tickCount == 0) {
24
+ cache.tickCount = 1;
25
+ }
26
+ const latestFullCycleCache = { ...cache };
27
+ // We save tick before any change. Later we use this to restore
28
+ // state before last step
29
+ let lastTicksCopy;
30
+ let i = 0;
31
+ for (; state.amountSpecifiedRemaining !== 0n &&
32
+ state.sqrtPriceX96 !== sqrtPriceLimitX96; ++i) {
33
+ if (latestFullCycleCache.tickCount + i >
34
+ constants_1.MAX_PRICING_COMPUTATION_STEPS_ALLOWED) {
35
+ state.amountSpecifiedRemaining = 0n;
36
+ state.amountCalculated = 0n;
37
+ break;
38
+ }
39
+ const step = {
40
+ sqrtPriceStartX96: 0n,
41
+ tickNext: 0n,
42
+ initialized: false,
43
+ sqrtPriceNextX96: 0n,
44
+ amountIn: 0n,
45
+ amountOut: 0n,
46
+ feeAmount: 0n,
47
+ };
48
+ step.sqrtPriceStartX96 = state.sqrtPriceX96;
49
+ try {
50
+ [step.tickNext, step.initialized] =
51
+ TickBitMap_1.TickBitMap.nextInitializedTickWithinOneWord(poolState, state.tick, poolState.tickSpacing, zeroForOne, true);
52
+ }
53
+ catch (e) {
54
+ if (e instanceof Error &&
55
+ e.message.endsWith(constants_1.OUT_OF_RANGE_ERROR_POSTFIX)) {
56
+ state.amountSpecifiedRemaining = 0n;
57
+ state.amountCalculated = 0n;
58
+ break;
59
+ }
60
+ throw e;
61
+ }
62
+ if (step.tickNext < TickMath_1.TickMath.MIN_TICK) {
63
+ step.tickNext = TickMath_1.TickMath.MIN_TICK;
64
+ }
65
+ else if (step.tickNext > TickMath_1.TickMath.MAX_TICK) {
66
+ step.tickNext = TickMath_1.TickMath.MAX_TICK;
67
+ }
68
+ step.sqrtPriceNextX96 = TickMath_1.TickMath.getSqrtRatioAtTick(step.tickNext);
69
+ const swapStepResult = SwapMath_1.SwapMath.computeSwapStep(state.sqrtPriceX96, (zeroForOne
70
+ ? step.sqrtPriceNextX96 < sqrtPriceLimitX96
71
+ : step.sqrtPriceNextX96 > sqrtPriceLimitX96)
72
+ ? sqrtPriceLimitX96
73
+ : step.sqrtPriceNextX96, state.liquidity, state.amountSpecifiedRemaining, poolState.globalState.fee);
74
+ state.sqrtPriceX96 = swapStepResult.sqrtRatioNextX96;
75
+ step.amountIn = swapStepResult.amountIn;
76
+ step.amountOut = swapStepResult.amountOut;
77
+ step.feeAmount = swapStepResult.feeAmount;
78
+ if (exactInput) {
79
+ state.amountSpecifiedRemaining -= step.amountIn + step.feeAmount;
80
+ state.amountCalculated = state.amountCalculated - step.amountOut;
81
+ }
82
+ else {
83
+ state.amountSpecifiedRemaining += step.amountOut;
84
+ state.amountCalculated =
85
+ state.amountCalculated + step.amountIn + step.feeAmount;
86
+ }
87
+ if (cache.feeProtocol > 0n) {
88
+ const delta = step.feeAmount / cache.feeProtocol;
89
+ step.feeAmount -= delta;
90
+ state.protocolFee += delta;
91
+ }
92
+ if (state.sqrtPriceX96 === step.sqrtPriceNextX96) {
93
+ if (step.initialized) {
94
+ // skip oracle related logic
95
+ if (state.amountSpecifiedRemaining === 0n) {
96
+ const castTickNext = Number(step.tickNext);
97
+ lastTicksCopy = {
98
+ index: castTickNext,
99
+ tick: { ...ticksCopy[castTickNext] },
100
+ };
101
+ }
102
+ let liquidityNet = Tick_1.Tick.cross(ticksCopy, step.tickNext, cache.secondsPerLiquidityCumulativeX128, cache.tickCumulative, cache.blockTimestamp);
103
+ if (zeroForOne)
104
+ liquidityNet = -liquidityNet;
105
+ state.liquidity = LiquidityMath_1.LiquidityMath.addDelta(state.liquidity, liquidityNet);
106
+ }
107
+ state.tick = zeroForOne ? step.tickNext - 1n : step.tickNext;
108
+ }
109
+ else if (state.sqrtPriceX96 != step.sqrtPriceStartX96) {
110
+ state.tick = TickMath_1.TickMath.getTickAtSqrtRatio(state.sqrtPriceX96);
111
+ }
112
+ if (state.amountSpecifiedRemaining !== 0n) {
113
+ (0, uniswap_v3_math_1._updatePriceComputationObjects)(latestFullCycleState, state);
114
+ (0, uniswap_v3_math_1._updatePriceComputationObjects)(latestFullCycleCache, cache);
115
+ // If it last cycle, check if ticks were changed and then restore previous state
116
+ // for next calculations
117
+ }
118
+ else if (lastTicksCopy !== undefined) {
119
+ ticksCopy[lastTicksCopy.index] = lastTicksCopy.tick;
120
+ }
121
+ }
122
+ if (i > 1) {
123
+ latestFullCycleCache.tickCount += i - 1;
124
+ }
125
+ if (state.amountSpecifiedRemaining !== 0n) {
126
+ state.amountSpecifiedRemaining = 0n;
127
+ state.amountCalculated = 0n;
128
+ }
129
+ return [state, { latestFullCycleState, latestFullCycleCache }];
130
+ }
131
+ class AlgebraMathClass {
132
+ queryOutputs(poolState, amounts, zeroForOne, side) {
133
+ const slot0Start = poolState.globalState;
134
+ const isSell = side === core_1.SwapSide.SELL;
135
+ // While calculating, ticks are changing, so to not change the actual state,
136
+ // we use copy
137
+ const ticksCopy = lodash_1.default.cloneDeep(poolState.ticks);
138
+ const sqrtPriceLimitX96 = zeroForOne
139
+ ? TickMath_1.TickMath.MIN_SQRT_RATIO + 1n
140
+ : TickMath_1.TickMath.MAX_SQRT_RATIO - 1n;
141
+ const cache = {
142
+ liquidityStart: poolState.liquidity,
143
+ blockTimestamp: this._blockTimestamp(poolState),
144
+ feeProtocol: zeroForOne
145
+ ? slot0Start.communityFeeToken0 % 16n
146
+ : slot0Start.communityFeeToken1 >> 4n,
147
+ secondsPerLiquidityCumulativeX128: 0n,
148
+ tickCumulative: 0n,
149
+ computedLatestObservation: false,
150
+ tickCount: 0,
151
+ };
152
+ const state = {
153
+ // Will be overwritten later
154
+ amountSpecifiedRemaining: 0n,
155
+ amountCalculated: 0n,
156
+ sqrtPriceX96: slot0Start.price,
157
+ tick: slot0Start.tick,
158
+ protocolFee: 0n,
159
+ liquidity: cache.liquidityStart,
160
+ isFirstCycleState: true,
161
+ };
162
+ let isOutOfRange = false;
163
+ let previousAmount = 0n;
164
+ const outputs = new Array(amounts.length);
165
+ const tickCounts = new Array(amounts.length);
166
+ for (const [i, amount] of amounts.entries()) {
167
+ if (amount === 0n) {
168
+ outputs[i] = 0n;
169
+ tickCounts[i] = 0;
170
+ continue;
171
+ }
172
+ const amountSpecified = isSell
173
+ ? BigInt.asIntN(256, amount)
174
+ : -BigInt.asIntN(256, amount);
175
+ if (state.isFirstCycleState) {
176
+ // Set first non zero amount
177
+ state.amountSpecifiedRemaining = amountSpecified;
178
+ state.isFirstCycleState = false;
179
+ }
180
+ else {
181
+ state.amountSpecifiedRemaining =
182
+ amountSpecified - (previousAmount - state.amountSpecifiedRemaining);
183
+ }
184
+ const exactInput = amountSpecified > 0n;
185
+ (0, utils_1._require)(zeroForOne
186
+ ? sqrtPriceLimitX96 < slot0Start.price &&
187
+ sqrtPriceLimitX96 > TickMath_1.TickMath.MIN_SQRT_RATIO
188
+ : sqrtPriceLimitX96 > slot0Start.price &&
189
+ sqrtPriceLimitX96 < TickMath_1.TickMath.MAX_SQRT_RATIO, 'SPL', { zeroForOne, sqrtPriceLimitX96, slot0Start }, 'zeroForOne ? sqrtPriceLimitX96 < slot0Start.sqrtPriceX96 && sqrtPriceLimitX96 > TickMath.MIN_SQRT_RATIO : sqrtPriceLimitX96 > slot0Start.sqrtPriceX96 && sqrtPriceLimitX96 < TickMath.MAX_SQRT_RATIO');
190
+ if (!isOutOfRange) {
191
+ const [finalState, { latestFullCycleState, latestFullCycleCache }] = _priceComputationCycles(poolState, ticksCopy, state, cache, sqrtPriceLimitX96, zeroForOne, exactInput);
192
+ if (finalState.amountSpecifiedRemaining === 0n &&
193
+ finalState.amountCalculated === 0n) {
194
+ isOutOfRange = true;
195
+ outputs[i] = 0n;
196
+ tickCounts[i] = 0;
197
+ continue;
198
+ }
199
+ // We use it on next step to correct state.amountSpecifiedRemaining
200
+ previousAmount = amountSpecified;
201
+ // First extract calculated values
202
+ const [amount0, amount1] = zeroForOne === exactInput
203
+ ? [
204
+ amountSpecified - finalState.amountSpecifiedRemaining,
205
+ finalState.amountCalculated,
206
+ ]
207
+ : [
208
+ finalState.amountCalculated,
209
+ amountSpecified - finalState.amountSpecifiedRemaining,
210
+ ];
211
+ // Update for next amount
212
+ (0, uniswap_v3_math_1._updatePriceComputationObjects)(state, latestFullCycleState);
213
+ (0, uniswap_v3_math_1._updatePriceComputationObjects)(cache, latestFullCycleCache);
214
+ if (isSell) {
215
+ outputs[i] = BigInt.asUintN(256, -(zeroForOne ? amount1 : amount0));
216
+ tickCounts[i] = latestFullCycleCache.tickCount;
217
+ continue;
218
+ }
219
+ else {
220
+ outputs[i] = zeroForOne
221
+ ? BigInt.asUintN(256, amount0)
222
+ : BigInt.asUintN(256, amount1);
223
+ tickCounts[i] = latestFullCycleCache.tickCount;
224
+ continue;
225
+ }
226
+ }
227
+ else {
228
+ outputs[i] = 0n;
229
+ tickCounts[i] = 0;
230
+ }
231
+ }
232
+ return {
233
+ outputs,
234
+ tickCounts,
235
+ };
236
+ }
237
+ // % END OF COPY PASTA FROM UNISWAPV3 %
238
+ // same as uniswapV3Pool: line 328 -> 369
239
+ _getAmountsForLiquidity(bottomTick, topTick, liquidityDelta, currentTick, currentPrice) {
240
+ let amount0;
241
+ let amount1;
242
+ let globalLiquidityDelta;
243
+ // If current tick is less than the provided bottom one then only the token0 has to be provided
244
+ if (currentTick < bottomTick) {
245
+ amount0 = SqrtPriceMath_1.SqrtPriceMath._getAmount0DeltaO(TickMath_1.TickMath.getSqrtRatioAtTick(bottomTick), TickMath_1.TickMath.getSqrtRatioAtTick(topTick), liquidityDelta);
246
+ }
247
+ else if (currentTick < topTick) {
248
+ amount0 = SqrtPriceMath_1.SqrtPriceMath._getAmount0DeltaO(currentPrice, TickMath_1.TickMath.getSqrtRatioAtTick(topTick), liquidityDelta);
249
+ amount1 = SqrtPriceMath_1.SqrtPriceMath._getAmount1DeltaO(TickMath_1.TickMath.getSqrtRatioAtTick(bottomTick), currentPrice, liquidityDelta);
250
+ globalLiquidityDelta = liquidityDelta;
251
+ }
252
+ // If current tick is greater than the provided top one then only the token1 has to be provided
253
+ else {
254
+ amount1 = SqrtPriceMath_1.SqrtPriceMath._getAmount1DeltaO(TickMath_1.TickMath.getSqrtRatioAtTick(bottomTick), TickMath_1.TickMath.getSqrtRatioAtTick(topTick), liquidityDelta);
255
+ }
256
+ return [amount0, amount1, globalLiquidityDelta];
257
+ }
258
+ _updatePositionTicksAndFees(state, bottomTick, topTick, liquidityDelta) {
259
+ const { globalState, liquidity } = state;
260
+ let toggledBottom = false;
261
+ let toggledTop = false;
262
+ const cache = {
263
+ price: globalState.price,
264
+ tick: globalState.tick,
265
+ };
266
+ // skip position logic
267
+ // skip fee logic
268
+ if (liquidityDelta !== 0n) {
269
+ const time = this._blockTimestamp(state);
270
+ if (Tick_1.Tick.update(state, bottomTick, cache.tick, liquidityDelta, 0n, // secondsPerLiquidityCumulative, play no role in pricing
271
+ 0n, // tickCumulative, play no role in pricing
272
+ time, false, // isTopTick,
273
+ state.maxLiquidityPerTick)) {
274
+ toggledBottom = true;
275
+ TickBitMap_1.TickBitMap.flipTick(state, bottomTick, state.tickSpacing);
276
+ }
277
+ if (Tick_1.Tick.update(state, topTick, cache.tick, liquidityDelta, 0n, // secondsPerLiquidityCumulative, play no role in pricing
278
+ 0n, // tickCumulative, play no role in pricing
279
+ time, true, // isTopTick
280
+ state.maxLiquidityPerTick)) {
281
+ toggledTop = true;
282
+ TickBitMap_1.TickBitMap.flipTick(state, topTick, state.tickSpacing);
283
+ }
284
+ }
285
+ // skip fee && position related stuffs
286
+ // same as UniwapV3Pool.sol line 327 -> if (params.liquidityDelta != 0) {
287
+ if (liquidityDelta !== 0n) {
288
+ // if liquidityDelta is negative and the tick was toggled, it means that it should not be initialized anymore, so we delete it
289
+ if (liquidityDelta < 0) {
290
+ if (toggledBottom)
291
+ Tick_1.Tick.clear(state, bottomTick);
292
+ if (toggledTop)
293
+ Tick_1.Tick.clear(state, topTick);
294
+ }
295
+ // same as UniswapV3Pool.sol line 331 ? -> amount0 = SqrtPriceMath.getAmount0Delta(
296
+ // skip amount0 and amount1 as already read from event
297
+ const [, , globalLiquidityDelta] = this._getAmountsForLiquidity(bottomTick, topTick, liquidityDelta, cache.tick, cache.price);
298
+ if (globalLiquidityDelta != 0n) {
299
+ let liquidityBefore = liquidity;
300
+ // skip oracle logic
301
+ // same as UniswapV3Pool line 361 -> liquidity = LiquidityMath.addDelta(liquidityBefore, params.liquidityDelta);
302
+ state.liquidity = LiquidityMath_1.LiquidityMath.addDelta(liquidityBefore, liquidityDelta);
303
+ }
304
+ }
305
+ }
306
+ _calculateSwapAndLock(poolState, zeroToOne, newSqrtPriceX96, newTick, newLiquidity) {
307
+ const { globalState, liquidity } = poolState;
308
+ let cache = {
309
+ amountCalculated: 0n,
310
+ amountRequiredInitial: bigint_constants_1.BI_MAX_INT,
311
+ communityFee: 0n,
312
+ exactInput: false,
313
+ fee: 0n,
314
+ startTick: 0n,
315
+ isFirstCycleState: true,
316
+ };
317
+ let communityFeeAmount = 0n;
318
+ // load from one storage slot
319
+ let currentPrice = globalState.price;
320
+ let currentTick = globalState.tick;
321
+ cache.fee = globalState.fee;
322
+ let _communityFeeToken0 = globalState.communityFeeToken0;
323
+ let _communityFeeToken1 = globalState.communityFeeToken1;
324
+ let amountRequired = cache.amountRequiredInitial; // to revalidate
325
+ (0, utils_1._require)(amountRequired != 0n, 'AS');
326
+ [cache.amountRequiredInitial, cache.exactInput] = [
327
+ amountRequired,
328
+ amountRequired > 0,
329
+ ];
330
+ let currentLiquidity = liquidity;
331
+ if (zeroToOne) {
332
+ // require(limitSqrtPrice < currentPrice && limitSqrtPrice > TickMath.MIN_SQRT_RATIO, 'SPL');
333
+ // cache.totalFeeGrowth = totalFeeGrowth0Token;
334
+ cache.communityFee = _communityFeeToken0;
335
+ }
336
+ else {
337
+ // require(limitSqrtPrice > currentPrice && limitSqrtPrice < TickMath.MAX_SQRT_RATIO, 'SPL')
338
+ // cache.totalFeeGrowth = totalFeeGrowth1Token;
339
+ cache.communityFee = _communityFeeToken1;
340
+ }
341
+ cache.startTick = currentTick;
342
+ cache.fee = poolState.globalState.fee; // safe to take as updated just before// _getNewFee(blockTimestamp, currentTick, newTimepointIndex, currentLiquidity);
343
+ const step = {
344
+ feeAmount: 0n,
345
+ initialized: true,
346
+ input: 0n,
347
+ nextTick: 0n,
348
+ nextTickPrice: 0n,
349
+ output: 0n,
350
+ stepSqrtPrice: 0n,
351
+ tickCount: 0,
352
+ };
353
+ let i = 0;
354
+ // swap until there is remaining input or output tokens or we reach the price limit
355
+ while (true) {
356
+ step.stepSqrtPrice = currentPrice;
357
+ //equivalent of tickTable.nextTickInTheSameRow(currentTick, zeroToOne);
358
+ [step.nextTick, step.initialized] =
359
+ TickBitMap_1.TickBitMap.nextInitializedTickWithinOneWord(poolState, currentTick, poolState.tickSpacing, zeroToOne, false);
360
+ step.nextTickPrice = TickMath_1.TickMath.getSqrtRatioAtTick(step.nextTick);
361
+ // equivalent of PriceMovementMath.movePriceTowardsTarget
362
+ const result = SwapMath_1.SwapMath.computeSwapStep(poolState.globalState.price, zeroToOne == step.nextTickPrice < newSqrtPriceX96
363
+ ? newSqrtPriceX96
364
+ : step.nextTickPrice, currentLiquidity, amountRequired, cache.fee);
365
+ [currentPrice, step.input, step.output, step.feeAmount] = [
366
+ result.sqrtRatioNextX96,
367
+ result.amountIn,
368
+ result.amountOut,
369
+ result.feeAmount,
370
+ ];
371
+ if (cache.exactInput) {
372
+ amountRequired -= (0, utils_1.int256)(step.input + step.feeAmount); // decrease remaining input amount
373
+ cache.amountCalculated = cache.amountCalculated - (0, utils_1.int256)(step.output); // decrease calculated output amount
374
+ }
375
+ else {
376
+ amountRequired += (0, utils_1.int256)(step.output); // increase remaining output amount (since its negative)
377
+ cache.amountCalculated =
378
+ cache.amountCalculated + (0, utils_1.int256)(step.input + step.feeAmount); // increase calculated input amount
379
+ }
380
+ if (cache.communityFee > 0) {
381
+ let delta = (step.feeAmount * cache.communityFee) /
382
+ Constants_1.Constants.COMMUNITY_FEE_DENOMINATOR;
383
+ step.feeAmount -= delta;
384
+ communityFeeAmount += delta;
385
+ }
386
+ // skip totalFeeGrowth fee logic
387
+ if (currentPrice == step.nextTickPrice) {
388
+ // if the reached tick is initialized then we need to cross it
389
+ if (step.initialized) {
390
+ const info = poolState.ticks[Number(step.nextTick)];
391
+ const liquidityDelta = info.liquidityNet * (zeroToOne ? -1n : 1n);
392
+ currentLiquidity = LiquidityMath_1.LiquidityMath.addDelta(currentLiquidity, liquidityDelta);
393
+ }
394
+ currentTick = zeroToOne ? step.nextTick - 1n : step.nextTick;
395
+ }
396
+ else if (currentPrice != step.stepSqrtPrice) {
397
+ // if the price has changed but hasn't reached the target
398
+ currentTick = TickMath_1.TickMath.getTickAtSqrtRatio(currentPrice);
399
+ break; // since the price hasn't reached the target, amountRequired should be 0
400
+ }
401
+ // check stop condition
402
+ if (amountRequired == 0n ||
403
+ currentPrice == newSqrtPriceX96 ||
404
+ currentTick === newTick // deviation from contract
405
+ ) {
406
+ break;
407
+ }
408
+ }
409
+ let [amount0, amount1] = zeroToOne == cache.exactInput // the amount to provide could be less then initially specified (e.g. reached limit)
410
+ ? [cache.amountRequiredInitial - amountRequired, cache.amountCalculated] // the amount to get could be less then initially specified (e.g. reached limit)
411
+ : [
412
+ cache.amountCalculated,
413
+ cache.amountRequiredInitial - amountRequired,
414
+ ];
415
+ // validate that amount0 and amount 1 are same here
416
+ [globalState.price, globalState.tick, globalState.fee] = [
417
+ currentPrice,
418
+ currentTick,
419
+ cache.fee,
420
+ ];
421
+ poolState.liquidity = currentLiquidity;
422
+ // no need to update fees
423
+ if (poolState.liquidity !== newLiquidity)
424
+ // prefer assert ?
425
+ poolState.liquidity = newLiquidity;
426
+ return [
427
+ amount0,
428
+ amount1,
429
+ currentPrice,
430
+ currentTick,
431
+ currentLiquidity,
432
+ communityFeeAmount,
433
+ ];
434
+ }
435
+ _blockTimestamp(state) {
436
+ return (0, utils_1.uint32)(state.blockTimestamp);
437
+ }
438
+ }
439
+ exports.AlgebraMath = new AlgebraMathClass();
440
+ //# sourceMappingURL=AlgebraMath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlgebraMath.js","sourceRoot":"","sources":["../../../../src/dex/algebra/lib/AlgebraMath.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare class Constants {
2
+ static TICK_SPACING: bigint;
3
+ static MAX_LIQUIDITY_PER_TICK: bigint;
4
+ static COMMUNITY_FEE_DENOMINATOR: bigint;
5
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Constants = void 0;
4
+ class Constants {
5
+ }
6
+ exports.Constants = Constants;
7
+ Constants.TICK_SPACING = 60n;
8
+ Constants.MAX_LIQUIDITY_PER_TICK = 11505743598341114571880798222544994n;
9
+ Constants.COMMUNITY_FEE_DENOMINATOR = 1000n;
10
+ //# sourceMappingURL=Constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../../../src/dex/algebra/lib/Constants.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;;AAAtB,8BAIC;AAHQ,sBAAY,GAAG,GAAG,CAAC;AACnB,gCAAsB,GAAG,oCAAoC,CAAC;AAC9D,mCAAyB,GAAG,KAAK,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { BigNumber } from 'ethers';
2
+ import { Address, NumberAsString } from '../../types';
3
+ import { TickInfo } from '../uniswap-v3/types';
4
+ declare type GlobalState = {
5
+ price: bigint;
6
+ tick: bigint;
7
+ fee: bigint;
8
+ communityFeeToken0: bigint;
9
+ communityFeeToken1: bigint;
10
+ };
11
+ export declare type PoolState = {
12
+ pool: string;
13
+ blockTimestamp: bigint;
14
+ tickSpacing: bigint;
15
+ globalState: GlobalState;
16
+ liquidity: bigint;
17
+ maxLiquidityPerTick: bigint;
18
+ tickBitmap: Record<NumberAsString, bigint>;
19
+ ticks: Record<NumberAsString, TickInfo>;
20
+ isValid: boolean;
21
+ startTickBitmap: bigint;
22
+ balance0: bigint;
23
+ balance1: bigint;
24
+ };
25
+ export declare type AlgebraData = {
26
+ path: {
27
+ tokenIn: Address;
28
+ tokenOut: Address;
29
+ }[];
30
+ isApproved?: boolean;
31
+ };
32
+ export declare type DexParams = {
33
+ router: Address;
34
+ quoter: Address;
35
+ factory: Address;
36
+ algebraStateMulticall: Address;
37
+ uniswapMulticall: Address;
38
+ chunksCount: number;
39
+ deployer: Address;
40
+ subgraphURL: string;
41
+ initHash: string;
42
+ };
43
+ export declare type TickBitMapMappingsWithBigNumber = {
44
+ index: number;
45
+ value: BigNumber;
46
+ };
47
+ export declare type TickInfoWithBigNumber = {
48
+ initialized: boolean;
49
+ liquidityGross: BigNumber;
50
+ liquidityNet: BigNumber;
51
+ secondsOutside: number;
52
+ secondsPerLiquidityOutsideX128: BigNumber;
53
+ tickCumulativeOutside: BigNumber;
54
+ };
55
+ export declare type TickInfoMappingsWithBigNumber = {
56
+ index: number;
57
+ value: TickInfoWithBigNumber;
58
+ };
59
+ export declare type DecodedStateMultiCallResultWithRelativeBitmaps = {
60
+ pool: Address;
61
+ blockTimestamp: BigNumber;
62
+ globalState: {
63
+ price: BigNumber;
64
+ tick: number;
65
+ fee: number;
66
+ communityFeeToken1: number;
67
+ communityFeeToken0: number;
68
+ };
69
+ liquidity: BigNumber;
70
+ tickSpacing: number;
71
+ maxLiquidityPerTick: BigNumber;
72
+ tickBitmap: TickBitMapMappingsWithBigNumber[];
73
+ ticks: TickInfoMappingsWithBigNumber[];
74
+ };
75
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/woo-fi/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/algebra/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { BytesLike } from 'ethers';
2
+ import { MultiResult } from '../../lib/multi-wrapper';
3
+ import { DecodedStateMultiCallResultWithRelativeBitmaps } from './types';
4
+ export declare function decodeStateMultiCallResultWithRelativeBitmaps(result: MultiResult<BytesLike> | BytesLike): DecodedStateMultiCallResultWithRelativeBitmaps;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decodeStateMultiCallResultWithRelativeBitmaps = void 0;
4
+ const ethers_1 = require("ethers");
5
+ const ts_essentials_1 = require("ts-essentials");
6
+ const decoders_1 = require("../../lib/decoders");
7
+ function decodeStateMultiCallResultWithRelativeBitmaps(result) {
8
+ const [isSuccess, toDecode] = (0, decoders_1.extractSuccessAndValue)(result);
9
+ (0, ts_essentials_1.assert)(isSuccess && toDecode !== '0x', `decodeStateMultiCallResultWithRelativeBitmaps failed to get decodable result: ${result}`);
10
+ const decoded = ethers_1.ethers.utils.defaultAbiCoder.decode([
11
+ // I don't want to pass here any interface, so I just use it in ethers format
12
+ `
13
+ tuple(
14
+ address pool,
15
+ uint256 blockTimestamp,
16
+ tuple(
17
+ uint160 price,
18
+ int24 tick,
19
+ uint16 fee,
20
+ uint16 timepointIndex,
21
+ uint8 communityFeeToken0,
22
+ uint8 communityFeeToken1,
23
+ bool unlocked,
24
+ ) globalState,
25
+ uint128 liquidity,
26
+ int24 tickSpacing,
27
+ uint128 maxLiquidityPerTick,
28
+ tuple(
29
+ bool initialized,
30
+ uint32 blockTimestamp,
31
+ int56 tickCumulative,
32
+ uint160 secondsPerLiquidityCumulative,
33
+ uint88 volatilityCumulative,
34
+ int24 averageTick,
35
+ uint144 volumePerLiquidityCumulative,
36
+ ) timepoints,
37
+ tuple(
38
+ int16 index,
39
+ uint256 value,
40
+ )[] tickBitmap,
41
+ tuple(
42
+ int24 index,
43
+ tuple(
44
+ uint128 liquidityGross,
45
+ int128 liquidityNet,
46
+ int56 tickCumulativeOutside,
47
+ uint160 secondsPerLiquidityOutsideX128,
48
+ uint32 secondsOutside,
49
+ bool initialized,
50
+ ) value,
51
+ )[] ticks
52
+ )
53
+ `,
54
+ ], toDecode)[0];
55
+ // This conversion is not precise, because when we decode, we have more values
56
+ // But I typed only the ones that are used later
57
+ return decoded;
58
+ }
59
+ exports.decodeStateMultiCallResultWithRelativeBitmaps = decodeStateMultiCallResultWithRelativeBitmaps;
60
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/dex/algebra/utils.ts"],"names":[],"mappings":";;;AAAA,mCAA2C;AAC3C,iDAAuC;AACvC,iDAA4D;AAI5D,SAAgB,6CAA6C,CAC3D,MAA0C;IAE1C,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,IAAA,iCAAsB,EAAC,MAAM,CAAC,CAAC;IAE7D,IAAA,sBAAM,EACJ,SAAS,IAAI,QAAQ,KAAK,IAAI,EAC9B,iFAAiF,MAAM,EAAE,CAC1F,CAAC;IAEF,MAAM,OAAO,GAAG,eAAM,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CACjD;QACE,6EAA6E;QAC7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCC;KACF,EACD,QAAQ,CACT,CAAC,CAAC,CAAC,CAAC;IACL,8EAA8E;IAC9E,gDAAgD;IAChD,OAAO,OAAyD,CAAC;AACnE,CAAC;AA7DD,sGA6DC"}
@@ -70,6 +70,7 @@ const swaap_v2_1 = require("./swaap-v2/swaap-v2");
70
70
  const spiritswap_v3_1 = require("./quickswap/spiritswap-v3");
71
71
  const trader_joe_v2_1_1 = require("./trader-joe-v2.1");
72
72
  const pancakeswap_v3_1 = require("./pancakeswap-v3/pancakeswap-v3");
73
+ const algebra_1 = require("./algebra/algebra");
73
74
  const LegacyDexes = [
74
75
  curve_v2_1.CurveV2,
75
76
  stable_pool_1.StablePool,
@@ -103,6 +104,7 @@ const Dexes = [
103
104
  balancer_v2_1.BalancerV2,
104
105
  uniswap_v2_1.UniswapV2,
105
106
  uniswap_v3_1.UniswapV3,
107
+ algebra_1.Algebra,
106
108
  pancakeswap_v3_1.PancakeswapV3,
107
109
  biswap_1.BiSwap,
108
110
  mdex_1.MDEX,