@paraswap/dex-lib 3.6.2 → 3.6.3

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 (109) hide show
  1. package/build/dex/aave-v1/aave-v1.d.ts +1 -2
  2. package/build/dex/aave-v1/aave-v1.js +0 -23
  3. package/build/dex/aave-v1/aave-v1.js.map +1 -1
  4. package/build/dex/compound.js +1 -1
  5. package/build/dex/compound.js.map +1 -1
  6. package/build/dex/etherfi/etherfi.d.ts +26 -0
  7. package/build/dex/etherfi/etherfi.js +96 -0
  8. package/build/dex/etherfi/etherfi.js.map +1 -0
  9. package/build/dex/index.js +2 -0
  10. package/build/dex/index.js.map +1 -1
  11. package/build/dex/maverick-v2/config.d.ts +2 -2
  12. package/build/dex/maverick-v2/config.js +16 -9
  13. package/build/dex/maverick-v2/config.js.map +1 -1
  14. package/build/dex/maverick-v2/maverick-math/maverick-basic-math.js +3 -3
  15. package/build/dex/maverick-v2/maverick-math/maverick-basic-math.js.map +1 -1
  16. package/build/dex/maverick-v2/maverick-math/maverick-bin-math.js +4 -4
  17. package/build/dex/maverick-v2/maverick-math/maverick-bin-math.js.map +1 -1
  18. package/build/dex/maverick-v2/maverick-math/maverick-math.js +3 -3
  19. package/build/dex/maverick-v2/maverick-math/maverick-math.js.map +1 -1
  20. package/build/dex/maverick-v2/maverick-math/maverick-pool-math.js +13 -13
  21. package/build/dex/maverick-v2/maverick-math/maverick-pool-math.js.map +1 -1
  22. package/build/dex/maverick-v2/maverick-math/maverick-swap-math.js +1 -1
  23. package/build/dex/maverick-v2/maverick-math/maverick-swap-math.js.map +1 -1
  24. package/build/dex/maverick-v2/maverick-math/maverick-tick-math.js +4 -4
  25. package/build/dex/maverick-v2/maverick-math/maverick-tick-math.js.map +1 -1
  26. package/build/dex/maverick-v2/maverick-math/maverick-twa-math.js +3 -3
  27. package/build/dex/maverick-v2/maverick-math/maverick-twa-math.js.map +1 -1
  28. package/build/dex/maverick-v2/maverick-v2-pool.d.ts +12 -9
  29. package/build/dex/maverick-v2/maverick-v2-pool.js +71 -16
  30. package/build/dex/maverick-v2/maverick-v2-pool.js.map +1 -1
  31. package/build/dex/maverick-v2/maverick-v2.d.ts +4 -8
  32. package/build/dex/maverick-v2/maverick-v2.js +62 -90
  33. package/build/dex/maverick-v2/maverick-v2.js.map +1 -1
  34. package/build/dex/maverick-v2/types.d.ts +1 -2
  35. package/build/dex/platypus/platypus.d.ts +1 -2
  36. package/build/dex/platypus/platypus.js +0 -45
  37. package/build/dex/platypus/platypus.js.map +1 -1
  38. package/build/dex/sdai/config.d.ts +11 -0
  39. package/build/dex/sdai/config.js +21 -0
  40. package/build/dex/sdai/config.js.map +1 -0
  41. package/build/dex/sdai/constants.d.ts +2 -0
  42. package/build/dex/sdai/constants.js +6 -0
  43. package/build/dex/sdai/constants.js.map +1 -0
  44. package/build/dex/sdai/scripts/validate-state.js +102 -0
  45. package/build/dex/sdai/scripts/validate-state.js.map +1 -0
  46. package/build/dex/sdai/sdai-pool.d.ts +16 -0
  47. package/build/dex/sdai/sdai-pool.js +85 -0
  48. package/build/dex/sdai/sdai-pool.js.map +1 -0
  49. package/build/dex/sdai/sdai.d.ts +51 -0
  50. package/build/dex/sdai/sdai.js +172 -0
  51. package/build/dex/sdai/sdai.js.map +1 -0
  52. package/build/dex/sdai/types.d.ts +21 -0
  53. package/build/dex/sdai/types.js +11 -0
  54. package/build/dex/sdai/types.js.map +1 -0
  55. package/build/dex/sdai/utils.d.ts +4 -0
  56. package/build/dex/sdai/utils.js +39 -0
  57. package/build/dex/sdai/utils.js.map +1 -0
  58. package/build/dex/stable-pool.js +8 -1
  59. package/build/dex/stable-pool.js.map +1 -1
  60. package/build/dex/swaap-v1/swaap-v1.d.ts +1 -2
  61. package/build/dex/swaap-v1/swaap-v1.js +0 -14
  62. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  63. package/package.json +1 -1
  64. package/src/abi/maverick-v2/MaverickV2Pool.json +1234 -0
  65. package/src/abi/maverick-v2/MaverickV2PoolLens.json +1232 -0
  66. package/src/abi/maverick-v2/MaverickV2Quoter.json +278 -0
  67. package/src/dex/index.ts +2 -0
  68. package/src/dex/maverick-v2/config.ts +28 -0
  69. package/src/dex/maverick-v2/maverick-math/maverick-basic-math.ts +152 -0
  70. package/src/dex/maverick-v2/maverick-math/maverick-bin-math.ts +288 -0
  71. package/src/dex/maverick-v2/maverick-math/maverick-delta-math.ts +32 -0
  72. package/src/dex/maverick-v2/maverick-math/maverick-math.ts +30 -0
  73. package/src/dex/maverick-v2/maverick-math/maverick-pool-lib.ts +42 -0
  74. package/src/dex/maverick-v2/maverick-math/maverick-pool-math.ts +709 -0
  75. package/src/dex/maverick-v2/maverick-math/maverick-swap-math.ts +199 -0
  76. package/src/dex/maverick-v2/maverick-math/maverick-tick-math.ts +171 -0
  77. package/src/dex/maverick-v2/maverick-math/maverick-twa-math.ts +54 -0
  78. package/src/dex/maverick-v2/maverick-v2-e2e.test.ts +193 -0
  79. package/src/dex/maverick-v2/maverick-v2-events.test.ts +112 -0
  80. package/src/dex/maverick-v2/maverick-v2-integration.test.ts +283 -0
  81. package/src/dex/maverick-v2/maverick-v2-pool.ts +346 -0
  82. package/src/dex/maverick-v2/maverick-v2.ts +380 -0
  83. package/src/dex/maverick-v2/types.ts +151 -0
  84. package/tests/constants-e2e.ts +2 -2
  85. package/.vscode/launch.json +0 -53
  86. package/.vscode/settings.json +0 -2
  87. package/.vscode/tasks.json +0 -15
  88. package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +0 -52
  89. package/build/abi/wombat/pool.json +0 -1289
  90. package/build/dex/aave-v2/tokens-avalanche.json +0 -44
  91. package/build/dex/aave-v2/tokens-mainnet.json +0 -188
  92. package/build/dex/aave-v2/tokens-polygon.json +0 -44
  93. package/build/dex/maker-psm/scripts/gem.abi.json +0 -136
  94. package/build/dex/maker-psm/scripts/validate-state.d.ts +0 -0
  95. package/build/dex/maker-psm/scripts/validate-state.js +0 -185
  96. package/build/dex/maker-psm/scripts/validate-state.js.map +0 -1
  97. package/build/dex/maker-psm/scripts/vat.abi.json +0 -243
  98. package/build/dex/solidly-v3/scripts/check-event-pool-event.js +0 -53
  99. package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +0 -1
  100. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +0 -17
  101. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +0 -64
  102. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +0 -1
  103. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +0 -17
  104. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +0 -79
  105. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +0 -1
  106. package/src/dex/maker-psm/scripts/gem.abi.json +0 -136
  107. package/src/dex/maker-psm/scripts/validate-state.ts +0 -221
  108. package/src/dex/maker-psm/scripts/vat.abi.json +0 -243
  109. /package/build/dex/{solidly-v3/scripts/check-event-pool-event.d.ts → sdai/scripts/validate-state.d.ts} +0 -0
