@paraswap/dex-lib 4.1.9 → 4.1.10-ekubo

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 (372) hide show
  1. package/build/abi/AaveV1_lending_pool.json +27 -0
  2. package/build/abi/Aave_GSM.json +751 -0
  3. package/build/abi/Balancer.json +257 -0
  4. package/build/abi/BalancerV2.json +1179 -0
  5. package/build/abi/RamsesV2Pool.abi.json +1554 -0
  6. package/build/abi/RamsesV2Quoter.abi.json +274 -0
  7. package/build/abi/USDM.json +807 -0
  8. package/build/abi/UniswapV2Router.json +397 -0
  9. package/build/abi/angle-transmuter/ChainlinkAccessControlledOffchainAggregator.json +1246 -0
  10. package/build/abi/angle-transmuter/ChainlinkEACAggregatorProxy.json +509 -0
  11. package/build/abi/curve-v1/CurveBUSDv2.abi.json +1356 -0
  12. package/build/abi/curve-v1/CurveTokenV1.json +305 -0
  13. package/build/abi/curve-v1/CurveTokenV2.json +318 -0
  14. package/build/abi/curve-v1/CurveV1StableNg.json +1452 -0
  15. package/build/abi/curve-v1/CurveV2Swap.json +700 -0
  16. package/build/abi/curve-v1/FactoryCryptoRegistry.json +316 -0
  17. package/build/abi/curve-v1/FactoryRegistry.json +508 -0
  18. package/build/abi/curve-v1/StableSwapAave.json +1152 -0
  19. package/build/abi/curve-v1/StableSwapBUSD.json +814 -0
  20. package/build/abi/curve-v1/StableSwapCompound.json +814 -0
  21. package/build/abi/curve-v1/StableSwapIDLE.json +1253 -0
  22. package/build/abi/curve-v1/StableSwapPax.json +865 -0
  23. package/build/abi/curve-v1/StableSwapSnow.json +900 -0
  24. package/build/abi/curve-v1/StableSwapUSDN.json +1004 -0
  25. package/build/abi/curve-v1/StableSwapUSDT.json +814 -0
  26. package/build/abi/curve-v1/StableSwapY.json +814 -0
  27. package/build/abi/ekubo/core.json +1266 -0
  28. package/build/abi/ekubo/data-fetcher.json +161 -0
  29. package/build/abi/ekubo/router.json +803 -0
  30. package/build/abi/inception/inception-ineth-pool.json +1062 -0
  31. package/build/abi/inception/inception-ineth.json +609 -0
  32. package/build/abi/inception/inception-ratio-feed.json +329 -0
  33. package/build/abi/inception/inception-vault.json +991 -0
  34. package/build/abi/kyberdmm/kyber-storage.abi.json +824 -0
  35. package/build/abi/kyberdmm.abi.json +1148 -0
  36. package/build/abi/maverick-v2/MaverickV2Quoter.json +278 -0
  37. package/build/abi/nerve/nerve-metapool.json +790 -0
  38. package/build/abi/platypus/asset.json +490 -0
  39. package/build/abi/platypus/avax-pool.json +820 -0
  40. package/build/abi/platypus/oracle.json +119 -0
  41. package/build/abi/platypus/pool.json +677 -0
  42. package/build/abi/smardex/all/smardex-router.json +648 -0
  43. package/build/abi/smardex/layer-1/smardex-factory.json +242 -0
  44. package/build/abi/smardex/layer-1/smardex-pool.json +506 -0
  45. package/build/abi/smardex/layer-2/smardex-factory.json +185 -0
  46. package/build/abi/smardex/layer-2/smardex-pool.json +578 -0
  47. package/build/abi/swaap-v1/pool.json +1346 -0
  48. package/build/abi/uniswap-v3/UniswapV3Quoter.abi.json +193 -0
  49. package/build/abi/velodrome-slipstream/VelodromeSlipstreamQuoterV2.abi.json +267 -0
  50. package/build/dex/aave-v1/aave-v1.d.ts +34 -0
  51. package/build/dex/aave-v1/aave-v1.js +180 -0
  52. package/build/dex/aave-v1/aave-v1.js.map +1 -0
  53. package/build/dex/aave-v1/config.d.ts +11 -0
  54. package/build/dex/aave-v1/config.js +20 -0
  55. package/build/dex/aave-v1/config.js.map +1 -0
  56. package/build/dex/aave-v1/tokens-mainnet.json +134 -0
  57. package/build/dex/aave-v1/tokens.d.ts +3 -0
  58. package/build/dex/aave-v1/tokens.js +50 -0
  59. package/build/dex/aave-v1/tokens.js.map +1 -0
  60. package/build/dex/aave-v1/types.d.ts +12 -0
  61. package/build/dex/aave-v1/types.js +3 -0
  62. package/build/dex/aave-v1/types.js.map +1 -0
  63. package/build/dex/aave-v3-stata/config.js +8 -8
  64. package/build/dex/aave-v3-stata/config.js.map +1 -1
  65. package/build/dex/aave-v3-stata-v2/aave-v3-stata-v2.js +2 -2
  66. package/build/dex/aave-v3-stata-v2/aave-v3-stata-v2.js.map +1 -1
  67. package/build/dex/aave-v3-stata-v2/config.js +31 -24
  68. package/build/dex/aave-v3-stata-v2/config.js.map +1 -1
  69. package/build/dex/aave-v3-stata-v2/types.d.ts +3 -2
  70. package/build/dex/aave-v3-stata-v2/types.js.map +1 -1
  71. package/build/dex/aave-v3-stata-v2/utils.d.ts +2 -2
  72. package/build/dex/aave-v3-stata-v2/utils.js +7 -6
  73. package/build/dex/aave-v3-stata-v2/utils.js.map +1 -1
  74. package/build/dex/balancer-v1/balancer-pools.json +33333 -0
  75. package/build/dex/bebop/websocket-fetcher.d.ts +35 -0
  76. package/build/dex/bebop/websocket-fetcher.js +87 -0
  77. package/build/dex/bebop/websocket-fetcher.js.map +1 -0
  78. package/build/dex/ekubo/config.d.ts +3 -0
  79. package/build/dex/ekubo/config.js +16 -0
  80. package/build/dex/ekubo/config.js.map +1 -0
  81. package/build/dex/ekubo/ekubo.d.ts +49 -0
  82. package/build/dex/ekubo/ekubo.js +419 -0
  83. package/build/dex/ekubo/ekubo.js.map +1 -0
  84. package/build/dex/ekubo/pools/base-pool.d.ts +47 -0
  85. package/build/dex/ekubo/pools/base-pool.js +184 -0
  86. package/build/dex/ekubo/pools/base-pool.js.map +1 -0
  87. package/build/dex/ekubo/pools/math/constants.d.ts +3 -0
  88. package/build/dex/ekubo/pools/math/constants.js +7 -0
  89. package/build/dex/ekubo/pools/math/constants.js.map +1 -0
  90. package/build/dex/ekubo/pools/math/delta.d.ts +2 -0
  91. package/build/dex/ekubo/pools/math/delta.js +51 -0
  92. package/build/dex/ekubo/pools/math/delta.js.map +1 -0
  93. package/build/dex/ekubo/pools/math/price.d.ts +7 -0
  94. package/build/dex/ekubo/pools/math/price.js +116 -0
  95. package/build/dex/ekubo/pools/math/price.js.map +1 -0
  96. package/build/dex/ekubo/pools/math/swap.d.ts +18 -0
  97. package/build/dex/ekubo/pools/math/swap.js +128 -0
  98. package/build/dex/ekubo/pools/math/swap.js.map +1 -0
  99. package/build/dex/ekubo/pools/math/tick.d.ts +7 -0
  100. package/build/dex/ekubo/pools/math/tick.js +112 -0
  101. package/build/dex/ekubo/pools/math/tick.js.map +1 -0
  102. package/build/dex/ekubo/pools/oracle-pool.d.ts +10 -0
  103. package/build/dex/ekubo/pools/oracle-pool.js +19 -0
  104. package/build/dex/ekubo/pools/oracle-pool.js.map +1 -0
  105. package/build/dex/ekubo/types.d.ts +88 -0
  106. package/build/dex/ekubo/types.js +238 -0
  107. package/build/dex/ekubo/types.js.map +1 -0
  108. package/build/dex/ekubo/utils.d.ts +6 -0
  109. package/build/dex/ekubo/utils.js +30 -0
  110. package/build/dex/ekubo/utils.js.map +1 -0
  111. package/build/dex/idle-dao/idle-dao-pool.d.ts +56 -0
  112. package/build/dex/idle-dao/idle-dao-pool.js +176 -0
  113. package/build/dex/idle-dao/idle-dao-pool.js.map +1 -0
  114. package/build/dex/idle-dao/idle-dao-pooling-pool.d.ts +16 -0
  115. package/build/dex/idle-dao/idle-dao-pooling-pool.js +57 -0
  116. package/build/dex/idle-dao/idle-dao-pooling-pool.js.map +1 -0
  117. package/build/dex/idle-dao/scripts.d.ts +9 -0
  118. package/build/dex/idle-dao/scripts.js +552 -0
  119. package/build/dex/idle-dao/scripts.js.map +1 -0
  120. package/build/dex/inception/config.d.ts +4 -0
  121. package/build/dex/inception/config.js +109 -0
  122. package/build/dex/inception/config.js.map +1 -0
  123. package/build/dex/inception/inception-event-pool.d.ts +16 -0
  124. package/build/dex/inception/inception-event-pool.js +51 -0
  125. package/build/dex/inception/inception-event-pool.js.map +1 -0
  126. package/build/dex/inception/inception-native.d.ts +43 -0
  127. package/build/dex/inception/inception-native.js +131 -0
  128. package/build/dex/inception/inception-native.js.map +1 -0
  129. package/build/dex/inception/inception-pool.d.ts +18 -0
  130. package/build/dex/inception/inception-pool.js +32 -0
  131. package/build/dex/inception/inception-pool.js.map +1 -0
  132. package/build/dex/inception/inception-price-feed.d.ts +19 -0
  133. package/build/dex/inception/inception-price-feed.js +51 -0
  134. package/build/dex/inception/inception-price-feed.js.map +1 -0
  135. package/build/dex/inception/inception.d.ts +43 -0
  136. package/build/dex/inception/inception.js +204 -0
  137. package/build/dex/inception/inception.js.map +1 -0
  138. package/build/dex/inception/tokens.d.ts +9 -0
  139. package/build/dex/inception/tokens.js +28 -0
  140. package/build/dex/inception/tokens.js.map +1 -0
  141. package/build/dex/inception/types.d.ts +22 -0
  142. package/build/dex/inception/types.js +3 -0
  143. package/build/dex/inception/types.js.map +1 -0
  144. package/build/dex/inception/utils.d.ts +6 -0
  145. package/build/dex/inception/utils.js +37 -0
  146. package/build/dex/inception/utils.js.map +1 -0
  147. package/build/dex/index.js +2 -0
  148. package/build/dex/index.js.map +1 -1
  149. package/build/dex/platypus/asset.d.ts +14 -0
  150. package/build/dex/platypus/asset.js +97 -0
  151. package/build/dex/platypus/asset.js.map +1 -0
  152. package/build/dex/platypus/config.d.ts +11 -0
  153. package/build/dex/platypus/config.js +69 -0
  154. package/build/dex/platypus/config.js.map +1 -0
  155. package/build/dex/platypus/platypus.d.ts +63 -0
  156. package/build/dex/platypus/platypus.js +473 -0
  157. package/build/dex/platypus/platypus.js.map +1 -0
  158. package/build/dex/platypus/pool-avax.d.ts +8 -0
  159. package/build/dex/platypus/pool-avax.js +54 -0
  160. package/build/dex/platypus/pool-avax.js.map +1 -0
  161. package/build/dex/platypus/pool-base.d.ts +19 -0
  162. package/build/dex/platypus/pool-base.js +86 -0
  163. package/build/dex/platypus/pool-base.js.map +1 -0
  164. package/build/dex/platypus/pool-pure.d.ts +8 -0
  165. package/build/dex/platypus/pool-pure.js +37 -0
  166. package/build/dex/platypus/pool-pure.js.map +1 -0
  167. package/build/dex/platypus/pool-subscriber.d.ts +14 -0
  168. package/build/dex/platypus/pool-subscriber.js +167 -0
  169. package/build/dex/platypus/pool-subscriber.js.map +1 -0
  170. package/build/dex/platypus/pool.d.ts +8 -0
  171. package/build/dex/platypus/pool.js +58 -0
  172. package/build/dex/platypus/pool.js.map +1 -0
  173. package/build/dex/platypus/types.d.ts +92 -0
  174. package/build/dex/platypus/types.js +10 -0
  175. package/build/dex/platypus/types.js.map +1 -0
  176. package/build/dex/quickswap/spiritswap-v3.d.ts +6 -0
  177. package/build/dex/quickswap/spiritswap-v3.js +19 -0
  178. package/build/dex/quickswap/spiritswap-v3.js.map +1 -0
  179. package/build/dex/smardex/config.d.ts +4 -0
  180. package/build/dex/smardex/config.js +64 -0
  181. package/build/dex/smardex/config.js.map +1 -0
  182. package/build/dex/smardex/constants.d.ts +18 -0
  183. package/build/dex/smardex/constants.js +33 -0
  184. package/build/dex/smardex/constants.js.map +1 -0
  185. package/build/dex/smardex/sdk/constants.d.ts +6 -0
  186. package/build/dex/smardex/sdk/constants.js +13 -0
  187. package/build/dex/smardex/sdk/constants.js.map +1 -0
  188. package/build/dex/smardex/sdk/core.d.ts +113 -0
  189. package/build/dex/smardex/sdk/core.js +499 -0
  190. package/build/dex/smardex/sdk/core.js.map +1 -0
  191. package/build/dex/smardex/sdk/errors.d.ts +15 -0
  192. package/build/dex/smardex/sdk/errors.js +22 -0
  193. package/build/dex/smardex/sdk/errors.js.map +1 -0
  194. package/build/dex/smardex/sdk/types.d.ts +62 -0
  195. package/build/dex/smardex/sdk/types.js +3 -0
  196. package/build/dex/smardex/sdk/types.js.map +1 -0
  197. package/build/dex/smardex/sdk/utils.d.ts +44 -0
  198. package/build/dex/smardex/sdk/utils.js +133 -0
  199. package/build/dex/smardex/sdk/utils.js.map +1 -0
  200. package/build/dex/smardex/smardex-event-pool.d.ts +28 -0
  201. package/build/dex/smardex/smardex-event-pool.js +119 -0
  202. package/build/dex/smardex/smardex-event-pool.js.map +1 -0
  203. package/build/dex/smardex/smardex.d.ts +65 -0
  204. package/build/dex/smardex/smardex.js +519 -0
  205. package/build/dex/smardex/smardex.js.map +1 -0
  206. package/build/dex/smardex/types.d.ts +55 -0
  207. package/build/dex/smardex/types.js +3 -0
  208. package/build/dex/smardex/types.js.map +1 -0
  209. package/build/dex/solidly/forks-override/cone.d.ts +22 -0
  210. package/build/dex/solidly/forks-override/cone.js +53 -0
  211. package/build/dex/solidly/forks-override/cone.js.map +1 -0
  212. package/build/dex/solidly/forks-override/solisnek.d.ts +8 -0
  213. package/build/dex/solidly/forks-override/solisnek.js +15 -0
  214. package/build/dex/solidly/forks-override/solisnek.js.map +1 -0
  215. package/build/dex/swaap-v1/config.d.ts +17 -0
  216. package/build/dex/swaap-v1/config.js +56 -0
  217. package/build/dex/swaap-v1/config.js.map +1 -0
  218. package/build/dex/swaap-v1/constants.d.ts +6 -0
  219. package/build/dex/swaap-v1/constants.js +17 -0
  220. package/build/dex/swaap-v1/constants.js.map +1 -0
  221. package/build/dex/swaap-v1/libraries/ChainlinkUtils.d.ts +25 -0
  222. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js +62 -0
  223. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js.map +1 -0
  224. package/build/dex/swaap-v1/libraries/Const.d.ts +18 -0
  225. package/build/dex/swaap-v1/libraries/Const.js +26 -0
  226. package/build/dex/swaap-v1/libraries/Const.js.map +1 -0
  227. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.d.ts +77 -0
  228. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js +316 -0
  229. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js.map +1 -0
  230. package/build/dex/swaap-v1/libraries/LogExpMath.d.ts +75 -0
  231. package/build/dex/swaap-v1/libraries/LogExpMath.js +418 -0
  232. package/build/dex/swaap-v1/libraries/LogExpMath.js.map +1 -0
  233. package/build/dex/swaap-v1/libraries/MathMMM.d.ts +185 -0
  234. package/build/dex/swaap-v1/libraries/MathMMM.js +453 -0
  235. package/build/dex/swaap-v1/libraries/MathMMM.js.map +1 -0
  236. package/build/dex/swaap-v1/libraries/Num.d.ts +31 -0
  237. package/build/dex/swaap-v1/libraries/Num.js +167 -0
  238. package/build/dex/swaap-v1/libraries/Num.js.map +1 -0
  239. package/build/dex/swaap-v1/libraries/PoolQuotations.d.ts +23 -0
  240. package/build/dex/swaap-v1/libraries/PoolQuotations.js +131 -0
  241. package/build/dex/swaap-v1/libraries/PoolQuotations.js.map +1 -0
  242. package/build/dex/swaap-v1/libraries/Struct.d.ts +56 -0
  243. package/build/dex/swaap-v1/libraries/Struct.js +3 -0
  244. package/build/dex/swaap-v1/libraries/Struct.js.map +1 -0
  245. package/build/dex/swaap-v1/swaap-v1-pool.d.ts +45 -0
  246. package/build/dex/swaap-v1/swaap-v1-pool.js +656 -0
  247. package/build/dex/swaap-v1/swaap-v1-pool.js.map +1 -0
  248. package/build/dex/swaap-v1/swaap-v1.d.ts +62 -0
  249. package/build/dex/swaap-v1/swaap-v1.js +379 -0
  250. package/build/dex/swaap-v1/swaap-v1.js.map +1 -0
  251. package/build/dex/swaap-v1/types.d.ts +106 -0
  252. package/build/dex/swaap-v1/types.js +9 -0
  253. package/build/dex/swaap-v1/types.js.map +1 -0
  254. package/build/dex/zerox/index.d.ts +1 -1
  255. package/build/dex/zerox/index.js.map +1 -1
  256. package/build/dex-helper/dummy-dex-helper.js +3 -0
  257. package/build/dex-helper/dummy-dex-helper.js.map +1 -1
  258. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-balancerv1-curvev1-eth-usdc-gusd.json +16 -0
  259. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-balancerv1-sushiv3-wbtc-eth-sushi.json +16 -0
  260. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-curvev1-eth-usdc-gusd.json +16 -0
  261. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-curvev1-gusd-usdc-eth.json +16 -0
  262. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-dai-usdc-eth.json +16 -0
  263. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-eth-usdc-dai.json +16 -0
  264. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-usdc-eth-wbtc.json +16 -0
  265. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-usdt-usdc-dai.json +16 -0
  266. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-balancerv1-eth-usdc.json +9 -0
  267. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-balancerv1-usdc-eth.json +9 -0
  268. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-balancerv1-usdc-wbtc.json +9 -0
  269. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-curvev1-eth-steth.json +9 -0
  270. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-curvev1-steth-eth.json +9 -0
  271. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-curvev1-usdc-usdt.json +9 -0
  272. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-univ3-eth-usdc.json +9 -0
  273. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-univ3-usdc-eth.json +9 -0
  274. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-univ3-usdc-usdt.json +9 -0
  275. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-balancerv1-sushiv3-wbtc-eth-sushi.json +12 -0
  276. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-curvev1-eth-usdc-gusd.json +7 -0
  277. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-curvev1-gusd-usdc-eth.json +7 -0
  278. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-dai-usdc-eth.json +7 -0
  279. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-eth-usdc-dai.json +7 -0
  280. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-usdc-eth-wbtc.json +12 -0
  281. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-simpleSwap-univ3-eth-usdc.json +7 -0
  282. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-simpleSwap-univ3-usdc-eth.json +7 -0
  283. package/build/executor/fixtures/executor01/routes/price-route-multiswap-balancerv1-curvev1-eth-usdc-gusd.json +78 -0
  284. package/build/executor/fixtures/executor01/routes/price-route-multiswap-balancerv1-sushiv3-wbtc-eth-sushi.json +81 -0
  285. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-curvev1-eth-usdc-gusd.json +78 -0
  286. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-curvev1-gusd-usdc-eth.json +78 -0
  287. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-dai-usdc-eth.json +81 -0
  288. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-eth-usdc-dai.json +81 -0
  289. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-usdc-eth-wbtc.json +81 -0
  290. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-usdt-usdc-dai.json +81 -0
  291. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-balancerv1-eth-usdc.json +64 -0
  292. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-balancerv1-usdc-eth.json +85 -0
  293. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-balancerv1-usdc-wbtc.json +64 -0
  294. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-curvev1-eth-steth.json +52 -0
  295. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-curvev1-steth-eth.json +52 -0
  296. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-curvev1-usdc-usdt.json +52 -0
  297. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-univ3-eth-usdc.json +55 -0
  298. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-univ3-usdc-eth.json +55 -0
  299. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-univ3-usdc-usdt.json +55 -0
  300. package/build/executor/fixtures/executor02/exchange-params/price-route-multiSwap-balancerv1-sushiv3-univ3-bal-eth-sushi.json +23 -0
  301. package/build/executor/fixtures/executor02/exchange-params/price-route-multiSwap-maverickv1-sushiv3-univ3-eth-usdc-mav.json +37 -0
  302. package/build/executor/fixtures/executor02/exchange-params/price-route-multiSwap-univ3-sushiv3-sushi-eth-wbtc.json +23 -0
  303. package/build/executor/fixtures/executor02/exchange-params/price-route-multiSwap-univ3-sushiv3-wbtc-eth-sushi.json +23 -0
  304. package/build/executor/fixtures/executor02/exchange-params/price-route-multiswap-curvev1-univ3-dai-usdc-eth.json +51 -0
  305. package/build/executor/fixtures/executor02/exchange-params/price-route-multiswap-univ3-usdt-dai-eth.json +58 -0
  306. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-sushiv3-balancerv1-eth-usdc.json +23 -0
  307. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-sushiv3-balancerv1-usdc-eth.json +23 -0
  308. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-sushiv3-univ3-eth-sushi.json +9 -0
  309. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-sushiv3-univ3-sushi-eth.json +16 -0
  310. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-univ3-curvev1-usdt-dai.json +23 -0
  311. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiSwap-balancerv1-sushiv3-univ3-bal-eth-sushi.json +12 -0
  312. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiSwap-maverickv1-sushiv3-univ3-eth-usdc-mav.json +7 -0
  313. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiSwap-univ3-sushiv3-sushi-eth-wbtc.json +12 -0
  314. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiSwap-univ3-sushiv3-wbtc-eth-sushi.json +12 -0
  315. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiswap-curvev1-univ3-dai-usdc-eth.json +7 -0
  316. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiswap-univ3-usdt-dai-eth.json +7 -0
  317. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-simpleSwap-sushiv3-balancerv1-eth-usdc.json +7 -0
  318. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-simpleSwap-sushiv3-balancerv1-usdc-eth.json +7 -0
  319. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-simpleSwap-sushiv3-univ3-eth-sushi.json +7 -0
  320. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-simpleSwap-sushiv3-univ3-sushi-eth.json +7 -0
  321. package/build/executor/fixtures/executor02/routes/price-route-multiSwap-balancerv1-sushiv3-univ3-bal-eth-sushi.json +130 -0
  322. package/build/executor/fixtures/executor02/routes/price-route-multiSwap-maverickv1-sushiv3-univ3-eth-usdc-mav.json +136 -0
  323. package/build/executor/fixtures/executor02/routes/price-route-multiSwap-univ3-sushiv3-sushi-eth-wbtc.json +100 -0
  324. package/build/executor/fixtures/executor02/routes/price-route-multiSwap-univ3-sushiv3-wbtc-eth-sushi.json +100 -0
  325. package/build/executor/fixtures/executor02/routes/price-route-multiswap-curvev1-univ3-dai-usdc-eth.json +166 -0
  326. package/build/executor/fixtures/executor02/routes/price-route-multiswap-univ3-usdt-dai-eth.json +190 -0
  327. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-sushiv3-balancerv1-eth-usdc.json +114 -0
  328. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-sushiv3-balancerv1-usdc-eth.json +114 -0
  329. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-sushiv3-univ3-eth-sushi.json +55 -0
  330. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-sushiv3-univ3-sushi-eth.json +73 -0
  331. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-univ3-curvev1-usdt-dai.json +82 -0
  332. package/package.json +2 -2
  333. package/src/abi/ekubo/core.json +1266 -0
  334. package/src/abi/ekubo/data-fetcher.json +161 -0
  335. package/src/abi/ekubo/router.json +803 -0
  336. package/src/dex/aave-v3-stata/config.ts +8 -8
  337. package/src/dex/aave-v3-stata-v2/aave-v3-stata-v2-e2e.test.ts +5 -5
  338. package/src/dex/aave-v3-stata-v2/aave-v3-stata-v2.ts +2 -2
  339. package/src/dex/aave-v3-stata-v2/config.ts +31 -24
  340. package/src/dex/aave-v3-stata-v2/types.ts +3 -2
  341. package/src/dex/aave-v3-stata-v2/utils.ts +18 -10
  342. package/src/dex/ekubo/config.ts +15 -0
  343. package/src/dex/ekubo/ekubo-e2e.test.ts +124 -0
  344. package/src/dex/ekubo/ekubo-events.test.ts +209 -0
  345. package/src/dex/ekubo/ekubo-integration.test.ts +243 -0
  346. package/src/dex/ekubo/ekubo.ts +657 -0
  347. package/src/dex/ekubo/pools/base-pool.ts +267 -0
  348. package/src/dex/ekubo/pools/math/constants.ts +5 -0
  349. package/src/dex/ekubo/pools/math/delta.test.ts +131 -0
  350. package/src/dex/ekubo/pools/math/delta.ts +68 -0
  351. package/src/dex/ekubo/pools/math/price.test.ts +54 -0
  352. package/src/dex/ekubo/pools/math/price.ts +129 -0
  353. package/src/dex/ekubo/pools/math/swap.test.ts +215 -0
  354. package/src/dex/ekubo/pools/math/swap.ts +161 -0
  355. package/src/dex/ekubo/pools/math/tick.test.ts +72 -0
  356. package/src/dex/ekubo/pools/math/tick.ts +120 -0
  357. package/src/dex/ekubo/pools/oracle-pool.ts +46 -0
  358. package/src/dex/ekubo/types.test.ts +552 -0
  359. package/src/dex/ekubo/types.ts +408 -0
  360. package/src/dex/ekubo/utils.ts +34 -0
  361. package/src/dex/index.ts +2 -0
  362. package/src/dex-helper/dummy-dex-helper.ts +10 -0
  363. package/tests/constants-e2e.ts +15 -0
  364. package/tests/utils-e2e.ts +0 -1
  365. package/.idea/codeStyles/Project.xml +0 -59
  366. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  367. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  368. package/.idea/modules.xml +0 -8
  369. package/.idea/paraswap-dex-lib.iml +0 -12
  370. package/.idea/prettier.xml +0 -7
  371. package/.idea/vcs.xml +0 -6
  372. package/scripts/get-uniswap-v3-dexes.ts +0 -64
