@paraswap/dex-lib 2.50.8 → 2.50.9

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 (160) hide show
  1. package/build/abi/Redstone.json +739 -0
  2. package/build/abi/angle/stagToken.json +963 -0
  3. package/build/abi/angle-transmuter/MorphoOracle.json +193 -0
  4. package/build/abi/angle-transmuter/MorphoVault.json +2506 -0
  5. package/build/abi/angle-transmuter/Pyth.json +1534 -0
  6. package/build/abi/angle-transmuter/Transmuter.json +1711 -0
  7. package/build/abi/pharaoh/PharaohPool.abi.json +1582 -0
  8. package/build/abi/smardex/smardex-factory.json +185 -0
  9. package/build/abi/smardex/smardex-pool.json +578 -0
  10. package/build/abi/smardex/smardex-router.json +648 -0
  11. package/build/abi/trader-joe-v2_1/FactoryABI.json +1208 -0
  12. package/build/abi/trader-joe-v2_1/PairABI.json +1493 -0
  13. package/build/abi/trader-joe-v2_1/RouterABI.json +1489 -0
  14. package/build/abi/trader-joe-v2_1/StateMulticall.json +193 -0
  15. package/build/abi/wombat/pool.json +1289 -0
  16. package/build/config.js +8 -7
  17. package/build/config.js.map +1 -1
  18. package/build/dex/aave-v2/tokens-avalanche.json +44 -0
  19. package/build/dex/aave-v2/tokens-mainnet.json +188 -0
  20. package/build/dex/aave-v2/tokens-polygon.json +44 -0
  21. package/build/dex/angle-staked-stable/angle-staked-stable-pool.d.ts +56 -0
  22. package/build/dex/angle-staked-stable/angle-staked-stable-pool.js +197 -0
  23. package/build/dex/angle-staked-stable/angle-staked-stable-pool.js.map +1 -0
  24. package/build/dex/angle-staked-stable/angle-staked-stable.d.ts +48 -0
  25. package/build/dex/angle-staked-stable/angle-staked-stable.js +222 -0
  26. package/build/dex/angle-staked-stable/angle-staked-stable.js.map +1 -0
  27. package/build/dex/angle-staked-stable/config.d.ts +4 -0
  28. package/build/dex/angle-staked-stable/config.js +139 -0
  29. package/build/dex/angle-staked-stable/config.js.map +1 -0
  30. package/build/dex/angle-staked-stable/types.d.ts +15 -0
  31. package/build/dex/angle-staked-stable/types.js +3 -0
  32. package/build/dex/angle-staked-stable/types.js.map +1 -0
  33. package/build/dex/angle-transmuter/angle-transmuter-pool.d.ts +61 -0
  34. package/build/dex/angle-transmuter/angle-transmuter-pool.js +415 -0
  35. package/build/dex/angle-transmuter/angle-transmuter-pool.js.map +1 -0
  36. package/build/dex/angle-transmuter/angle-transmuter.d.ts +59 -0
  37. package/build/dex/angle-transmuter/angle-transmuter.js +262 -0
  38. package/build/dex/angle-transmuter/angle-transmuter.js.map +1 -0
  39. package/build/dex/angle-transmuter/backedOracle.d.ts +19 -0
  40. package/build/dex/angle-transmuter/backedOracle.js +56 -0
  41. package/build/dex/angle-transmuter/backedOracle.js.map +1 -0
  42. package/build/dex/angle-transmuter/config.d.ts +4 -0
  43. package/build/dex/angle-transmuter/config.js +30 -0
  44. package/build/dex/angle-transmuter/config.js.map +1 -0
  45. package/build/dex/angle-transmuter/constants.d.ts +77 -0
  46. package/build/dex/angle-transmuter/constants.js +94 -0
  47. package/build/dex/angle-transmuter/constants.js.map +1 -0
  48. package/build/dex/angle-transmuter/morphoOracle.d.ts +42 -0
  49. package/build/dex/angle-transmuter/morphoOracle.js +179 -0
  50. package/build/dex/angle-transmuter/morphoOracle.js.map +1 -0
  51. package/build/dex/angle-transmuter/morphoVault.d.ts +19 -0
  52. package/build/dex/angle-transmuter/morphoVault.js +78 -0
  53. package/build/dex/angle-transmuter/morphoVault.js.map +1 -0
  54. package/build/dex/angle-transmuter/pyth.d.ts +19 -0
  55. package/build/dex/angle-transmuter/pyth.js +70 -0
  56. package/build/dex/angle-transmuter/pyth.js.map +1 -0
  57. package/build/dex/angle-transmuter/redstone.d.ts +20 -0
  58. package/build/dex/angle-transmuter/redstone.js +73 -0
  59. package/build/dex/angle-transmuter/redstone.js.map +1 -0
  60. package/build/dex/angle-transmuter/transmuter.d.ts +52 -0
  61. package/build/dex/angle-transmuter/transmuter.js +374 -0
  62. package/build/dex/angle-transmuter/transmuter.js.map +1 -0
  63. package/build/dex/angle-transmuter/types.d.ts +188 -0
  64. package/build/dex/angle-transmuter/types.js +33 -0
  65. package/build/dex/angle-transmuter/types.js.map +1 -0
  66. package/build/dex/angle-transmuter/utils.d.ts +9 -0
  67. package/build/dex/angle-transmuter/utils.js +252 -0
  68. package/build/dex/angle-transmuter/utils.js.map +1 -0
  69. package/build/dex/index.js +2 -0
  70. package/build/dex/index.js.map +1 -1
  71. package/build/dex/smardex/subgraph-queries.d.ts +1 -0
  72. package/build/dex/smardex/subgraph-queries.js +17 -0
  73. package/build/dex/smardex/subgraph-queries.js.map +1 -0
  74. package/build/dex/smardex/usd-reserves.d.ts +23 -0
  75. package/build/dex/smardex/usd-reserves.js +86 -0
  76. package/build/dex/smardex/usd-reserves.js.map +1 -0
  77. package/build/dex/trader-joe-v2-1-2/config.d.ts +4 -0
  78. package/build/dex/trader-joe-v2-1-2/config.js +47 -0
  79. package/build/dex/trader-joe-v2-1-2/config.js.map +1 -0
  80. package/build/dex/trader-joe-v2-1-2/constants.d.ts +20 -0
  81. package/build/dex/trader-joe-v2-1-2/constants.js +22 -0
  82. package/build/dex/trader-joe-v2-1-2/constants.js.map +1 -0
  83. package/build/dex/trader-joe-v2-1-2/math/index.d.ts +37 -0
  84. package/build/dex/trader-joe-v2-1-2/math/index.js +291 -0
  85. package/build/dex/trader-joe-v2-1-2/math/index.js.map +1 -0
  86. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.d.ts +60 -0
  87. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.js +248 -0
  88. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.js.map +1 -0
  89. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.d.ts +53 -0
  90. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.js +307 -0
  91. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.js.map +1 -0
  92. package/build/dex/trader-joe-v2-1-2/types.d.ts +82 -0
  93. package/build/dex/trader-joe-v2-1-2/types.js +9 -0
  94. package/build/dex/trader-joe-v2-1-2/types.js.map +1 -0
  95. package/build/dex/trader-joe-v2_1/config.d.ts +4 -0
  96. package/build/dex/trader-joe-v2_1/config.js +47 -0
  97. package/build/dex/trader-joe-v2_1/config.js.map +1 -0
  98. package/build/dex/trader-joe-v2_1/constants.d.ts +20 -0
  99. package/build/dex/trader-joe-v2_1/constants.js +22 -0
  100. package/build/dex/trader-joe-v2_1/constants.js.map +1 -0
  101. package/build/dex/trader-joe-v2_1/math/index.d.ts +37 -0
  102. package/build/dex/trader-joe-v2_1/math/index.js +291 -0
  103. package/build/dex/trader-joe-v2_1/math/index.js.map +1 -0
  104. package/build/dex/trader-joe-v2_1/trader-joe-v2.1.d.ts +0 -0
  105. package/build/dex/trader-joe-v2_1/trader-joe-v2.1.js +384 -0
  106. package/build/dex/trader-joe-v2_1/trader-joe-v2.1.js.map +1 -0
  107. package/build/dex/trader-joe-v2_1/trader-joe-v2_1-pool.d.ts +60 -0
  108. package/build/dex/trader-joe-v2_1/trader-joe-v2_1-pool.js +247 -0
  109. package/build/dex/trader-joe-v2_1/trader-joe-v2_1-pool.js.map +1 -0
  110. package/build/dex/trader-joe-v2_1/trader-joe-v2_1.d.ts +53 -0
  111. package/build/dex/trader-joe-v2_1/trader-joe-v2_1.js +307 -0
  112. package/build/dex/trader-joe-v2_1/trader-joe-v2_1.js.map +1 -0
  113. package/build/dex/trader-joe-v2_1/types.d.ts +82 -0
  114. package/build/dex/trader-joe-v2_1/types.js +9 -0
  115. package/build/dex/trader-joe-v2_1/types.js.map +1 -0
  116. package/build/dex/wombat/wombat-pool-poller.d.ts +22 -0
  117. package/build/dex/wombat/wombat-pool-poller.js +164 -0
  118. package/build/dex/wombat/wombat-pool-poller.js.map +1 -0
  119. package/build/dex-helper/Cache.d.ts +31 -0
  120. package/build/dex-helper/Cache.js +106 -0
  121. package/build/dex-helper/Cache.js.map +1 -0
  122. package/build/dex-helper/RedisBatcher.d.ts +20 -0
  123. package/build/dex-helper/RedisBatcher.js +75 -0
  124. package/build/dex-helper/RedisBatcher.js.map +1 -0
  125. package/build/dex-helper/RedisWrapper.d.ts +37 -0
  126. package/build/dex-helper/RedisWrapper.js +165 -0
  127. package/build/dex-helper/RedisWrapper.js.map +1 -0
  128. package/package.json +1 -1
  129. package/src/abi/angle/stagToken.json +963 -0
  130. package/src/config.ts +8 -7
  131. package/src/dex/angle-staked-stable/angle-staked-stable-e2e.test.ts +146 -0
  132. package/src/dex/angle-staked-stable/angle-staked-stable-events.test.ts +95 -0
  133. package/src/dex/angle-staked-stable/angle-staked-stable-integration.test.ts +476 -0
  134. package/src/dex/angle-staked-stable/angle-staked-stable-pool.ts +325 -0
  135. package/src/dex/angle-staked-stable/angle-staked-stable.ts +312 -0
  136. package/src/dex/angle-staked-stable/config.ts +139 -0
  137. package/src/dex/angle-staked-stable/types.ts +16 -0
  138. package/src/dex/index.ts +2 -0
  139. package/tests/constants-e2e.ts +112 -1
  140. package/build/dex/sdai/config.d.ts +0 -11
  141. package/build/dex/sdai/config.js +0 -21
  142. package/build/dex/sdai/config.js.map +0 -1
  143. package/build/dex/sdai/constants.d.ts +0 -2
  144. package/build/dex/sdai/constants.js +0 -6
  145. package/build/dex/sdai/constants.js.map +0 -1
  146. package/build/dex/sdai/scripts/validate-state.d.ts +0 -1
  147. package/build/dex/sdai/scripts/validate-state.js +0 -102
  148. package/build/dex/sdai/scripts/validate-state.js.map +0 -1
  149. package/build/dex/sdai/sdai-pool.d.ts +0 -16
  150. package/build/dex/sdai/sdai-pool.js +0 -85
  151. package/build/dex/sdai/sdai-pool.js.map +0 -1
  152. package/build/dex/sdai/sdai.d.ts +0 -51
  153. package/build/dex/sdai/sdai.js +0 -172
  154. package/build/dex/sdai/sdai.js.map +0 -1
  155. package/build/dex/sdai/types.d.ts +0 -21
  156. package/build/dex/sdai/types.js +0 -11
  157. package/build/dex/sdai/types.js.map +0 -1
  158. package/build/dex/sdai/utils.d.ts +0 -4
  159. package/build/dex/sdai/utils.js +0 -39
  160. package/build/dex/sdai/utils.js.map +0 -1
