@paraswap/dex-lib 2.31.1-rfq-partner.0 → 2.31.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 (69) hide show
  1. package/build/dex/aave-v3/tokens/arbitrum.json +20 -20
  2. package/build/dex/aave-v3/tokens/avalanche.json +44 -20
  3. package/build/dex/aave-v3/tokens/fantom.json +30 -30
  4. package/build/dex/aave-v3/tokens/optimism.json +18 -18
  5. package/build/dex/aave-v3/tokens/polygon.json +60 -42
  6. package/build/dex/balancer-v2/balancer-v2.js +21 -3
  7. package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
  8. package/build/dex/generic-rfq/generic-rfq.js +1 -1
  9. package/build/dex/generic-rfq/generic-rfq.js.map +1 -1
  10. package/build/dex/generic-rfq/rate-fetcher.d.ts +1 -1
  11. package/build/dex/generic-rfq/rate-fetcher.js +1 -2
  12. package/build/dex/generic-rfq/rate-fetcher.js.map +1 -1
  13. package/build/dex/generic-rfq/types.d.ts +0 -1
  14. package/build/dex/generic-rfq/types.js.map +1 -1
  15. package/build/dex/{test-aave-v3 → test-dex}/config.d.ts +1 -1
  16. package/build/dex/{test-aave-v3 → test-dex}/config.js +3 -3
  17. package/build/dex/test-dex/config.js.map +1 -0
  18. package/build/dex/{test-aave-v3/test-aave-v3-pool.d.ts → test-dex/test-dex-pool.d.ts} +3 -3
  19. package/build/dex/{test-aave-v3/test-aave-v3-pool.js → test-dex/test-dex-pool.js} +7 -7
  20. package/build/dex/test-dex/test-dex-pool.js.map +1 -0
  21. package/build/dex/{test-aave-v3/test-aave-v3.d.ts → test-dex/test-dex.d.ts} +8 -8
  22. package/build/dex/{test-aave-v3/test-aave-v3.js → test-dex/test-dex.js} +7 -7
  23. package/build/dex/test-dex/test-dex.js.map +1 -0
  24. package/build/dex/{test-aave-v3 → test-dex}/types.d.ts +1 -1
  25. package/build/dex/{test-aave-v3 → test-dex}/types.js.map +1 -1
  26. package/build/dex/woo-fi-v2/woo-fi-math.d.ts +16 -0
  27. package/build/dex/woo-fi-v2/woo-fi-math.js +137 -0
  28. package/build/dex/woo-fi-v2/woo-fi-math.js.map +1 -0
  29. package/build/types.d.ts +0 -1
  30. package/package.json +1 -1
  31. package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +14 -4
  32. package/src/dex/balancer-v2/balancer-v2.ts +22 -3
  33. package/src/dex/generic-rfq/generic-rfq.ts +0 -1
  34. package/src/dex/generic-rfq/rate-fetcher.ts +2 -4
  35. package/src/dex/generic-rfq/types.ts +0 -1
  36. package/src/types.ts +0 -1
  37. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  38. package/.idea/misc.xml +0 -6
  39. package/.idea/modules.xml +0 -8
  40. package/.idea/vcs.xml +0 -6
  41. package/.vscode/launch.json +0 -21
  42. package/build/abi/AugustusRFQRouter.abi.json +0 -1248
  43. package/build/abi/algebra/AlgebraPool.abi.json +0 -727
  44. package/build/dex/aave-v3/tokens/mainnet.json +0 -44
  45. package/build/dex/algebra/algebra-pool.d.ts +0 -41
  46. package/build/dex/algebra/algebra-pool.js +0 -277
  47. package/build/dex/algebra/algebra-pool.js.map +0 -1
  48. package/build/dex/algebra/lib/AlgebraXUniV3.d.ts +0 -5
  49. package/build/dex/algebra/lib/AlgebraXUniV3.js +0 -45
  50. package/build/dex/algebra/lib/AlgebraXUniV3.js.map +0 -1
  51. package/build/dex/algebra/lib/DataStorage.d.ts +0 -24
  52. package/build/dex/algebra/lib/DataStorage.js +0 -397
  53. package/build/dex/algebra/lib/DataStorage.js.map +0 -1
  54. package/build/dex/algebra/lib/DataStorageOperator.d.ts +0 -9
  55. package/build/dex/algebra/lib/DataStorageOperator.js +0 -66
  56. package/build/dex/algebra/lib/DataStorageOperator.js.map +0 -1
  57. package/build/dex/algebra/lib/Sqrt.d.ts +0 -3
  58. package/build/dex/algebra/lib/Sqrt.js +0 -60
  59. package/build/dex/algebra/lib/Sqrt.js.map +0 -1
  60. package/build/dex/balancer-v2/VirtualBoostedPool.d.ts +0 -79
  61. package/build/dex/balancer-v2/VirtualBoostedPool.js +0 -382
  62. package/build/dex/balancer-v2/VirtualBoostedPool.js.map +0 -1
  63. package/build/dex/generic-rfq/constants.d.ts +0 -1
  64. package/build/dex/generic-rfq/constants.js +0 -5
  65. package/build/dex/generic-rfq/constants.js.map +0 -1
  66. package/build/dex/test-aave-v3/config.js.map +0 -1
  67. package/build/dex/test-aave-v3/test-aave-v3-pool.js.map +0 -1
  68. package/build/dex/test-aave-v3/test-aave-v3.js.map +0 -1
  69. /package/build/dex/{test-aave-v3 → test-dex}/types.js +0 -0
