@paraswap/dex-lib 2.38.0 → 2.39.1-dexalot

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 (193) hide show
  1. package/.idea/aws.xml +17 -0
  2. package/.idea/codeStyles/Project.xml +19 -0
  3. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  4. package/.idea/misc.xml +6 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/paraswap-dex-lib.iml +9 -0
  7. package/.idea/vcs.xml +6 -0
  8. package/build/abi/curve-v1/StableSwapFRXETH.json +889 -0
  9. package/build/abi/curve-v1/StableSwapWBETH.json +1223 -0
  10. package/build/abi/dexalot/DexalotMainnetRFQ.json +952 -0
  11. package/build/abi/sushiswap-v3/QuoterV2.json +267 -0
  12. package/build/abi/sushiswap-v3/RouterProcessor3.json +289 -0
  13. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3QuoterV2.abi.json +285 -0
  14. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3Router.abi.json +583 -0
  15. package/build/abi/wBETH.json +1527 -0
  16. package/build/abi/woo-fi/WooFeeManager.abi.json +318 -0
  17. package/build/abi/woo-fi/WooPP.abi.json +548 -0
  18. package/build/abi/woo-fi/Wooracle.abi.json +260 -0
  19. package/build/config.js +4 -2
  20. package/build/config.js.map +1 -1
  21. package/build/dex/aave-v3/tokens/arbitrum.json +50 -0
  22. package/build/dex/aave-v3/tokens/avalanche.json +74 -0
  23. package/build/dex/aave-v3/tokens/fantom.json +62 -0
  24. package/build/dex/aave-v3/tokens/optimism.json +50 -0
  25. package/build/dex/aave-v3/tokens/polygon.json +116 -0
  26. package/build/dex/balancer-v2/LinearMath.d.ts +19 -0
  27. package/build/dex/balancer-v2/LinearMath.js +179 -0
  28. package/build/dex/balancer-v2/LinearMath.js.map +1 -0
  29. package/build/dex/balancer-v2/LinearPool.d.ts +47 -0
  30. package/build/dex/balancer-v2/LinearPool.js +324 -0
  31. package/build/dex/balancer-v2/LinearPool.js.map +1 -0
  32. package/build/dex/balancer-v2/PhantomStablePool.d.ts +47 -0
  33. package/build/dex/balancer-v2/PhantomStablePool.js +294 -0
  34. package/build/dex/balancer-v2/PhantomStablePool.js.map +1 -0
  35. package/build/dex/balancer-v2/StableMath.d.ts +9 -0
  36. package/build/dex/balancer-v2/StableMath.js +272 -0
  37. package/build/dex/balancer-v2/StableMath.js.map +1 -0
  38. package/build/dex/balancer-v2/balancer-v2-pool.d.ts +75 -0
  39. package/build/dex/balancer-v2/balancer-v2-pool.js +417 -0
  40. package/build/dex/balancer-v2/balancer-v2-pool.js.map +1 -0
  41. package/build/dex/curve-v1/pools/frxETHpool.d.ts +7 -0
  42. package/build/dex/curve-v1/pools/frxETHpool.js +27 -0
  43. package/build/dex/curve-v1/pools/frxETHpool.js.map +1 -0
  44. package/build/dex/curve-v1/pools/wbETHpool.d.ts +29 -0
  45. package/build/dex/curve-v1/pools/wbETHpool.js +408 -0
  46. package/build/dex/curve-v1/pools/wbETHpool.js.map +1 -0
  47. package/build/dex/dexalot/config.d.ts +4 -0
  48. package/build/dex/dexalot/config.js +18 -0
  49. package/build/dex/dexalot/config.js.map +1 -0
  50. package/build/dex/dexalot/constants.d.ts +15 -0
  51. package/build/dex/dexalot/constants.js +22 -0
  52. package/build/dex/dexalot/constants.js.map +1 -0
  53. package/build/dex/dexalot/dexalot.d.ts +69 -0
  54. package/build/dex/dexalot/dexalot.js +642 -0
  55. package/build/dex/dexalot/dexalot.js.map +1 -0
  56. package/build/dex/dexalot/rate-fetcher.d.ts +28 -0
  57. package/build/dex/dexalot/rate-fetcher.js +100 -0
  58. package/build/dex/dexalot/rate-fetcher.js.map +1 -0
  59. package/build/dex/dexalot/types.d.ts +114 -0
  60. package/build/dex/dexalot/types.js +12 -0
  61. package/build/dex/dexalot/types.js.map +1 -0
  62. package/build/dex/dexalot/validators.d.ts +5 -0
  63. package/build/dex/dexalot/validators.js +45 -0
  64. package/build/dex/dexalot/validators.js.map +1 -0
  65. package/build/dex/gmx/config.js +1 -1
  66. package/build/dex/idex.d.ts +1 -1
  67. package/build/dex/index.js +2 -0
  68. package/build/dex/index.js.map +1 -1
  69. package/build/dex/pancakeswap-v3/types.d.ts +14 -0
  70. package/build/dex/pancakeswap-v3/types.js +3 -0
  71. package/build/dex/pancakeswap-v3/types.js.map +1 -0
  72. package/build/dex/quickswap-v3.d.ts +21 -0
  73. package/build/dex/quickswap-v3.js +40 -0
  74. package/build/dex/quickswap-v3.js.map +1 -0
  75. package/build/dex/ramses-v2/config.d.ts +4 -0
  76. package/build/dex/ramses-v2/config.js +28 -0
  77. package/build/dex/ramses-v2/config.js.map +1 -0
  78. package/build/dex/ramses-v2/constants.d.ts +28 -0
  79. package/build/dex/ramses-v2/constants.js +35 -0
  80. package/build/dex/ramses-v2/constants.js.map +1 -0
  81. package/build/dex/ramses-v2/contract-math/BitMath.d.ts +4 -0
  82. package/build/dex/ramses-v2/contract-math/BitMath.js +93 -0
  83. package/build/dex/ramses-v2/contract-math/BitMath.js.map +1 -0
  84. package/build/dex/ramses-v2/contract-math/FixedPoint128.d.ts +3 -0
  85. package/build/dex/ramses-v2/contract-math/FixedPoint128.js +8 -0
  86. package/build/dex/ramses-v2/contract-math/FixedPoint128.js.map +1 -0
  87. package/build/dex/ramses-v2/contract-math/FixedPoint96.d.ts +4 -0
  88. package/build/dex/ramses-v2/contract-math/FixedPoint96.js +9 -0
  89. package/build/dex/ramses-v2/contract-math/FixedPoint96.js.map +1 -0
  90. package/build/dex/ramses-v2/contract-math/FullMath.d.ts +4 -0
  91. package/build/dex/ramses-v2/contract-math/FullMath.js +19 -0
  92. package/build/dex/ramses-v2/contract-math/FullMath.js.map +1 -0
  93. package/build/dex/ramses-v2/contract-math/LiquidityMath.d.ts +3 -0
  94. package/build/dex/ramses-v2/contract-math/LiquidityMath.js +22 -0
  95. package/build/dex/ramses-v2/contract-math/LiquidityMath.js.map +1 -0
  96. package/build/dex/ramses-v2/contract-math/Oracle.d.ts +10 -0
  97. package/build/dex/ramses-v2/contract-math/Oracle.js +133 -0
  98. package/build/dex/ramses-v2/contract-math/Oracle.js.map +1 -0
  99. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.d.ts +10 -0
  100. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js +91 -0
  101. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js.map +1 -0
  102. package/build/dex/ramses-v2/contract-math/SwapMath.d.ts +8 -0
  103. package/build/dex/ramses-v2/contract-math/SwapMath.js +70 -0
  104. package/build/dex/ramses-v2/contract-math/SwapMath.js.map +1 -0
  105. package/build/dex/ramses-v2/contract-math/Tick.d.ts +7 -0
  106. package/build/dex/ramses-v2/contract-math/Tick.js +45 -0
  107. package/build/dex/ramses-v2/contract-math/Tick.js.map +1 -0
  108. package/build/dex/ramses-v2/contract-math/TickBitMap.d.ts +8 -0
  109. package/build/dex/ramses-v2/contract-math/TickBitMap.js +87 -0
  110. package/build/dex/ramses-v2/contract-math/TickBitMap.js.map +1 -0
  111. package/build/dex/ramses-v2/contract-math/TickMath.d.ts +8 -0
  112. package/build/dex/ramses-v2/contract-math/TickMath.js +162 -0
  113. package/build/dex/ramses-v2/contract-math/TickMath.js.map +1 -0
  114. package/build/dex/ramses-v2/contract-math/UnsafeMath.d.ts +3 -0
  115. package/build/dex/ramses-v2/contract-math/UnsafeMath.js +10 -0
  116. package/build/dex/ramses-v2/contract-math/UnsafeMath.js.map +1 -0
  117. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.d.ts +18 -0
  118. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js +392 -0
  119. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js.map +1 -0
  120. package/build/dex/ramses-v2/contract-math/utils.d.ts +3 -0
  121. package/build/dex/ramses-v2/contract-math/utils.js +16 -0
  122. package/build/dex/ramses-v2/contract-math/utils.js.map +1 -0
  123. package/build/dex/ramses-v2/ramses-v2-pool.d.ts +42 -0
  124. package/build/dex/ramses-v2/ramses-v2-pool.js +307 -0
  125. package/build/dex/ramses-v2/ramses-v2-pool.js.map +1 -0
  126. package/build/dex/ramses-v2/ramses-v2.d.ts +61 -0
  127. package/build/dex/ramses-v2/ramses-v2.js +690 -0
  128. package/build/dex/ramses-v2/ramses-v2.js.map +1 -0
  129. package/build/dex/ramses-v2/types.d.ts +154 -0
  130. package/build/dex/ramses-v2/types.js +9 -0
  131. package/build/dex/ramses-v2/types.js.map +1 -0
  132. package/build/dex/ramses-v2/utils.d.ts +6 -0
  133. package/build/dex/ramses-v2/utils.js +71 -0
  134. package/build/dex/ramses-v2/utils.js.map +1 -0
  135. package/build/dex/sushiswap-v3/config.d.ts +4 -0
  136. package/build/dex/sushiswap-v3/config.js +132 -0
  137. package/build/dex/sushiswap-v3/config.js.map +1 -0
  138. package/build/dex/sushiswap-v3/constants.d.ts +4 -0
  139. package/build/dex/sushiswap-v3/constants.js +32 -0
  140. package/build/dex/sushiswap-v3/constants.js.map +1 -0
  141. package/build/dex/sushiswap-v3/sushiswap-v3-original.d.ts +56 -0
  142. package/build/dex/sushiswap-v3/sushiswap-v3-original.js +598 -0
  143. package/build/dex/sushiswap-v3/sushiswap-v3-original.js.map +1 -0
  144. package/build/dex/sushiswap-v3/sushiswap-v3-pool.d.ts +1 -0
  145. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js +6 -0
  146. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js.map +1 -0
  147. package/build/dex/sushiswap-v3/sushiswap-v3.d.ts +21 -0
  148. package/build/dex/sushiswap-v3/sushiswap-v3.js +58 -0
  149. package/build/dex/sushiswap-v3/sushiswap-v3.js.map +1 -0
  150. package/build/dex/sushiswap-v3/token.d.ts +6 -0
  151. package/build/dex/sushiswap-v3/token.js +23 -0
  152. package/build/dex/sushiswap-v3/token.js.map +1 -0
  153. package/build/dex/sushiswap-v3/types.d.ts +15 -0
  154. package/build/dex/sushiswap-v3/types.js +18 -0
  155. package/build/dex/sushiswap-v3/types.js.map +1 -0
  156. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.d.ts +12 -0
  157. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js +23 -0
  158. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js.map +1 -0
  159. package/build/dex/woo-fi/config.d.ts +4 -0
  160. package/build/dex/woo-fi/config.js +141 -0
  161. package/build/dex/woo-fi/config.js.map +1 -0
  162. package/build/dex/woo-fi/constants.d.ts +5 -0
  163. package/build/dex/woo-fi/constants.js +20 -0
  164. package/build/dex/woo-fi/constants.js.map +1 -0
  165. package/build/dex/woo-fi/types.d.ts +48 -0
  166. package/build/dex/woo-fi/types.js +3 -0
  167. package/build/dex/woo-fi/types.js.map +1 -0
  168. package/build/dex/woo-fi/woo-fi-decimal-math.d.ts +14 -0
  169. package/build/dex/woo-fi/woo-fi-decimal-math.js +42 -0
  170. package/build/dex/woo-fi/woo-fi-decimal-math.js.map +1 -0
  171. package/build/dex/woo-fi/woo-fi-math.d.ts +31 -0
  172. package/build/dex/woo-fi/woo-fi-math.js +300 -0
  173. package/build/dex/woo-fi/woo-fi-math.js.map +1 -0
  174. package/build/dex/woo-fi/woo-fi.d.ts +65 -0
  175. package/build/dex/woo-fi/woo-fi.js +480 -0
  176. package/build/dex/woo-fi/woo-fi.js.map +1 -0
  177. package/build/types.d.ts +1 -0
  178. package/package.json +1 -1
  179. package/src/abi/dexalot/DexalotMainnetRFQ.json +952 -0
  180. package/src/config.ts +5 -2
  181. package/src/dex/dexalot/config.ts +18 -0
  182. package/src/dex/dexalot/constants.ts +29 -0
  183. package/src/dex/dexalot/dexalot-e2e.test.ts +192 -0
  184. package/src/dex/dexalot/dexalot-integration.test.ts +188 -0
  185. package/src/dex/dexalot/dexalot.ts +998 -0
  186. package/src/dex/dexalot/rate-fetcher.ts +197 -0
  187. package/src/dex/dexalot/types.ts +131 -0
  188. package/src/dex/dexalot/validators.ts +46 -0
  189. package/src/dex/gmx/config.ts +1 -1
  190. package/src/dex/idex.ts +2 -0
  191. package/src/dex/index.ts +2 -0
  192. package/src/types.ts +1 -0
  193. package/tests/constants-e2e.ts +2 -2
