@paraswap/dex-lib 4.0.17 → 4.0.19

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 (312) hide show
  1. package/.vscode/launch.json +53 -0
  2. package/.vscode/settings.json +2 -0
  3. package/.vscode/tasks.json +15 -0
  4. package/build/abi/aavev3statav2/Factory.json +131 -0
  5. package/build/abi/aavev3statav2/Pool.json +1459 -0
  6. package/build/abi/aavev3statav2/Token.json +997 -0
  7. package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +52 -0
  8. package/build/abi/usual-m-smart-m/usualM.abi.json +483 -0
  9. package/build/abi/{USDM.json → usual-pp/abi.json} +269 -326
  10. package/build/abi/{angle-transmuter/ChainlinkAccessControlledOffchainAggregator.json → wombat/pool.json} +637 -594
  11. package/build/dex/aave-gsm/config.js +2 -2
  12. package/build/dex/aave-gsm/config.js.map +1 -1
  13. package/build/dex/aave-v1/aave-v1.js +1 -0
  14. package/build/dex/aave-v1/aave-v1.js.map +1 -1
  15. package/build/dex/aave-v2/tokenlist.json +904 -0
  16. package/build/dex/aave-v2/tokens-avalanche.json +44 -0
  17. package/build/dex/aave-v2/tokens-mainnet.json +188 -0
  18. package/build/dex/aave-v2/tokens-polygon.json +44 -0
  19. package/build/dex/aave-v2/tokens.js +6 -4
  20. package/build/dex/aave-v2/tokens.js.map +1 -1
  21. package/build/dex/aave-v3/config.js +6 -6
  22. package/build/dex/aave-v3/config.js.map +1 -1
  23. package/build/dex/aave-v3-stata-v2/aave-v3-stata-v2.d.ts +49 -0
  24. package/build/dex/aave-v3-stata-v2/aave-v3-stata-v2.js +377 -0
  25. package/build/dex/aave-v3-stata-v2/aave-v3-stata-v2.js.map +1 -0
  26. package/build/dex/aave-v3-stata-v2/config.d.ts +3 -0
  27. package/build/dex/aave-v3-stata-v2/config.js +21 -0
  28. package/build/dex/aave-v3-stata-v2/config.js.map +1 -0
  29. package/build/dex/aave-v3-stata-v2/tokens.d.ts +10 -0
  30. package/build/dex/aave-v3-stata-v2/tokens.js +43 -0
  31. package/build/dex/aave-v3-stata-v2/tokens.js.map +1 -0
  32. package/build/dex/aave-v3-stata-v2/types.d.ts +35 -0
  33. package/build/dex/aave-v3-stata-v2/types.js +25 -0
  34. package/build/dex/aave-v3-stata-v2/types.js.map +1 -0
  35. package/build/dex/aave-v3-stata-v2/utils.d.ts +4 -0
  36. package/build/dex/aave-v3-stata-v2/utils.js +67 -0
  37. package/build/dex/aave-v3-stata-v2/utils.js.map +1 -0
  38. package/build/dex/bProtocol.d.ts +18 -0
  39. package/build/dex/bProtocol.js +39 -0
  40. package/build/dex/bProtocol.js.map +1 -0
  41. package/build/dex/balancer-v3/abi/balancerBatchRouter.d.ts +729 -0
  42. package/build/dex/balancer-v3/abi/balancerBatchRouter.js +732 -0
  43. package/build/dex/balancer-v3/abi/balancerBatchRouter.js.map +1 -0
  44. package/build/dex/balancer-v3/abi/balancerRouter.d.ts +1406 -0
  45. package/build/dex/balancer-v3/abi/balancerRouter.js +1175 -0
  46. package/build/dex/balancer-v3/abi/balancerRouter.js.map +1 -0
  47. package/build/dex/balancer-v3/abi/vaultExtension.V3.d.ts +2081 -0
  48. package/build/dex/balancer-v3/abi/vaultExtension.V3.js +1851 -0
  49. package/build/dex/balancer-v3/abi/vaultExtension.V3.js.map +1 -0
  50. package/build/dex/balancer-v3/balancer-v3-sepolia-pools.d.ts +34 -0
  51. package/build/dex/balancer-v3/balancer-v3-sepolia-pools.js +406 -0
  52. package/build/dex/balancer-v3/balancer-v3-sepolia-pools.js.map +1 -0
  53. package/build/dex/bancor.d.ts +26 -0
  54. package/build/dex/bancor.js +58 -0
  55. package/build/dex/bancor.js.map +1 -0
  56. package/build/dex/compound.d.ts +18 -0
  57. package/build/dex/compound.js +46 -0
  58. package/build/dex/compound.js.map +1 -0
  59. package/build/dex/curve-v2.d.ts +58 -0
  60. package/build/dex/curve-v2.js +180 -0
  61. package/build/dex/curve-v2.js.map +1 -0
  62. package/build/dex/dodo-v1.d.ts +33 -0
  63. package/build/dex/dodo-v1.js +63 -0
  64. package/build/dex/dodo-v1.js.map +1 -0
  65. package/build/dex/inception/inception-event-pool.d.ts +4 -4
  66. package/build/dex/inception/inception-event-pool.js +7 -9
  67. package/build/dex/inception/inception-event-pool.js.map +1 -1
  68. package/build/dex/inception/inception.d.ts +6 -6
  69. package/build/dex/inception/inception.js +16 -40
  70. package/build/dex/inception/inception.js.map +1 -1
  71. package/build/dex/inception/utils.d.ts +1 -0
  72. package/build/dex/inception/utils.js +22 -1
  73. package/build/dex/inception/utils.js.map +1 -1
  74. package/build/dex/index.js +4 -0
  75. package/build/dex/index.js.map +1 -1
  76. package/build/dex/lido.d.ts +19 -0
  77. package/build/dex/lido.js +42 -0
  78. package/build/dex/lido.js.map +1 -0
  79. package/build/dex/maker-psm/scripts/gem.abi.json +136 -0
  80. package/build/dex/maker-psm/scripts/validate-state.d.ts +0 -0
  81. package/build/dex/maker-psm/scripts/validate-state.js +185 -0
  82. package/build/dex/maker-psm/scripts/validate-state.js.map +1 -0
  83. package/build/dex/maker-psm/scripts/vat.abi.json +243 -0
  84. package/build/dex/onebit.d.ts +25 -0
  85. package/build/dex/onebit.js +42 -0
  86. package/build/dex/onebit.js.map +1 -0
  87. package/build/dex/platypus/platypus.js +17 -3
  88. package/build/dex/platypus/platypus.js.map +1 -1
  89. package/build/dex/smoothy.d.ts +26 -0
  90. package/build/dex/smoothy.js +48 -0
  91. package/build/dex/smoothy.js.map +1 -0
  92. package/build/dex/solidly-v3/scripts/check-event-pool-event.d.ts +1 -0
  93. package/build/dex/solidly-v3/scripts/check-event-pool-event.js +53 -0
  94. package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +1 -0
  95. package/build/dex/stable-pool.d.ts +28 -0
  96. package/build/dex/stable-pool.js +55 -0
  97. package/build/dex/stable-pool.js.map +1 -0
  98. package/build/dex/stkgho/config.js +2 -2
  99. package/build/dex/stkgho/config.js.map +1 -1
  100. package/build/dex/swaap-v1/swaap-v1.js +4 -0
  101. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  102. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.d.ts +7 -0
  103. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js +20 -0
  104. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js.map +1 -0
  105. package/build/dex/trader-joe-v2.1.d.ts +43 -0
  106. package/build/dex/trader-joe-v2.1.js +79 -0
  107. package/build/dex/trader-joe-v2.1.js.map +1 -0
  108. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +17 -0
  109. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +64 -0
  110. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +1 -0
  111. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +17 -0
  112. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +79 -0
  113. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +1 -0
  114. package/build/dex/uniswap-v3/uniswap-v3-pricing.d.ts +4 -0
  115. package/build/dex/uniswap-v3/uniswap-v3-pricing.js +43 -0
  116. package/build/dex/uniswap-v3/uniswap-v3-pricing.js.map +1 -0
  117. package/build/dex/uniswap-v3/uniswap-v3-worker.d.ts +1 -0
  118. package/build/dex/uniswap-v3/uniswap-v3-worker.js +10 -0
  119. package/build/dex/uniswap-v3/uniswap-v3-worker.js.map +1 -0
  120. package/build/dex/usual/usual-m-smart-m.d.ts +17 -0
  121. package/build/dex/usual/usual-m-smart-m.js +50 -0
  122. package/build/dex/usual/usual-m-smart-m.js.map +1 -0
  123. package/build/dex/usual/usual.js +1 -1
  124. package/build/dex/usual/usual.js.map +1 -1
  125. package/build/dex/usual-m-smart-m/config.d.ts +3 -0
  126. package/build/dex/usual-m-smart-m/config.js +13 -0
  127. package/build/dex/usual-m-smart-m/config.js.map +1 -0
  128. package/build/dex/usual-m-smart-m/types.d.ts +7 -0
  129. package/build/dex/usual-m-smart-m/types.js +3 -0
  130. package/build/dex/usual-m-smart-m/types.js.map +1 -0
  131. package/build/dex/usual-m-smart-m/usual-m-smart-m.d.ts +35 -0
  132. package/build/dex/usual-m-smart-m/usual-m-smart-m.js +161 -0
  133. package/build/dex/usual-m-smart-m/usual-m-smart-m.js.map +1 -0
  134. package/build/dex/usual-m-usd0/config.d.ts +3 -0
  135. package/build/dex/usual-m-usd0/config.js +14 -0
  136. package/build/dex/usual-m-usd0/config.js.map +1 -0
  137. package/build/dex/usual-m-usd0/types.d.ts +8 -0
  138. package/build/dex/usual-m-usd0/types.js +3 -0
  139. package/build/dex/usual-m-usd0/types.js.map +1 -0
  140. package/build/dex/usual-m-usd0/usual-m-usd0.d.ts +35 -0
  141. package/build/dex/usual-m-usd0/usual-m-usd0.js +159 -0
  142. package/build/dex/usual-m-usd0/usual-m-usd0.js.map +1 -0
  143. package/build/dex/usual-pp/config.d.ts +3 -0
  144. package/build/dex/usual-pp/config.js +19 -0
  145. package/build/dex/usual-pp/config.js.map +1 -0
  146. package/build/dex/usual-pp/pool.d.ts +17 -0
  147. package/build/dex/usual-pp/pool.js +57 -0
  148. package/build/dex/usual-pp/pool.js.map +1 -0
  149. package/build/dex/usual-pp/types.d.ts +15 -0
  150. package/build/dex/usual-pp/types.js +3 -0
  151. package/build/dex/usual-pp/types.js.map +1 -0
  152. package/build/dex/usual-pp/usual-pp.d.ts +35 -0
  153. package/build/dex/usual-pp/usual-pp.js +167 -0
  154. package/build/dex/usual-pp/usual-pp.js.map +1 -0
  155. package/build/dex/usual-pp/utils.d.ts +4 -0
  156. package/build/dex/usual-pp/utils.js +18 -0
  157. package/build/dex/usual-pp/utils.js.map +1 -0
  158. package/package.json +2 -2
  159. package/src/abi/aavev3statav2/Factory.json +131 -0
  160. package/src/abi/aavev3statav2/Pool.json +1459 -0
  161. package/src/abi/aavev3statav2/Token.json +997 -0
  162. package/src/abi/usual-pp/abi.json +750 -0
  163. package/src/dex/aave-gsm/config.ts +3 -3
  164. package/src/dex/aave-v2/tokenlist.json +904 -0
  165. package/src/dex/aave-v2/tokens.ts +3 -4
  166. package/src/dex/aave-v3/config.ts +6 -7
  167. package/src/dex/aave-v3-stata-v2/aave-v3-stata-v2-e2e.test.ts +397 -0
  168. package/src/dex/aave-v3-stata-v2/aave-v3-stata-v2-integration.test.ts +600 -0
  169. package/src/dex/aave-v3-stata-v2/aave-v3-stata-v2.ts +477 -0
  170. package/src/dex/aave-v3-stata-v2/config.ts +24 -0
  171. package/src/dex/aave-v3-stata-v2/tokens.ts +48 -0
  172. package/src/dex/aave-v3-stata-v2/types.ts +41 -0
  173. package/src/dex/aave-v3-stata-v2/utils.ts +88 -0
  174. package/src/dex/fluid-dex/fluid-dex-e2e.test.ts +0 -10
  175. package/src/dex/index.ts +4 -0
  176. package/src/dex/stkgho/config.ts +3 -3
  177. package/src/dex/usual/usual.ts +1 -1
  178. package/src/dex/usual-pp/config.ts +18 -0
  179. package/src/dex/usual-pp/pool.ts +77 -0
  180. package/src/dex/usual-pp/types.ts +12 -0
  181. package/src/dex/usual-pp/usual-events.test.ts +70 -0
  182. package/src/dex/usual-pp/usual-integration.test.ts +143 -0
  183. package/src/dex/usual-pp/usual-pp.e2e.test.ts +76 -0
  184. package/src/dex/usual-pp/usual-pp.ts +207 -0
  185. package/src/dex/usual-pp/utils.ts +27 -0
  186. package/tests/constants-e2e.ts +11 -1
  187. package/build/abi/Aave_GSM.json +0 -751
  188. package/build/abi/Balancer.json +0 -257
  189. package/build/abi/BalancerV2.json +0 -1179
  190. package/build/abi/RamsesV2Pool.abi.json +0 -1554
  191. package/build/abi/RamsesV2Quoter.abi.json +0 -274
  192. package/build/abi/UniswapV2Router.json +0 -397
  193. package/build/abi/angle-transmuter/ChainlinkEACAggregatorProxy.json +0 -509
  194. package/build/abi/curve-v1/CurveBUSDv2.abi.json +0 -1356
  195. package/build/abi/curve-v1/CurveTokenV1.json +0 -305
  196. package/build/abi/curve-v1/CurveTokenV2.json +0 -318
  197. package/build/abi/curve-v1/CurveV1StableNg.json +0 -1452
  198. package/build/abi/curve-v1/CurveV2Swap.json +0 -700
  199. package/build/abi/curve-v1/FactoryCryptoRegistry.json +0 -316
  200. package/build/abi/curve-v1/FactoryRegistry.json +0 -508
  201. package/build/abi/curve-v1/StableSwapAave.json +0 -1152
  202. package/build/abi/curve-v1/StableSwapBUSD.json +0 -814
  203. package/build/abi/curve-v1/StableSwapCompound.json +0 -814
  204. package/build/abi/curve-v1/StableSwapIDLE.json +0 -1253
  205. package/build/abi/curve-v1/StableSwapPax.json +0 -865
  206. package/build/abi/curve-v1/StableSwapSnow.json +0 -900
  207. package/build/abi/curve-v1/StableSwapUSDN.json +0 -1004
  208. package/build/abi/curve-v1/StableSwapUSDT.json +0 -814
  209. package/build/abi/curve-v1/StableSwapY.json +0 -814
  210. package/build/abi/inception/inception-ineth.json +0 -609
  211. package/build/abi/kyberdmm/kyber-storage.abi.json +0 -824
  212. package/build/abi/kyberdmm.abi.json +0 -1148
  213. package/build/abi/maverick-v2/MaverickV2Quoter.json +0 -278
  214. package/build/abi/nerve/nerve-metapool.json +0 -790
  215. package/build/abi/uniswap-v3/UniswapV3Quoter.abi.json +0 -193
  216. package/build/abi/velodrome-slipstream/VelodromeSlipstreamQuoterV2.abi.json +0 -267
  217. package/build/dex/balancer-v1/balancer-pools.json +0 -33333
  218. package/build/dex/bebop/websocket-fetcher.d.ts +0 -35
  219. package/build/dex/bebop/websocket-fetcher.js +0 -87
  220. package/build/dex/bebop/websocket-fetcher.js.map +0 -1
  221. package/build/dex/idle-dao/idle-dao-pool.d.ts +0 -56
  222. package/build/dex/idle-dao/idle-dao-pool.js +0 -176
  223. package/build/dex/idle-dao/idle-dao-pool.js.map +0 -1
  224. package/build/dex/idle-dao/idle-dao-pooling-pool.d.ts +0 -16
  225. package/build/dex/idle-dao/idle-dao-pooling-pool.js +0 -57
  226. package/build/dex/idle-dao/idle-dao-pooling-pool.js.map +0 -1
  227. package/build/dex/idle-dao/scripts.d.ts +0 -9
  228. package/build/dex/idle-dao/scripts.js +0 -552
  229. package/build/dex/idle-dao/scripts.js.map +0 -1
  230. package/build/dex/inception/inception-native.d.ts +0 -43
  231. package/build/dex/inception/inception-native.js +0 -131
  232. package/build/dex/inception/inception-native.js.map +0 -1
  233. package/build/dex/inception/inception-pool.d.ts +0 -18
  234. package/build/dex/inception/inception-pool.js +0 -32
  235. package/build/dex/inception/inception-pool.js.map +0 -1
  236. package/build/dex/inception/inception-price-feed.d.ts +0 -19
  237. package/build/dex/inception/inception-price-feed.js +0 -51
  238. package/build/dex/inception/inception-price-feed.js.map +0 -1
  239. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-balancerv1-curvev1-eth-usdc-gusd.json +0 -16
  240. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-balancerv1-sushiv3-wbtc-eth-sushi.json +0 -16
  241. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-curvev1-eth-usdc-gusd.json +0 -16
  242. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-curvev1-gusd-usdc-eth.json +0 -16
  243. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-dai-usdc-eth.json +0 -16
  244. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-eth-usdc-dai.json +0 -16
  245. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-usdc-eth-wbtc.json +0 -16
  246. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-usdt-usdc-dai.json +0 -16
  247. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-balancerv1-eth-usdc.json +0 -9
  248. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-balancerv1-usdc-eth.json +0 -9
  249. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-balancerv1-usdc-wbtc.json +0 -9
  250. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-curvev1-eth-steth.json +0 -9
  251. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-curvev1-steth-eth.json +0 -9
  252. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-curvev1-usdc-usdt.json +0 -9
  253. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-univ3-eth-usdc.json +0 -9
  254. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-univ3-usdc-eth.json +0 -9
  255. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-univ3-usdc-usdt.json +0 -9
  256. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-balancerv1-sushiv3-wbtc-eth-sushi.json +0 -12
  257. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-curvev1-eth-usdc-gusd.json +0 -7
  258. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-curvev1-gusd-usdc-eth.json +0 -7
  259. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-dai-usdc-eth.json +0 -7
  260. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-eth-usdc-dai.json +0 -7
  261. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-usdc-eth-wbtc.json +0 -12
  262. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-simpleSwap-univ3-eth-usdc.json +0 -7
  263. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-simpleSwap-univ3-usdc-eth.json +0 -7
  264. package/build/executor/fixtures/executor01/routes/price-route-multiswap-balancerv1-curvev1-eth-usdc-gusd.json +0 -78
  265. package/build/executor/fixtures/executor01/routes/price-route-multiswap-balancerv1-sushiv3-wbtc-eth-sushi.json +0 -81
  266. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-curvev1-eth-usdc-gusd.json +0 -78
  267. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-curvev1-gusd-usdc-eth.json +0 -78
  268. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-dai-usdc-eth.json +0 -81
  269. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-eth-usdc-dai.json +0 -81
  270. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-usdc-eth-wbtc.json +0 -81
  271. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-usdt-usdc-dai.json +0 -81
  272. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-balancerv1-eth-usdc.json +0 -64
  273. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-balancerv1-usdc-eth.json +0 -85
  274. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-balancerv1-usdc-wbtc.json +0 -64
  275. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-curvev1-eth-steth.json +0 -52
  276. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-curvev1-steth-eth.json +0 -52
  277. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-curvev1-usdc-usdt.json +0 -52
  278. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-univ3-eth-usdc.json +0 -55
  279. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-univ3-usdc-eth.json +0 -55
  280. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-univ3-usdc-usdt.json +0 -55
  281. package/build/executor/fixtures/executor02/exchange-params/price-route-multiSwap-balancerv1-sushiv3-univ3-bal-eth-sushi.json +0 -23
  282. package/build/executor/fixtures/executor02/exchange-params/price-route-multiSwap-maverickv1-sushiv3-univ3-eth-usdc-mav.json +0 -37
  283. package/build/executor/fixtures/executor02/exchange-params/price-route-multiSwap-univ3-sushiv3-sushi-eth-wbtc.json +0 -23
  284. package/build/executor/fixtures/executor02/exchange-params/price-route-multiSwap-univ3-sushiv3-wbtc-eth-sushi.json +0 -23
  285. package/build/executor/fixtures/executor02/exchange-params/price-route-multiswap-curvev1-univ3-dai-usdc-eth.json +0 -51
  286. package/build/executor/fixtures/executor02/exchange-params/price-route-multiswap-univ3-usdt-dai-eth.json +0 -58
  287. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-sushiv3-balancerv1-eth-usdc.json +0 -23
  288. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-sushiv3-balancerv1-usdc-eth.json +0 -23
  289. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-sushiv3-univ3-eth-sushi.json +0 -9
  290. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-sushiv3-univ3-sushi-eth.json +0 -16
  291. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-univ3-curvev1-usdt-dai.json +0 -23
  292. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiSwap-balancerv1-sushiv3-univ3-bal-eth-sushi.json +0 -12
  293. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiSwap-maverickv1-sushiv3-univ3-eth-usdc-mav.json +0 -7
  294. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiSwap-univ3-sushiv3-sushi-eth-wbtc.json +0 -12
  295. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiSwap-univ3-sushiv3-wbtc-eth-sushi.json +0 -12
  296. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiswap-curvev1-univ3-dai-usdc-eth.json +0 -7
  297. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiswap-univ3-usdt-dai-eth.json +0 -7
  298. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-simpleSwap-sushiv3-balancerv1-eth-usdc.json +0 -7
  299. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-simpleSwap-sushiv3-balancerv1-usdc-eth.json +0 -7
  300. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-simpleSwap-sushiv3-univ3-eth-sushi.json +0 -7
  301. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-simpleSwap-sushiv3-univ3-sushi-eth.json +0 -7
  302. package/build/executor/fixtures/executor02/routes/price-route-multiSwap-balancerv1-sushiv3-univ3-bal-eth-sushi.json +0 -130
  303. package/build/executor/fixtures/executor02/routes/price-route-multiSwap-maverickv1-sushiv3-univ3-eth-usdc-mav.json +0 -136
  304. package/build/executor/fixtures/executor02/routes/price-route-multiSwap-univ3-sushiv3-sushi-eth-wbtc.json +0 -100
  305. package/build/executor/fixtures/executor02/routes/price-route-multiSwap-univ3-sushiv3-wbtc-eth-sushi.json +0 -100
  306. package/build/executor/fixtures/executor02/routes/price-route-multiswap-curvev1-univ3-dai-usdc-eth.json +0 -166
  307. package/build/executor/fixtures/executor02/routes/price-route-multiswap-univ3-usdt-dai-eth.json +0 -190
  308. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-sushiv3-balancerv1-eth-usdc.json +0 -114
  309. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-sushiv3-balancerv1-usdc-eth.json +0 -114
  310. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-sushiv3-univ3-eth-sushi.json +0 -55
  311. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-sushiv3-univ3-sushi-eth.json +0 -73
  312. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-univ3-curvev1-usdt-dai.json +0 -82
