@paraswap/dex-lib 3.8.1 → 3.8.3-integral-dex

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 (262) hide show
  1. package/.vscode/launch.json +9 -49
  2. package/.vscode/settings.json +2 -1
  3. package/build/abi/Uncompressor.json +250 -0
  4. package/build/abi/integral/factory.json +333 -0
  5. package/build/abi/integral/oracle.json +501 -0
  6. package/build/abi/integral/pool.json +1041 -0
  7. package/build/abi/{wombat/pool.json → integral/relayer.json} +720 -473
  8. package/build/abi/oswap/oswap.abi.json +452 -0
  9. package/build/config.js +1 -1
  10. package/build/dex/aave-v1/aave-v1.d.ts +1 -2
  11. package/build/dex/aave-v1/aave-v1.js +0 -23
  12. package/build/dex/aave-v1/aave-v1.js.map +1 -1
  13. package/build/dex/compound.js +1 -1
  14. package/build/dex/compound.js.map +1 -1
  15. package/build/dex/curve-v1-factory/config.js +10 -47
  16. package/build/dex/curve-v1-factory/config.js.map +1 -1
  17. package/build/dex/curve-v1-factory/curve-v1-factory.d.ts +2 -2
  18. package/build/dex/curve-v1-factory/curve-v1-factory.js +36 -96
  19. package/build/dex/curve-v1-factory/curve-v1-factory.js.map +1 -1
  20. package/build/dex/curve-v1-factory/price-handlers/functions/constants.js.map +1 -1
  21. package/build/dex/curve-v1-factory/price-handlers/functions/get_dx.js +1 -13
  22. package/build/dex/curve-v1-factory/price-handlers/functions/get_dx.js.map +1 -1
  23. package/build/dex/curve-v1-factory/state-polling-pools/custom-pool-polling.d.ts +2 -2
  24. package/build/dex/curve-v1-factory/state-polling-pools/custom-pool-polling.js +1 -1
  25. package/build/dex/curve-v1-factory/state-polling-pools/custom-pool-polling.js.map +1 -1
  26. package/build/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.js +1 -1
  27. package/build/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.js.map +1 -1
  28. package/build/dex/curve-v1-factory/state-polling-pools/pool-polling-base.d.ts +3 -4
  29. package/build/dex/curve-v1-factory/state-polling-pools/pool-polling-base.js +9 -24
  30. package/build/dex/curve-v1-factory/state-polling-pools/pool-polling-base.js.map +1 -1
  31. package/build/dex/curve-v1-factory/types.d.ts +4 -20
  32. package/build/dex/curve-v1-factory/types.js +3 -11
  33. package/build/dex/curve-v1-factory/types.js.map +1 -1
  34. package/build/dex/curve-v1-stable-ng/config.js +0 -18
  35. package/build/dex/curve-v1-stable-ng/config.js.map +1 -1
  36. package/build/dex/etherfi/etherfi.d.ts +26 -0
  37. package/build/dex/etherfi/etherfi.js +96 -0
  38. package/build/dex/etherfi/etherfi.js.map +1 -0
  39. package/build/dex/index.js +21 -3
  40. package/build/dex/index.js.map +1 -1
  41. package/build/dex/integral/config.d.ts +4 -0
  42. package/build/dex/integral/config.js +20 -0
  43. package/build/dex/integral/config.js.map +1 -0
  44. package/build/dex/integral/context.d.ts +40 -0
  45. package/build/dex/integral/context.js +158 -0
  46. package/build/dex/integral/context.js.map +1 -0
  47. package/build/dex/integral/helpers.d.ts +17 -0
  48. package/build/dex/integral/helpers.js +157 -0
  49. package/build/dex/integral/helpers.js.map +1 -0
  50. package/build/dex/integral/integral-factory.d.ts +21 -0
  51. package/build/dex/integral/integral-factory.js +92 -0
  52. package/build/dex/integral/integral-factory.js.map +1 -0
  53. package/build/dex/integral/integral-pool.d.ts +46 -0
  54. package/build/dex/integral/integral-pool.js +143 -0
  55. package/build/dex/integral/integral-pool.js.map +1 -0
  56. package/build/dex/integral/integral-pricing.d.ts +18 -0
  57. package/build/dex/integral/integral-pricing.js +114 -0
  58. package/build/dex/integral/integral-pricing.js.map +1 -0
  59. package/build/dex/integral/integral-relayer.d.ts +39 -0
  60. package/build/dex/integral/integral-relayer.js +189 -0
  61. package/build/dex/integral/integral-relayer.js.map +1 -0
  62. package/build/dex/integral/integral-token.d.ts +24 -0
  63. package/build/dex/integral/integral-token.js +56 -0
  64. package/build/dex/integral/integral-token.js.map +1 -0
  65. package/build/dex/integral/integral.d.ts +41 -0
  66. package/build/dex/integral/integral.js +377 -0
  67. package/build/dex/integral/integral.js.map +1 -0
  68. package/build/dex/integral/types.d.ts +84 -0
  69. package/build/dex/integral/types.js +9 -0
  70. package/build/dex/integral/types.js.map +1 -0
  71. package/build/dex/integral/utils-e2e.d.ts +9 -0
  72. package/build/dex/integral/utils-e2e.js +131 -0
  73. package/build/dex/integral/utils-e2e.js.map +1 -0
  74. package/build/dex/integral/utils.d.ts +17 -0
  75. package/build/dex/integral/utils.js +94 -0
  76. package/build/dex/integral/utils.js.map +1 -0
  77. package/build/dex/oswap/config.d.ts +5 -0
  78. package/build/dex/oswap/config.js +31 -0
  79. package/build/dex/oswap/config.js.map +1 -0
  80. package/build/dex/oswap/oswap-pool.d.ts +51 -0
  81. package/build/dex/oswap/oswap-pool.js +150 -0
  82. package/build/dex/oswap/oswap-pool.js.map +1 -0
  83. package/build/dex/oswap/oswap.d.ts +46 -0
  84. package/build/dex/oswap/oswap.js +266 -0
  85. package/build/dex/oswap/oswap.js.map +1 -0
  86. package/build/dex/oswap/types.d.ts +20 -0
  87. package/build/dex/oswap/types.js +3 -0
  88. package/build/dex/oswap/types.js.map +1 -0
  89. package/build/dex/platypus/platypus.d.ts +1 -2
  90. package/build/dex/platypus/platypus.js +0 -45
  91. package/build/dex/platypus/platypus.js.map +1 -1
  92. package/build/dex/sdai/config.d.ts +11 -0
  93. package/build/dex/sdai/config.js +21 -0
  94. package/build/dex/sdai/config.js.map +1 -0
  95. package/build/dex/sdai/constants.d.ts +2 -0
  96. package/build/dex/sdai/constants.js +6 -0
  97. package/build/dex/sdai/constants.js.map +1 -0
  98. package/build/dex/sdai/scripts/validate-state.js +102 -0
  99. package/build/dex/sdai/scripts/validate-state.js.map +1 -0
  100. package/build/dex/sdai/sdai-pool.d.ts +16 -0
  101. package/build/dex/sdai/sdai-pool.js +85 -0
  102. package/build/dex/sdai/sdai-pool.js.map +1 -0
  103. package/build/dex/sdai/sdai.d.ts +51 -0
  104. package/build/dex/sdai/sdai.js +172 -0
  105. package/build/dex/sdai/sdai.js.map +1 -0
  106. package/build/dex/sdai/types.d.ts +21 -0
  107. package/build/dex/sdai/types.js +11 -0
  108. package/build/dex/sdai/types.js.map +1 -0
  109. package/build/dex/sdai/utils.d.ts +4 -0
  110. package/build/dex/sdai/utils.js +39 -0
  111. package/build/dex/sdai/utils.js.map +1 -0
  112. package/build/dex/stable-pool.js +8 -1
  113. package/build/dex/stable-pool.js.map +1 -1
  114. package/build/dex/swaap-v1/swaap-v1.d.ts +1 -2
  115. package/build/dex/swaap-v1/swaap-v1.js +0 -14
  116. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  117. package/build/dex/uniswap-v3/contract-math/Oracle.js +4 -4
  118. package/build/dex/uniswap-v3/contract-math/Oracle.js.map +1 -1
  119. package/build/executor/compressor/Compressor.d.ts +23 -0
  120. package/build/executor/compressor/Compressor.js +144 -0
  121. package/build/executor/compressor/Compressor.js.map +1 -0
  122. package/build/executor/compressor/compress.d.ts +17 -0
  123. package/build/executor/compressor/compress.js +187 -0
  124. package/build/executor/compressor/compress.js.map +1 -0
  125. package/build/executor/compressor/compress_functions/addressSubstitution.d.ts +6 -0
  126. package/build/executor/compressor/compress_functions/addressSubstitution.js +29 -0
  127. package/build/executor/compressor/compress_functions/addressSubstitution.js.map +1 -0
  128. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.d.ts +10 -0
  129. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js +40 -0
  130. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js.map +1 -0
  131. package/build/executor/compressor/compress_functions/byteSubstitution.d.ts +11 -0
  132. package/build/executor/compressor/compress_functions/byteSubstitution.js +64 -0
  133. package/build/executor/compressor/compress_functions/byteSubstitution.js.map +1 -0
  134. package/build/executor/compressor/compress_functions/ffSubstitution.d.ts +7 -0
  135. package/build/executor/compressor/compress_functions/ffSubstitution.js +54 -0
  136. package/build/executor/compressor/compress_functions/ffSubstitution.js.map +1 -0
  137. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.d.ts +8 -0
  138. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js +67 -0
  139. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js.map +1 -0
  140. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.d.ts +8 -0
  141. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js +61 -0
  142. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js.map +1 -0
  143. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.d.ts +6 -0
  144. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js +37 -0
  145. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js.map +1 -0
  146. package/build/executor/compressor/compress_functions/searchUnusedBytes.d.ts +9 -0
  147. package/build/executor/compressor/compress_functions/searchUnusedBytes.js +33 -0
  148. package/build/executor/compressor/compress_functions/searchUnusedBytes.js.map +1 -0
  149. package/build/executor/compressor/fetchSaved.js +17 -0
  150. package/build/executor/compressor/fetchSaved.js.map +1 -0
  151. package/build/executor/compressor/utils/computeCostL2.d.ts +2 -0
  152. package/build/executor/compressor/utils/computeCostL2.js +14 -0
  153. package/build/executor/compressor/utils/computeCostL2.js.map +1 -0
  154. package/build/executor/compressor/utils/findLongestDuplicatedString.d.ts +2 -0
  155. package/build/executor/compressor/utils/findLongestDuplicatedString.js +30 -0
  156. package/build/executor/compressor/utils/findLongestDuplicatedString.js.map +1 -0
  157. package/build/executor/compressor/utils/getAllIndexes.d.ts +2 -0
  158. package/build/executor/compressor/utils/getAllIndexes.js +12 -0
  159. package/build/executor/compressor/utils/getAllIndexes.js.map +1 -0
  160. package/build/executor/compressor/utils/getByteForAddress.d.ts +2 -0
  161. package/build/executor/compressor/utils/getByteForAddress.js +14 -0
  162. package/build/executor/compressor/utils/getByteForAddress.js.map +1 -0
  163. package/build/executor/compressor/utils/intTo2Bytes.d.ts +2 -0
  164. package/build/executor/compressor/utils/intTo2Bytes.js +14 -0
  165. package/build/executor/compressor/utils/intTo2Bytes.js.map +1 -0
  166. package/build/executor/compressor/utils/intTo3Bytes.d.ts +2 -0
  167. package/build/executor/compressor/utils/intTo3Bytes.js +18 -0
  168. package/build/executor/compressor/utils/intTo3Bytes.js.map +1 -0
  169. package/build/executor/compressor/utils/intToByte.d.ts +2 -0
  170. package/build/executor/compressor/utils/intToByte.js +10 -0
  171. package/build/executor/compressor/utils/intToByte.js.map +1 -0
  172. package/build/generic-swap-transaction-builder.js +3 -1
  173. package/build/generic-swap-transaction-builder.js.map +1 -1
  174. package/build/router/simpleswap.js +3 -1
  175. package/build/router/simpleswap.js.map +1 -1
  176. package/package.json +2 -2
  177. package/src/abi/BProtocol.json +1155 -0
  178. package/src/abi/Jarvis.json +1172 -0
  179. package/src/abi/MStableAsset.json +1545 -0
  180. package/src/abi/OneInchLp.json +1304 -0
  181. package/src/abi/Onebit.json +736 -0
  182. package/src/abi/Shell.json +1294 -0
  183. package/src/abi/TraderJoeV2Router.json +50 -0
  184. package/src/abi/integral/factory.json +333 -0
  185. package/src/abi/integral/oracle.json +501 -0
  186. package/src/abi/integral/pool.json +1041 -0
  187. package/src/abi/integral/relayer.json +1536 -0
  188. package/src/abi/zrx.v2.json +1967 -0
  189. package/src/abi/zrx.v3.json +3454 -0
  190. package/src/abi/zrx.v4.json +2193 -0
  191. package/src/config.ts +1 -1
  192. package/src/dex/OneInchLp.ts +84 -0
  193. package/src/dex/bProtocol/bProtocol-e2e.test.ts +93 -0
  194. package/src/dex/bProtocol/bProtocol.ts +108 -0
  195. package/src/dex/bProtocol/types.ts +13 -0
  196. package/src/dex/curve-v1-factory/config.ts +10 -47
  197. package/src/dex/curve-v1-factory/curve-v1-factory-e2e.test.ts +16 -92
  198. package/src/dex/curve-v1-factory/curve-v1-factory-integration.test.ts +5 -125
  199. package/src/dex/curve-v1-factory/curve-v1-factory.ts +45 -137
  200. package/src/dex/curve-v1-factory/price-handlers/functions/constants.ts +2 -0
  201. package/src/dex/curve-v1-factory/price-handlers/functions/get_dx.ts +1 -24
  202. package/src/dex/curve-v1-factory/state-polling-pools/custom-pool-polling.ts +2 -3
  203. package/src/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.ts +0 -1
  204. package/src/dex/curve-v1-factory/state-polling-pools/pool-polling-base.ts +10 -31
  205. package/src/dex/curve-v1-factory/types.ts +6 -22
  206. package/src/dex/curve-v1-stable-ng/config.ts +0 -18
  207. package/src/dex/curve-v1-stable-ng/curve-v1-stable-ng-e2e.test.ts +0 -17
  208. package/src/dex/index.ts +20 -3
  209. package/src/dex/integral/config.ts +20 -0
  210. package/src/dex/integral/context.ts +287 -0
  211. package/src/dex/integral/integral-e2e.test.ts +86 -0
  212. package/src/dex/integral/integral-events.test.ts +412 -0
  213. package/src/dex/integral/integral-factory.ts +146 -0
  214. package/src/dex/integral/integral-integration.test.ts +221 -0
  215. package/src/dex/integral/integral-pool.ts +198 -0
  216. package/src/dex/integral/integral-pricing.ts +190 -0
  217. package/src/dex/integral/integral-relayer.ts +285 -0
  218. package/src/dex/integral/integral-token.ts +95 -0
  219. package/src/dex/integral/integral.ts +523 -0
  220. package/src/dex/integral/test-artifacts/configs.json +1 -0
  221. package/src/dex/integral/test-artifacts/logs.json +1 -0
  222. package/src/dex/integral/test-artifacts/states.json +1 -0
  223. package/src/dex/integral/types.ts +88 -0
  224. package/src/dex/integral/utils-e2e.ts +194 -0
  225. package/src/dex/integral/utils.ts +146 -0
  226. package/src/dex/jarvis.ts +262 -0
  227. package/src/dex/mStable.ts +147 -0
  228. package/src/dex/onebit/onebit.ts +113 -0
  229. package/src/dex/onebit/types.ts +17 -0
  230. package/src/dex/shell.ts +84 -0
  231. package/src/dex/trader-joe-v2.ts +148 -0
  232. package/src/dex/uniswap-v3/contract-math/Oracle.ts +5 -4
  233. package/src/dex/zerox/config.ts +31 -0
  234. package/src/dex/zerox/index.ts +328 -0
  235. package/src/dex/zerox/order.ts +62 -0
  236. package/src/dex/zerox/types.ts +82 -0
  237. package/src/dex/zerox/zerox-e2e.test.ts +110 -0
  238. package/src/generic-swap-transaction-builder.ts +3 -1
  239. package/src/router/simpleswap.ts +3 -1
  240. package/tests/constants-e2e.ts +1 -1
  241. package/tests/utils-e2e.ts +0 -2
  242. package/.vscode/tasks.json +0 -15
  243. package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +0 -52
  244. package/build/dex/aave-v2/tokens-avalanche.json +0 -44
  245. package/build/dex/aave-v2/tokens-mainnet.json +0 -188
  246. package/build/dex/aave-v2/tokens-polygon.json +0 -44
  247. package/build/dex/maker-psm/scripts/gem.abi.json +0 -136
  248. package/build/dex/maker-psm/scripts/validate-state.js +0 -185
  249. package/build/dex/maker-psm/scripts/validate-state.js.map +0 -1
  250. package/build/dex/maker-psm/scripts/vat.abi.json +0 -243
  251. package/build/dex/solidly-v3/scripts/check-event-pool-event.js +0 -53
  252. package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +0 -1
  253. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +0 -17
  254. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +0 -64
  255. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +0 -1
  256. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +0 -17
  257. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +0 -79
  258. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +0 -1
  259. package/src/abi/curve-v1-factory/CurveV1Router.abi.json +0 -331
  260. package/src/dex/curve-v1-factory/optimizer.ts +0 -61
  261. /package/build/dex/{solidly-v3/scripts/check-event-pool-event.d.ts → sdai/scripts/validate-state.d.ts} +0 -0
  262. /package/build/{dex/maker-psm/scripts/validate-state.d.ts → executor/compressor/fetchSaved.d.ts} +0 -0