@@ -0,0 +1,288 @@
1
+ import { BI_POWS } from '../../../bigint-constants';
2
+ import { AddLiquidityInfo, Bin, BinDelta, Tick } from '../types';
3
+ import { MaverickBasicMath } from './maverick-basic-math';
4
+ import { MaverickPoolLib } from './maverick-pool-lib';
5
+ import { MaverickTickMath } from './maverick-tick-math';
6
+
7
+ const MINIMUM_LIQUIDITY = BI_POWS[8];
8
+
9
+ export class MaverickBinMath {
10
+ static lpBalancesFromDeltaReserve(
11
+ self: Bin,
12
+ tick: Tick,
13
+ deltaA: bigint,
14
+ deltaB: bigint,
15
+ ): bigint {
16
+ if (tick.reserveA >= tick.reserveB) {
17
+ let reserveA = MaverickBasicMath.mulDivUp(
18
+ tick.reserveA,
19
+ self.tickBalance,
20
+ tick.totalSupply,
21
+ );
22
+ return MaverickBasicMath.mulDivDown(
23
+ deltaA,
24
+ MaverickBasicMath.max(1n, self.totalSupply),
25
+ reserveA,
26
+ );
27
+ } else {
28
+ let reserveB = MaverickBasicMath.mulDivUp(
29
+ tick.reserveB,
30
+ self.tickBalance,
31
+ tick.totalSupply,
32
+ );
33
+ return MaverickBasicMath.mulDivDown(
34
+ deltaB,
35
+ MaverickBasicMath.max(1n, self.totalSupply),
36
+ reserveB,
37
+ );
38
+ }
39
+ }
40
+
41
+ static addLiquidity(
42
+ self: Bin,
43
+ tick: Tick,
44
+ deltaLpBalance: bigint,
45
+ addLiquidityInfo: AddLiquidityInfo,
46
+ ) {
47
+ let deltaTickBalance = this.deltaTickBalanceFromDeltaLpBalance(
48
+ self.tickBalance,
49
+ self.totalSupply,
50
+ tick,
51
+ deltaLpBalance,
52
+ addLiquidityInfo,
53
+ );
54
+
55
+ this.updateBinState(
56
+ self,
57
+ tick,
58
+ addLiquidityInfo.deltaA,
59
+ addLiquidityInfo.deltaB,
60
+ deltaLpBalance,
61
+ deltaTickBalance,
62
+ );
63
+ }
64
+
65
+ static setRequiredDeltaReservesForEmptyTick(
66
+ deltaLpBalance: bigint,
67
+ addLiquidityInfo: AddLiquidityInfo,
68
+ ) {
69
+ let [sqrtLowerTickPrice, sqrtUpperTickPrice] =
70
+ MaverickTickMath.tickSqrtPrices(
71
+ addLiquidityInfo.tickSpacing,
72
+ addLiquidityInfo.tick,
73
+ );
74
+ addLiquidityInfo.deltaA = addLiquidityInfo.tickLtActive
75
+ ? MaverickBasicMath.mulCeil(deltaLpBalance, sqrtLowerTickPrice)
76
+ : 0n;
77
+ addLiquidityInfo.deltaB = addLiquidityInfo.tickLtActive
78
+ ? 0n
79
+ : MaverickBasicMath.divCeil(deltaLpBalance, sqrtUpperTickPrice);
80
+ }
81
+
82
+ static deltaTickBalanceFromDeltaLpBalance(
83
+ binTickBalance: bigint,
84
+ binTotalSupply: bigint,
85
+ tick: Tick,
86
+ deltaLpBalance: bigint,
87
+ addLiquidityInfo: AddLiquidityInfo,
88
+ ): bigint {
89
+ let numerator = MaverickBasicMath.max(1n, binTickBalance) * deltaLpBalance;
90
+ let denominator =
91
+ MaverickBasicMath.max(1n, tick.totalSupply) *
92
+ MaverickBasicMath.max(1n, binTotalSupply);
93
+ if (tick.reserveA != 0n || tick.reserveB != 0n) {
94
+ addLiquidityInfo.deltaA = MaverickBasicMath.mulDivCeil(
95
+ tick.reserveA,
96
+ numerator,
97
+ denominator,
98
+ );
99
+ addLiquidityInfo.deltaB = MaverickBasicMath.mulDivCeil(
100
+ tick.reserveB,
101
+ numerator,
102
+ denominator,
103
+ );
104
+ } else {
105
+ this.setRequiredDeltaReservesForEmptyTick(
106
+ deltaLpBalance,
107
+ addLiquidityInfo,
108
+ );
109
+ }
110
+
111
+ return tick.totalSupply === 0n
112
+ ? deltaLpBalance
113
+ : MaverickBasicMath.mulDivDown(
114
+ deltaLpBalance,
115
+ MaverickBasicMath.max(1n, binTickBalance),
116
+ binTotalSupply,
117
+ );
118
+ }
119
+
120
+ static addLiquidityByReserves(
121
+ self: Bin,
122
+ tick: Tick,
123
+ deltaA: bigint,
124
+ deltaB: bigint,
125
+ deltaLpBalance: bigint,
126
+ ) {
127
+ let deltaTickBalance = MaverickBasicMath.mulDivDown(
128
+ deltaLpBalance,
129
+ MaverickBasicMath.max(1n, self.tickBalance),
130
+ self.totalSupply,
131
+ );
132
+
133
+ this.updateBinState(
134
+ self,
135
+ tick,
136
+ deltaA,
137
+ deltaB,
138
+ deltaLpBalance,
139
+ deltaTickBalance,
140
+ );
141
+ }
142
+
143
+ static updateBinState(
144
+ self: Bin,
145
+ tick: Tick,
146
+ deltaA: bigint,
147
+ deltaB: bigint,
148
+ deltaLpBalance: bigint,
149
+ deltaTickBalance: bigint,
150
+ ) {
151
+ let totalSupply = self.totalSupply;
152
+ if (totalSupply === 0n) {
153
+ if (deltaLpBalance < MINIMUM_LIQUIDITY) {
154
+ throw 'insufficient liquidity';
155
+ }
156
+ totalSupply = MINIMUM_LIQUIDITY;
157
+ }
158
+
159
+ self.totalSupply = totalSupply + deltaLpBalance;
160
+ tick.totalSupply = tick.totalSupply + deltaTickBalance;
161
+
162
+ self.tickBalance = self.tickBalance + deltaTickBalance;
163
+
164
+ tick.reserveA = tick.reserveA + deltaA;
165
+ tick.reserveB = tick.reserveB + deltaB;
166
+ }
167
+
168
+ static removeLiquidity(
169
+ self: Bin,
170
+ ticks: { [id: string]: Tick },
171
+ bins: { [id: string]: Bin },
172
+ deltaLpAmount: bigint,
173
+ ): [bigint, bigint] {
174
+ let activeBin = self;
175
+
176
+ let activeBinDeltaLpBalance = deltaLpAmount;
177
+ if (self.mergeId != 0n) {
178
+ activeBin = bins[self.mergeId.toString()];
179
+
180
+ if (activeBin.mergeId != 0n) {
181
+ throw 'migrate first';
182
+ }
183
+
184
+ let tempTotalSupply = self.totalSupply;
185
+ self.totalSupply = MaverickBasicMath.clip(
186
+ self.totalSupply,
187
+ deltaLpAmount,
188
+ );
189
+
190
+ activeBinDeltaLpBalance = MaverickBasicMath.min(
191
+ self.mergeBinBalance,
192
+ MaverickBasicMath.mulDivDown(
193
+ activeBinDeltaLpBalance,
194
+ self.mergeBinBalance,
195
+ tempTotalSupply,
196
+ ),
197
+ );
198
+
199
+ self.mergeBinBalance -= activeBinDeltaLpBalance;
200
+ }
201
+
202
+ let binDelta: BinDelta = {
203
+ deltaA: 0n,
204
+ deltaB: 0n,
205
+ };
206
+
207
+ let tick: Tick = ticks[activeBin.tick.toString()];
208
+
209
+ activeBinDeltaLpBalance = MaverickBasicMath.min(
210
+ activeBinDeltaLpBalance,
211
+ activeBin.totalSupply,
212
+ );
213
+
214
+ let deltaTickBalance = MaverickBasicMath.mulDivDown(
215
+ activeBinDeltaLpBalance,
216
+ activeBin.tickBalance,
217
+ activeBin.totalSupply,
218
+ );
219
+
220
+ deltaTickBalance = MaverickBasicMath.min(
221
+ deltaTickBalance,
222
+ tick.totalSupply,
223
+ );
224
+
225
+ [binDelta.deltaA, binDelta.deltaB] = MaverickPoolLib.binReservesCalc(
226
+ deltaTickBalance,
227
+ tick.reserveA,
228
+ tick.reserveB,
229
+ tick.totalSupply,
230
+ );
231
+
232
+ tick.reserveA = MaverickBasicMath.clip(tick.reserveA, binDelta.deltaA);
233
+ tick.reserveB = MaverickBasicMath.clip(tick.reserveB, binDelta.deltaB);
234
+
235
+ activeBin.tickBalance = MaverickBasicMath.clip(
236
+ activeBin.tickBalance,
237
+ deltaTickBalance,
238
+ );
239
+ tick.totalSupply = MaverickBasicMath.clip(
240
+ tick.totalSupply,
241
+ deltaTickBalance,
242
+ );
243
+ activeBin.totalSupply = MaverickBasicMath.clip(
244
+ activeBin.totalSupply,
245
+ activeBinDeltaLpBalance,
246
+ );
247
+
248
+ return [binDelta.deltaA, binDelta.deltaB];
249
+ }
250
+
251
+ static migrateBinsUpStack(
252
+ self: Bin,
253
+ bins: { [id: string]: Bin },
254
+ maxRecursion: bigint,
255
+ ): void {
256
+ if (self.mergeId === 0n) return;
257
+
258
+ let nextBin = bins[self.mergeId.toString()];
259
+
260
+ if (nextBin.mergeId === 0n) return;
261
+
262
+ self.mergeId = nextBin.mergeId;
263
+
264
+ let tempTotalSupply = nextBin.totalSupply;
265
+ let tempMergeBinBalance = self.mergeBinBalance;
266
+
267
+ nextBin.totalSupply = MaverickBasicMath.clip(
268
+ nextBin.totalSupply,
269
+ self.mergeBinBalance,
270
+ );
271
+
272
+ self.mergeBinBalance = MaverickBasicMath.mulDiv(
273
+ tempMergeBinBalance,
274
+ nextBin.mergeBinBalance,
275
+ tempTotalSupply,
276
+ );
277
+
278
+ nextBin.mergeBinBalance = MaverickBasicMath.clip(
279
+ nextBin.mergeBinBalance,
280
+ self.mergeBinBalance,
281
+ );
282
+
283
+ maxRecursion -= 1n;
284
+ if (maxRecursion != 0n) {
285
+ return this.migrateBinsUpStack(self, bins, maxRecursion);
286
+ }
287
+ }
288
+ }
@@ -0,0 +1,32 @@
1
+ export type Delta = {
2
+ deltaInBinInternal: bigint;
3
+ deltaInErc: bigint;
4
+ deltaOutErc: bigint;
5
+ excess: bigint;
6
+ tokenAIn: boolean;
7
+ exactOutput: boolean;
8
+ swappedToMaxPrice: boolean;
9
+ skipCombine: boolean;
10
+ tickLimit: bigint;
11
+ sqrtLowerTickPrice: bigint;
12
+ sqrtUpperTickPrice: bigint;
13
+ sqrtPrice: bigint;
14
+ fractionalPart: bigint;
15
+ };
16
+
17
+ export class MaverickDeltaMath {
18
+ static pastMaxTick(self: Delta, activeTick: bigint) {
19
+ self.swappedToMaxPrice = self.tokenAIn
20
+ ? self.tickLimit < activeTick
21
+ : self.tickLimit > activeTick;
22
+ if (self.swappedToMaxPrice) {
23
+ self.excess = 0n;
24
+ self.skipCombine = true;
25
+ }
26
+ return self.swappedToMaxPrice;
27
+ }
28
+
29
+ static sqrtEdgePrice(self: Delta) {
30
+ return self.tokenAIn ? self.sqrtUpperTickPrice : self.sqrtLowerTickPrice;
31
+ }
32
+ }
@@ -0,0 +1,30 @@
1
+ export class MaverickMath {
2
+ static ammScaleToTokenScale(
3
+ amount: bigint,
4
+ scaleFactor: bigint,
5
+ ceil: boolean,
6
+ ): bigint {
7
+ if (scaleFactor === 1n || amount === 0n) {
8
+ return amount;
9
+ } else {
10
+ if (!ceil) return amount / scaleFactor;
11
+ return (amount - 1n) / scaleFactor + 1n;
12
+ }
13
+ }
14
+
15
+ static tokenScaleToAmmScale(amount: bigint, scaleFactor: bigint): bigint {
16
+ if (scaleFactor === 1n) {
17
+ return amount;
18
+ } else {
19
+ return amount * scaleFactor;
20
+ }
21
+ }
22
+
23
+ static scale(decimals: bigint): bigint {
24
+ if (decimals === 18n) {
25
+ return 1n;
26
+ } else {
27
+ return 10n ** (18n - decimals);
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,42 @@
1
+ import { Bin, Tick } from '../types';
2
+ import { MaverickBasicMath } from './maverick-basic-math';
3
+
4
+ export class MaverickPoolLib {
5
+ static binReserves(bin: Bin, tick: Tick): [bigint, bigint] {
6
+ return this.binReservesCalc(
7
+ bin.tickBalance,
8
+ tick.reserveA,
9
+ tick.reserveB,
10
+ tick.totalSupply,
11
+ );
12
+ }
13
+
14
+ static binReservesCalc(
15
+ tickBalance: bigint,
16
+ tickReserveA: bigint,
17
+ tickReserveB: bigint,
18
+ tickTotalSupply: bigint,
19
+ ): [bigint, bigint] {
20
+ let reserveA = 0n;
21
+ let reserveB = 0n;
22
+
23
+ if (tickTotalSupply != 0n) {
24
+ reserveA = this.reserveValue(tickReserveA, tickBalance, tickTotalSupply);
25
+ reserveB = this.reserveValue(tickReserveB, tickBalance, tickTotalSupply);
26
+ }
27
+ return [reserveA, reserveB];
28
+ }
29
+
30
+ static reserveValue(
31
+ tickReserve: bigint,
32
+ tickBalance: bigint,
33
+ tickTotalSupply: bigint,
34
+ ): bigint {
35
+ let reserve = MaverickBasicMath.mulDivFloor(
36
+ tickReserve,
37
+ tickBalance,
38
+ tickTotalSupply,
39
+ );
40
+ return MaverickBasicMath.min(tickReserve, reserve);
41
+ }
42
+ }