@paraswap/dex-lib 4.3.18 → 4.3.19

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 (161) hide show
  1. package/build/abi/balancer-v3/vault-extension.json +4 -4
  2. package/build/abi/ekubo/twamm-data-fetcher.json +216 -0
  3. package/build/abi/ekubo/twamm.json +720 -0
  4. package/build/abi/miro-migrator/MiroMigrator.abi.json +19 -36
  5. package/build/abi/ring-v2/few-wrapped-token.json +587 -0
  6. package/build/abi/ring-v2/ring-v2-factory.json +125 -0
  7. package/build/abi/ring-v2/ring-v2-pool.json +461 -0
  8. package/build/abi/ring-v2/ring-v2-router.json +332 -0
  9. package/build/dex/aave-v3-pt-roll-over/aave-v3-pt-roll-over.js +2 -1
  10. package/build/dex/aave-v3-pt-roll-over/aave-v3-pt-roll-over.js.map +1 -1
  11. package/build/dex/balancer-v3/balancer-v3-pool.d.ts +1 -1
  12. package/build/dex/balancer-v3/balancer-v3-pool.js +33 -2
  13. package/build/dex/balancer-v3/balancer-v3-pool.js.map +1 -1
  14. package/build/dex/balancer-v3/balancer-v3.js +1 -1
  15. package/build/dex/balancer-v3/balancer-v3.js.map +1 -1
  16. package/build/dex/balancer-v3/config.d.ts +2 -1
  17. package/build/dex/balancer-v3/config.js +1 -0
  18. package/build/dex/balancer-v3/config.js.map +1 -1
  19. package/build/dex/balancer-v3/getGasCost.js +3 -0
  20. package/build/dex/balancer-v3/getGasCost.js.map +1 -1
  21. package/build/dex/balancer-v3/getOnChainState.js +27 -0
  22. package/build/dex/balancer-v3/getOnChainState.js.map +1 -1
  23. package/build/dex/balancer-v3/getPoolsApi.js +21 -5
  24. package/build/dex/balancer-v3/getPoolsApi.js.map +1 -1
  25. package/build/dex/balancer-v3/getTopPoolsApi.d.ts +1 -0
  26. package/build/dex/balancer-v3/getTopPoolsApi.js +3 -0
  27. package/build/dex/balancer-v3/getTopPoolsApi.js.map +1 -1
  28. package/build/dex/balancer-v3/reClammPool.d.ts +23 -0
  29. package/build/dex/balancer-v3/reClammPool.js +82 -0
  30. package/build/dex/balancer-v3/reClammPool.js.map +1 -0
  31. package/build/dex/balancer-v3/types.d.ts +3 -3
  32. package/build/dex/balancer-v3/utils.js +6 -1
  33. package/build/dex/balancer-v3/utils.js.map +1 -1
  34. package/build/dex/ekubo/pools/base.d.ts +36 -0
  35. package/build/dex/ekubo/pools/base.js +289 -0
  36. package/build/dex/ekubo/pools/base.js.map +1 -0
  37. package/build/dex/ekubo/pools/full-range.d.ts +23 -0
  38. package/build/dex/ekubo/pools/full-range.js +99 -0
  39. package/build/dex/ekubo/pools/full-range.js.map +1 -0
  40. package/build/dex/ekubo/pools/iface.d.ts +46 -0
  41. package/build/dex/ekubo/pools/iface.js +75 -0
  42. package/build/dex/ekubo/pools/iface.js.map +1 -0
  43. package/build/dex/ekubo/pools/math/twamm/exp2.d.ts +1 -0
  44. package/build/dex/ekubo/pools/math/twamm/exp2.js +86 -0
  45. package/build/dex/ekubo/pools/math/twamm/exp2.js.map +1 -0
  46. package/build/dex/ekubo/pools/math/twamm/sqrt-ratio.d.ts +1 -0
  47. package/build/dex/ekubo/pools/math/twamm/sqrt-ratio.js +56 -0
  48. package/build/dex/ekubo/pools/math/twamm/sqrt-ratio.js.map +1 -0
  49. package/build/dex/ekubo/pools/oracle.d.ts +8 -0
  50. package/build/dex/ekubo/pools/oracle.js +19 -0
  51. package/build/dex/ekubo/pools/oracle.js.map +1 -0
  52. package/build/dex/ekubo/pools/twamm.d.ts +38 -0
  53. package/build/dex/ekubo/pools/twamm.js +253 -0
  54. package/build/dex/ekubo/pools/twamm.js.map +1 -0
  55. package/build/dex/ekubo/pools/utils.d.ts +28 -0
  56. package/build/dex/ekubo/pools/utils.js +80 -0
  57. package/build/dex/ekubo/pools/utils.js.map +1 -0
  58. package/build/dex/miro-migrator/config.js +10 -3
  59. package/build/dex/miro-migrator/config.js.map +1 -1
  60. package/build/dex/miro-migrator/constants.d.ts +0 -1
  61. package/build/dex/miro-migrator/constants.js +1 -2
  62. package/build/dex/miro-migrator/constants.js.map +1 -1
  63. package/build/dex/miro-migrator/miro-migrator-pool.d.ts +5 -8
  64. package/build/dex/miro-migrator/miro-migrator-pool.js +30 -48
  65. package/build/dex/miro-migrator/miro-migrator-pool.js.map +1 -1
  66. package/build/dex/miro-migrator/miro-migrator-state.d.ts +27 -0
  67. package/build/dex/miro-migrator/miro-migrator-state.js +89 -0
  68. package/build/dex/miro-migrator/miro-migrator-state.js.map +1 -0
  69. package/build/dex/miro-migrator/miro-migrator.d.ts +4 -5
  70. package/build/dex/miro-migrator/miro-migrator.js +83 -40
  71. package/build/dex/miro-migrator/miro-migrator.js.map +1 -1
  72. package/build/dex/miro-migrator/types.d.ts +4 -2
  73. package/build/dex/miro-migrator/types.js +2 -1
  74. package/build/dex/miro-migrator/types.js.map +1 -1
  75. package/build/dex/uniswap-v4/config.js +1 -0
  76. package/build/dex/uniswap-v4/config.js.map +1 -1
  77. package/build/dex/uniswap-v4/types.d.ts +1 -0
  78. package/build/dex/uniswap-v4/uniswap-v4-pool-manager.d.ts +1 -0
  79. package/build/dex/uniswap-v4/uniswap-v4-pool-manager.js +11 -0
  80. package/build/dex/uniswap-v4/uniswap-v4-pool-manager.js.map +1 -1
  81. package/build/dex/usdc-transmuter/usdc-transmuter-pool.d.ts +26 -0
  82. package/build/dex/usdc-transmuter/usdc-transmuter-pool.js +75 -0
  83. package/build/dex/usdc-transmuter/usdc-transmuter-pool.js.map +1 -0
  84. package/package.json +2 -2
  85. package/build/abi/BProtocol.json +0 -1155
  86. package/build/abi/Jarvis.json +0 -1172
  87. package/build/abi/MStableAsset.json +0 -1545
  88. package/build/abi/OneInchLp.json +0 -1304
  89. package/build/abi/Onebit.json +0 -736
  90. package/build/abi/Shell.json +0 -1294
  91. package/build/abi/TraderJoeV2Router.json +0 -50
  92. package/build/abi/wUSDM.json +0 -757
  93. package/build/abi/zrx.v2.json +0 -1967
  94. package/build/abi/zrx.v3.json +0 -3454
  95. package/build/abi/zrx.v4.json +0 -2193
  96. package/build/dex/OneInchLp.d.ts +0 -24
  97. package/build/dex/OneInchLp.js +0 -43
  98. package/build/dex/OneInchLp.js.map +0 -1
  99. package/build/dex/bProtocol/bProtocol.d.ts +0 -15
  100. package/build/dex/bProtocol/bProtocol.js +0 -56
  101. package/build/dex/bProtocol/bProtocol.js.map +0 -1
  102. package/build/dex/bProtocol/types.d.ts +0 -11
  103. package/build/dex/bProtocol/types.js +0 -8
  104. package/build/dex/bProtocol/types.js.map +0 -1
  105. package/build/dex/jarvis.d.ts +0 -56
  106. package/build/dex/jarvis.js +0 -163
  107. package/build/dex/jarvis.js.map +0 -1
  108. package/build/dex/mStable.d.ts +0 -44
  109. package/build/dex/mStable.js +0 -75
  110. package/build/dex/mStable.js.map +0 -1
  111. package/build/dex/onebit/onebit.d.ts +0 -16
  112. package/build/dex/onebit/onebit.js +0 -61
  113. package/build/dex/onebit/onebit.js.map +0 -1
  114. package/build/dex/onebit/types.d.ts +0 -14
  115. package/build/dex/onebit/types.js +0 -8
  116. package/build/dex/onebit/types.js.map +0 -1
  117. package/build/dex/shell.d.ts +0 -25
  118. package/build/dex/shell.js +0 -41
  119. package/build/dex/shell.js.map +0 -1
  120. package/build/dex/trader-joe-v2.d.ts +0 -40
  121. package/build/dex/trader-joe-v2.js +0 -74
  122. package/build/dex/trader-joe-v2.js.map +0 -1
  123. package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +0 -94
  124. package/build/dex/uniswap-v3/uniswap-v3-new.js +0 -923
  125. package/build/dex/uniswap-v3/uniswap-v3-new.js.map +0 -1
  126. package/build/dex/usual-bond/config.d.ts +0 -3
  127. package/build/dex/usual-bond/config.js +0 -13
  128. package/build/dex/usual-bond/config.js.map +0 -1
  129. package/build/dex/usual-bond/types.d.ts +0 -7
  130. package/build/dex/usual-bond/types.js +0 -3
  131. package/build/dex/usual-bond/types.js.map +0 -1
  132. package/build/dex/usual-bond/usual-bond.d.ts +0 -35
  133. package/build/dex/usual-bond/usual-bond.js +0 -176
  134. package/build/dex/usual-bond/usual-bond.js.map +0 -1
  135. package/build/dex/wusdm/config.d.ts +0 -3
  136. package/build/dex/wusdm/config.js +0 -43
  137. package/build/dex/wusdm/config.js.map +0 -1
  138. package/build/dex/wusdm/constants.d.ts +0 -2
  139. package/build/dex/wusdm/constants.js +0 -6
  140. package/build/dex/wusdm/constants.js.map +0 -1
  141. package/build/dex/wusdm/types.d.ts +0 -18
  142. package/build/dex/wusdm/types.js +0 -11
  143. package/build/dex/wusdm/types.js.map +0 -1
  144. package/build/dex/wusdm/wusdm-pool.d.ts +0 -21
  145. package/build/dex/wusdm/wusdm-pool.js +0 -74
  146. package/build/dex/wusdm/wusdm-pool.js.map +0 -1
  147. package/build/dex/wusdm/wusdm.d.ts +0 -46
  148. package/build/dex/wusdm/wusdm.js +0 -243
  149. package/build/dex/wusdm/wusdm.js.map +0 -1
  150. package/build/dex/zerox/config.d.ts +0 -2
  151. package/build/dex/zerox/config.js +0 -33
  152. package/build/dex/zerox/config.js.map +0 -1
  153. package/build/dex/zerox/index.d.ts +0 -22
  154. package/build/dex/zerox/index.js +0 -225
  155. package/build/dex/zerox/index.js.map +0 -1
  156. package/build/dex/zerox/order.d.ts +0 -88
  157. package/build/dex/zerox/order.js +0 -53
  158. package/build/dex/zerox/order.js.map +0 -1
  159. package/build/dex/zerox/types.d.ts +0 -73
  160. package/build/dex/zerox/types.js +0 -21
  161. package/build/dex/zerox/types.js.map +0 -1