@@ -0,0 +1,197 @@
1
+ import { IDexHelper } from '../../dex-helper';
2
+ import { Fetcher } from '../../lib/fetcher/fetcher';
3
+ import { validateAndCast } from '../../lib/validators';
4
+ import { Logger, Token } from '../../types';
5
+ import {
6
+ DexalotRateFetcherConfig,
7
+ DexalotPairsResponse,
8
+ PairDataMap,
9
+ DexalotPricesResponse,
10
+ PriceDataMap,
11
+ DexalotBlacklistResponse,
12
+ } from './types';
13
+ import {
14
+ pricesResponseValidator,
15
+ pairsResponseValidator,
16
+ blacklistResponseValidator,
17
+ } from './validators';
18
+ import { Network } from '../../constants';
19
+
20
+ export class RateFetcher {
21
+ private pairsFetcher: Fetcher<DexalotPairsResponse>;
22
+ private pairsCacheKey: string;
23
+ private pairsCacheTTL: number;
24
+
25
+ private rateFetcher: Fetcher<DexalotPricesResponse>;
26
+ private pricesCacheKey: string;
27
+ private pricesCacheTTL: number;
28
+
29
+ private tokensAddrCacheKey: string;
30
+ private tokensCacheKey: string;
31
+ private tokensCacheTTL: number;
32
+
33
+ private blacklistFetcher: Fetcher<DexalotBlacklistResponse>;
34
+ private blacklistCacheKey: string;
35
+ private blacklistCacheTTL: number;
36
+
37
+ constructor(
38
+ private dexHelper: IDexHelper,
39
+ private dexKey: string,
40
+ private network: Network,
41
+ private logger: Logger,
42
+ config: DexalotRateFetcherConfig,
43
+ ) {
44
+ this.pairsCacheKey = config.rateConfig.pairsCacheKey;
45
+ this.pairsCacheTTL = config.rateConfig.pairsCacheTTLSecs;
46
+ this.pricesCacheKey = config.rateConfig.pricesCacheKey;
47
+ this.pricesCacheTTL = config.rateConfig.pricesCacheTTLSecs;
48
+ this.tokensAddrCacheKey = config.rateConfig.tokensAddrCacheKey;
49
+ this.tokensCacheKey = config.rateConfig.tokensCacheKey;
50
+ this.tokensCacheTTL = config.rateConfig.tokensCacheTTLSecs;
51
+ this.blacklistCacheKey = config.rateConfig.blacklistCacheKey;
52
+ this.blacklistCacheTTL = config.rateConfig.blacklistCacheTTLSecs;
53
+
54
+ this.pairsFetcher = new Fetcher<DexalotPairsResponse>(
55
+ dexHelper.httpRequest,
56
+ {
57
+ info: {
58
+ requestOptions: config.rateConfig.pairsReqParams,
59
+ caster: (data: unknown) => {
60
+ return validateAndCast<DexalotPairsResponse>(
61
+ data,
62
+ pairsResponseValidator,
63
+ );
64
+ },
65
+ },
66
+ handler: this.handlePairsResponse.bind(this),
67
+ },
68
+ config.rateConfig.pairsIntervalMs,
69
+ logger,
70
+ );
71
+
72
+ this.rateFetcher = new Fetcher<DexalotPricesResponse>(
73
+ dexHelper.httpRequest,
74
+ {
75
+ info: {
76
+ requestOptions: config.rateConfig.pricesReqParams,
77
+ caster: (data: unknown) => {
78
+ return validateAndCast<DexalotPricesResponse>(
79
+ data,
80
+ pricesResponseValidator,
81
+ );
82
+ },
83
+ },
84
+ handler: this.handleRatesResponse.bind(this),
85
+ },
86
+ config.rateConfig.pricesIntervalMs,
87
+ logger,
88
+ );
89
+
90
+ this.blacklistFetcher = new Fetcher<DexalotBlacklistResponse>(
91
+ dexHelper.httpRequest,
92
+ {
93
+ info: {
94
+ requestOptions: config.rateConfig.blacklistReqParams,
95
+ caster: (data: unknown) => {
96
+ return validateAndCast<DexalotBlacklistResponse>(
97
+ data,
98
+ blacklistResponseValidator,
99
+ );
100
+ },
101
+ },
102
+ handler: this.handleBlacklistResponse.bind(this),
103
+ },
104
+ config.rateConfig.blacklistIntervalMs,
105
+ logger,
106
+ );
107
+ }
108
+
109
+ start() {
110
+ this.pairsFetcher.startPolling();
111
+ this.rateFetcher.startPolling();
112
+ this.blacklistFetcher.startPolling();
113
+ }
114
+
115
+ stop() {
116
+ this.pairsFetcher.stopPolling();
117
+ this.rateFetcher.stopPolling();
118
+ this.blacklistFetcher.stopPolling();
119
+ }
120
+
121
+ private handlePairsResponse(resp: DexalotPairsResponse): void {
122
+ const pairs = resp;
123
+ const dexPairs: PairDataMap = {};
124
+ const tokenMap: { [address: string]: Token } = {};
125
+ const tokenAddrMap: { [symbol: string]: string } = {};
126
+ Object.keys(pairs).forEach(pair => {
127
+ dexPairs[pair.toLowerCase()] = pairs[pair];
128
+ tokenAddrMap[pairs[pair].base.toLowerCase()] =
129
+ pairs[pair].baseAddress.toLowerCase();
130
+ tokenAddrMap[pairs[pair].quote.toLowerCase()] =
131
+ pairs[pair].quoteAddress.toLowerCase();
132
+ tokenMap[pairs[pair].baseAddress.toLowerCase()] = {
133
+ address: pairs[pair].baseAddress.toLowerCase(),
134
+ symbol: pairs[pair].base,
135
+ decimals: pairs[pair].baseDecimals,
136
+ };
137
+ tokenMap[pairs[pair].quoteAddress.toLowerCase()] = {
138
+ address: pairs[pair].quoteAddress.toLowerCase(),
139
+ symbol: pairs[pair].quote,
140
+ decimals: pairs[pair].quoteDecimals,
141
+ };
142
+ });
143
+
144
+ this.dexHelper.cache.setex(
145
+ this.dexKey,
146
+ this.network,
147
+ this.pairsCacheKey,
148
+ this.pairsCacheTTL,
149
+ JSON.stringify(dexPairs),
150
+ );
151
+
152
+ this.dexHelper.cache.setex(
153
+ this.dexKey,
154
+ this.network,
155
+ this.tokensCacheKey,
156
+ this.tokensCacheTTL,
157
+ JSON.stringify(tokenMap),
158
+ );
159
+
160
+ this.dexHelper.cache.setex(
161
+ this.dexKey,
162
+ this.network,
163
+ this.tokensAddrCacheKey,
164
+ this.tokensCacheTTL,
165
+ JSON.stringify(tokenAddrMap),
166
+ );
167
+ }
168
+
169
+ private handleRatesResponse(resp: DexalotPricesResponse): void {
170
+ const { prices } = resp;
171
+ const dexPrices: PriceDataMap = {};
172
+ Object.keys(prices).forEach(pair => {
173
+ dexPrices[pair.toLowerCase()] = prices[pair];
174
+ });
175
+
176
+ this.dexHelper.cache.setex(
177
+ this.dexKey,
178
+ this.network,
179
+ this.pricesCacheKey,
180
+ this.pricesCacheTTL,
181
+ JSON.stringify(dexPrices),
182
+ );
183
+ }
184
+
185
+ private async handleBlacklistResponse(
186
+ resp: DexalotBlacklistResponse,
187
+ ): Promise<void> {
188
+ const { blacklist } = resp;
189
+ this.dexHelper.cache.setex(
190
+ this.dexKey,
191
+ this.network,
192
+ this.blacklistCacheKey,
193
+ this.blacklistCacheTTL,
194
+ JSON.stringify(blacklist.map((item) => item.toLowerCase())),
195
+ );
196
+ }
197
+ }
@@ -0,0 +1,131 @@
1
+ import { RequestHeaders } from '../../dex-helper';
2
+ import { Token } from '../../types';
3
+ import { Method } from '../../dex-helper/irequest-wrapper';
4
+
5
+ type RFQOrder = {
6
+ nonceAndMeta: string;
7
+ expiry: number;
8
+ makerAsset: string;
9
+ takerAsset: string;
10
+ maker: string;
11
+ taker: string;
12
+ makerAmount: string;
13
+ takerAmount: string;
14
+ signature?: string;
15
+ };
16
+
17
+ export type RFQResponse = {
18
+ order: RFQOrder;
19
+ signature: string;
20
+ };
21
+
22
+ export type RFQResponseError = {
23
+ Reason: string;
24
+ ReasonCode: string;
25
+ Success: boolean;
26
+ RetryAfter?: number;
27
+ };
28
+
29
+ export type DexalotData = {
30
+ quoteData?: RFQOrder;
31
+ };
32
+
33
+ export type DexParams = {
34
+ mainnetRFQAddress: string;
35
+ };
36
+
37
+ export enum ClobSide {
38
+ BID = 'BID',
39
+ ASK = 'ASK',
40
+ }
41
+
42
+ export class DexalotRfqError extends Error {}
43
+
44
+ export type PairData = {
45
+ base: string;
46
+ quote: string;
47
+ liquidityUSD: number;
48
+ isSrcBase?: boolean;
49
+ };
50
+
51
+ export type PairDataMap = {
52
+ [pair: string]: PairData;
53
+ };
54
+
55
+ export type PairDataResp = {
56
+ base: string;
57
+ quote: string;
58
+ liquidityUSD: number;
59
+ baseAddress: string;
60
+ quoteAddress: string;
61
+ baseDecimals: number;
62
+ quoteDecimals: number;
63
+ };
64
+
65
+ export type DexalotPairsResponse = {
66
+ [pair: string]: PairDataResp;
67
+ };
68
+
69
+ type PriceData = {
70
+ bids: string[][];
71
+ asks: string[][];
72
+ };
73
+
74
+ export type PriceDataMap = {
75
+ [pair: string]: PriceData;
76
+ };
77
+
78
+ export type DexalotPricesResponse = {
79
+ prices: PriceDataMap;
80
+ };
81
+
82
+ export type TokenAddrDataMap = {
83
+ [symbol: string]: string;
84
+ };
85
+
86
+ export type TokenDataMap = {
87
+ [address: string]: Token;
88
+ };
89
+
90
+ export type DexalotBlacklistResponse = {
91
+ blacklist: string[];
92
+ };
93
+
94
+ export type DexalotRateFetcherConfig = {
95
+ rateConfig: {
96
+ pairsReqParams: {
97
+ url: string;
98
+ headers?: RequestHeaders;
99
+ params?: any;
100
+ };
101
+ pricesReqParams: {
102
+ url: string;
103
+ headers?: RequestHeaders;
104
+ params?: any;
105
+ };
106
+ blacklistReqParams: {
107
+ url: string;
108
+ headers?: RequestHeaders;
109
+ params?: any;
110
+ };
111
+ pairsIntervalMs: number;
112
+ pricesIntervalMs: number;
113
+ blacklistIntervalMs: number;
114
+ pairsCacheKey: string;
115
+ pricesCacheKey: string;
116
+ tokensAddrCacheKey: string;
117
+ tokensCacheKey: string;
118
+ blacklistCacheKey: string;
119
+ blacklistCacheTTLSecs: number;
120
+ pairsCacheTTLSecs: number;
121
+ pricesCacheTTLSecs: number;
122
+ tokensCacheTTLSecs: number;
123
+ };
124
+ };
125
+
126
+ export type DexalotAPIParameters = {
127
+ url: string;
128
+ headers?: RequestHeaders;
129
+ params?: any;
130
+ method?: Method;
131
+ };
@@ -0,0 +1,46 @@
1
+ import joi from 'joi';
2
+
3
+ const pairValidator = joi.object({
4
+ base: joi.string().min(1).required(),
5
+ quote: joi.string().min(1).required(),
6
+ liquidityUSD: joi.number().min(0).required(),
7
+ baseAddress: joi.string().min(1).required(),
8
+ quoteAddress: joi.string().min(1).required(),
9
+ baseDecimals: joi.number().min(0).required(),
10
+ quoteDecimals: joi.number().min(0).required(),
11
+ });
12
+
13
+ export const pairsResponseValidator = joi
14
+ .object()
15
+ .pattern(joi.string(), pairValidator);
16
+
17
+ const orderbookRecordValidator = joi
18
+ .array()
19
+ .items(joi.string().min(1))
20
+ .length(2);
21
+
22
+ const orderbookValidator = joi.object({
23
+ bids: joi.array().items(orderbookRecordValidator).required(),
24
+ asks: joi.array().items(orderbookRecordValidator).required(),
25
+ });
26
+
27
+ export const pricesResponseValidator = joi.object({
28
+ prices: joi.object().pattern(joi.string(), orderbookValidator),
29
+ });
30
+
31
+ const tokenValidator = joi.object({
32
+ symbol: joi.string().min(1).required(),
33
+ name: joi.string().min(1).required(),
34
+ description: joi.string().min(1).required(),
35
+ address: joi.string().min(1).required(),
36
+ decimals: joi.number().min(0).required(),
37
+ type: joi.string().min(1).required(),
38
+ });
39
+
40
+ export const tokensResponseValidator = joi.object({
41
+ tokens: joi.object().pattern(joi.string(), tokenValidator),
42
+ });
43
+
44
+ export const blacklistResponseValidator = joi.object({
45
+ blacklist: joi.array().items(joi.string().min(1)).required(),
46
+ });
@@ -15,7 +15,7 @@ export const GMXConfig: DexConfigMap<DexParams> = {
15
15
  [Network.ARBITRUM]: {
16
16
  vault: '0x489ee077994B6658eAfA855C308275EAd8097C4A',
17
17
  reader: '0x22199a49A999c351eF7927602CFB187ec3cae489',
18
- priceFeed: '0xfe661cbf27da0656b7a1151a761ff194849c387a',
18
+ priceFeed: '0x2d68011bca022ed0e474264145f46cc4de96a002',
19
19
  fastPriceFeed: '0x8960d1b45a2d15d063b84b34dfb2fb2ca7535527',
20
20
  fastPriceEvents: '0x4530b7de1958270a2376be192a24175d795e1b07',
21
21
  usdg: '0x45096e7aA921f27590f8F19e457794EB09678141',
package/src/dex/idex.ts CHANGED
@@ -131,9 +131,11 @@ export interface IDexPricing<ExchangeData> {
131
131
  blockNumber: number,
132
132
  // list of pool identifiers to use for pricing, if undefined use all pools
133
133
  limitPools?: string[],
134
+
134
135
  // I don't like putting this as new params, but in order to not change interface
135
136
  // across all integrations, done it like this
136
137
  transferFees?: TransferFeeParams,
138
+ isFirstSwap?: boolean,
137
139
  ): Promise<ExchangePrices<ExchangeData> | null>;
138
140
 
139
141
  // Returns estimated gas cost for calldata for DEX when used in multiSwap.
package/src/dex/index.ts CHANGED
@@ -76,6 +76,7 @@ import { PancakeswapV3 } from './pancakeswap-v3/pancakeswap-v3';
76
76
  import { Algebra } from './algebra/algebra';
77
77
  import { QuickPerps } from './quick-perps/quick-perps';
78
78
  import { NomiswapV2 } from './uniswap-v2/nomiswap-v2';
79
+ import { Dexalot } from './dexalot/dexalot';
79
80
 
80
81
  const LegacyDexes = [
81
82
  CurveV2,
@@ -102,6 +103,7 @@ const LegacyDexes = [
102
103
  ];
103
104
 
104
105
  const Dexes = [
106
+ Dexalot,
105
107
  CurveV1,
106
108
  CurveFork,
107
109
  Swerve,
package/src/types.ts CHANGED
@@ -276,6 +276,7 @@ export type Config = {
276
276
  hashFlowDisabledMMs: string[];
277
277
  uniswapV3EventLoggingSampleRate?: number;
278
278
  swaapV2AuthToken?: string;
279
+ dexalotAuthToken?: string;
279
280
  forceRpcFallbackDexs: string[];
280
281
  };
281
282
 
@@ -1065,7 +1065,7 @@ export const Holders: {
1065
1065
  BETS: '0x8cc2284c90d05578633418f9cde104f402375a65',
1066
1066
  HATCHY: '0x14ec295ec8def851ec6e2959df872dd24e422631',
1067
1067
  USDCe: '0x3a2434c698f8d79af1f5a9e43013157ca8b11a66',
1068
- USDC: '0xbf14db80d9275fb721383a77c00ae180fc40ae98',
1068
+ USDC: '0x0d0707963952f2fba59dd06f2b425ace40b492fe',
1069
1069
  USDTe: '0x84d34f4f83a87596cd3fb6887cff8f17bf5a7b83',
1070
1070
  WETHe: '0xD291B51f7a1a1F4917D085F2a7731A447E4aF82D',
1071
1071
  POPS: '0x5268c2331658cb0b2858cfa9db27d8f22f5434bc',
@@ -1081,7 +1081,7 @@ export const Holders: {
1081
1081
  TSD: '0x691A89db352B72dDb249bFe16503494eC0D920A4',
1082
1082
  THO: '0xc40d16c47394a506d451475c8a7c46c1175c1da1',
1083
1083
  aAvaUSDT: '0x50B1Ba98Cf117c9682048D56628B294ebbAA4ec2',
1084
- USDT: '0x4aeFa39caEAdD662aE31ab0CE7c8C2c9c0a013E8',
1084
+ USDT: '0x764fe7fb23f0f995c45faef5e32a4526f2028814',
1085
1085
  aAvaWAVAX: '0x1B18Df70863636AEe4BfBAb6F7C70ceBCA9bA404',
1086
1086
  oldFRAX: '0x4e3376018add04ebe4c46bf6f924ddec8c67aa7b',
1087
1087
  newFRAX: '0x4e3376018add04ebe4c46bf6f924ddec8c67aa7b',