@@ -0,0 +1,476 @@
1
+ /* eslint-disable no-console */
2
+ import dotenv from 'dotenv';
3
+ dotenv.config();
4
+
5
+ import { Interface, Result } from '@ethersproject/abi';
6
+ import { DummyDexHelper } from '../../dex-helper/index';
7
+ import { Network, SwapSide } from '../../constants';
8
+ import { BI_POWS } from '../../bigint-constants';
9
+ import { AngleStakedStable } from './angle-staked-stable';
10
+ import {
11
+ checkPoolPrices,
12
+ checkPoolsLiquidity,
13
+ checkConstantPoolPrices,
14
+ } from '../../../tests/utils';
15
+ import { Tokens } from '../../../tests/constants-e2e';
16
+ import { AngleStakedStableEventPool } from './angle-staked-stable-pool';
17
+
18
+ function getReaderCalldata(
19
+ exchangeAddress: string,
20
+ readerIface: Interface,
21
+ amounts: bigint[],
22
+ funcName: string,
23
+ ) {
24
+ return amounts.map(amount => ({
25
+ target: exchangeAddress,
26
+ callData: readerIface.encodeFunctionData(funcName, [amount]),
27
+ }));
28
+ }
29
+
30
+ function decodeReaderResult(
31
+ results: Result,
32
+ readerIface: Interface,
33
+ funcName: string,
34
+ ) {
35
+ return results.map(result => {
36
+ const parsed = readerIface.decodeFunctionResult(funcName, result);
37
+ return BigInt(parsed[0]._hex);
38
+ });
39
+ }
40
+
41
+ async function checkOnChainPricing(
42
+ angleStakedStable: AngleStakedStable,
43
+ funcName: string,
44
+ blockNumber: number,
45
+ exchangeAddress: string,
46
+ prices: bigint[],
47
+ amounts: bigint[],
48
+ ) {
49
+ // Normally you can get it from angleStakedStable.Iface or from eventPool.
50
+ // It depends on your implementation
51
+ const readerIface = AngleStakedStableEventPool.angleStakedStableIface;
52
+
53
+ const readerCallData = getReaderCalldata(
54
+ exchangeAddress,
55
+ readerIface,
56
+ amounts.slice(1),
57
+ funcName,
58
+ );
59
+ const readerResult = (
60
+ await angleStakedStable.dexHelper.multiContract.methods
61
+ .aggregate(readerCallData)
62
+ .call({}, blockNumber)
63
+ ).returnData;
64
+
65
+ const expectedPrices = [0n].concat(
66
+ decodeReaderResult(readerResult, readerIface, funcName),
67
+ );
68
+
69
+ // No exact computation because of the bigInt approx
70
+ for (let i = 0; i < expectedPrices.length; ++i) {
71
+ expect(prices[i]).toBeGreaterThanOrEqual(
72
+ (expectedPrices[i] * 99999n) / 100000n,
73
+ );
74
+ expect(prices[i]).toBeLessThanOrEqual(
75
+ (expectedPrices[i] * 100001n) / 100000n,
76
+ );
77
+ }
78
+ }
79
+
80
+ async function testPricingOnNetwork(
81
+ angleStakedStable: AngleStakedStable,
82
+ network: Network,
83
+ dexKey: string,
84
+ blockNumber: number,
85
+ srcTokenSymbol: string,
86
+ destTokenSymbol: string,
87
+ side: SwapSide,
88
+ amounts: bigint[],
89
+ funcNameToCheck: string,
90
+ ) {
91
+ const networkTokens = Tokens[network];
92
+
93
+ const pools = await angleStakedStable.getPoolIdentifiers(
94
+ networkTokens[srcTokenSymbol],
95
+ networkTokens[destTokenSymbol],
96
+ side,
97
+ blockNumber,
98
+ );
99
+ console.log(
100
+ `${srcTokenSymbol} <> ${destTokenSymbol} Pool Identifiers: `,
101
+ pools,
102
+ );
103
+
104
+ expect(pools.length).toBeGreaterThan(0);
105
+
106
+ const poolPrices = await angleStakedStable.getPricesVolume(
107
+ networkTokens[srcTokenSymbol],
108
+ networkTokens[destTokenSymbol],
109
+ amounts,
110
+ side,
111
+ blockNumber,
112
+ pools,
113
+ );
114
+ console.log(
115
+ `${srcTokenSymbol} <> ${destTokenSymbol} Pool Prices: `,
116
+ poolPrices,
117
+ );
118
+
119
+ expect(poolPrices).not.toBeNull();
120
+ if (angleStakedStable.hasConstantPriceLargeAmounts) {
121
+ checkConstantPoolPrices(poolPrices!, amounts, dexKey);
122
+ } else {
123
+ checkPoolPrices(poolPrices!, amounts, side, dexKey);
124
+ }
125
+
126
+ const exchange =
127
+ srcTokenSymbol === 'stEUR' || srcTokenSymbol === 'stUSD'
128
+ ? networkTokens[srcTokenSymbol].address
129
+ : networkTokens[destTokenSymbol].address;
130
+
131
+ // Check if onchain pricing equals to calculated ones
132
+ await checkOnChainPricing(
133
+ angleStakedStable,
134
+ funcNameToCheck,
135
+ blockNumber,
136
+ exchange,
137
+ poolPrices![0].prices,
138
+ amounts,
139
+ );
140
+ }
141
+
142
+ describe('AngleStakedStable', () => {
143
+ describe('Mainnet USD', () => {
144
+ let blockNumber: number;
145
+ let angleStakedStable: AngleStakedStable;
146
+ const dexKey = 'AngleStakedStableUSD';
147
+ const network = Network.MAINNET;
148
+ const dexHelper = new DummyDexHelper(network);
149
+
150
+ const tokens = Tokens[network];
151
+
152
+ const srcTokenSymbolUSDEnter = 'USDA';
153
+ const destTokenSymbolUSDEnter = 'stUSD';
154
+ const funcNameSellEnter = 'previewDeposit';
155
+ const funcNameBuyEnter = 'previewMint';
156
+
157
+ const destTokenSymbolUSDExit = 'USDA';
158
+ const srcTokenSymbolUSDExit = 'stUSD';
159
+ const funcNameSellExit = 'previewRedeem';
160
+ const funcNameBuyExit = 'previewWithdraw';
161
+
162
+ const exchangeSTUSD = dexKey;
163
+ // const exchangeSTUSD = `${dexKey}_${tokens.stUSD.address.toLowerCase()}`;
164
+
165
+ const amountsForSell = [
166
+ 0n,
167
+ 1n * BI_POWS[tokens[srcTokenSymbolUSDEnter].decimals],
168
+ 2n * BI_POWS[tokens[srcTokenSymbolUSDEnter].decimals],
169
+ 3n * BI_POWS[tokens[srcTokenSymbolUSDEnter].decimals],
170
+ 4n * BI_POWS[tokens[srcTokenSymbolUSDEnter].decimals],
171
+ 5n * BI_POWS[tokens[srcTokenSymbolUSDEnter].decimals],
172
+ 6n * BI_POWS[tokens[srcTokenSymbolUSDEnter].decimals],
173
+ 7n * BI_POWS[tokens[srcTokenSymbolUSDEnter].decimals],
174
+ 8n * BI_POWS[tokens[srcTokenSymbolUSDEnter].decimals],
175
+ 9n * BI_POWS[tokens[srcTokenSymbolUSDEnter].decimals],
176
+ 10n * BI_POWS[tokens[srcTokenSymbolUSDEnter].decimals],
177
+ ];
178
+
179
+ const amountsForBuy = [
180
+ 0n,
181
+ 1n * BI_POWS[tokens[destTokenSymbolUSDEnter].decimals],
182
+ 2n * BI_POWS[tokens[destTokenSymbolUSDEnter].decimals],
183
+ 3n * BI_POWS[tokens[destTokenSymbolUSDEnter].decimals],
184
+ 4n * BI_POWS[tokens[destTokenSymbolUSDEnter].decimals],
185
+ 5n * BI_POWS[tokens[destTokenSymbolUSDEnter].decimals],
186
+ 6n * BI_POWS[tokens[destTokenSymbolUSDEnter].decimals],
187
+ 7n * BI_POWS[tokens[destTokenSymbolUSDEnter].decimals],
188
+ 8n * BI_POWS[tokens[destTokenSymbolUSDEnter].decimals],
189
+ 9n * BI_POWS[tokens[destTokenSymbolUSDEnter].decimals],
190
+ 10n * BI_POWS[tokens[destTokenSymbolUSDEnter].decimals],
191
+ ];
192
+
193
+ beforeAll(async () => {
194
+ blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
195
+ angleStakedStable = new AngleStakedStable(network, dexKey, dexHelper);
196
+ if (angleStakedStable.initializePricing) {
197
+ await angleStakedStable.initializePricing(blockNumber);
198
+ }
199
+ });
200
+ it('getPoolIdentifiers and getPricesVolume SELL - USDA', async () => {
201
+ await testPricingOnNetwork(
202
+ angleStakedStable,
203
+ network,
204
+ dexKey,
205
+ blockNumber,
206
+ srcTokenSymbolUSDEnter,
207
+ destTokenSymbolUSDEnter,
208
+ SwapSide.SELL,
209
+ amountsForSell,
210
+ funcNameSellEnter,
211
+ );
212
+ });
213
+
214
+ it('getPoolIdentifiers and getPricesVolume BUY - stUSD', async () => {
215
+ await testPricingOnNetwork(
216
+ angleStakedStable,
217
+ network,
218
+ dexKey,
219
+ blockNumber,
220
+ srcTokenSymbolUSDEnter,
221
+ destTokenSymbolUSDEnter,
222
+ SwapSide.BUY,
223
+ amountsForBuy,
224
+ funcNameBuyEnter,
225
+ );
226
+ });
227
+
228
+ it('getPoolIdentifiers and getPricesVolume SELL - stUSD', async () => {
229
+ await testPricingOnNetwork(
230
+ angleStakedStable,
231
+ network,
232
+ dexKey,
233
+ blockNumber,
234
+ srcTokenSymbolUSDExit,
235
+ destTokenSymbolUSDExit,
236
+ SwapSide.SELL,
237
+ amountsForSell,
238
+ funcNameSellExit,
239
+ );
240
+ });
241
+
242
+ it('getPoolIdentifiers and getPricesVolume BUY - USDA', async () => {
243
+ await testPricingOnNetwork(
244
+ angleStakedStable,
245
+ network,
246
+ dexKey,
247
+ blockNumber,
248
+ srcTokenSymbolUSDExit,
249
+ destTokenSymbolUSDExit,
250
+ SwapSide.BUY,
251
+ amountsForBuy,
252
+ funcNameBuyExit,
253
+ );
254
+ });
255
+
256
+ it('getTopPoolsForToken - USDA', async () => {
257
+ // We have to check without calling initializePricing, because
258
+ // pool-tracker is not calling that function
259
+ const newAngleStakedStable = new AngleStakedStable(
260
+ network,
261
+ dexKey,
262
+ dexHelper,
263
+ );
264
+ if (newAngleStakedStable.updatePoolState) {
265
+ await newAngleStakedStable.updatePoolState();
266
+ }
267
+ const poolLiquidity = await newAngleStakedStable.getTopPoolsForToken(
268
+ tokens[srcTokenSymbolUSDEnter].address,
269
+ 10,
270
+ );
271
+ console.log(`${srcTokenSymbolUSDEnter} Top Pools:`, poolLiquidity);
272
+
273
+ if (!newAngleStakedStable.hasConstantPriceLargeAmounts) {
274
+ checkPoolsLiquidity(
275
+ poolLiquidity,
276
+ Tokens[network][srcTokenSymbolUSDEnter].address,
277
+ exchangeSTUSD,
278
+ );
279
+ }
280
+ });
281
+
282
+ it('getTopPoolsForToken - stUSD', async () => {
283
+ // We have to check without calling initializePricing, because
284
+ // pool-tracker is not calling that function
285
+ const newAngleStakedStable = new AngleStakedStable(
286
+ network,
287
+ dexKey,
288
+ dexHelper,
289
+ );
290
+ if (newAngleStakedStable.updatePoolState) {
291
+ await newAngleStakedStable.updatePoolState();
292
+ }
293
+ const poolLiquidity = await newAngleStakedStable.getTopPoolsForToken(
294
+ tokens[srcTokenSymbolUSDExit].address,
295
+ 10,
296
+ );
297
+ console.log(`${srcTokenSymbolUSDExit} Top Pools:`, poolLiquidity);
298
+
299
+ if (!newAngleStakedStable.hasConstantPriceLargeAmounts) {
300
+ checkPoolsLiquidity(
301
+ poolLiquidity,
302
+ Tokens[network][srcTokenSymbolUSDExit].address,
303
+ exchangeSTUSD,
304
+ );
305
+ }
306
+ });
307
+ });
308
+
309
+ describe('Mainnet EUR', () => {
310
+ let blockNumber: number;
311
+ let angleStakedStable: AngleStakedStable;
312
+ const dexKey = 'AngleStakedStableEUR';
313
+ const network = Network.MAINNET;
314
+ const dexHelper = new DummyDexHelper(network);
315
+
316
+ const tokens = Tokens[network];
317
+
318
+ // Don't forget to update relevant tokens in constant-e2e.ts
319
+ const srcTokenSymbolEUREnter = 'EURA';
320
+ const destTokenSymbolEUREnter = 'stEUR';
321
+ const funcNameSellEnter = 'previewDeposit';
322
+ const funcNameBuyEnter = 'previewMint';
323
+
324
+ const srcTokenSymbolEURExit = 'stEUR';
325
+ const destTokenSymbolEURExit = 'EURA';
326
+ const funcNameSellExit = 'previewRedeem';
327
+ const funcNameBuyExit = 'previewWithdraw';
328
+
329
+ // const exchangeSTEUR = `${dexKey}_${tokens.stEUR.address.toLowerCase()}`;
330
+ const exchangeSTEUR = dexKey;
331
+
332
+ const amountsForSell = [
333
+ 0n,
334
+ 1n * BI_POWS[tokens[srcTokenSymbolEUREnter].decimals],
335
+ 2n * BI_POWS[tokens[srcTokenSymbolEUREnter].decimals],
336
+ 3n * BI_POWS[tokens[srcTokenSymbolEUREnter].decimals],
337
+ 4n * BI_POWS[tokens[srcTokenSymbolEUREnter].decimals],
338
+ 5n * BI_POWS[tokens[srcTokenSymbolEUREnter].decimals],
339
+ 6n * BI_POWS[tokens[srcTokenSymbolEUREnter].decimals],
340
+ 7n * BI_POWS[tokens[srcTokenSymbolEUREnter].decimals],
341
+ 8n * BI_POWS[tokens[srcTokenSymbolEUREnter].decimals],
342
+ 9n * BI_POWS[tokens[srcTokenSymbolEUREnter].decimals],
343
+ 10n * BI_POWS[tokens[srcTokenSymbolEUREnter].decimals],
344
+ ];
345
+
346
+ const amountsForBuy = [
347
+ 0n,
348
+ 1n * BI_POWS[tokens[destTokenSymbolEUREnter].decimals],
349
+ 2n * BI_POWS[tokens[destTokenSymbolEUREnter].decimals],
350
+ 3n * BI_POWS[tokens[destTokenSymbolEUREnter].decimals],
351
+ 4n * BI_POWS[tokens[destTokenSymbolEUREnter].decimals],
352
+ 5n * BI_POWS[tokens[destTokenSymbolEUREnter].decimals],
353
+ 6n * BI_POWS[tokens[destTokenSymbolEUREnter].decimals],
354
+ 7n * BI_POWS[tokens[destTokenSymbolEUREnter].decimals],
355
+ 8n * BI_POWS[tokens[destTokenSymbolEUREnter].decimals],
356
+ 9n * BI_POWS[tokens[destTokenSymbolEUREnter].decimals],
357
+ 10n * BI_POWS[tokens[destTokenSymbolEUREnter].decimals],
358
+ ];
359
+
360
+ beforeAll(async () => {
361
+ blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
362
+ angleStakedStable = new AngleStakedStable(network, dexKey, dexHelper);
363
+ if (angleStakedStable.initializePricing) {
364
+ await angleStakedStable.initializePricing(blockNumber);
365
+ }
366
+ });
367
+
368
+ it('getPoolIdentifiers and getPricesVolume SELL - EURA', async () => {
369
+ await testPricingOnNetwork(
370
+ angleStakedStable,
371
+ network,
372
+ dexKey,
373
+ blockNumber,
374
+ srcTokenSymbolEUREnter,
375
+ destTokenSymbolEUREnter,
376
+ SwapSide.SELL,
377
+ amountsForSell,
378
+ funcNameSellEnter,
379
+ );
380
+ });
381
+
382
+ it('getPoolIdentifiers and getPricesVolume BUY - stEUR', async () => {
383
+ await testPricingOnNetwork(
384
+ angleStakedStable,
385
+ network,
386
+ dexKey,
387
+ blockNumber,
388
+ srcTokenSymbolEUREnter,
389
+ destTokenSymbolEUREnter,
390
+ SwapSide.BUY,
391
+ amountsForBuy,
392
+ funcNameBuyEnter,
393
+ );
394
+ });
395
+
396
+ it('getPoolIdentifiers and getPricesVolume SELL - stEUR', async () => {
397
+ await testPricingOnNetwork(
398
+ angleStakedStable,
399
+ network,
400
+ dexKey,
401
+ blockNumber,
402
+ srcTokenSymbolEURExit,
403
+ destTokenSymbolEURExit,
404
+ SwapSide.SELL,
405
+ amountsForSell,
406
+ funcNameSellExit,
407
+ );
408
+ });
409
+
410
+ it('getPoolIdentifiers and getPricesVolume BUY - EURA', async () => {
411
+ await testPricingOnNetwork(
412
+ angleStakedStable,
413
+ network,
414
+ dexKey,
415
+ blockNumber,
416
+ srcTokenSymbolEURExit,
417
+ destTokenSymbolEURExit,
418
+ SwapSide.BUY,
419
+ amountsForBuy,
420
+ funcNameBuyExit,
421
+ );
422
+ });
423
+
424
+ it('getTopPoolsForToken -EURA', async () => {
425
+ // We have to check without calling initializePricing, because
426
+ // pool-tracker is not calling that function
427
+ const newAngleStakedStable = new AngleStakedStable(
428
+ network,
429
+ dexKey,
430
+ dexHelper,
431
+ );
432
+ if (newAngleStakedStable.updatePoolState) {
433
+ await newAngleStakedStable.updatePoolState();
434
+ }
435
+ const poolLiquidity = await newAngleStakedStable.getTopPoolsForToken(
436
+ tokens[srcTokenSymbolEUREnter].address,
437
+ 10,
438
+ );
439
+ console.log(`${srcTokenSymbolEUREnter} Top Pools:`, poolLiquidity);
440
+
441
+ if (!newAngleStakedStable.hasConstantPriceLargeAmounts) {
442
+ checkPoolsLiquidity(
443
+ poolLiquidity,
444
+ Tokens[network][srcTokenSymbolEUREnter].address,
445
+ exchangeSTEUR,
446
+ );
447
+ }
448
+ });
449
+
450
+ it('getTopPoolsForToken - stEUR', async () => {
451
+ // We have to check without calling initializePricing, because
452
+ // pool-tracker is not calling that function
453
+ const newAngleStakedStable = new AngleStakedStable(
454
+ network,
455
+ dexKey,
456
+ dexHelper,
457
+ );
458
+ if (newAngleStakedStable.updatePoolState) {
459
+ await newAngleStakedStable.updatePoolState();
460
+ }
461
+ const poolLiquidity = await newAngleStakedStable.getTopPoolsForToken(
462
+ tokens[srcTokenSymbolEURExit].address,
463
+ 10,
464
+ );
465
+ console.log(`${srcTokenSymbolEURExit} Top Pools:`, poolLiquidity);
466
+
467
+ if (!newAngleStakedStable.hasConstantPriceLargeAmounts) {
468
+ checkPoolsLiquidity(
469
+ poolLiquidity,
470
+ Tokens[network][srcTokenSymbolEURExit].address,
471
+ exchangeSTEUR,
472
+ );
473
+ }
474
+ });
475
+ });
476
+ });