@@ -15,7 +15,6 @@ export type PoolContextConstants = {
15
15
  // for all pools
16
16
  isWrapNative: boolean;
17
17
  isLending: boolean;
18
- isStable?: boolean;
19
18
 
20
19
  // Starting from this point, constants are context relevant for pricing
21
20
 
@@ -69,15 +68,10 @@ export type PoolStateWithUpdateInfo<T> = {
69
68
  };
70
69
 
71
70
  export type CurveV1FactoryData = {
72
- path: {
73
- tokenIn: Address;
74
- tokenOut: Address;
75
- exchange: Address;
76
- i: number;
77
- j: number;
78
- underlyingSwap: boolean;
79
- n_coins: number;
80
- }[];
71
+ exchange: Address;
72
+ i: number;
73
+ j: number;
74
+ underlyingSwap: boolean;
81
75
  isApproved?: boolean;
82
76
  };
83
77
 
@@ -124,6 +118,8 @@ export enum FactoryImplementationNames {
124
118
  FACTORY_PLAIN_4_OPTIMIZED = 'factory_plain_4_optimized',
125
119
 
126
120
  FACTORY_STABLE_NG = 'factory_stable_ng',
121
+ // FACTORY_STABLE_6_NG = 'factory_stable_6_ng',
122
+ // FACTORY_STABLE_8_NG = 'factory_stable_8_ng',
127
123
  }
128
124
 
129
125
  export enum CustomImplementationNames {
@@ -192,7 +188,6 @@ type DexParamFactory = {
192
188
 
193
189
  export type DexParams = {
194
190
  factories: DexParamFactory[] | null;
195
- router: Address;
196
191
  stateUpdatePeriodMs: number;
197
192
  factoryPoolImplementations: Record<Address, FactoryPoolImplementations>;
198
193
  customPools: Record<string, CustomPoolConfig>;
@@ -207,19 +202,8 @@ export enum CurveSwapFunctions {
207
202
  exchange_underlying = 'exchange_underlying',
208
203
  }
209
204
 
210
- export enum CurveRouterSwapType {
211
- exchange = 1,
212
- exchange_underlying = 2,
213
- }
214
-
215
- export enum CurveRouterPoolType {
216
- non_stable = 0,
217
- stable = 10,
218
- }
219
-
220
205
  export type CurveV1FactoryIfaces = {
221
206
  exchangeRouter: Interface;
222
- curveV1Router: Interface;
223
207
  factory: Interface;
224
208
  erc20: Interface;
225
209
  threePool: Interface;
@@ -13,7 +13,6 @@ const CurveV1StableNgConfig: DexConfigMap<DexParams> = {
13
13
  isStableNg: true,
14
14
  },
15
15
  ],
16
- router: '0x16C6521Dff6baB339122a0FE25a9116693265353', // https://github.com/curvefi/curve-router-ng
17
16
  stateUpdatePeriodMs: 5 * 1000,
18
17
  disabledPools: new Set([]),
19
18
  disabledImplementations: new Set([]),
@@ -60,18 +59,6 @@ const CurveV1StableNgConfig: DexConfigMap<DexParams> = {
60
59
  liquidityApiSlug: '/factory-stable-ng',
61
60
  isStoreRateSupported: true,
62
61
  },
63
- '0xc65cb3156225380beda366610bab18d5835a1647': {
64
- name: ImplementationNames.FACTORY_STABLE_NG,
65
- address: '0xc65cb3156225380beda366610bab18d5835a1647',
66
- liquidityApiSlug: '/factory-stable-ng',
67
- isStoreRateSupported: true,
68
- },
69
- '0xa0ec67a3c483674f77915893346a8ca3abe2b785': {
70
- name: ImplementationNames.FACTORY_STABLE_NG,
71
- address: '0xa0ec67a3c483674f77915893346a8ca3abe2b785',
72
- liquidityApiSlug: '/factory-stable-ng',
73
- isStoreRateSupported: true,
74
- },
75
62
  },
76
63
  customPools: {},
77
64
  },
@@ -82,7 +69,6 @@ const CurveV1StableNgConfig: DexConfigMap<DexParams> = {
82
69
  isStableNg: true,
83
70
  },
84
71
  ],
85
- router: '0x0DCDED3545D565bA3B19E683431381007245d983', // https://github.com/curvefi/curve-router-ng
86
72
  stateUpdatePeriodMs: 2 * 1000,
87
73
  disabledPools: new Set([]),
88
74
  disabledImplementations: new Set([]),
@@ -109,7 +95,6 @@ const CurveV1StableNgConfig: DexConfigMap<DexParams> = {
109
95
  isStableNg: true,
110
96
  },
111
97
  ],