@@ -17,28 +17,28 @@ import {
17
17
  export const AaveV3StataConfig: DexConfigMap<DexParams> = {
18
18
  AaveV3Stata: {
19
19
  [Network.MAINNET]: {
20
- factoryAddress: AaveV3Ethereum.STATIC_A_TOKEN_FACTORY,
20
+ factoryAddress: AaveV3Ethereum.LEGACY_STATIC_A_TOKEN_FACTORY,
21
21
  },
22
22
  [Network.POLYGON]: {
23
- factoryAddress: AaveV3Polygon.STATIC_A_TOKEN_FACTORY,
23
+ factoryAddress: AaveV3Polygon.LEGACY_STATIC_A_TOKEN_FACTORY,
24
24
  },
25
25
  [Network.AVALANCHE]: {
26
- factoryAddress: AaveV3Avalanche.STATIC_A_TOKEN_FACTORY,
26
+ factoryAddress: AaveV3Avalanche.LEGACY_STATIC_A_TOKEN_FACTORY,
27
27
  },
28
28
  [Network.ARBITRUM]: {
29
- factoryAddress: AaveV3Arbitrum.STATIC_A_TOKEN_FACTORY,
29
+ factoryAddress: AaveV3Arbitrum.LEGACY_STATIC_A_TOKEN_FACTORY,
30
30
  },
31
31
  [Network.OPTIMISM]: {
32
- factoryAddress: AaveV3Optimism.STATIC_A_TOKEN_FACTORY,
32
+ factoryAddress: AaveV3Optimism.LEGACY_STATIC_A_TOKEN_FACTORY,
33
33
  },
34
34
  [Network.BASE]: {
35
- factoryAddress: AaveV3Base.STATIC_A_TOKEN_FACTORY,
35
+ factoryAddress: AaveV3Base.LEGACY_STATIC_A_TOKEN_FACTORY,
36
36
  },
37
37
  [Network.BSC]: {
38
- factoryAddress: AaveV3BNB.STATIC_A_TOKEN_FACTORY,
38
+ factoryAddress: AaveV3BNB.LEGACY_STATIC_A_TOKEN_FACTORY,
39
39
  },
40
40
  [Network.GNOSIS]: {
41
- factoryAddress: AaveV3Gnosis.STATIC_A_TOKEN_FACTORY,
41
+ factoryAddress: AaveV3Gnosis.LEGACY_STATIC_A_TOKEN_FACTORY,
42
42
  },
43
43
  // [Network.Scroll]: {
44
44
  // factoryAddress: AaveV3Scroll.STATIC_A_TOKEN_FACTORY,
@@ -264,28 +264,28 @@ describe('AaveV3Stata E2E', () => {
264
264
  });
265
265
 
266
266
  // no tokens yet deployed
267
- describe.skip('Optimism', () => {
267
+ describe('Optimism', () => {
268
268
  const network = Network.OPTIMISM;
269
269
 
270
270
  const pairs: { name: string; amount: string; skipBuy?: boolean }[][] = [
271
271
  [
272
272
  {
273
- name: 'USDT',
273
+ name: 'USDC',
274
274
  amount: '100000',
275
275
  },
276
276
  {
277
- name: 'stataUSDT',
277
+ name: 'stataUSDC',
278
278
  amount: '100000',
279
279
  },
280
280
  ],
281
281
  [
282
282
  {
283
- name: 'aaveUSDT',
283
+ name: 'aOptUSDCn',
284
284
  amount: '100000',
285
285
  skipBuy: true,
286
286
  },
287
287
  {
288
- name: 'stataUSDT',
288
+ name: 'stataUSDC', // no holders
289
289
  amount: '100000',
290
290
  },
291
291
  ],
@@ -103,7 +103,7 @@ export class AaveV3StataV2
103
103
 
104
104
  let tokenList = await fetchTokenList(
105
105
  this.dexHelper.web3Provider,
106
- this.config.factoryAddresses,
106
+ this.config,
107
107
  this.dexHelper.multiWrapper,
108
108
  blockNumber,
109
109
  );
@@ -216,7 +216,7 @@ export class AaveV3StataV2
216
216
  true,
217
217
  [
218
218
  {
219
- target: this.config.pool,
219
+ target: stataToken.pool,
220
220
  callData: AaveV3StataV2.pool.encodeFunctionData(
221
221
  'getReserveNormalizedIncome',
222
222
  [stataToken.underlying],
@@ -12,29 +12,36 @@ import {
12
12
 
13
13
  export const AaveV3StataConfig: DexConfigMap<DexParams> = {
14
14
  AaveV3StataV2: {
15
- [Network.MAINNET]: {
16
- factoryAddresses: [
17
- AaveV3Ethereum.STATA_FACTORY,
18
- AaveV3EthereumLido.STATA_FACTORY,
19
- ],
20
- pool: AaveV3Ethereum.POOL,
21
- },
22
- [Network.GNOSIS]: {
23
- factoryAddresses: [AaveV3Gnosis.STATA_FACTORY],
24
- pool: AaveV3Gnosis.POOL,
25
- },
26
- // Waiting for BalancerV3 to get released on Optimism
27
- // [Network.OPTIMISM]: {
28
- // factoryAddresses: [AaveV3Optimism.STATA_FACTORY],
29
- // pool: AaveV3Optimism.POOL,
30
- // },
31
- [Network.ARBITRUM]: {
32
- factoryAddresses: [AaveV3Arbitrum.STATA_FACTORY],
33
- pool: AaveV3Arbitrum.POOL,
34
- },
35
- [Network.BASE]: {
36
- factoryAddresses: [AaveV3Base.STATA_FACTORY],
37
- pool: AaveV3Base.POOL,
38
- },
15
+ [Network.MAINNET]: [
16
+ { factory: AaveV3Ethereum.STATA_FACTORY, pool: AaveV3Ethereum.POOL },
17
+ {
18
+ factory: AaveV3EthereumLido.STATA_FACTORY,
19
+ pool: AaveV3EthereumLido.POOL,
20
+ },
21
+ ],
22
+ [Network.GNOSIS]: [
23
+ {
24
+ factory: AaveV3Gnosis.STATA_FACTORY,
25
+ pool: AaveV3Gnosis.POOL,
26
+ },
27
+ ],
28
+ [Network.OPTIMISM]: [
29
+ {
30
+ factory: AaveV3Optimism.STATA_FACTORY,
31
+ pool: AaveV3Optimism.POOL,
32
+ },
33
+ ],
34
+ [Network.ARBITRUM]: [
35
+ {
36
+ factory: AaveV3Arbitrum.STATA_FACTORY,
37
+ pool: AaveV3Arbitrum.POOL,
38
+ },
39
+ ],
40
+ [Network.BASE]: [
41
+ {
42
+ factory: AaveV3Base.STATA_FACTORY,
43
+ pool: AaveV3Base.POOL,
44
+ },
45
+ ],
39
46
  },
40
47
  };
@@ -8,9 +8,9 @@ export enum TokenType {
8
8
  }
9
9
 
10
10
  export type DexParams = {
11
- factoryAddresses: string[];
11
+ factory: string;
12
12
  pool: string;
13
- };
13
+ }[];
14
14
 
15
15
  export type AaveV3StataV2Data = {
16
16
  exchange: Address;
@@ -24,6 +24,7 @@ export type StataToken = {
24
24
  underlyingAToken: string;
25
25
  stataSymbol: string;
26
26
  decimals: number;
27
+ pool: string;
27
28
  };
28
29
 
29
30
  export enum StataFunctions {
@@ -6,21 +6,26 @@ import { Interface } from '@ethersproject/abi';
6
6
  import Web3 from 'web3';
7
7
  import { MultiCallParams, MultiWrapper } from '../../lib/multi-wrapper';
8
8
  import { stringDecode, uint8ToNumber, addressDecode } from '../../lib/decoders';
9
- import { StataToken } from './types';
9
+ import { StataToken, DexParams } from './types';
10
10
  import FactoryABI from '../../abi/aavev3statav2/Factory.json';
11
11
  import TokenABI from '../../abi/aavev3statav2/Token.json';
12
12
  import { AbiItem } from 'web3-utils';
13
13
 
14
+ type PoolAndToken = {
15
+ token: string;
16
+ pool: string;
17
+ };
18
+
14
19
  // const stataInterface = new Interface(IStaticATokenLM_ABI);
15
20
  const statav2Interface = new Interface(TokenABI);
16
21
 
17
22
  async function getTokenMetaData(
18
- stataTokens: string[],
23
+ stataTokens: PoolAndToken[],
19
24
  multiWrapper: MultiWrapper,
20
25
  blockNumber?: number,
21
26
  ): Promise<StataToken[]> {
22
27
  const calls: MultiCallParams<any>[] = stataTokens
23
- .map(token => {
28
+ .map(({ token }) => {
24
29
  return [
25
30
  {
26
31
  target: token,
@@ -54,7 +59,8 @@ async function getTokenMetaData(
54
59
  let tokenList: StataToken[] = [];
55
60
  for (let i = 0, x = 0; i < stataTokens.length; ++i, x += 4) {
56
61
  tokenList.push({
57
- address: stataTokens[i].toLowerCase(),
62
+ address: stataTokens[i].token.toLowerCase(),
63
+ pool: stataTokens[i].pool.toLowerCase(),
58
64
  stataSymbol: results[x] as string,
59
65
  decimals: results[x + 1] as number,
60
66
  underlying: (results[x + 2] as string).toLowerCase(),
@@ -66,22 +72,24 @@ async function getTokenMetaData(
66
72
 
67
73
  export const fetchTokenList = async (
68
74
  web3Provider: Web3,
69
- factoryAddresses: string[],
75
+ config: DexParams,
70
76
  multiWrapper: MultiWrapper,
71
77
  blockNumber?: number,
72
78
  ): Promise<StataToken[]> => {
73
- let stataList: string[] = (
79
+ let stataList: PoolAndToken[] = (
74
80
  (await Promise.all(
75
- factoryAddresses.map(async factoryAddress => {
81
+ config.map(async ({ factory, pool }) => {
76
82
  let factoryContract = new web3Provider.eth.Contract(
77
83
  FactoryABI as AbiItem[],
78
84
  // IStaticATokenFactory_ABI as any,
79
- factoryAddress,
85
+ factory,
80
86
  );
81
87
 
82
- return await factoryContract.methods.getStataTokens().call();
88
+ return (
89
+ (await factoryContract.methods.getStataTokens().call()) as string[]
90
+ ).map(address => ({ token: address, pool }));
83
91
  }),
84
- )) as string[][]
92
+ )) as PoolAndToken[][]
85
93
  ).flat();
86
94
 
87
95
  return getTokenMetaData(stataList, multiWrapper, blockNumber);
@@ -0,0 +1,15 @@
1
+ import { DexParams } from './types';
2
+ import { DexConfigMap } from '../../types';
3
+ import { Network } from '../../constants';
4
+
5
+ export const EkuboConfig: DexConfigMap<DexParams> = {
6
+ Ekubo: {
7
+ [Network.MAINNET]: {
8
+ apiUrl: 'https://eth-mainnet-api.ekubo.org',
9
+ core: '0xe0e0e08A6A4b9Dc7bD67BCB7aadE5cF48157d444',
10
+ oracle: '0x51d02a5948496a67827242eabc5725531342527c',
11
+ dataFetcher: '0x91cB8a896cAF5e60b1F7C4818730543f849B408c',
12
+ router: '0x9995855C00494d039aB6792f18e368e530DFf931',
13
+ },
14
+ },
15
+ };
@@ -0,0 +1,124 @@
1
+ /* eslint-disable no-console */
2
+ import dotenv from 'dotenv';
3
+ dotenv.config();
4
+
5
+ import { testE2E } from '../../../tests/utils-e2e';
6
+ import {
7
+ Tokens,
8
+ Holders,
9
+ NativeTokenSymbols,
10
+ } from '../../../tests/constants-e2e';
11
+ import { Network, ContractMethod, SwapSide } from '../../constants';
12
+ import { StaticJsonRpcProvider } from '@ethersproject/providers';
13
+ import { generateConfig } from '../../config';
14
+
15
+ function testForNetwork(
16
+ network: Network,
17
+ dexKey: string,
18
+ tokenASymbol: string,
19
+ tokenBSymbol: string,
20
+ tokenAAmount: string,
21
+ tokenBAmount: string,
22
+ nativeTokenAmount: string,
23
+ ) {
24
+ const provider = new StaticJsonRpcProvider(
25
+ generateConfig(network).privateHttpProvider,
26
+ network,
27
+ );
28
+ const tokens = Tokens[network];
29
+ const holders = Holders[network];
30
+ const nativeTokenSymbol = NativeTokenSymbols[network];
31
+
32
+ const sideToContractMethods = new Map([
33
+ [SwapSide.SELL, [ContractMethod.swapExactAmountIn]],
34
+ [SwapSide.BUY, [ContractMethod.swapExactAmountOut]],
35
+ ]);
36
+
37
+ describe(`${network}`, () => {
38
+ sideToContractMethods.forEach((contractMethods, side) =>
39
+ describe(`${side}`, () => {
40
+ contractMethods.forEach((contractMethod: ContractMethod) => {
41
+ describe(`${contractMethod}`, () => {
42
+ it(`${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
43
+ await testE2E(
44
+ tokens[nativeTokenSymbol],
45
+ tokens[tokenASymbol],
46
+ holders[nativeTokenSymbol],
47
+ side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
48
+ side,
49
+ dexKey,
50
+ contractMethod,
51
+ network,
52
+ provider,
53
+ );
54
+ });
55
+ it(`${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
56
+ await testE2E(
57
+ tokens[tokenASymbol],
58
+ tokens[nativeTokenSymbol],
59
+ holders[tokenASymbol],
60
+ side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
61
+ side,
62
+ dexKey,
63
+ contractMethod,
64
+ network,
65
+ provider,
66
+ );
67
+ });
68
+ it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
69
+ await testE2E(
70
+ tokens[tokenASymbol],
71
+ tokens[tokenBSymbol],
72
+ holders[tokenASymbol],
73
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
74
+ side,
75
+ dexKey,
76
+ contractMethod,
77
+ network,
78
+ provider,
79
+ );
80
+ });
81
+ it(`${tokenBSymbol} -> ${tokenASymbol}`, async () => {
82
+ await testE2E(
83
+ tokens[tokenBSymbol],
84
+ tokens[tokenASymbol],
85
+ holders[tokenBSymbol],
86
+ side === SwapSide.SELL ? tokenBAmount : tokenAAmount,
87
+ side,
88
+ dexKey,
89
+ contractMethod,
90
+ network,
91
+ provider,
92
+ );
93
+ });
94
+ });
95
+ });
96
+ }),
97
+ );
98
+ });
99
+ }
100
+
101
+ describe('Ekubo E2E', () => {
102
+ const dexKey = 'Ekubo';
103
+
104
+ describe('Mainnet', () => {
105
+ const network = Network.MAINNET;
106
+
107
+ const tokenASymbol: string = 'USDC';
108
+ const tokenBSymbol: string = 'USDT';
109
+
110
+ const tokenAAmount: string = '10000000';
111
+ const tokenBAmount: string = '10000000';
112
+ const nativeTokenAmount = '1000000000000000';
113
+
114
+ testForNetwork(
115
+ network,
116
+ dexKey,
117
+ tokenASymbol,
118
+ tokenBSymbol,
119
+ tokenAAmount,
120
+ tokenBAmount,
121
+ nativeTokenAmount,
122
+ );
123
+ });
124
+ });
@@ -0,0 +1,209 @@
1
+ /* eslint-disable no-console */
2
+ import dotenv from 'dotenv';
3
+ dotenv.config();
4
+
5
+ import { Network } from '../../constants';
6
+ import { DummyDexHelper } from '../../dex-helper/index';
7
+ import { testEventSubscriber } from '../../../tests/utils-events';
8
+ import {
9
+ findNearestInitializedTickIndex,
10
+ PoolConfig,
11
+ PoolKey,
12
+ PoolState,
13
+ } from './types';
14
+ import { EkuboConfig } from './config';
15
+ import { Contract } from 'ethers';
16
+ import CoreABI from '../../abi/ekubo/core.json';
17
+ import DataFetcherABI from '../../abi/ekubo/data-fetcher.json';
18
+ import { Interface } from '@ethersproject/abi';
19
+ import { BasePool } from './pools/base-pool';
20
+ import { OraclePool } from './pools/oracle-pool';
21
+
22
+ jest.setTimeout(50 * 1000);
23
+
24
+ async function fetchPoolState(
25
+ pool: BasePool,
26
+ blockNumber: number,
27
+ ): Promise<PoolState.Object> {
28
+ return pool.generateState(blockNumber) as Promise<PoolState.Object>;
29
+ }
30
+
31
+ type EventMappings = Record<
32
+ string,
33
+ [
34
+ {
35
+ pool: typeof BasePool;
36
+ key: PoolKey;
37
+ }[],
38
+ number,
39
+ ][]
40
+ >;
41
+
42
+ function stateCompare(actual: PoolState.Object, expected: PoolState.Object) {
43
+ const [lowCheckedTickActual, highCheckedTickActual] =
44
+ actual.checkedTicksBounds;
45
+ const [lowCheckedTickExpected, highCheckedTickExpected] =
46
+ expected.checkedTicksBounds;
47
+
48
+ const [sameLowCheckedTicks, sameHighCheckedTicks] = [
49
+ lowCheckedTickActual === lowCheckedTickExpected,
50
+ highCheckedTickActual === highCheckedTickExpected,
51
+ ];
52
+
53
+ if (sameLowCheckedTicks && sameHighCheckedTicks) {
54
+ expect(actual).toStrictEqual(expected);
55
+ return;
56
+ }
57
+
58
+ expect(actual.sqrtRatio).toStrictEqual(expected.sqrtRatio);
59
+ expect(actual.activeTick).toStrictEqual(expected.activeTick);
60
+ expect(actual.liquidity).toStrictEqual(expected.liquidity);
61
+
62
+ /**
63
+ * The checked tick ranges differ between the two states at this point.
64
+ * In order to still compare the tick arrays, we thus have to exclude the liquidity cutoff ticks
65
+ * from the comparison (if they differ), as well as any other ticks that could've only
66
+ * been discovered in one of the two checked tick ranges.
67
+ */
68
+
69
+ let lowTickIndexActual: number, lowTickIndexExpected: number;
70
+
71
+ if (sameLowCheckedTicks) {
72
+ [lowTickIndexActual, lowTickIndexExpected] = [0, 0];
73
+ } else if (lowCheckedTickActual > lowCheckedTickExpected) {
74
+ lowTickIndexActual = 1;
75
+ lowTickIndexExpected =
76
+ findNearestInitializedTickIndex(
77
+ expected.sortedTicks,
78
+ lowCheckedTickActual,
79
+ )! + 1;
80
+ } else {
81
+ lowTickIndexExpected = 1;
82
+ lowTickIndexActual =
83
+ findNearestInitializedTickIndex(
84
+ actual.sortedTicks,
85
+ lowCheckedTickExpected,
86
+ )! + 1;
87
+ }
88
+
89
+ let highTickIndexActual: number, highTickIndexExpected: number;
90
+
91
+ if (sameHighCheckedTicks) {
92
+ [highTickIndexActual, highTickIndexExpected] = [
93
+ actual.sortedTicks.length,
94
+ expected.sortedTicks.length,
95
+ ];
96
+ } else if (highCheckedTickActual > highCheckedTickExpected) {
97
+ highTickIndexExpected = expected.sortedTicks.length - 1;
98
+
99
+ let tickIndex = findNearestInitializedTickIndex(
100
+ actual.sortedTicks,
101
+ highCheckedTickExpected,
102
+ )!;
103
+ highTickIndexActual =
104
+ actual.sortedTicks[tickIndex].number === highCheckedTickExpected
105
+ ? tickIndex
106
+ : tickIndex + 1;
107
+ } else {
108
+ highTickIndexActual = actual.sortedTicks.length - 1;
109
+
110
+ let tickIndex = findNearestInitializedTickIndex(
111
+ expected.sortedTicks,
112
+ highCheckedTickActual,
113
+ )!;
114
+ highTickIndexExpected =
115
+ expected.sortedTicks[tickIndex].number === highCheckedTickActual
116
+ ? tickIndex
117
+ : tickIndex + 1;
118
+ }
119
+
120
+ expect(
121
+ actual.sortedTicks.slice(lowTickIndexActual, highTickIndexActual),
122
+ ).toStrictEqual(
123
+ expected.sortedTicks.slice(lowTickIndexExpected, highTickIndexExpected),
124
+ );
125
+ }
126
+
127
+ const dexKey = 'Ekubo';
128
+
129
+ describe('Ekubo Mainnet', function () {
130
+ const network = Network.MAINNET;
131
+ const config = EkuboConfig[dexKey][network];
132
+ const dexHelper = new DummyDexHelper(network);
133
+ const core = new Contract(config.core, CoreABI, dexHelper.provider);
134
+ const coreIface = new Interface(CoreABI);
135
+ const dataFetcher = new Contract(
136
+ config.dataFetcher,
137
+ DataFetcherABI,
138
+ dexHelper.provider,
139
+ );
140
+ const logger = dexHelper.getLogger(dexKey);
141
+
142
+ const baseEthUsdcPoolKey = new PoolKey(
143
+ 0n,
144
+ 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48n,
145
+ new PoolConfig(5982, 55340232221128654n, 0n),
146
+ );
147
+
148
+ const oracleUsdcPoolKey = new PoolKey(
149
+ 0n,
150
+ 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48n,
151
+ new PoolConfig(0, 0n, BigInt(config.oracle)),
152
+ );
153
+
154
+ const eventsToTest: EventMappings = {
155
+ Swapped: [
156
+ [
157
+ [
158
+ {
159
+ pool: BasePool,
160
+ key: baseEthUsdcPoolKey,
161
+ },
162
+ ],
163
+ 22048500, // https://etherscan.io/tx/0xc401cc3007a2c0efd705c4c0dee5690ce8592858476b32cda8a4b000ceda0f24
164
+ ],
165
+ [
166
+ [
167
+ {
168
+ pool: OraclePool,
169
+ key: oracleUsdcPoolKey,
170
+ },
171
+ ],
172
+ 22063200, // https://etherscan.io/tx/0xe689fb49b9627504d014a9b4663a6f0ec38ebfdc5642e261bb4bcd229d58206d
173
+ ],
174
+ ],
175
+ };
176
+
177
+ Object.entries(eventsToTest).forEach(([eventName, eventDetails]) => {
178
+ describe(eventName, () => {
179
+ for (const [pools, blockNumber] of eventDetails) {
180
+ describe(blockNumber, () => {
181
+ for (const { pool: constructor, key } of pools) {
182
+ it(`State of ${key.string_id}`, async function () {
183
+ const pool = new constructor(
184
+ dexKey,
185
+ network,
186
+ dexHelper,
187
+ logger,
188
+ coreIface,
189
+ dataFetcher,
190
+ key,
191
+ core,
192
+ );
193
+
194
+ await testEventSubscriber(
195
+ pool,
196
+ pool.addressesSubscribed,
197
+ (blockNumber: number) => fetchPoolState(pool, blockNumber),
198
+ blockNumber,
199
+ `${dexKey}_${pool.key.string_id}`,
200
+ dexHelper.provider,
201
+ stateCompare,
202
+ );
203
+ });
204
+ }
205
+ });
206
+ }
207
+ });
208
+ });
209
+ });