@@ -0,0 +1,289 @@
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.BasePoolState = exports.BasePool = void 0;
7
+ exports.findNearestInitializedTickIndex = findNearestInitializedTickIndex;
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const iface_1 = require("./iface");
10
+ const price_1 = require("./math/price");
11
+ const swap_1 = require("./math/swap");
12
+ const tick_1 = require("./math/tick");
13
+ const utils_1 = require("./utils");
14
+ const GAS_COST_OF_ONE_CL_SWAP = 24_000;
15
+ const GAS_COST_OF_ONE_INITIALIZED_TICK_CROSSED = 9_400;
16
+ const GAS_COST_OF_ONE_TICK_SPACING_CROSSED = 4_000;
17
+ class BasePool extends iface_1.EkuboPool {
18
+ dataFetcher;
19
+ constructor(parentName, dexHelper, logger, contracts, key) {
20
+ const { contract: { address }, interface: iface, dataFetcher, } = contracts.core;
21
+ super(parentName, dexHelper, logger, key, {
22
+ [address]: new iface_1.NamedEventHandlers(iface, {
23
+ PositionUpdated: (args, oldState) => {
24
+ if (key.num_id !== BigInt(args.poolId)) {
25
+ return null;
26
+ }
27
+ const params = args.params;
28
+ return BasePoolState.fromPositionUpdatedEvent(oldState, [params.bounds.lower, params.bounds.upper], params.liquidityDelta.toBigInt());
29
+ },
30
+ }),
31
+ }, {
32
+ [address]: (data, oldState) => {
33
+ const ev = (0, utils_1.parseSwappedEvent)(data);
34
+ if (key.num_id !== ev.poolId) {
35
+ return null;
36
+ }
37
+ return BasePoolState.fromSwappedEvent(oldState, ev);
38
+ },
39
+ }, quote);
40
+ this.dataFetcher = dataFetcher;
41
+ }
42
+ async generateState(blockNumber) {
43
+ const data = await this.dataFetcher.getQuoteData([this.key.toAbi()], 10, {
44
+ blockTag: blockNumber,
45
+ });
46
+ return BasePoolState.fromQuoter(data[0]);
47
+ }
48
+ }
49
+ exports.BasePool = BasePool;
50
+ function quote(amount, isToken1, state) {
51
+ const isIncreasing = (0, swap_1.isPriceIncreasing)(amount, isToken1);
52
+ let { sqrtRatio, liquidity, activeTickIndex, sortedTicks } = state;
53
+ const sqrtRatioLimit = isIncreasing ? tick_1.MAX_SQRT_RATIO : tick_1.MIN_SQRT_RATIO;
54
+ let calculatedAmount = 0n;
55
+ let initializedTicksCrossed = 0;
56
+ let amountRemaining = amount;
57
+ const startingSqrtRatio = sqrtRatio;
58
+ while (amountRemaining !== 0n && sqrtRatio !== sqrtRatioLimit) {
59
+ const nextInitializedTick = (isIncreasing
60
+ ? sortedTicks[activeTickIndex === null ? 0 : activeTickIndex + 1]
61
+ : activeTickIndex === null
62
+ ? null
63
+ : sortedTicks[activeTickIndex]) ?? null;
64
+ const nextInitializedTickSqrtRatio = nextInitializedTick
65
+ ? (0, tick_1.toSqrtRatio)(nextInitializedTick.number)
66
+ : null;
67
+ const stepSqrtRatioLimit = nextInitializedTickSqrtRatio === null
68
+ ? sqrtRatioLimit
69
+ : nextInitializedTickSqrtRatio < sqrtRatioLimit === isIncreasing
70
+ ? nextInitializedTickSqrtRatio
71
+ : sqrtRatioLimit;
72
+ const step = (0, swap_1.computeStep)({
73
+ fee: this.key.config.fee,
74
+ sqrtRatio,
75
+ liquidity,
76
+ isToken1,
77
+ sqrtRatioLimit: stepSqrtRatioLimit,
78
+ amount: amountRemaining,
79
+ });
80
+ amountRemaining -= step.consumedAmount;
81
+ calculatedAmount += step.calculatedAmount;
82
+ sqrtRatio = step.sqrtRatioNext;
83
+ // Cross the tick if the price moved all the way to the next initialized tick price
84
+ if (nextInitializedTick && sqrtRatio === nextInitializedTickSqrtRatio) {
85
+ activeTickIndex = isIncreasing
86
+ ? activeTickIndex === null
87
+ ? 0
88
+ : activeTickIndex + 1
89
+ : activeTickIndex
90
+ ? activeTickIndex - 1
91
+ : null;
92
+ initializedTicksCrossed++;
93
+ liquidity += isIncreasing
94
+ ? nextInitializedTick.liquidityDelta
95
+ : -nextInitializedTick.liquidityDelta;
96
+ }
97
+ }
98
+ const tickSpacingsCrossed = (0, tick_1.approximateNumberOfTickSpacingsCrossed)(startingSqrtRatio, sqrtRatio, this.key.config.tickSpacing);
99
+ return {
100
+ consumedAmount: amount - amountRemaining,
101
+ calculatedAmount,
102
+ gasConsumed: GAS_COST_OF_ONE_CL_SWAP +
103
+ initializedTicksCrossed * GAS_COST_OF_ONE_INITIALIZED_TICK_CROSSED +
104
+ tickSpacingsCrossed * GAS_COST_OF_ONE_TICK_SPACING_CROSSED,
105
+ skipAhead: initializedTicksCrossed === 0
106
+ ? 0
107
+ : Math.floor(tickSpacingsCrossed / initializedTicksCrossed),
108
+ };
109
+ }
110
+ /**
111
+ * Returns the index in the sorted tick array that has the greatest value of tick that is not greater than the given tick
112
+ * @param sortedTicks the sorted list of ticks to search in
113
+ * @param tick the tick to search for
114
+ */
115
+ function findNearestInitializedTickIndex(sortedTicks, tick) {
116
+ let l = 0, r = sortedTicks.length;
117
+ while (l < r) {
118
+ const mid = Math.floor((l + r) / 2);
119
+ const midTick = sortedTicks[mid].number;
120
+ if (midTick <= tick) {
121
+ // If it's the last index, or the next tick is greater, we've found our index
122
+ if (mid === sortedTicks.length - 1 ||
123
+ sortedTicks[mid + 1].number > tick) {
124
+ return mid;
125
+ }
126
+ else {
127
+ // Otherwise our value is to the right of this one
128
+ l = mid;
129
+ }
130
+ }
131
+ else {
132
+ // The mid tick is greater than the one we want, so we know it's not mid
133
+ r = mid;
134
+ }
135
+ }
136
+ return null;
137
+ }
138
+ var BasePoolState;
139
+ (function (BasePoolState) {
140
+ function fromQuoter(data) {
141
+ const sortedTicks = data.ticks.map(({ number, liquidityDelta }) => ({
142
+ number,
143
+ liquidityDelta: liquidityDelta.toBigInt(),
144
+ }));
145
+ const liquidity = data.liquidity.toBigInt();
146
+ const sqrtRatioFloat = data.sqrtRatio.toBigInt();
147
+ const state = {
148
+ sqrtRatio: (0, price_1.floatSqrtRatioToFixed)(sqrtRatioFloat),
149
+ liquidity,
150
+ activeTick: data.tick,
151
+ sortedTicks,
152
+ activeTickIndex: null, // This will be filled in
153
+ checkedTicksBounds: [data.minTick, data.maxTick],
154
+ };
155
+ addLiquidityCutoffs(state);
156
+ return state;
157
+ }
158
+ BasePoolState.fromQuoter = fromQuoter;
159
+ function fromSwappedEvent(oldState, ev) {
160
+ const sortedTicks = oldState.sortedTicks;
161
+ const clonedTicks = lodash_1.default.cloneDeep(sortedTicks);
162
+ return {
163
+ sqrtRatio: ev.sqrtRatioAfter,
164
+ liquidity: ev.liquidityAfter,
165
+ activeTick: ev.tickAfter,
166
+ sortedTicks: clonedTicks,
167
+ activeTickIndex: findNearestInitializedTickIndex(clonedTicks, ev.tickAfter),
168
+ checkedTicksBounds: oldState.checkedTicksBounds,
169
+ };
170
+ }
171
+ BasePoolState.fromSwappedEvent = fromSwappedEvent;
172
+ function fromPositionUpdatedEvent(oldState, [lowTick, highTick], liquidityDelta) {
173
+ if (liquidityDelta === 0n) {
174
+ return null;
175
+ }
176
+ const clonedState = lodash_1.default.cloneDeep(oldState);
177
+ updateTick(clonedState, lowTick, liquidityDelta, false, false);
178
+ updateTick(clonedState, highTick, liquidityDelta, true, false);
179
+ if (clonedState.activeTick >= lowTick &&
180
+ clonedState.activeTick < highTick) {
181
+ clonedState.liquidity += liquidityDelta;
182
+ }
183
+ return clonedState;
184
+ }
185
+ BasePoolState.fromPositionUpdatedEvent = fromPositionUpdatedEvent;
186
+ function addLiquidityCutoffs(state) {
187
+ const { sortedTicks, liquidity, activeTick } = state;
188
+ let activeTickIndex = undefined;
189
+ let currentLiquidity = 0n;
190
+ // The liquidity added/removed by out-of-range initialized ticks (i.e. lower than minCheckedTickNumber)
191
+ let liquidityDeltaMin = 0n;
192
+ for (let i = 0; i < sortedTicks.length; i++) {
193
+ const tick = sortedTicks[i];
194
+ if (typeof activeTickIndex === 'undefined' && activeTick < tick.number) {
195
+ activeTickIndex = i === 0 ? null : i - 1;
196
+ liquidityDeltaMin = liquidity - currentLiquidity;
197
+ // We now need to switch to tracking the liquidity that needs to be cut off at maxCheckedTickNumber, therefore reset to the actual liquidity
198
+ currentLiquidity = liquidity;
199
+ }
200
+ currentLiquidity += tick.liquidityDelta;
201
+ }
202
+ if (typeof activeTickIndex === 'undefined') {
203
+ activeTickIndex = sortedTicks.length > 0 ? sortedTicks.length - 1 : null;
204
+ liquidityDeltaMin = liquidity - currentLiquidity;
205
+ currentLiquidity = liquidity;
206
+ }
207
+ state.activeTickIndex = activeTickIndex;
208
+ BasePoolState.updateTick(state, state.checkedTicksBounds[0], liquidityDeltaMin, false, true);
209
+ BasePoolState.updateTick(state, state.checkedTicksBounds[1], currentLiquidity, true, true);
210
+ }
211
+ BasePoolState.addLiquidityCutoffs = addLiquidityCutoffs;
212
+ function updateTick(state, updatedTickNumber, liquidityDelta, upper, forceInsert) {
213
+ const sortedTicks = state.sortedTicks;
214
+ if (upper) {
215
+ liquidityDelta = -liquidityDelta;
216
+ }
217
+ const nearestTickIndex = findNearestInitializedTickIndex(sortedTicks, updatedTickNumber);
218
+ const nearestTick = nearestTickIndex === null ? null : sortedTicks[nearestTickIndex];
219
+ const nearestTickNumber = nearestTick?.number;
220
+ const newTickReferenced = nearestTickNumber !== updatedTickNumber;
221
+ if (newTickReferenced) {
222
+ if (!forceInsert && nearestTickIndex === null) {
223
+ sortedTicks[0].liquidityDelta += liquidityDelta;
224
+ }
225
+ else if (!forceInsert && nearestTickIndex === sortedTicks.length - 1) {
226
+ sortedTicks[sortedTicks.length - 1].liquidityDelta += liquidityDelta;
227
+ }
228
+ else {
229
+ sortedTicks.splice(nearestTickIndex === null ? 0 : nearestTickIndex + 1, 0, {
230
+ number: updatedTickNumber,
231
+ liquidityDelta,
232
+ });
233
+ if (state.activeTick >= updatedTickNumber) {
234
+ state.activeTickIndex =
235
+ state.activeTickIndex === null ? 0 : state.activeTickIndex + 1;
236
+ }
237
+ }
238
+ }
239
+ else {
240
+ const newDelta = nearestTick.liquidityDelta + liquidityDelta;
241
+ if (newDelta === 0n &&
242
+ !state.checkedTicksBounds.includes(nearestTickNumber)) {
243
+ sortedTicks.splice(nearestTickIndex, 1);
244
+ if (state.activeTick >= updatedTickNumber) {
245
+ state.activeTickIndex--;
246
+ }
247
+ }
248
+ else {
249
+ nearestTick.liquidityDelta = newDelta;
250
+ }
251
+ }
252
+ }
253
+ BasePoolState.updateTick = updateTick;
254
+ /*export function computeTvl(state: DeepReadonly<Object>): [bigint, bigint] {
255
+ const stateSqrtRatio = state.sqrtRatio;
256
+
257
+ let [tvl0, tvl1] = [0n, 0n];
258
+ let liquidity = 0n;
259
+ let sqrtRatio = MIN_SQRT_RATIO;
260
+
261
+ for (const tick of state.sortedTicks) {
262
+ const tickSqrtRatio = toSqrtRatio(tick.number);
263
+
264
+ const minAmount1SqrtRatio =
265
+ stateSqrtRatio > tickSqrtRatio ? tickSqrtRatio : stateSqrtRatio;
266
+ const maxAmount0SqrtRatio =
267
+ stateSqrtRatio > sqrtRatio ? stateSqrtRatio : sqrtRatio;
268
+
269
+ if (sqrtRatio < minAmount1SqrtRatio) {
270
+ tvl1 += amount1Delta(sqrtRatio, minAmount1SqrtRatio, liquidity, false);
271
+ }
272
+
273
+ if (maxAmount0SqrtRatio < tickSqrtRatio) {
274
+ tvl0 += amount0Delta(
275
+ maxAmount0SqrtRatio,
276
+ tickSqrtRatio,
277
+ liquidity,
278
+ false,
279
+ );
280
+ }
281
+
282
+ sqrtRatio = tickSqrtRatio;
283
+ liquidity += tick.liquidityDelta;
284
+ }
285
+
286
+ return [tvl0, tvl1];
287
+ }*/
288
+ })(BasePoolState || (exports.BasePoolState = BasePoolState = {}));
289
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/dex/ekubo/pools/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { DeepReadonly } from 'ts-essentials';
2
+ import { IDexHelper } from '../../../dex-helper/idex-helper';
3
+ import { Logger } from '../../../types';
4
+ import { BasicQuoteData, EkuboContracts } from '../types';
5
+ import { EkuboPool, PoolKeyed, Quote, QuoteFn } from './iface';
6
+ import { PoolKey, SwappedEvent } from './utils';
7
+ export declare class FullRangePool extends EkuboPool<FullRangePoolState.Object> {
8
+ private readonly dataFetcher;
9
+ constructor(parentName: string, dexHelper: IDexHelper, logger: Logger, contracts: EkuboContracts, key: PoolKey, quoteFn?: QuoteFn<FullRangePoolState.Object>);
10
+ generateState(blockNumber?: number | 'latest'): Promise<DeepReadonly<FullRangePoolState.Object>>;
11
+ }
12
+ export declare namespace FullRangePoolState {
13
+ type Object = {
14
+ sqrtRatio: bigint;
15
+ liquidity: bigint;
16
+ };
17
+ function fromQuoter(data: BasicQuoteData): DeepReadonly<Object>;
18
+ function fromPositionUpdatedEvent(oldState: DeepReadonly<Object>, liquidityDelta: bigint): Object | null;
19
+ function fromSwappedEvent(ev: SwappedEvent): Object;
20
+ }
21
+ export declare function quote(this: PoolKeyed, amount: bigint, isToken1: boolean, state: DeepReadonly<FullRangePoolState.Object>, sqrtRatioLimit?: bigint): Quote & {
22
+ stateAfter: typeof state;
23
+ };
@@ -0,0 +1,99 @@
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.FullRangePoolState = exports.FullRangePool = void 0;
7
+ exports.quote = quote;
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const iface_1 = require("./iface");
10
+ const price_1 = require("./math/price");
11
+ const swap_1 = require("./math/swap");
12
+ const tick_1 = require("./math/tick");
13
+ const utils_1 = require("./utils");
14
+ const GAS_COST_OF_ONE_FULL_RANGE_SWAP = 20_000;
15
+ class FullRangePool extends iface_1.EkuboPool {
16
+ dataFetcher;
17
+ constructor(parentName, dexHelper, logger, contracts, key, quoteFn) {
18
+ const { contract: { address }, interface: iface, dataFetcher, } = contracts.core;
19
+ super(parentName, dexHelper, logger, key, {
20
+ [address]: new iface_1.NamedEventHandlers(iface, {
21
+ PositionUpdated: (args, oldState) => {
22
+ if (key.num_id !== BigInt(args.poolId)) {
23
+ return null;
24
+ }
25
+ return FullRangePoolState.fromPositionUpdatedEvent(oldState, args.params.liquidityDelta.toBigInt());
26
+ },
27
+ }),
28
+ }, {
29
+ [address]: data => {
30
+ const ev = (0, utils_1.parseSwappedEvent)(data);
31
+ if (key.num_id !== ev.poolId) {
32
+ return null;
33
+ }
34
+ return FullRangePoolState.fromSwappedEvent(ev);
35
+ },
36
+ }, quoteFn ?? quote);
37
+ this.dataFetcher = dataFetcher;
38
+ }
39
+ async generateState(blockNumber) {
40
+ const data = await this.dataFetcher.getQuoteData([this.key.toAbi()], 0, {
41
+ blockTag: blockNumber,
42
+ });
43
+ return FullRangePoolState.fromQuoter(data[0]);
44
+ }
45
+ }
46
+ exports.FullRangePool = FullRangePool;
47
+ var FullRangePoolState;
48
+ (function (FullRangePoolState) {
49
+ function fromQuoter(data) {
50
+ const liquidity = data.liquidity.toBigInt();
51
+ const sqrtRatioFloat = data.sqrtRatio.toBigInt();
52
+ return {
53
+ sqrtRatio: (0, price_1.floatSqrtRatioToFixed)(sqrtRatioFloat),
54
+ liquidity,
55
+ };
56
+ }
57
+ FullRangePoolState.fromQuoter = fromQuoter;
58
+ function fromPositionUpdatedEvent(oldState, liquidityDelta) {
59
+ if (liquidityDelta === 0n) {
60
+ return null;
61
+ }
62
+ const clonedState = lodash_1.default.cloneDeep(oldState);
63
+ clonedState.liquidity += liquidityDelta;
64
+ return clonedState;
65
+ }
66
+ FullRangePoolState.fromPositionUpdatedEvent = fromPositionUpdatedEvent;
67
+ function fromSwappedEvent(ev) {
68
+ return {
69
+ liquidity: ev.liquidityAfter,
70
+ sqrtRatio: ev.sqrtRatioAfter,
71
+ };
72
+ }
73
+ FullRangePoolState.fromSwappedEvent = fromSwappedEvent;
74
+ })(FullRangePoolState || (exports.FullRangePoolState = FullRangePoolState = {}));
75
+ function quote(amount, isToken1, state, sqrtRatioLimit) {
76
+ const isIncreasing = (0, swap_1.isPriceIncreasing)(amount, isToken1);
77
+ let sqrtRatio = state.sqrtRatio;
78
+ const liquidity = state.liquidity;
79
+ sqrtRatioLimit ??= isIncreasing ? tick_1.MAX_SQRT_RATIO : tick_1.MIN_SQRT_RATIO;
80
+ const step = (0, swap_1.computeStep)({
81
+ fee: this.key.config.fee,
82
+ sqrtRatio,
83
+ liquidity,
84
+ isToken1,
85
+ sqrtRatioLimit,
86
+ amount,
87
+ });
88
+ return {
89
+ consumedAmount: step.consumedAmount,
90
+ calculatedAmount: step.calculatedAmount,
91
+ gasConsumed: GAS_COST_OF_ONE_FULL_RANGE_SWAP,
92
+ skipAhead: 0,
93
+ stateAfter: {
94
+ sqrtRatio: step.sqrtRatioNext,
95
+ liquidity,
96
+ },
97
+ };
98
+ }
99
+ //# sourceMappingURL=full-range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-range.js","sourceRoot":"","sources":["../../../../src/dex/ekubo/pools/full-range.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { Interface, Result } from '@ethersproject/abi';
2
+ import { Logger } from 'log4js';
3
+ import { DeepReadonly } from 'ts-essentials';
4
+ import { IDexHelper } from '../../../dex-helper/idex-helper';
5
+ import { StatefulEventSubscriber } from '../../../stateful-event-subscriber';
6
+ import { BlockHeader, Log } from '../../../types';
7
+ import { PoolKey } from './utils';
8
+ export interface Quote {
9
+ consumedAmount: bigint;
10
+ calculatedAmount: bigint;
11
+ gasConsumed: number;
12
+ skipAhead: number;
13
+ }
14
+ export interface PoolKeyed {
15
+ key: PoolKey;
16
+ }
17
+ export interface IEkuboPool extends PoolKeyed {
18
+ quote(amount: bigint, token: bigint, blockNumber: number): Quote;
19
+ }
20
+ export type QuoteFn<State> = (amount: bigint, isToken1: boolean, state: DeepReadonly<State>) => Quote;
21
+ export type NamedEventHandler<State> = (args: Result, oldState: DeepReadonly<State>, blockHeader: Readonly<BlockHeader>) => DeepReadonly<State> | null;
22
+ export type AnonymousEventHandler<State> = (data: string, oldState: DeepReadonly<State>, blockHeader: Readonly<BlockHeader>) => DeepReadonly<State> | null;
23
+ export declare class NamedEventHandlers<State> {
24
+ private readonly iface;
25
+ private readonly handlers;
26
+ constructor(iface: Interface, handlers: Record<string, NamedEventHandler<State>>);
27
+ parseLog(log: Readonly<Log>, oldState: DeepReadonly<State>, blockHeader: Readonly<BlockHeader>): DeepReadonly<State> | null;
28
+ }
29
+ export declare abstract class EkuboPool<State> extends StatefulEventSubscriber<State> implements IEkuboPool {
30
+ readonly key: PoolKey;
31
+ private readonly namedEventHandlers;
32
+ private readonly anonymousEventHandlers;
33
+ private readonly quoteFn;
34
+ protected constructor(parentName: string, dexHelper: IDexHelper, logger: Logger, key: PoolKey, namedEventHandlers: Record<string, NamedEventHandlers<State>>, anonymousEventHandlers: Record<string, AnonymousEventHandler<State>>, quoteFn: QuoteFn<State>);
35
+ /**
36
+ * The function is called every time any of the subscribed
37
+ * addresses release log. The function accepts the current
38
+ * state, updates the state according to the log, and returns
39
+ * the updated state.
40
+ * @param state - Current state of event subscriber
41
+ * @param log - Log released by one of the subscribed addresses
42
+ * @returns Updates state of the event subscriber after the log
43
+ */
44
+ protected processLog(state: DeepReadonly<State>, log: Readonly<Log>, blockHeader: Readonly<BlockHeader>): DeepReadonly<State> | null;
45
+ quote(amount: bigint, token: bigint, blockNumber: number): Quote;
46
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EkuboPool = exports.NamedEventHandlers = void 0;
4
+ const stateful_event_subscriber_1 = require("../../../stateful-event-subscriber");
5
+ class NamedEventHandlers {
6
+ iface;
7
+ handlers;
8
+ constructor(iface, handlers) {
9
+ this.iface = iface;
10
+ this.handlers = handlers;
11
+ }
12
+ parseLog(log, oldState, blockHeader) {
13
+ const event = this.iface.parseLog(log);
14
+ return this.handlers[event.name]?.(event.args, oldState, blockHeader);
15
+ }
16
+ }
17
+ exports.NamedEventHandlers = NamedEventHandlers;
18
+ const BASE_GAS_COST = 22_000;
19
+ class EkuboPool extends stateful_event_subscriber_1.StatefulEventSubscriber {
20
+ key;
21
+ namedEventHandlers;
22
+ anonymousEventHandlers;
23
+ quoteFn;
24
+ constructor(parentName, dexHelper, logger, key, namedEventHandlers, anonymousEventHandlers, quoteFn) {
25
+ super(parentName, key.string_id, dexHelper, logger);
26
+ this.key = key;
27
+ this.namedEventHandlers = namedEventHandlers;
28
+ this.anonymousEventHandlers = anonymousEventHandlers;
29
+ this.quoteFn = quoteFn;
30
+ this.addressesSubscribed = [
31
+ ...new Set(Object.keys(namedEventHandlers).concat(Object.keys(anonymousEventHandlers))),
32
+ ];
33
+ }
34
+ /**
35
+ * The function is called every time any of the subscribed
36
+ * addresses release log. The function accepts the current
37
+ * state, updates the state according to the log, and returns
38
+ * the updated state.
39
+ * @param state - Current state of event subscriber
40
+ * @param log - Log released by one of the subscribed addresses
41
+ * @returns Updates state of the event subscriber after the log
42
+ */
43
+ processLog(state, log, blockHeader) {
44
+ const emitter = log.address;
45
+ if (log.topics.length === 0) {
46
+ return this.anonymousEventHandlers[emitter]?.(log.data, state, blockHeader);
47
+ }
48
+ return this.namedEventHandlers[emitter]?.parseLog(log, state, blockHeader);
49
+ }
50
+ quote(amount, token, blockNumber) {
51
+ const isToken1 = token === this.key.token1;
52
+ if (!isToken1 && this.key.token0 !== token) {
53
+ throw new Error('Invalid token');
54
+ }
55
+ if (amount === 0n) {
56
+ return {
57
+ consumedAmount: 0n,
58
+ calculatedAmount: 0n,
59
+ gasConsumed: 0,
60
+ skipAhead: 0,
61
+ };
62
+ }
63
+ const state = this.getState(blockNumber);
64
+ if (state === null) {
65
+ throw new Error(`Quote for block number ${blockNumber} requested but state is not recent enough`);
66
+ }
67
+ const quote = this.quoteFn(amount, isToken1, state);
68
+ if (quote.calculatedAmount !== 0n) {
69
+ quote.gasConsumed += BASE_GAS_COST;
70
+ }
71
+ return quote;
72
+ }
73
+ }
74
+ exports.EkuboPool = EkuboPool;
75
+ //# sourceMappingURL=iface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iface.js","sourceRoot":"","sources":["../../../../src/dex/ekubo/pools/iface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function exp2(x: bigint): bigint;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exp2 = exp2;
4
+ const constants_1 = require("../constants");
5
+ const MASKS_AND_FACTORS = [
6
+ [0x8000000000000000n, 481231938336009023090067544955250113854n],
7
+ [0x4000000000000000n, 404666211852346594250993303657235475948n],
8
+ [0x2000000000000000n, 371080552416919877990254144423618836767n],
9
+ [0x1000000000000000n, 355347954397881497469693820312941593443n],
10
+ [0x800000000000000n, 347733580493780928808815525413232318461n],
11
+ [0x400000000000000n, 343987798952690256687074238090730651112n],
12
+ [0x200000000000000n, 342130066523749645191881555545647086143n],
13
+ [0x100000000000000n, 341204966012395051463589306197117539651n],
14
+ [0x80000000000000n, 340743354212339922144397487283364652955n],
15
+ [0x40000000000000n, 340512782555889898808859563671008026639n],
16
+ [0x20000000000000n, 340397555242326998647385072673097901535n],
17
+ [0x10000000000000n, 340339956208435708755752659506489956133n],
18
+ [0x8000000000000n, 340311160346490911934870813363085081661n],
19
+ [0x4000000000000n, 340296763329178528376528243588334151603n],
20
+ [0x2000000000000n, 340289565048926066557319684044576333862n],
21
+ [0x1000000000000n, 340285965965899358974465315064323671036n],
22
+ [0x800000000000n, 340284166438660709872813645066166128555n],
23
+ [0x400000000000n, 340283266678610039476911010529773336521n],
24
+ [0x200000000000n, 340282816799476865065514053322893021549n],
25
+ [0x100000000000n, 340282591860133317712432962519222523747n],
26
+ [0x80000000000n, 340282479390517303956044167089727739432n],
27
+ [0x40000000000n, 340282423155723237052512385577070742059n],
28
+ [0x20000000000n, 340282395038329688593740233918090740389n],
29
+ [0x10000000000n, 340282380979633785612518603506803612670n],
30
+ [0x8000000000n, 340282373950286051933938400987007267567n],
31
+ [0x4000000000n, 340282370435612239547654640565033792378n],
32
+ [0x2000000000n, 340282368678275346967764181521839267590n],
33
+ [0x1000000000n, 340282367799606904081131786786979136761n],
34
+ [0x800000000n, 340282367360272683488643795553082001443n],
35
+ [0x400000000n, 340282367140605573405106851149122747984n],
36
+ [0x200000000n, 340282367030772018416515141710341210063n],
37
+ [0x100000000n, 340282366975855240935513477676743808340n],
38
+ [0x80000000n, 340282366948396852198336193330767679917n],
39
+ [0x40000000n, 340282366934667657830578438075407037644n],
40
+ [0x20000000n, 340282366927803060646907282177123794346n],
41
+ [0x10000000n, 340282366924370762055123634660330219950n],
42
+ [0x8000000n, 340282366922654612759244793510020291790n],
43
+ [0x4000000n, 340282366921796538111308618586887023373n],
44
+ [0x2000000n, 340282366921367500787341342538325810693n],
45
+ [0x1000000n, 340282366921152982125357907367296559436n],
46
+ [0x800000n, 340282366921045722794366240495094772541n],
47
+ [0x400000n, 340282366920992093128870419737322088773n],
48
+ [0x200000n, 340282366920965278296122512528017799308n],
49
+ [0x100000n, 340282366920951870879748559715761167680n],
50
+ [0x80000n, 340282366920945167171561583507731730142n],
51
+ [0x40000n, 340282366920941815317468095453241730942n],
52
+ [0x20000n, 340282366920940139390421351438377911234n],
53
+ [0x10000n, 340282366920939301426897979434041296353n],
54
+ [0x8000n, 340282366920938882445136293432646812656n],
55
+ [0x4000n, 340282366920938672954255450432143026744n],
56
+ [0x2000n, 340282366920938568208815028931939497772n],
57
+ [0x1000n, 340282366920938515836094818181849824282n],
58
+ [0x800n, 340282366920938489649734712806808010286n],
59
+ [0x400n, 340282366920938476556554660119287858975n],
60
+ [0x200n, 340282366920938470009964633775527972241n],
61
+ [0x100n, 340282366920938466736669620603648076105n],
62
+ [0x80n, 340282366920938465100022114017708139844n],
63
+ [0x40n, 340282366920938464281698360724738174666n],
64
+ [0x20n, 340282366920938463872536484078253192815n],
65
+ [0x10n, 340282366920938463667955545755010702074n],
66
+ [0x8n, 340282366920938463565665076593389456749n],
67
+ [0x4n, 340282366920938463514519842012578834098n],
68
+ [0x2n, 340282366920938463488947224722173522776n],
69
+ [0x1n, 340282366920938463476160916076970867115n],
70
+ ];
71
+ function exp2(x) {
72
+ // x must be less than 0x400000000000000000 == 64 << 64 (overflow check)
73
+ if (x >= 0x400000000000000000n) {
74
+ throw new Error('Overflow');
75
+ }
76
+ // Start with 0x80000000000000000000000000000000 (i.e. 2^127)
77
+ let result = constants_1.TWO_POW_127;
78
+ for (const [mask, factor] of MASKS_AND_FACTORS) {
79
+ if ((x & mask) !== 0n) {
80
+ result = (result * factor) >> 128n;
81
+ }
82
+ }
83
+ // Final adjustment: shift right by 63 - (x >> 64). (x >> 64) is the integer part.
84
+ return result >> (63n - (x >> 64n));
85
+ }
86
+ //# sourceMappingURL=exp2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exp2.js","sourceRoot":"","sources":["../../../../../../src/dex/ekubo/pools/math/twamm/exp2.ts"],"names":[],"mappings":"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"}