112
- router: '0x0DCDED3545D565bA3B19E683431381007245d983', // https://github.com/curvefi/curve-router-ng
113
98
  stateUpdatePeriodMs: 2 * 1000,
114
99
  disabledPools: new Set([]),
115
100
  disabledImplementations: new Set([]),
@@ -130,7 +115,6 @@ const CurveV1StableNgConfig: DexConfigMap<DexParams> = {
130
115
  isStableNg: true,
131
116
  },
132
117
  ],
133
- router: '0x2191718CD32d02B8E60BAdFFeA33E4B5DD9A0A0D', // https://github.com/curvefi/curve-router-ng
134
118
  stateUpdatePeriodMs: 2 * 1000,
135
119
  disabledPools: new Set([]),
136
120
  disabledImplementations: new Set([]),
@@ -157,7 +141,6 @@ const CurveV1StableNgConfig: DexConfigMap<DexParams> = {
157
141
  isStableNg: true,
158
142
  },
159
143
  ],
160
- router: '0x0DCDED3545D565bA3B19E683431381007245d983', // https://github.com/curvefi/curve-router-ng
161
144
  stateUpdatePeriodMs: 2 * 1000,
162
145
  disabledPools: new Set([]),
163
146
  disabledImplementations: new Set([]),
@@ -178,7 +161,6 @@ const CurveV1StableNgConfig: DexConfigMap<DexParams> = {
178
161
  isStableNg: true,
179
162
  },