@@ -1,397 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DataStorage = exports.TIMEPOINT_ZERO = void 0;
4
- const ts_essentials_1 = require("ts-essentials");
5
- const utils_1 = require("../../../utils");
6
- exports.TIMEPOINT_ZERO = {
7
- averageTick: 0n,
8
- blockTimestamp: 0n,
9
- initialized: false,
10
- secondsPerLiquidityCumulative: 0n,
11
- tickCumulative: 0n,
12
- volatilityCumulative: 0n,
13
- volumePerLiquidityCumulative: 0n,
14
- };
15
- const WINDOW = 24n * 60n;
16
- const UINT16_MODULO = 65536n;
17
- class DataStorage {
18
- /// @notice Calculates volatility between two sequential timepoints with resampling to 1 sec frequency
19
- /// @param dt Timedelta between timepoints, must be within uint32 range
20
- /// @param tick0 The tick at the left timepoint, must be within int24 range
21
- /// @param tick1 The tick at the right timepoint, must be within int24 range
22
- /// @param avgTick0 The average tick at the left timepoint, must be within int24 range
23
- /// @param avgTick1 The average tick at the right timepoint, must be within int24 range
24
- /// @return volatility The volatility between two sequential timepoints
25
- /// If the requirements for the parameters are met, it always fits 88 bits
26
- static _volatilityOnRange(dt, tick0, tick1, avgTick0, avgTick1) {
27
- // On the time interval from the previous timepoint to the current
28
- // we can represent tick and average tick change as two straight lines:
29
- // tick = k*t + b, where k and b are some constants
30
- // avgTick = p*t + q, where p and q are some constants
31
- // we want to get sum of (tick(t) - avgTick(t))^2 for every t in the interval (0; dt]
32
- // so: (tick(t) - avgTick(t))^2 = ((k*t + b) - (p*t + q))^2 = (k-p)^2 * t^2 + 2(k-p)(b-q)t + (b-q)^2
33
- // since everything except t is a constant, we need to use progressions for t and t^2:
34
- // sum(t) for t from 1 to dt = dt*(dt + 1)/2 = sumOfSequence
35
- // sum(t^2) for t from 1 to dt = dt*(dt+1)*(2dt + 1)/6 = sumOfSquares
36
- // so result will be: (k-p)^2 * sumOfSquares + 2(k-p)(b-q)*sumOfSequence + dt*(b-q)^2
37
- const K = tick1 - tick0 - (avgTick1 - avgTick0); // (k - p)*dt
38
- const B = (tick0 - avgTick0) * dt; // (b - q)*dt
39
- const sumOfSquares = dt * (dt + 1n) * (2n * dt + 1n); // sumOfSquares * 6
40
- const sumOfSequence = dt * (dt + 1n); // sumOfSequence * 2
41
- const volatility = (0, utils_1.uint256)((K ** 2n * sumOfSquares +
42
- 6n * B * K * sumOfSequence +
43
- 6n * dt * B ** 2n) /
44
- (6n * dt ** 2n));
45
- return volatility;
46
- }
47
- /// @notice Transforms a previous timepoint into a new timepoint, given the passage of time and the current tick and liquidity values
48
- /// @dev blockTimestamp _must_ be chronologically equal to or greater than last.blockTimestamp, safe for 0 or 1 overflows
49
- /// @param last The specified timepoint to be used in creation of new timepoint
50
- /// @param blockTimestamp The timestamp of the new timepoint
51
- /// @param tick The active tick at the time of the new timepoint
52
- /// @param prevTick The active tick at the time of the last timepoint
53
- /// @param liquidity The total in-range liquidity at the time of the new timepoint
54
- /// @param averageTick The average tick at the time of the new timepoint
55
- /// @param volumePerLiquidity The gmean(volumes)/liquidity at the time of the new timepoint
56
- /// @return Timepoint The newly populated timepoint
57
- static createNewTimepoint(last, blockTimestamp, tick, prevTick, liquidity, averageTick, volumePerLiquidity) {
58
- const delta = blockTimestamp - last.blockTimestamp;
59
- last.initialized = true;
60
- last.blockTimestamp = blockTimestamp;
61
- last.tickCumulative += (0, utils_1.int56)(tick) * delta;
62
- last.secondsPerLiquidityCumulative +=
63
- ((0, utils_1.uint160)(delta) << 128n) / (liquidity > 0n ? liquidity : 1n); // just timedelta if liquidity == 0
64
- last.volatilityCumulative += (0, utils_1.uint88)(this._volatilityOnRange(delta, prevTick, tick, last.averageTick, averageTick)); // always fits 88 bits
65
- last.averageTick = averageTick;
66
- last.volumePerLiquidityCumulative += volumePerLiquidity;
67
- return last;
68
- }
69
- /// @notice comparator for 32-bit timestamps
70
- /// @dev safe for 0 or 1 overflows, a and b _must_ be chronologically before or equal to currentTime
71
- /// @param a A comparison timestamp from which to determine the relative position of `currentTime`
72
- /// @param b From which to determine the relative position of `currentTime`
73
- /// @param currentTime A timestamp truncated to 32 bits
74
- /// @return res Whether `a` is chronologically <= `b`
75
- static lteConsideringOverflow(a, b, currentTime) {
76
- let res = a > currentTime;
77
- if (res == b > currentTime)
78
- res = a <= b; // if both are on the same side
79
- return res;
80
- }
81
- /// @dev guaranteed that the result is within the bounds of int24
82
- /// returns int256 for fuzzy tests
83
- static _getAverageTick(self, time, tick, index, oldestIndex, lastTimestamp, lastTickCumulative) {
84
- const oldestTimestamp = (self[Number(oldestIndex)] || exports.TIMEPOINT_ZERO)
85
- .blockTimestamp;
86
- const oldestTickCumulative = self[Number(oldestIndex)]?.tickCumulative || 0n;
87
- let avgTick;
88
- if (this.lteConsideringOverflow(oldestTimestamp, time - WINDOW, time)) {
89
- if (this.lteConsideringOverflow(lastTimestamp, time - WINDOW, time)) {
90
- index -= 1n; // considering underflow
91
- const startTimepoint = self[Number(index)] || exports.TIMEPOINT_ZERO;
92
- avgTick = startTimepoint.initialized
93
- ? (lastTickCumulative - startTimepoint.tickCumulative) /
94
- (lastTimestamp - startTimepoint.blockTimestamp)
95
- : tick;
96
- }
97
- else {
98
- const startOfWindow = this.getSingleTimepoint(self, time, WINDOW, tick, index, oldestIndex, 0n);
99
- // current-WINDOW last current
100
- // _________*____________*_______*_
101
- // ||||||||||||
102
- avgTick =
103
- (lastTickCumulative - startOfWindow.tickCumulative) /
104
- (lastTimestamp - time + WINDOW);
105
- }
106
- }
107
- else {
108
- avgTick =
109
- lastTimestamp == oldestTimestamp
110
- ? tick
111
- : (lastTickCumulative - oldestTickCumulative) /
112
- (lastTimestamp - oldestTimestamp);
113
- }
114
- return avgTick;
115
- }
116
- /// @notice Fetches the timepoints beforeOrAt and atOrAfter a target, i.e. where [beforeOrAt, atOrAfter] is satisfied.
117
- /// The result may be the same timepoint, or adjacent timepoints.
118
- /// @dev The answer must be contained in the array, used when the target is located within the stored timepoint
119
- /// boundaries: older than the most recent timepoint and younger, or the same age as, the oldest timepoint
120
- /// @param self The stored dataStorage array
121
- /// @param time The current block.timestamp
122
- /// @param target The timestamp at which the reserved timepoint should be for
123
- /// @param lastIndex The index of the timepoint that was most recently written to the timepoints array
124
- /// @param oldestIndex The index of the oldest timepoint in the timepoints array
125
- /// @return beforeOrAt The timepoint recorded before, or at, the target
126
- /// @return atOrAfter The timepoint recorded at, or after, the target
127
- static binarySearch(self, time, target, lastIndex, oldestIndex) {
128
- let left = oldestIndex; // oldest timepoint
129
- let right = lastIndex >= oldestIndex ? lastIndex : lastIndex + UINT16_MODULO; // newest timepoint considering one index overflow
130
- let current = (left + right) >> 1n; // "middle" point between the boundaries
131
- let beforeOrAt;
132
- let atOrAfter;
133
- let initializedAfter;
134
- let timestampAfter;
135
- do {
136
- beforeOrAt = self[Number((0, utils_1.uint16)(current))] || exports.TIMEPOINT_ZERO; // checking the "middle" point between the boundaries
137
- let [initializedBefore, timestampBefore] = [
138
- beforeOrAt.initialized,
139
- beforeOrAt.blockTimestamp,
140
- ];
141
- if (initializedBefore) {
142
- if (this.lteConsideringOverflow(timestampBefore, target, time)) {
143
- // is current point before or at `target`?
144
- atOrAfter = self[Number((0, utils_1.uint16)(current + 1n))] || exports.TIMEPOINT_ZERO; // checking the next point after "middle"
145
- [initializedAfter, timestampAfter] = [
146
- atOrAfter.initialized,
147
- atOrAfter.blockTimestamp,
148
- ];
149
- if (initializedAfter) {
150
- if (this.lteConsideringOverflow(target, timestampAfter, time)) {
151
- // is the "next" point after or at `target`?
152
- return [beforeOrAt, atOrAfter]; // the only fully correct way to finish
153
- }
154
- left = current + 1n; // "next" point is before the `target`, so looking in the right half
155
- }
156
- else {
157
- // beforeOrAt is initialized and <= target, and next timepoint is uninitialized
158
- // should be impossible if initial boundaries and `target` are correct
159
- return [beforeOrAt, beforeOrAt];
160
- }
161
- }
162
- else {
163
- right = current - 1n; // current point is after the `target`, so looking in the left half
164
- }
165
- }
166
- else {
167
- // we've landed on an uninitialized timepoint, keep searching higher
168
- // should be impossible if initial boundaries and `target` are correct
169
- left = current + 1n;
170
- }
171
- current = (left + right) >> 1n; // calculating the new "middle" point index after updating the bounds
172
- } while (true); // protect with max nb of iterations?
173
- // unreachable code here
174
- // atOrAfter = beforeOrAt; // code is unreachable, to suppress compiler warning
175
- // assert(false);
176
- // return [beforeOrAt, atOrAfter]
177
- }
178
- /// @dev Reverts if an timepoint at or before the desired timepoint timestamp does not exist.
179
- /// 0 may be passed as `secondsAgo' to return the current cumulative values.
180
- /// If called with a timestamp falling between two timepoints, returns the counterfactual accumulator values
181
- /// at exactly the timestamp between the two timepoints.
182
- /// @param self The stored dataStorage array
183
- /// @param time The current block timestamp
184
- /// @param secondsAgo The amount of time to look back, in seconds, at which point to return an timepoint
185
- /// @param tick The current tick
186
- /// @param index The index of the timepoint that was most recently written to the timepoints array
187
- /// @param oldestIndex The index of the oldest timepoint
188
- /// @param liquidity The current in-range pool liquidity
189
- /// @return targetTimepoint desired timepoint or it's approximation
190
- static getSingleTimepoint(self, time, secondsAgo, tick, index, oldestIndex, liquidity) {
191
- let target = time - secondsAgo;
192
- // if target is newer than last timepoint
193
- if (secondsAgo == 0n ||
194
- this.lteConsideringOverflow((self[Number(index)] || exports.TIMEPOINT_ZERO).blockTimestamp, target, time)) {
195
- let last = self[Number(index)] || exports.TIMEPOINT_ZERO;
196
- if (last.blockTimestamp == target) {
197
- return last;
198
- }
199
- else {
200
- // otherwise, we need to add new timepoint
201
- let avgTick = (0, utils_1.int24)(this._getAverageTick(self, time, tick, index, oldestIndex, last.blockTimestamp, last.tickCumulative));
202
- let prevTick = tick;
203
- {
204
- if (index != oldestIndex) {
205
- // FIXME?
206
- let prevLast = {
207
- averageTick: 0n,
208
- blockTimestamp: 0n,
209
- initialized: false,
210
- secondsPerLiquidityCumulative: 0n,
211
- tickCumulative: 0n,
212
- volatilityCumulative: 0n,
213
- volumePerLiquidityCumulative: 0n,
214
- };
215
- let _prevLast = self[Number(index - 1n)] || exports.TIMEPOINT_ZERO; // considering index underflow
216
- prevLast.blockTimestamp = _prevLast.blockTimestamp;
217
- prevLast.tickCumulative = _prevLast.tickCumulative;
218
- prevTick = (0, utils_1.int24)((last.tickCumulative - prevLast.tickCumulative) /
219
- (last.blockTimestamp - prevLast.blockTimestamp));
220
- }
221
- }
222
- return this.createNewTimepoint(last, target, tick, prevTick, liquidity, avgTick, 0n);
223
- }
224
- }
225
- (0, utils_1._require)(this.lteConsideringOverflow((self[Number(oldestIndex)] || exports.TIMEPOINT_ZERO).blockTimestamp, target, time), 'OLD');
226
- let [beforeOrAt, atOrAfter] = this.binarySearch(self, time, target, index, oldestIndex);
227
- if (target == atOrAfter.blockTimestamp) {
228
- return atOrAfter; // we're at the right boundary
229
- }
230
- if (target != beforeOrAt.blockTimestamp) {
231
- // we're in the middle
232
- let timepointTimeDelta = atOrAfter.blockTimestamp - beforeOrAt.blockTimestamp;
233
- let targetDelta = target - beforeOrAt.blockTimestamp;
234
- // For gas savings the resulting point is written to beforeAt
235
- beforeOrAt.tickCumulative +=
236
- ((atOrAfter.tickCumulative - beforeOrAt.tickCumulative) /
237
- timepointTimeDelta) *
238
- targetDelta;
239
- beforeOrAt.secondsPerLiquidityCumulative += (0, utils_1.uint160)(((0, utils_1.uint256)(atOrAfter.secondsPerLiquidityCumulative -
240
- beforeOrAt.secondsPerLiquidityCumulative) *
241
- targetDelta) /
242
- timepointTimeDelta);
243
- beforeOrAt.volatilityCumulative +=
244
- ((atOrAfter.volatilityCumulative - beforeOrAt.volatilityCumulative) /
245
- timepointTimeDelta) *
246
- targetDelta;
247
- beforeOrAt.volumePerLiquidityCumulative +=
248
- ((atOrAfter.volumePerLiquidityCumulative -
249
- beforeOrAt.volumePerLiquidityCumulative) /
250
- timepointTimeDelta) *
251
- targetDelta;
252
- }
253
- // we're at the left boundary or at the middle
254
- return beforeOrAt;
255
- }
256
- /// @notice Returns the accumulator values as of each time seconds ago from the given time in the array of `secondsAgos`
257
- /// @dev Reverts if `secondsAgos` > oldest timepoint
258
- /// @param self The stored dataStorage array
259
- /// @param time The current block.timestamp
260
- /// @param secondsAgos Each amount of time to look back, in seconds, at which point to return an timepoint
261
- /// @param tick The current tick
262
- /// @param index The index of the timepoint that was most recently written to the timepoints array
263
- /// @param liquidity The current in-range pool liquidity
264
- /// @return tickCumulatives The tick * time elapsed since the pool was first initialized, as of each `secondsAgo`
265
- /// @return secondsPerLiquidityCumulatives The cumulative seconds / max(1, liquidity) since the pool was first initialized, as of each `secondsAgo`
266
- /// @return volatilityCumulatives The cumulative volatility values since the pool was first initialized, as of each `secondsAgo`
267
- /// @return volumePerAvgLiquiditys The cumulative volume per liquidity values since the pool was first initialized, as of each `secondsAgo`
268
- static getTimepoints(self, time, secondsAgos, tick, index, liquidity) {
269
- let tickCumulatives = new Array(secondsAgos.length);
270
- let secondsPerLiquidityCumulatives = new Array(secondsAgos.length);
271
- let volatilityCumulatives = new Array(secondsAgos.length);
272
- let volumePerAvgLiquiditys = new Array(secondsAgos.length);
273
- let oldestIndex = 0n; // solidity default
274
- // check if we have overflow in the past
275
- let nextIndex = index + 1n; // considering overflow
276
- if ((self[Number(nextIndex)] || exports.TIMEPOINT_ZERO).initialized) {
277
- oldestIndex = nextIndex;
278
- }
279
- let current;
280
- for (let i = 0; i < secondsAgos.length; i++) {
281
- current = this.getSingleTimepoint(self, time, secondsAgos[i], tick, index, oldestIndex, liquidity);
282
- [
283
- tickCumulatives[i],
284
- secondsPerLiquidityCumulatives[i],
285
- volatilityCumulatives[i],
286
- volumePerAvgLiquiditys[i],
287
- ] = [
288
- current.tickCumulative,
289
- current.secondsPerLiquidityCumulative,
290
- current.volatilityCumulative,
291
- current.volumePerLiquidityCumulative,
292
- ];
293
- }
294
- return [
295
- tickCumulatives,
296
- secondsPerLiquidityCumulatives,
297
- volatilityCumulatives,
298
- volumePerAvgLiquiditys,
299
- ];
300
- }
301
- /// @notice Returns average volatility in the range from time-WINDOW to time
302
- /// @param self The stored dataStorage array
303
- /// @param time The current block.timestamp
304
- /// @param tick The current tick
305
- /// @param index The index of the timepoint that was most recently written to the timepoints array
306
- /// @param liquidity The current in-range pool liquidity
307
- /// @return volatilityAverage The average volatility in the recent range
308
- /// @return volumePerLiqAverage The average volume per liquidity in the recent range
309
- static getAverages(self, time, tick, index, liquidity) {
310
- let oldestIndex;
311
- let oldest = self[0];
312
- let nextIndex = index + 1n; // considering overflow
313
- if ((self[Number(nextIndex)] || exports.TIMEPOINT_ZERO).initialized) {
314
- oldest = self[Number(nextIndex)] || exports.TIMEPOINT_ZERO;
315
- oldestIndex = nextIndex;
316
- }
317
- (0, ts_essentials_1.assert)(oldestIndex); // FIXME ?
318
- let endOfWindow = this.getSingleTimepoint(self, time, 0n, tick, index, oldestIndex, liquidity);
319
- let oldestTimestamp = oldest.blockTimestamp;
320
- if (this.lteConsideringOverflow(oldestTimestamp, time - WINDOW, time)) {
321
- let startOfWindow = this.getSingleTimepoint(self, time, WINDOW, tick, index, oldestIndex, liquidity);
322
- return [
323
- (endOfWindow.volatilityCumulative -
324
- startOfWindow.volatilityCumulative) /
325
- WINDOW,
326
- (0, utils_1.uint256)(endOfWindow.volumePerLiquidityCumulative -
327
- startOfWindow.volumePerLiquidityCumulative) >> 57n,
328
- ];
329
- }
330
- else if (time != oldestTimestamp) {
331
- let _oldestVolatilityCumulative = oldest.volatilityCumulative;
332
- let _oldestVolumePerLiquidityCumulative = oldest.volumePerLiquidityCumulative;
333
- return [
334
- (endOfWindow.volatilityCumulative - _oldestVolatilityCumulative) /
335
- (time - oldestTimestamp),
336
- (0, utils_1.uint256)(endOfWindow.volumePerLiquidityCumulative -
337
- _oldestVolumePerLiquidityCumulative) >> 57n,
338
- ];
339
- }
340
- return [0n, 0n]; // should not enter here ?
341
- }
342
- /// @notice Initialize the dataStorage array by writing the first slot. Called once for the lifecycle of the timepoints array
343
- /// @param self The stored dataStorage array
344
- /// @param time The time of the dataStorage initialization, via block.timestamp truncated to uint32
345
- /// @param tick Initial tick
346
- // static initialize(
347
- // Timepoint[UINT16_MODULO] storage self,
348
- // uint32 time,
349
- // int24 tick
350
- // ) internal {
351
- // require(!self[0].initialized);
352
- // self[0].initialized = true;
353
- // self[0].blockTimestamp = time;
354
- // self[0].averageTick = tick;
355
- // }
356
- /// @notice Writes an dataStorage timepoint to the array
357
- /// @dev Writable at most once per block. Index represents the most recently written element. index must be tracked externally.
358
- /// @param self The stored dataStorage array
359
- /// @param index The index of the timepoint that was most recently written to the timepoints array
360
- /// @param blockTimestamp The timestamp of the new timepoint
361
- /// @param tick The active tick at the time of the new timepoint
362
- /// @param liquidity The total in-range liquidity at the time of the new timepoint
363
- /// @param volumePerLiquidity The gmean(volumes)/liquidity at the time of the new timepoint
364
- /// @return indexUpdated The new index of the most recently written element in the dataStorage array
365
- static write(self, index, blockTimestamp, tick, liquidity, volumePerLiquidity) {
366
- let _last = self[Number(index)] || exports.TIMEPOINT_ZERO;
367
- // early return if we've already written an timepoint this block
368
- if (_last.blockTimestamp == blockTimestamp) {
369
- return index;
370
- }
371
- let last = _last;
372
- // get next index considering overflow
373
- let indexUpdated = index + 1n;
374
- let oldestIndex = 0n; // default in evm
375
- // check if we have overflow in the past
376
- if ((self[Number(indexUpdated)] || exports.TIMEPOINT_ZERO).initialized) {
377
- oldestIndex = indexUpdated;
378
- }
379
- let avgTick = (0, utils_1.int24)(this._getAverageTick(self, blockTimestamp, tick, index, oldestIndex, last.blockTimestamp, last.tickCumulative));
380
- let prevTick = tick;
381
- if (index != oldestIndex) {
382
- let _prevLast = self[Number(index - 1n)] || exports.TIMEPOINT_ZERO; // considering index underflow
383
- let _prevLastBlockTimestamp = _prevLast.blockTimestamp;
384
- let _prevLastTickCumulative = _prevLast.tickCumulative;
385
- prevTick = (0, utils_1.int24)((last.tickCumulative - _prevLastTickCumulative) /
386
- (last.blockTimestamp - _prevLastBlockTimestamp));
387
- }
388
- self[Number(indexUpdated)] = this.createNewTimepoint(last, blockTimestamp, tick, prevTick, liquidity, avgTick, volumePerLiquidity);
389
- // FIXME should delete ?
390
- // delete self[Number(index)];
391
- return indexUpdated;
392
- }
393
- }
394
- exports.DataStorage = DataStorage;
395
- DataStorage.WINDOW = WINDOW;
396
- DataStorage.UINT16_MODULO = UINT16_MODULO;
397
- //# sourceMappingURL=DataStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataStorage.js","sourceRoot":"","sources":["../../../../src/dex/algebra/lib/DataStorage.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { PoolState } from '../types';
2
- export declare class DataStorageOperator {
3
- static getSingleTimepoint(state: PoolState, time: bigint, secondsAgo: bigint, tick: bigint, index: bigint, liquidity: bigint): [bigint, bigint, bigint, bigint];
4
- static getTimepoints(state: PoolState, time: bigint, secondsAgos: bigint[], tick: bigint, index: bigint, liquidity: bigint): [bigint[], bigint[], bigint[], bigint[]];
5
- static getAverages(state: PoolState, time: bigint, tick: bigint, index: bigint, liquidity: bigint): [bigint, bigint];
6
- static write(state: PoolState, index: bigint, blockTimestamp: bigint, tick: bigint, liquidity: bigint, volumePerLiquidity: bigint): bigint;
7
- static calculateVolumePerLiquidity(liquidity: bigint, amount0: bigint, amount1: bigint): bigint;
8
- static window(): bigint;
9
- }
@@ -1,66 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DataStorageOperator = void 0;
4
- const ts_essentials_1 = require("ts-essentials");
5
- const DataStorage_1 = require("./DataStorage");
6
- const bigint_constants_1 = require("../../../bigint-constants");
7
- const utils_1 = require("../../../utils");
8
- const Sqrt_1 = require("./Sqrt");
9
- // TO COMPARE WITH https://github.com/cryptoalgebra/Algebra/blob/3cd9a65bb5bb39d26fb4346e8f7d6d2a28672cc6/src/core/contracts/DataStorageOperator.sol#L16-L17
10
- const MAX_VOLUME_PER_LIQUIDITY = 100000 << 64; // maximum meaningful ratio of volume to liquidity
11
- class DataStorageOperator {
12
- /// @inheritdoc IDataStorageOperator
13
- static getSingleTimepoint(state, time, secondsAgo, tick, index, liquidity) {
14
- let oldestIndex;
15
- // check if we have overflow in the past
16
- let nextIndex = index + 1n; // considering overflow
17
- if ((state.timepoints[Number(nextIndex)] || DataStorage_1.TIMEPOINT_ZERO).initialized) {
18
- oldestIndex = nextIndex;
19
- }
20
- (0, ts_essentials_1.assert)(oldestIndex); //
21
- let result = DataStorage_1.DataStorage.getSingleTimepoint(state.timepoints, time, secondsAgo, tick, index, oldestIndex, liquidity);
22
- let [tickCumulative, secondsPerLiquidityCumulative, volatilityCumulative, volumePerAvgLiquidity,] = [
23
- result.tickCumulative,
24
- result.secondsPerLiquidityCumulative,
25
- result.volatilityCumulative,
26
- result.volumePerLiquidityCumulative,
27
- ];
28
- return [
29
- tickCumulative,
30
- secondsPerLiquidityCumulative,
31
- volatilityCumulative,
32
- volumePerAvgLiquidity,
33
- ];
34
- }
35
- /// @inheritdoc IDataStorageOperator
36
- static getTimepoints(state, time, secondsAgos, tick, index, liquidity) {
37
- return DataStorage_1.DataStorage.getTimepoints(state.timepoints, time, secondsAgos, tick, index, liquidity);
38
- }
39
- /// @inheritdoc IDataStorageOperator
40
- static getAverages(state, time, tick, index, liquidity) {
41
- return DataStorage_1.DataStorage.getAverages(state.timepoints, time, tick, index, liquidity);
42
- }
43
- /// @inheritdoc IDataStorageOperator
44
- static write(state, index, blockTimestamp, tick, liquidity, volumePerLiquidity) {
45
- return DataStorage_1.DataStorage.write(state.timepoints, index, blockTimestamp, tick, liquidity, volumePerLiquidity);
46
- }
47
- /// @inheritdoc IDataStorageOperator
48
- static calculateVolumePerLiquidity(liquidity, amount0, amount1) {
49
- let volume = Sqrt_1.Sqrt.sqrtAbs(amount0) * Sqrt_1.Sqrt.sqrtAbs(amount1);
50
- let volumeShifted;
51
- if (volume >= 2n ** 192n)
52
- volumeShifted = bigint_constants_1.BI_MAX_UINT256 / (liquidity > 0n ? liquidity : 1n);
53
- else
54
- volumeShifted = (volume << 64n) / (liquidity > 0n ? liquidity : 1n);
55
- if (volumeShifted >= MAX_VOLUME_PER_LIQUIDITY)
56
- return BigInt(MAX_VOLUME_PER_LIQUIDITY);
57
- else
58
- return (0, utils_1.uint128)(volumeShifted);
59
- }
60
- /// @inheritdoc IDataStorageOperator
61
- static window() {
62
- return DataStorage_1.DataStorage.WINDOW;
63
- }
64
- }
65
- exports.DataStorageOperator = DataStorageOperator;
66
- //# sourceMappingURL=DataStorageOperator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataStorageOperator.js","sourceRoot":"","sources":["../../../../src/dex/algebra/lib/DataStorageOperator.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export declare class Sqrt {
2
- static sqrtAbs(_x: bigint): bigint;
3
- }
@@ -1,60 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Sqrt = void 0;
4
- const utils_1 = require("../../../utils");
5
- // TO COMPARE WITH https://github.com/cryptoalgebra/Algebra/blob/509f5bbb80b81daef1d5c15ea8695b5d039630cc/src/core/contracts/libraries/Sqrt.sol#L2-L3
6
- class Sqrt {
7
- /// @notice Gets the square root of the absolute value of the parameter
8
- static sqrtAbs(_x) {
9
- let result;
10
- // get abs value
11
- let mask = _x >> (256n - 1n);
12
- let x = (0, utils_1.uint256)((_x ^ mask) - mask);
13
- if (x == 0n)
14
- result = 0n;
15
- else {
16
- let xx = x;
17
- let r = 1n;
18
- if (xx >= 0x100000000000000000000000000000000n) {
19
- xx >>= 128n;
20
- r <<= 64n;
21
- }
22
- if (xx >= 0x10000000000000000n) {
23
- xx >>= 64n;
24
- r <<= 32n;
25
- }
26
- Sqrt;
27
- if (xx >= 0x100000000n) {
28
- xx >>= 32n;
29
- r <<= 16n;
30
- }
31
- if (xx >= 0x10000n) {
32
- xx >>= 16n;
33
- r <<= 8n;
34
- }
35
- if (xx >= 0x100n) {
36
- xx >>= 8n;
37
- r <<= 4n;
38
- }
39
- if (xx >= 0x10n) {
40
- xx >>= 4n;
41
- r <<= 2n;
42
- }
43
- if (xx >= 0x8n) {
44
- r <<= 1n;
45
- }
46
- r = (r + x / r) >> 1n;
47
- r = (r + x / r) >> 1n;
48
- r = (r + x / r) >> 1n;
49
- r = (r + x / r) >> 1n;
50
- r = (r + x / r) >> 1n;
51
- r = (r + x / r) >> 1n;
52
- r = (r + x / r) >> 1n; // @dev Seven iterations should be enough.
53
- let r1 = x / r;
54
- result = r < r1 ? r : r1;
55
- }
56
- return result;
57
- }
58
- }
59
- exports.Sqrt = Sqrt;
60
- //# sourceMappingURL=Sqrt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Sqrt.js","sourceRoot":"","sources":["../../../../src/dex/algebra/lib/Sqrt.ts"],"names":[],"mappings":";;;AAAA,0CAAyC;AAEzC,qJAAqJ;AACrJ,MAAa,IAAI;IACf,uEAAuE;IACvE,MAAM,CAAC,OAAO,CAAC,EAAU;QACvB,IAAI,MAAM,CAAC;QAEX,gBAAgB;QAChB,IAAI,IAAI,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAA,eAAO,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE;YAAE,MAAM,GAAG,EAAE,CAAC;aACpB;YACH,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,IAAI,EAAE,IAAI,oCAAoC,EAAE;gBAC9C,EAAE,KAAK,IAAI,CAAC;gBACZ,CAAC,KAAK,GAAG,CAAC;aACX;YACD,IAAI,EAAE,IAAI,oBAAoB,EAAE;gBAC9B,EAAE,KAAK,GAAG,CAAC;gBACX,CAAC,KAAK,GAAG,CAAC;aACX;YACD,IAAI,CAAC;YACL,IAAI,EAAE,IAAI,YAAY,EAAE;gBACtB,EAAE,KAAK,GAAG,CAAC;gBACX,CAAC,KAAK,GAAG,CAAC;aACX;YACD,IAAI,EAAE,IAAI,QAAQ,EAAE;gBAClB,EAAE,KAAK,GAAG,CAAC;gBACX,CAAC,KAAK,EAAE,CAAC;aACV;YACD,IAAI,EAAE,IAAI,MAAM,EAAE;gBAChB,EAAE,KAAK,EAAE,CAAC;gBACV,CAAC,KAAK,EAAE,CAAC;aACV;YACD,IAAI,EAAE,IAAI,KAAK,EAAE;gBACf,EAAE,KAAK,EAAE,CAAC;gBACV,CAAC,KAAK,EAAE,CAAC;aACV;YACD,IAAI,EAAE,IAAI,IAAI,EAAE;gBACd,CAAC,KAAK,EAAE,CAAC;aACV;YACD,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,0CAA0C;YACjE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACf,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1B;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AArDD,oBAqDC"}