package/src/dex/index.ts CHANGED
@@ -85,6 +85,7 @@ import { EtherFi } from './etherfi';
85
85
  import { Spark } from './spark/spark';
86
86
  import { VelodromeSlipstream } from './uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream';
87
87
  import { AaveV3Stata } from './aave-v3-stata/aave-v3-stata';
88
+ import { AaveV3StataV2 } from './aave-v3-stata-v2/aave-v3-stata-v2';
88
89
  import { OSwap } from './oswap/oswap';
89
90
  import { FluidDex } from './fluid-dex/fluid-dex';
90
91
  import { ConcentratorArusd } from './concentrator-arusd/concentrator-arusd';
@@ -100,6 +101,7 @@ import { Stader } from './stader/stader';
100
101
  import { UsualBond } from './usual/usual-bond';
101
102
  import { UsualMWrappedM } from './usual/usual-m-wrapped-m';
102
103
  import { UsualMUsd0 } from './usual/usual-m-usd0';
104
+ import { UsualPP } from './usual-pp/usual-pp';
103
105
 
104
106
  const LegacyDexes = [
105
107
  CurveV2,
@@ -182,6 +184,7 @@ const Dexes = [
182
184
  PharaohV1,
183
185
  Spark,
184
186
  AaveV3Stata,
187
+ AaveV3StataV2,
185
188
  OSwap,
186
189
  ConcentratorArusd,
187
190
  FxProtocolRusd,
@@ -194,6 +197,7 @@ const Dexes = [
194
197
  FluidDex,
195
198
  UsualMWrappedM,
196
199
  UsualMUsd0,
200
+ UsualPP,
197
201
  ];
198
202
 
199
203
  export type LegacyDexConstructor = new (dexHelper: IDexHelper) => IDexTxBuilder<
@@ -2,13 +2,13 @@ import { DexParams } from './types';
2
2
  import { DexConfigMap } from '../../types';
3
3
  import { Network } from '../../constants';
4
4
 
5
- import { MiscEthereum } from '@bgd-labs/aave-address-book';
5
+ import { GhoEthereum, AaveSafetyModule } from '@bgd-labs/aave-address-book';
6
6
 
7
7
  export const StkGHOConfig: DexConfigMap<DexParams> = {
8
8
  StkGHO: {
9
9
  [Network.MAINNET]: {
10
- stkGHO: '0x1a88Df1cFe15Af22B3c4c783D4e6F7F9e0C1885d',
11
- GHO: MiscEthereum.GHO_TOKEN,
10
+ stkGHO: AaveSafetyModule.STK_GHO,
11
+ GHO: GhoEthereum.GHO_TOKEN,
12
12
  },
13
13
  },
14
14
  };
@@ -72,7 +72,7 @@ export class Usual extends SimpleExchange implements IDex<UsualBondData> {
72
72
  }
73
73
 
74
74
  if (this.isValidTokens(srcTokenAddress, destTokenAddress)) {
75
- return [`${this.dexKey}_${this.config.toToken}`];
75
+ return [`${this.dexKey}_${this.config.toToken.address}`];
76
76
  }
77
77
 
78
78
  return [];
@@ -0,0 +1,18 @@
1
+ import { Network } from '../../constants';
2
+ import { DexConfigMap } from '../../types';
3
+ import { DexParams } from './types';
4
+
5
+ export const Config: DexConfigMap<DexParams> = {
6
+ UsualPP: {
7
+ [Network.MAINNET]: {
8
+ USD0: {
9
+ address: '0x73a15fed60bf67631dc6cd7bc5b6e8da8190acf5',
10
+ decimals: 18,
11
+ },
12
+ USD0PP: {
13
+ address: '0x35d8949372d46b7a3d5a56006ae77b215fc69bc0',
14
+ decimals: 18,
15
+ },
16
+ },
17
+ },
18
+ };
@@ -0,0 +1,77 @@
1
+ import _ from 'lodash';
2
+ import { Interface } from '@ethersproject/abi';
3
+ import { IDexHelper } from '../../dex-helper';
4
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
5
+ import { Address, Log, Logger } from '../../types';
6
+ import { AsyncOrSync, DeepReadonly } from 'ts-essentials';
7
+ import { PoolState } from './types';
8
+ import { getOnChainState } from './utils';
9
+
10
+ export class UsualPool extends StatefulEventSubscriber<PoolState> {
11
+ decoder = (log: Log) => this.poolInterface.parseLog(log);
12
+
13
+ constructor(
14
+ parentName: string,
15
+ protected dexHelper: IDexHelper,
16
+ private poolAddress: Address,
17
+ private poolInterface: Interface,
18
+ logger: Logger,
19
+ ) {
20
+ super(parentName, 'UsualPool', dexHelper, logger);
21
+ this.addressesSubscribed = [poolAddress];
22
+ }
23
+
24
+ protected processLog(
25
+ state: DeepReadonly<PoolState>,
26
+ log: Readonly<Log>,
27
+ ): AsyncOrSync<DeepReadonly<PoolState> | null> {
28
+ const event = this.decoder(log);
29
+ const _state: PoolState = _.cloneDeep(state);
30
+ if (event.name === 'FloorPriceUpdated') {
31
+ _state.price = BigInt(event.args.newFloorPrice);
32
+ return _state;
33
+ }
34
+ return null;
35
+ }
36
+
37
+ async generateState(
38
+ blockNumber: number | 'latest' = 'latest',
39
+ ): Promise<DeepReadonly<PoolState>> {
40
+ const state = await getOnChainState(
41
+ this.dexHelper.multiContract,
42
+ this.poolAddress,
43
+ this.poolInterface,
44
+ blockNumber,
45
+ );
46
+ return state;
47
+ }
48
+
49
+ async getPrice(blockNumber: number): Promise<bigint> {
50
+ const state = await this.getOrGenerateState(blockNumber);
51
+ if (!state) throw new Error('Cannot compute state');
52
+ return state.price;
53
+ }
54
+
55
+ async getOrGenerateState(
56
+ blockNumber: number,
57
+ ): Promise<DeepReadonly<PoolState> | null> {
58
+ const state = this.getState(blockNumber);
59
+ if (state) {
60
+ return state;
61
+ }
62
+
63
+ this.logger.debug(
64
+ `No state found for ${this.addressesSubscribed[0]}, generating new one`,
65
+ );
66
+ const newState = await this.generateState(blockNumber);
67
+
68
+ if (!newState) {
69
+ this.logger.debug(
70
+ `Could not regenerate state for ${this.addressesSubscribed[0]}`,
71
+ );
72
+ return null;
73
+ }
74
+ this.setState(newState, blockNumber);
75
+ return newState;
76
+ }
77
+ }
@@ -0,0 +1,12 @@
1
+ import { Address } from '../../types';
2
+
3
+ export type PoolState = {
4
+ price: bigint;
5
+ };
6
+
7
+ export type UsualPPData = {};
8
+
9
+ export type DexParams = {
10
+ USD0: { address: Address; decimals: number };
11
+ USD0PP: { address: Address; decimals: number };
12
+ };
@@ -0,0 +1,70 @@
1
+ import dotenv from 'dotenv';
2
+ dotenv.config();
3
+
4
+ import { Network } from '../../constants';
5
+ import { DummyDexHelper } from '../../dex-helper/index';
6
+ import { testEventSubscriber } from '../../../tests/utils-events';
7
+ import { PoolState } from './types';
8
+ import { Config } from './config';
9
+ import { UsualPool } from './pool';
10
+ import { PoolConfig } from '../curve-v1/types';
11
+ import UsualPoolAbi from '../../abi/usual-pp/abi.json';
12
+ import { Interface } from '@ethersproject/abi';
13
+
14
+ jest.setTimeout(50 * 1000);
15
+ const dexKey = 'UsualPP';
16
+ const network = Network.MAINNET;
17
+ const config = Config[dexKey][network];
18
+ const dexHelper = new DummyDexHelper(network);
19
+ const logger = dexHelper.getLogger(dexKey);
20
+
21
+ async function fetchPoolState(
22
+ usualPool: UsualPool,
23
+ blockNumber: number,
24
+ ): Promise<PoolState> {
25
+ return usualPool.generateState(blockNumber);
26
+ }
27
+
28
+ function compareState(state: PoolState, expectedState: PoolState) {
29
+ expect(state).toEqual(expectedState);
30
+ }
31
+
32
+ describe('UsualPP Event', function () {
33
+ const blockNumbers: { [eventName: string]: number[] } = {
34
+ FloorPriceUpdated: [21589702],
35
+ };
36
+
37
+ describe('UsualPool', function () {
38
+ let usualPool: UsualPool;
39
+ let blockNumber: number;
40
+
41
+ const usualPoolIface = new Interface(UsualPoolAbi);
42
+
43
+ beforeAll(async function () {
44
+ blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
45
+ });
46
+
47
+ Object.keys(blockNumbers).forEach((event: string) => {
48
+ blockNumbers[event].forEach((blockNumber: number) => {
49
+ it(`Should return the correct state after the ${blockNumber}:${event}`, async function () {
50
+ usualPool = new UsualPool(
51
+ dexKey,
52
+ dexHelper,
53
+ config.USD0PP.address,
54
+ usualPoolIface,
55
+ logger,
56
+ );
57
+ await testEventSubscriber(
58
+ usualPool,
59
+ usualPool.addressesSubscribed,
60
+ (_blockNumber: number) => fetchPoolState(usualPool, _blockNumber),
61
+ blockNumber,
62
+ `${dexKey}_${config.USD0PP.address}`,
63
+ dexHelper.provider,
64
+ compareState,
65
+ );
66
+ });
67
+ });
68
+ });
69
+ });
70
+ });
@@ -0,0 +1,143 @@
1
+ /* eslint-disable no-console */
2
+ import dotenv from 'dotenv';
3
+ dotenv.config();
4
+
5
+ import { Interface } from '@ethersproject/abi';
6
+ import { DummyDexHelper } from '../../dex-helper/index';
7
+ import { Network, SwapSide } from '../../constants';
8
+ import { BI_POWS } from '../../bigint-constants';
9
+ import {
10
+ checkPoolPrices,
11
+ checkConstantPoolPrices,
12
+ checkPoolsLiquidity,
13
+ } from '../../../tests/utils';
14
+ import { Tokens } from '../../../tests/constants-e2e';
15
+ import { UsualPP } from './usual-pp';
16
+
17
+ async function testPricingOnNetwork(
18
+ usual: UsualPP,
19
+ network: Network,
20
+ dexKey: string,
21
+ blockNumber: number,
22
+ srcTokenSymbol: string,
23
+ destTokenSymbol: string,
24
+ side: SwapSide,
25
+ amounts: bigint[],
26
+ funcNameToCheck: string,
27
+ ) {
28
+ const networkTokens = Tokens[network];
29
+
30
+ console.log(amounts);
31
+
32
+ const pools = await usual.getPoolIdentifiers(
33
+ networkTokens[srcTokenSymbol],
34
+ networkTokens[destTokenSymbol],
35
+ side,
36
+ blockNumber,
37
+ );
38
+ console.log(
39
+ `${srcTokenSymbol} <> ${destTokenSymbol} Pool Identifiers: `,
40
+ pools,
41
+ );
42
+
43
+ expect(pools.length).toBeGreaterThan(0);
44
+
45
+ const poolPrices = await usual.getPricesVolume(
46
+ networkTokens[srcTokenSymbol],
47
+ networkTokens[destTokenSymbol],
48
+ amounts,
49
+ side,
50
+ blockNumber,
51
+ pools,
52
+ );
53
+ console.log(
54
+ `${srcTokenSymbol} <> ${destTokenSymbol} Pool Prices: `,
55
+ poolPrices,
56
+ );
57
+
58
+ expect(poolPrices).not.toBeNull();
59
+ // Check if onchain pricing equals to calculated ones
60
+ }
61
+
62
+ describe('UsualPP', function () {
63
+ const dexKey = 'UsualPP';
64
+ let blockNumber: number;
65
+ let usualPP: UsualPP;
66
+
67
+ describe('Mainnet', () => {
68
+ const network = Network.MAINNET;
69
+ const dexHelper = new DummyDexHelper(network);
70
+
71
+ // Don't forget to update relevant tokens in constant-e2e.ts
72
+
73
+ const amountsForSell = [
74
+ 0n,
75
+ 1n * BI_POWS[18],
76
+ 2n * BI_POWS[18],
77
+ 3n * BI_POWS[18],
78
+ 4n * BI_POWS[18],
79
+ 5n * BI_POWS[18],
80
+ 6n * BI_POWS[18],
81
+ 7n * BI_POWS[18],
82
+ 8n * BI_POWS[18],
83
+ 9n * BI_POWS[18],
84
+ 10n * BI_POWS[18],
85
+ ];
86
+
87
+ beforeAll(async () => {
88
+ blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
89
+ usualPP = new UsualPP(network, dexKey, dexHelper);
90
+ if (usualPP.initializePricing) {
91
+ await usualPP.initializePricing(blockNumber);
92
+ }
93
+ });
94
+
95
+ it('getPoolIdentifiers and getPricesVolume SELL', async function () {
96
+ await testPricingOnNetwork(
97
+ usualPP,
98
+ network,
99
+ dexKey,
100
+ blockNumber,
101
+ 'USD0++',
102
+ 'USD0',
103
+ SwapSide.SELL,
104
+ amountsForSell,
105
+ '',
106
+ );
107
+ });
108
+
109
+ it('getTopPoolsForToken: USD0', async function () {
110
+ const tokenA = Tokens[network]['USD0'];
111
+ const dexHelper = new DummyDexHelper(network);
112
+ const usualPP = new UsualPP(network, dexKey, dexHelper);
113
+
114
+ const poolLiquidity = await usualPP.getTopPoolsForToken(
115
+ tokenA.address,
116
+ 10,
117
+ );
118
+ console.log(
119
+ `${tokenA.symbol} Top Pools:`,
120
+ JSON.stringify(poolLiquidity, null, 2),
121
+ );
122
+
123
+ checkPoolsLiquidity(poolLiquidity, tokenA.address, dexKey);
124
+ });
125
+
126
+ it('getTopPoolsForToken: USD0++', async function () {
127
+ const tokenA = Tokens[network]['USD0++'];
128
+ const dexHelper = new DummyDexHelper(network);
129
+ const usualPP = new UsualPP(network, dexKey, dexHelper);
130
+
131
+ const poolLiquidity = await usualPP.getTopPoolsForToken(
132
+ tokenA.address,
133
+ 10,
134
+ );
135
+ console.log(
136
+ `${tokenA.symbol} Top Pools:`,
137
+ JSON.stringify(poolLiquidity, null, 2),
138
+ );
139
+
140
+ checkPoolsLiquidity(poolLiquidity, tokenA.address, dexKey);
141
+ });
142
+ });
143
+ });
@@ -0,0 +1,76 @@
1
+ /* eslint-disable no-console */
2
+ import dotenv from 'dotenv';
3
+ dotenv.config();
4
+
5
+ import { testE2E } from '../../../tests/utils-e2e';
6
+ import { Tokens, Holders } from '../../../tests/constants-e2e';
7
+ import { Network, ContractMethod, SwapSide } from '../../constants';
8
+ import { StaticJsonRpcProvider } from '@ethersproject/providers';
9
+ import { generateConfig } from '../../config';
10
+
11
+ function testForNetwork(
12
+ network: Network,
13
+ dexKey: string,
14
+ tokenASymbol: string,
15
+ tokenBSymbol: string,
16
+ tokenAAmount: string,
17
+ tokenBAmount: string,
18
+ ) {
19
+ const provider = new StaticJsonRpcProvider(
20
+ generateConfig(network).privateHttpProvider,
21
+ network,
22
+ );
23
+ const tokens = Tokens[network];
24
+ const holders = Holders[network];
25
+
26
+ const sideToContractMethods = new Map([
27
+ [SwapSide.SELL, [ContractMethod.swapExactAmountIn]],
28
+ ]);
29
+
30
+ describe(`${network}`, () => {
31
+ sideToContractMethods.forEach((contractMethods, side) =>
32
+ describe(`${side}`, () => {
33
+ contractMethods.forEach((contractMethod: ContractMethod) => {
34
+ describe(`${contractMethod}`, () => {
35
+ it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
36
+ await testE2E(
37
+ tokens[tokenASymbol],
38
+ tokens[tokenBSymbol],
39
+ holders[tokenASymbol],
40
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
41
+ side,
42
+ dexKey,
43
+ contractMethod,
44
+ network,
45
+ provider,
46
+ );
47
+ });
48
+ });
49
+ });
50
+ }),
51
+ );
52
+ });
53
+ }
54
+
55
+ describe('UsualPP E2E', () => {
56
+ const dexKey = 'UsualPP';
57
+
58
+ describe('Mainnet', () => {
59
+ const network = Network.MAINNET;
60
+
61
+ const tokenASymbol: string = 'USD0++';
62
+ const tokenBSymbol: string = 'USD0';
63
+
64
+ const tokenAAmount: string = '1000000000000000000';
65
+ const tokenBAmount: string = '1000000000000000000';
66
+
67
+ testForNetwork(
68
+ network,
69
+ dexKey,
70
+ tokenASymbol,
71
+ tokenBSymbol,
72
+ tokenAAmount,
73
+ tokenBAmount,
74
+ );
75
+ });
76
+ });
@@ -0,0 +1,207 @@
1
+ import {
2
+ Token,
3
+ Address,
4
+ ExchangePrices,
5
+ PoolPrices,
6
+ AdapterExchangeParam,
7
+ Logger,
8
+ PoolLiquidity,
9
+ DexExchangeParam,
10
+ NumberAsString,
11
+ } from '../../types';
12
+ import { SwapSide, Network } from '../../constants';
13
+ import * as CALLDATA_GAS_COST from '../../calldata-gas-cost';
14
+ import { IDex } from '../idex';
15
+ import { IDexHelper } from '../../dex-helper/idex-helper';
16
+ import { SimpleExchange } from '../simple-exchange';
17
+ import { BI_POWS } from '../../bigint-constants';
18
+ import { DexParams, UsualPPData } from './types';
19
+ import { UsualPool } from './pool';
20
+ import { Interface } from '@ethersproject/abi';
21
+ import UsualPoolAbi from '../../abi/usual-pp/abi.json';
22
+ import { Config } from './config';
23
+ import { getDexKeysWithNetwork } from '../../utils';
24
+
25
+ export class UsualPP extends SimpleExchange implements IDex<UsualPPData> {
26
+ readonly hasConstantPriceLargeAmounts = false;
27
+ readonly needWrapNative = false;
28
+ readonly isFeeOnTransferSupported = false;
29
+
30
+ private usualPool: UsualPool;
31
+ private usualPoolIface: Interface;
32
+ private config: DexParams;
33
+
34
+ logger: Logger;
35
+
36
+ public static dexKeysWithNetwork: { key: string; networks: Network[] }[] =
37
+ getDexKeysWithNetwork(Config);
38
+
39
+ constructor(
40
+ readonly network: Network,
41
+ readonly dexKey: string,
42
+ readonly dexHelper: IDexHelper,
43
+ protected adapters = {},
44
+ ) {
45
+ super(dexHelper, dexKey);
46
+ this.config = Config[dexKey][network];
47
+ this.logger = dexHelper.getLogger(dexKey);
48
+ this.usualPoolIface = new Interface(UsualPoolAbi);
49
+ this.usualPool = new UsualPool(
50
+ this.dexKey,
51
+ dexHelper,
52
+ this.config.USD0PP.address,
53
+ this.usualPoolIface,
54
+ this.logger,
55
+ );
56
+ }
57
+
58
+ async initializePricing(blockNumber: number) {
59
+ await this.usualPool.initialize(blockNumber);
60
+ }
61
+
62
+ isUsd0PP(token: string) {
63
+ return token.toLowerCase() === this.config.USD0PP.address.toLowerCase();
64
+ }
65
+
66
+ isUsd0(token: string) {
67
+ return token.toLowerCase() === this.config.USD0.address.toLowerCase();
68
+ }
69
+
70
+ isValidTokens(srcToken: string, destToken: string) {
71
+ return this.isUsd0PP(srcToken) && this.isUsd0(destToken);
72
+ }
73
+
74
+ getAdapters() {
75
+ return null;
76
+ }
77
+
78
+ async getPoolIdentifiers(
79
+ srcToken: Token,
80
+ destToken: Token,
81
+ side: SwapSide,
82
+ blockNumber: number,
83
+ ): Promise<string[]> {
84
+ if (!srcToken || !destToken) {
85
+ this.logger.error('Source or destination token is undefined');
86
+ return [];
87
+ }
88
+
89
+ const srcTokenAddress = srcToken.address?.toLowerCase();
90
+ const destTokenAddress = destToken.address?.toLowerCase();
91
+
92
+ if (!srcTokenAddress || !destTokenAddress) {
93
+ this.logger.error('Source or destination token address is undefined');
94
+ return [];
95
+ }
96
+
97
+ if (this.isValidTokens(srcTokenAddress, destTokenAddress)) {
98
+ return [`${this.dexKey}_${this.config.USD0.address}`];
99
+ }
100
+
101
+ return [];
102
+ }
103
+
104
+ async getPricesVolume(
105
+ srcToken: Token,
106
+ destToken: Token,
107
+ amounts: bigint[],
108
+ side: SwapSide,
109
+ blockNumber: number,
110
+ limitPools?: string[],
111
+ ): Promise<null | ExchangePrices<UsualPPData>> {
112
+ if (side === SwapSide.BUY) {
113
+ return null;
114
+ }
115
+
116
+ const isValidSwap = this.isValidTokens(srcToken.address, destToken.address);
117
+
118
+ if (!isValidSwap) {
119
+ return null;
120
+ }
121
+
122
+ const price = await this.usualPool.getPrice(blockNumber);
123
+ const unitOut = price;
124
+
125
+ const amountsOut = amounts.map(
126
+ amount => (amount * price) / BI_POWS[this.config.USD0PP.decimals],
127
+ );
128
+
129
+ return [
130
+ {
131
+ unit: unitOut,
132
+ prices: amountsOut,
133
+ data: {},
134
+ poolAddresses: [this.config.USD0.address],
135
+ exchange: this.dexKey,
136
+ gasCost: 70000,
137
+ poolIdentifier: this.dexKey,
138
+ },
139
+ ];
140
+ }
141
+
142
+ getCalldataGasCost(poolPrices: PoolPrices<UsualPPData>): number | number[] {
143
+ return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
144
+ }
145
+
146
+ getAdapterParam(
147
+ srcToken: string,
148
+ destToken: string,
149
+ srcAmount: string,
150
+ destAmount: string,
151
+ data: UsualPPData,
152
+ side: SwapSide,
153
+ ): AdapterExchangeParam {
154
+ const payload = '0x';
155
+
156
+ return {
157
+ targetExchange: this.config.USD0.address,
158
+ payload,
159
+ networkFee: '0',
160
+ };
161
+ }
162
+
163
+ async getTopPoolsForToken(
164
+ tokenAddress: Address,
165
+ limit: number,
166
+ ): Promise<PoolLiquidity[]> {
167
+ const isUsd0PP = this.isUsd0PP(tokenAddress);
168
+ const isUsd0 = this.isUsd0(tokenAddress);
169
+
170
+ if (!(isUsd0PP || isUsd0)) return [];
171
+
172
+ return [
173
+ {
174
+ exchange: this.dexKey,
175
+ address: this.config.USD0PP.address,
176
+ connectorTokens: [isUsd0PP ? this.config.USD0 : this.config.USD0PP],
177
+ liquidityUSD: 1000000000, // Just returning a big number so this DEX will be preferred
178
+ },
179
+ ];
180
+ }
181
+
182
+ async getDexParam(
183
+ srcToken: Address,
184
+ destToken: Address,
185
+ srcAmount: NumberAsString,
186
+ destAmount: NumberAsString,
187
+ recipient: Address,
188
+ data: UsualPPData,
189
+ side: SwapSide,
190
+ ): Promise<DexExchangeParam> {
191
+ if (this.isUsd0PP(srcToken) && this.isUsd0(destToken)) {
192
+ const exchangeData = this.usualPoolIface.encodeFunctionData(
193
+ 'unlockUsd0ppFloorPrice',
194
+ [srcAmount],
195
+ );
196
+
197
+ return {
198
+ needWrapNative: false,
199
+ dexFuncHasRecipient: false,
200
+ exchangeData,
201
+ targetExchange: this.config.USD0PP.address,
202
+ returnAmountPos: undefined,
203
+ };
204
+ }
205
+ throw new Error('LOGIC ERROR');
206
+ }
207
+ }
@@ -0,0 +1,27 @@
1
+ import { Contract } from 'web3-eth-contract';
2
+ import { Interface } from '@ethersproject/abi';
3
+ import { PoolState } from './types';
4
+
5
+ export async function getOnChainState(
6
+ multiContract: Contract,
7
+ poolAddress: string,
8
+ poolInterface: Interface,
9
+ blockNumber: number | 'latest',
10
+ ): Promise<PoolState> {
11
+ const data: { returnData: any[] } = await multiContract.methods
12
+ .aggregate([
13
+ {
14
+ target: poolAddress,
15
+ callData: poolInterface.encodeFunctionData('getFloorPrice', []),
16
+ },
17
+ ])
18
+ .call({}, blockNumber);
19
+
20
+ const price = BigInt(
21
+ poolInterface.decodeFunctionResult('getFloorPrice', data.returnData[0])[0],
22
+ );
23
+
24
+ return {
25
+ price,
26
+ };
27
+ }