180
163
  ],
181
- router: '0x4f37A9d177470499A2dD084621020b023fcffc1F', // https://github.com/curvefi/curve-router-ng
182
164
  stateUpdatePeriodMs: 2 * 1000,
183
165
  disabledPools: new Set([]),
184
166
  disabledImplementations: new Set([]),
@@ -63,23 +63,6 @@ describe('CurveV1StableNG E2E', () => {
63
63
  sidesToContractMethods,
64
64
  );
65
65
  });
66
-
67
- describe('GHO -> crvUSD', () => {
68
- const tokenASymbol: string = 'GHO';
69
- const tokenBSymbol: string = 'crvUSD';
70
-
71
- const tokenAAmount: string = '1000000000000000000';
72
- const tokenBAmount: string = '1000000000000000000';
73
-
74
- testForNetwork(
75
- network,
76
- dexKey,
77
- tokenASymbol,
78
- tokenBSymbol,
79
- tokenAAmount,
80
- tokenBAmount,
81
- );
82
- });
83
66
  });
84
67
 
85
68
  describe('Polygon', () => {
package/src/dex/index.ts CHANGED
@@ -2,10 +2,12 @@ import _ from 'lodash';
2
2
  import { UnoptimizedRate } from '../types';
3
3
  import { CurveV2 } from './curve-v2/curve-v2';
4
4
  import { IDexTxBuilder, DexConstructor, IDex, IRouteOptimizer } from './idex';
5
+ import { Jarvis } from './jarvis';
5
6
  import { JarvisV6 } from './jarvis-v6/jarvis-v6';
6
7
  import { StablePool } from './stable-pool/stable-pool';
7
8
  import { Weth } from './weth/weth';
8
9
  import { PolygonMigrator } from './polygon-migrator/polygon-migrator';
10
+ import { ZeroX } from './zerox';
9
11
  import { UniswapV3 } from './uniswap-v3/uniswap-v3';
10
12
  import { BalancerV2 } from './balancer-v2/balancer-v2';
11
13
  import { balancerV2Merge } from './balancer-v2/optimizer';
@@ -16,10 +18,15 @@ import { BiSwap } from './uniswap-v2/biswap';
16
18
  import { MDEX } from './uniswap-v2/mdex';
17
19
  import { Dfyn } from './uniswap-v2/dfyn';
18
20
  import { Bancor } from './bancor/bancor';
21
+ import { BProtocol } from './bProtocol/bProtocol';
22
+ import { MStable } from './mStable';
23
+ import { Shell } from './shell';
24
+ import { Onebit } from './onebit/onebit';
19
25
  import { Compound } from './compound/compound';
20
26
  import { AaveV2 } from './aave-v2/aave-v2';
21
27
  import { AaveV3 } from './aave-v3/aave-v3';
22
28
  import { IdleDao } from './idle-dao/idle-dao';
29
+ import { OneInchLp } from './OneInchLp';
23
30
  import { DodoV1 } from './dodo-v1/dodo-v1';
24
31
  import { DodoV2 } from './dodo-v2';
25
32
  import { Smoothy } from './smoothy/smoothy';
@@ -55,7 +62,6 @@ import { CurveFork } from './curve-v1/forks/curve-forks/curve-forks';
55
62
  import { Swerve } from './curve-v1/forks/swerve/swerve';
56
63
  import { CurveV1Factory } from './curve-v1-factory/curve-v1-factory';
57
64
  import { CurveV1StableNg } from './curve-v1-stable-ng/curve-v1-stable-ng';
58
- import { curveV1Merge } from './curve-v1-factory/optimizer';
59
65
  import { GenericRFQ } from './generic-rfq/generic-rfq';
60
66
  import { WstETH } from './wsteth/wsteth';
61
67
  import { Camelot } from './camelot/camelot';
@@ -65,6 +71,7 @@ import { MaverickV1 } from './maverick-v1/maverick-v1';
65
71
  import { MaverickV2 } from './maverick-v2/maverick-v2';
66
72
  import { QuickSwapV3 } from './quickswap/quickswap-v3';
67
73
  import { ThenaFusion } from './quickswap/thena-fusion';
74
+ import { TraderJoeV2 } from './trader-joe-v2';
68
75
  import { SwaapV2 } from './swaap-v2/swaap-v2';
69
76
  import { TraderJoeV21 } from './trader-joe-v2.1/trader-joe-v2.1';
70
77
  import { PancakeswapV3 } from './pancakeswap-v3/pancakeswap-v3';
@@ -76,6 +83,7 @@ import { NomiswapV2 } from './uniswap-v2/nomiswap-v2';
76
83
  import { Dexalot } from './dexalot/dexalot';
77
84
  import { Wombat } from './wombat/wombat';
78
85
  import { Swell } from './swell/swell';
86
+ import { Integral } from './integral/integral';
79
87
  import { PharaohV1 } from './solidly/forks-override/pharaohV1';
80
88
  import { EtherFi } from './etherfi';
81
89
  import { Spark } from './spark/spark';
@@ -86,13 +94,21 @@ const LegacyDexes = [
86
94
  CurveV2,
87
95
  StablePool,
88
96
  Smoothy,
97
+ ZeroX,
89
98
  Bancor,
99
+ BProtocol,
100
+ MStable,
101
+ Shell,
102
+ Onebit,
90
103
  Compound,
104
+ OneInchLp,
91
105
  DodoV1,
92
106
  DodoV2,
93
107
  QuickSwapV3,
94
108
  ThenaFusion,
109
+ TraderJoeV2,
95
110
  TraderJoeV21,
111
+ Jarvis,
96
112
  Lido,
97
113
  AugustusRFQOrder,
98
114
  EtherFi,
@@ -154,6 +170,7 @@ const Dexes = [
154
170
  SolidlyV3,
155
171
  Wombat,
156
172
  Swell,
173
+ Integral,
157
174
  PharaohV1,
158
175
  Spark,
159
176
  AaveV3Stata,
@@ -188,7 +205,6 @@ export class DexAdapterService {
188
205
  balancerV1Merge,
189
206
  balancerV2Merge,
190
207
  uniswapMerge,
191
- curveV1Merge,
192
208
  ];
193
209
 
194
210
  constructor(
@@ -324,7 +340,8 @@ export class DexAdapterService {
324
340
  if (this.genericRFQDexKeys.has(dexKey)) {
325
341
  return dexKey;
326
342
  }
327
- if ('uniswapforkoptimized' === dexKey) {
343
+ if (!isAdapters && /^paraswappool(.*)/i.test(dexKey)) return 'zerox';
344
+ else if ('uniswapforkoptimized' === dexKey) {
328
345
  if (!this.uniswapV2Alias)
329
346
  throw new Error(
330
347
  `${dexKey} dex is not supported for network(${this.network})!`,
@@ -0,0 +1,20 @@
1
+ import { DexParams } from './types';
2
+ import { DexConfigMap, AdapterMappings } from '../../types';
3
+ import { Network } from '../../constants';
4
+
5
+ export const IntegralConfig: DexConfigMap<DexParams> = {
6
+ Integral: {
7
+ [Network.MAINNET]: {
8
+ factoryAddress: '0xC480b33eE5229DE3FbDFAD1D2DCD3F3BAD0C56c6',
9
+ relayerAddress: '0xd17b3c9784510E33cD5B87b490E79253BcD81e2E',
10
+ subgraphURL: 'ANd5QJuYtyfngmXvBMu9kZAv935vhcqp4xAGBkmCADN3',
11
+ },
12
+ [Network.ARBITRUM]: {
13
+ factoryAddress: '0x717EF162cf831db83c51134734A15D1EBe9E516a',
14
+ relayerAddress: '0x3c6951FDB433b5b8442e7aa126D50fBFB54b5f42',
15
+ subgraphURL: 'HXeVedRK7VgogXwbK5Sc4mjyLkhBAS5akskRvbSYnkHU',
16
+ },
17
+ },
18
+ };
19
+
20
+ export const Adapters: Record<number, AdapterMappings> = {};
@@ -0,0 +1,287 @@
1
+ import { Address } from '@paraswap/core';
2
+ import { IntegralEventPool } from './integral-pool';
3
+ import { IntegralPricing } from './integral-pricing';
4
+ import { IntegralFactory } from './integral-factory';
5
+ import { IntegralRelayer } from './integral-relayer';
6
+ import { Network } from '../../constants';
7
+ import { IDexHelper } from '../../dex-helper';
8
+ import { Logger } from 'log4js';
9
+ import { Interface } from '@ethersproject/abi';
10
+ import {
11
+ IntegralPool,
12
+ PoolInitProps,
13
+ RelayerPoolState,
14
+ RelayerState,
15
+ Requires,
16
+ } from './types';
17
+ import { IntegralToken } from './integral-token';
18
+ import { getPoolBackReferencedFrom, getPoolIdentifier } from './utils';
19
+ import _ from 'lodash';
20
+
21
+ export class IntegralContext {
22
+ static instances: { [network: number]: IntegralContext } = {};
23
+
24
+ pools: { [poolId: string]: IntegralPool } = {};
25
+ tokens: { [tokenAddress: Address]: IntegralToken } = {};
26
+ factory: IntegralFactory;
27
+ relayer: IntegralRelayer;
28
+
29
+ logger: Logger;
30
+
31
+ private constructor(
32
+ readonly network: Network,
33
+ readonly dexKey: string,
34
+ readonly dexHelper: IDexHelper,
35
+ readonly erc20Interface: Interface,
36
+ readonly factoryAddress: Address,
37
+ readonly relayerAddress: Address,
38
+ ) {
39
+ this.logger = dexHelper.getLogger(dexKey);
40
+ this.factory = new IntegralFactory(
41
+ dexHelper,
42
+ dexKey,
43
+ this.factoryAddress,
44
+ this.onPoolCreatedAddPool,
45
+ this.logger,
46
+ );
47
+ this.relayer = new IntegralRelayer(
48
+ dexHelper,
49
+ dexKey,
50
+ this.erc20Interface,
51
+ this.relayerAddress,
52
+ {},
53
+ this.onRelayerPoolEnabledSet,
54
+ this.logger,
55
+ );
56
+ }
57
+
58
+ async addPools(
59
+ pools: PoolInitProps,
60
+ blockNumber: number,
61
+ initPhase: boolean = false,
62
+ ) {
63
+ this.relayer.addPools(pools);
64
+ if (initPhase) {
65
+ await this.relayer.initialize(blockNumber);
66
+ }
67
+ const _relayerState = this.relayer.getState(blockNumber);
68
+ const relayerState = _relayerState
69
+ ? _relayerState
70
+ : await this.relayer.generateState(blockNumber);
71
+ if (!_relayerState) {
72
+ this.relayer.setState(relayerState, blockNumber);
73
+ }
74
+ const poolInitProps = this.removeDisabledPoolInitProps(relayerState, pools);
75
+
76
+ const bases = Object.entries(poolInitProps).map(([poolAddress, p]) => {
77
+ const poolId = getPoolIdentifier(this.dexKey, p.token0, p.token1);
78
+ const base =
79
+ (this.pools[poolId] && this.pools[poolId].base) ||
80
+ new IntegralEventPool(
81
+ this.dexKey,
82
+ this.network,
83
+ this.dexHelper,
84
+ poolAddress,
85
+ p.token0,
86
+ p.token1,
87
+ this.logger,
88
+ );
89
+ this.pools[poolId] = { base, enabled: true };
90
+ return base;
91
+ });
92
+ await Promise.all(
93
+ bases.map(base => !base.isInitialized && base.initialize(blockNumber)),
94
+ );
95
+
96
+ const pricings = await Promise.all(
97
+ bases.map(async base => {
98
+ const _poolState = base.getState(blockNumber);
99
+ const poolState = _poolState
100
+ ? _poolState
101
+ : await base.generateState(blockNumber);
102
+ const poolId = getPoolIdentifier(this.dexKey, base.token0, base.token1);
103
+ const pricing =
104
+ (this.pools[poolId] && this.pools[poolId].pricing) ||
105
+ new IntegralPricing(
106
+ this.dexHelper,
107
+ poolId,
108
+ this.erc20Interface,
109
+ poolState.uniswapPool,
110
+ base.token0,
111
+ base.token1,
112
+ poolState.uniswapPoolFee,
113
+ this.logger,
114
+ this.network,
115
+ );
116
+ this.pools[poolId].pricing = pricing;
117
+ return pricing;
118
+ }),
119
+ );
120
+ await Promise.all(
121
+ pricings.map(
122
+ pricing => !pricing.isInitialized && pricing.initialize(blockNumber),
123
+ ),
124
+ );
125
+
126
+ const initIntegralToken = (token: Address) =>
127
+ new IntegralToken(
128
+ this.network,
129
+ this.dexHelper,
130
+ this.dexKey,
131
+ this.erc20Interface,
132
+ token,
133
+ this.relayerAddress,
134
+ this.onTransferUpdateBalance,
135
+ this.logger,
136
+ );
137
+ bases.map(base => {
138
+ this.tokens[base.token0] =
139
+ this.tokens[base.token0] || initIntegralToken(base.token0);
140
+ this.tokens[base.token1] =
141
+ this.tokens[base.token1] || initIntegralToken(base.token1);
142
+ });
143
+ await Promise.all(
144
+ Object.values(this.tokens).map(
145
+ token => !token.isInitialized && token.initialize(blockNumber),
146
+ ),
147
+ );
148
+ }
149
+
150
+ getPoolAddresses() {
151
+ return Object.values(this.pools)
152
+ .filter(
153
+ (pool): pool is Requires<IntegralPool, 'base'> =>
154
+ !!pool.base && pool.enabled,
155
+ )
156
+ .map(({ base }) => base.poolAddress);
157
+ }
158
+
159
+ private removeDisabledPoolInitProps(
160
+ state: RelayerState,
161
+ props: PoolInitProps,
162
+ ) {
163
+ Object.entries(state.pools).forEach(
164
+ ([poolAddress, poolState]) =>
165
+ !poolState.isEnabled && delete props[poolAddress],
166
+ );
167
+ return props;
168
+ }
169
+
170
+ public static initialize(
171
+ network: Network,
172
+ dexKey: string,
173
+ dexHelper: IDexHelper,
174
+ erc20Interface: Interface,
175
+ factoryAddress: Address,
176
+ relayerAddress: Address,
177
+ ) {
178
+ if (!this.instances[network]) {
179
+ this.instances[network] = new IntegralContext(
180
+ network,
181
+ dexKey,
182
+ dexHelper,
183
+ erc20Interface,
184
+ factoryAddress,
185
+ relayerAddress,
186
+ );
187
+ }
188
+ return this.instances[network];
189
+ }
190
+
191
+ public static getInstance(network: Network) {
192
+ if (!this.instances[network]) {
193
+ throw new Error('IntegralContext instance not initialized');
194
+ }
195
+ return this.instances[network];
196
+ }
197
+
198
+ async onRelayerPoolEnabledSet(
199
+ poolAddress: Address,
200
+ state: RelayerPoolState,
201
+ blockNumber: number,
202
+ ) {
203
+ const poolEntry = getPoolBackReferencedFrom(this, poolAddress);
204
+ if (state.isEnabled && (!poolEntry || !poolEntry[1].enabled)) {
205
+ const _factoryState = this.factory.getStaleState();
206
+ const factoryState = _factoryState
207
+ ? _factoryState
208
+ : await this.factory.generateState(blockNumber);
209
+ const { token0, token1 } = factoryState.pools[poolAddress];
210
+ await this.addPools({ [poolAddress]: { token0, token1 } }, blockNumber);
211
+ } else if (!state.isEnabled && poolEntry && poolEntry[1].enabled) {
212
+ this.pools[poolEntry[0]].enabled = false;
213
+ }
214
+ }
215
+
216
+ onRebalanceSellOrderExecuted(blockNumber: number, orderId: bigint) {
217
+ this.relayer.executeOrder(orderId, blockNumber);
218
+ }
219
+
220
+ async onPoolCreatedAddPool(
221
+ token0: Address,
222
+ token1: Address,
223
+ poolAddress: Address,
224
+ blockNumber: number,
225
+ ) {
226
+ await this.addPools({ [poolAddress]: { token0, token1 } }, blockNumber);
227
+ }
228
+
229
+ async onPoolSwapForRelayer(
230
+ blockNumber: number,
231
+ poolAddress: Address,
232
+ recipient: Address,
233
+ amount0Out: bigint,
234
+ amount1Out: bigint,
235
+ ) {
236
+ if (recipient.toLowerCase() === this.relayerAddress.toLowerCase()) {
237
+ const pools = this.relayer.getPools();
238
+ if (pools[poolAddress.toLowerCase()]) {
239
+ const token0 = pools[poolAddress.toLowerCase()].token0;
240
+ const token1 = pools[poolAddress.toLowerCase()].token1;
241
+
242
+ let _state = this.relayer.getStaleState();
243
+ if (!_state) {
244
+ _state = await this.relayer.generateState(blockNumber);
245
+ this.relayer.setState(_state, blockNumber);
246
+ return;
247
+ } else {
248
+ blockNumber = this.relayer.getStateBlockNumber();
249
+ }
250
+
251
+ const state: RelayerState = _.cloneDeep(_state);
252
+ if (amount1Out > 0n) {
253
+ state.tokens[token1].balance += amount1Out;
254
+ } else {
255
+ state.tokens[token0].balance += amount0Out;
256
+ }
257
+ this.relayer.setState(state, blockNumber);
258
+ } else {
259
+ this.logger.error(
260
+ 'Integral Relayer: Pool address not found for',
261
+ poolAddress,
262
+ );
263
+ }
264
+ }
265
+ }
266
+
267
+ async onTransferUpdateBalance(
268
+ token: Address,
269
+ from: Address,
270
+ to: Address,
271
+ amount: bigint,
272
+ blockNumber: number,
273
+ ) {
274
+ let _state = this.relayer.getStaleState();
275
+ if (!_state) {
276
+ this.logger.error('Integral Token: Relayer stale state not found');
277
+ return;
278
+ }
279
+ const state: RelayerState = _.cloneDeep(_state);
280
+ if (this.relayer.relayerAddress.toLowerCase() === from) {
281
+ state.tokens[token].balance -= amount;
282
+ } else if (this.relayer.relayerAddress.toLowerCase() === to) {
283
+ state.tokens[token].balance += amount;
284
+ }
285
+ this.relayer.setState(state, blockNumber);
286
+ }
287
+ }
@@ -0,0 +1,86 @@
1
+ import dotenv from 'dotenv';
2
+ dotenv.config();
3
+
4
+ import { testE2E } from '../../../tests/utils-e2e';
5
+ import { Tokens, Holders } from '../../../tests/constants-e2e';
6
+ import { Network, ContractMethod, SwapSide } from '../../constants';
7
+ import { StaticJsonRpcProvider } from '@ethersproject/providers';
8
+ import { generateConfig } from '../../config';
9
+
10
+ jest.setTimeout(1000 * 60 * 3);
11
+
12
+ const testCases = [
13
+ {
14
+ network: Network.MAINNET,
15
+ side: SwapSide.SELL,
16
+ method: ContractMethod.swapExactAmountIn,
17
+ tokenASymbol: 'USDC',
18
+ tokenBSymbol: 'USDT',
19
+ tokenAAmount: '5100000000',
20
+ tokenBAmount: '5100000000',
21
+ },
22
+ {
23
+ network: Network.MAINNET,
24
+ side: SwapSide.BUY,
25
+ method: ContractMethod.swapExactAmountOut,
26
+ tokenASymbol: 'USDC',
27
+ tokenBSymbol: 'USDT',
28
+ tokenAAmount: '5100000000',
29
+ tokenBAmount: '5100000000',
30
+ },
31
+ {
32
+ network: Network.ARBITRUM,
33
+ side: SwapSide.SELL,
34
+ method: ContractMethod.swapExactAmountIn,
35
+ tokenASymbol: 'WETH',
36
+ tokenBSymbol: 'USDT',
37
+ tokenAAmount: '1000000000000000000',
38
+ tokenBAmount: '5100000000',
39
+ },
40
+ {
41
+ network: Network.ARBITRUM,
42
+ side: SwapSide.BUY,
43
+ method: ContractMethod.swapExactAmountOut,
44
+ tokenASymbol: 'WETH',
45
+ tokenBSymbol: 'USDT',
46
+ tokenAAmount: '1000000000000000000',
47
+ tokenBAmount: '5100000000',
48
+ },
49
+ ];
50
+
51
+ describe('Integral E2E', () => {
52
+ const dexKey = 'Integral';
53
+
54
+ testCases.forEach(
55
+ ({
56
+ network,
57
+ side,
58
+ method,
59
+ tokenASymbol,
60
+ tokenBSymbol,
61
+ tokenAAmount,
62
+ tokenBAmount,
63
+ }) => {
64
+ it(`${network}: ${tokenASymbol} -> ${tokenBSymbol} (${side} ${method})`, async () => {
65
+ const provider = new StaticJsonRpcProvider(
66
+ generateConfig(network).privateHttpProvider,
67
+ network,
68
+ );
69
+ const tokens = Tokens[network];
70
+ const holders = Holders[network];
71
+
72
+ await testE2E(
73
+ tokens[tokenASymbol],
74
+ tokens[tokenBSymbol],
75
+ holders[tokenASymbol],
76
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
77
+ side,
78
+ dexKey,
79
+ method,
80
+ network,
81
+ provider,
82
+ );
83
+ });
84
+ },
85
+ );
86
+ });