@paraswap/dex-lib 3.8.22 → 3.8.23-remove-logs-oswap

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 (375) hide show
  1. package/.vscode/launch.json +16 -0
  2. package/.vscode/settings.json +3 -0
  3. package/build/abi/AaveV1_lending_pool.json +27 -0
  4. package/build/abi/Uncompressor.json +250 -0
  5. package/build/abi/infusion/InfusionFactory.json +147 -0
  6. package/build/abi/infusion/InfusionPair.json +658 -0
  7. package/build/abi/infusion/InfusionRouter.json +442 -0
  8. package/build/abi/integral/factory.json +333 -0
  9. package/build/abi/integral/oracle.json +501 -0
  10. package/build/abi/integral/pool.json +1041 -0
  11. package/build/abi/integral/relayer.json +1536 -0
  12. package/build/abi/oswap/oswap.abi.json +452 -0
  13. package/build/abi/platypus/asset.json +490 -0
  14. package/build/abi/platypus/avax-pool.json +820 -0
  15. package/build/abi/platypus/oracle.json +119 -0
  16. package/build/abi/platypus/pool.json +677 -0
  17. package/build/abi/smardex/all/smardex-router.json +648 -0
  18. package/build/abi/smardex/layer-1/smardex-factory.json +242 -0
  19. package/build/abi/smardex/layer-1/smardex-pool.json +506 -0
  20. package/build/abi/smardex/layer-2/smardex-factory.json +185 -0
  21. package/build/abi/smardex/layer-2/smardex-pool.json +578 -0
  22. package/build/abi/swaap-v1/pool.json +1346 -0
  23. package/build/dex/aave-v1/aave-v1.d.ts +33 -0
  24. package/build/dex/aave-v1/aave-v1.js +158 -0
  25. package/build/dex/aave-v1/aave-v1.js.map +1 -0
  26. package/build/dex/aave-v1/config.d.ts +11 -0
  27. package/build/dex/aave-v1/config.js +20 -0
  28. package/build/dex/aave-v1/config.js.map +1 -0
  29. package/build/dex/aave-v1/tokens-mainnet.json +134 -0
  30. package/build/dex/aave-v1/tokens.d.ts +3 -0
  31. package/build/dex/aave-v1/tokens.js +50 -0
  32. package/build/dex/aave-v1/tokens.js.map +1 -0
  33. package/build/dex/aave-v1/types.d.ts +12 -0
  34. package/build/dex/aave-v1/types.js +3 -0
  35. package/build/dex/aave-v1/types.js.map +1 -0
  36. package/build/dex/bProtocol.d.ts +18 -0
  37. package/build/dex/bProtocol.js +39 -0
  38. package/build/dex/bProtocol.js.map +1 -0
  39. package/build/dex/bancor.d.ts +26 -0
  40. package/build/dex/bancor.js +58 -0
  41. package/build/dex/bancor.js.map +1 -0
  42. package/build/dex/compound.d.ts +18 -0
  43. package/build/dex/compound.js +46 -0
  44. package/build/dex/compound.js.map +1 -0
  45. package/build/dex/curve-v2.d.ts +58 -0
  46. package/build/dex/curve-v2.js +180 -0
  47. package/build/dex/curve-v2.js.map +1 -0
  48. package/build/dex/dodo-v1.d.ts +33 -0
  49. package/build/dex/dodo-v1.js +63 -0
  50. package/build/dex/dodo-v1.js.map +1 -0
  51. package/build/dex/etherfi/etherfi.d.ts +26 -0
  52. package/build/dex/etherfi/etherfi.js +96 -0
  53. package/build/dex/etherfi/etherfi.js.map +1 -0
  54. package/build/dex/generic-rfq/rate-fetcher.js +1 -1
  55. package/build/dex/generic-rfq/rate-fetcher.js.map +1 -1
  56. package/build/dex/index.js +4 -0
  57. package/build/dex/index.js.map +1 -1
  58. package/build/dex/infusion/config.d.ts +3 -0
  59. package/build/dex/infusion/config.js +20 -0
  60. package/build/dex/infusion/config.js.map +1 -0
  61. package/build/dex/infusion/infusion-stable-pool.d.ts +4 -0
  62. package/build/dex/infusion/infusion-stable-pool.js +74 -0
  63. package/build/dex/infusion/infusion-stable-pool.js.map +1 -0
  64. package/build/dex/infusion/infusion.d.ts +51 -0
  65. package/build/dex/infusion/infusion.js +457 -0
  66. package/build/dex/infusion/infusion.js.map +1 -0
  67. package/build/dex/infusion/types.d.ts +45 -0
  68. package/build/dex/infusion/types.js +3 -0
  69. package/build/dex/infusion/types.js.map +1 -0
  70. package/build/dex/infusion/utils/isStablePair.d.ts +2 -0
  71. package/build/dex/infusion/utils/isStablePair.js +18 -0
  72. package/build/dex/infusion/utils/isStablePair.js.map +1 -0
  73. package/build/dex/integral/config.d.ts +4 -0
  74. package/build/dex/integral/config.js +20 -0
  75. package/build/dex/integral/config.js.map +1 -0
  76. package/build/dex/integral/context.d.ts +40 -0
  77. package/build/dex/integral/context.js +158 -0
  78. package/build/dex/integral/context.js.map +1 -0
  79. package/build/dex/integral/helpers.d.ts +17 -0
  80. package/build/dex/integral/helpers.js +157 -0
  81. package/build/dex/integral/helpers.js.map +1 -0
  82. package/build/dex/integral/integral-factory.d.ts +24 -0
  83. package/build/dex/integral/integral-factory.js +95 -0
  84. package/build/dex/integral/integral-factory.js.map +1 -0
  85. package/build/dex/integral/integral-pool.d.ts +50 -0
  86. package/build/dex/integral/integral-pool.js +149 -0
  87. package/build/dex/integral/integral-pool.js.map +1 -0
  88. package/build/dex/integral/integral-pricing.d.ts +18 -0
  89. package/build/dex/integral/integral-pricing.js +114 -0
  90. package/build/dex/integral/integral-pricing.js.map +1 -0
  91. package/build/dex/integral/integral-relayer.d.ts +42 -0
  92. package/build/dex/integral/integral-relayer.js +192 -0
  93. package/build/dex/integral/integral-relayer.js.map +1 -0
  94. package/build/dex/integral/integral-token.d.ts +27 -0
  95. package/build/dex/integral/integral-token.js +59 -0
  96. package/build/dex/integral/integral-token.js.map +1 -0
  97. package/build/dex/integral/integral.d.ts +41 -0
  98. package/build/dex/integral/integral.js +376 -0
  99. package/build/dex/integral/integral.js.map +1 -0
  100. package/build/dex/integral/types.d.ts +85 -0
  101. package/build/dex/integral/types.js +9 -0
  102. package/build/dex/integral/types.js.map +1 -0
  103. package/build/dex/integral/utils-e2e.d.ts +9 -0
  104. package/build/dex/integral/utils-e2e.js +131 -0
  105. package/build/dex/integral/utils-e2e.js.map +1 -0
  106. package/build/dex/integral/utils.d.ts +17 -0
  107. package/build/dex/integral/utils.js +94 -0
  108. package/build/dex/integral/utils.js.map +1 -0
  109. package/build/dex/lido.d.ts +19 -0
  110. package/build/dex/lido.js +42 -0
  111. package/build/dex/lido.js.map +1 -0
  112. package/build/dex/lite-psm/lite-psm.js +2 -5
  113. package/build/dex/lite-psm/lite-psm.js.map +1 -1
  114. package/build/dex/maker-psm/maker-psm.js +2 -6
  115. package/build/dex/maker-psm/maker-psm.js.map +1 -1
  116. package/build/dex/maverick-v2/config.js +4 -0
  117. package/build/dex/maverick-v2/config.js.map +1 -1
  118. package/build/dex/maverick-v2/maverick-math/maverick-pool-math.js +4 -0
  119. package/build/dex/maverick-v2/maverick-math/maverick-pool-math.js.map +1 -1
  120. package/build/dex/maverick-v2/maverick-v2-pool.d.ts +1 -1
  121. package/build/dex/maverick-v2/maverick-v2-pool.js +8 -8
  122. package/build/dex/maverick-v2/maverick-v2-pool.js.map +1 -1
  123. package/build/dex/maverick-v2/maverick-v2.d.ts +5 -4
  124. package/build/dex/maverick-v2/maverick-v2.js +73 -63
  125. package/build/dex/maverick-v2/maverick-v2.js.map +1 -1
  126. package/build/dex/maverick-v2/types.d.ts +4 -0
  127. package/build/dex/onebit.d.ts +25 -0
  128. package/build/dex/onebit.js +42 -0
  129. package/build/dex/onebit.js.map +1 -0
  130. package/build/dex/oswap/config.d.ts +5 -0
  131. package/build/dex/oswap/config.js +31 -0
  132. package/build/dex/oswap/config.js.map +1 -0
  133. package/build/dex/oswap/oswap-pool.d.ts +51 -0
  134. package/build/dex/oswap/oswap-pool.js +150 -0
  135. package/build/dex/oswap/oswap-pool.js.map +1 -0
  136. package/build/dex/oswap/oswap.d.ts +46 -0
  137. package/build/dex/oswap/oswap.js +273 -0
  138. package/build/dex/oswap/oswap.js.map +1 -0
  139. package/build/dex/oswap/types.d.ts +20 -0
  140. package/build/dex/oswap/types.js +3 -0
  141. package/build/dex/oswap/types.js.map +1 -0
  142. package/build/dex/platypus/asset.d.ts +14 -0
  143. package/build/dex/platypus/asset.js +97 -0
  144. package/build/dex/platypus/asset.js.map +1 -0
  145. package/build/dex/platypus/config.d.ts +11 -0
  146. package/build/dex/platypus/config.js +69 -0
  147. package/build/dex/platypus/config.js.map +1 -0
  148. package/build/dex/platypus/platypus.d.ts +62 -0
  149. package/build/dex/platypus/platypus.js +442 -0
  150. package/build/dex/platypus/platypus.js.map +1 -0
  151. package/build/dex/platypus/pool-avax.d.ts +8 -0
  152. package/build/dex/platypus/pool-avax.js +54 -0
  153. package/build/dex/platypus/pool-avax.js.map +1 -0
  154. package/build/dex/platypus/pool-base.d.ts +19 -0
  155. package/build/dex/platypus/pool-base.js +86 -0
  156. package/build/dex/platypus/pool-base.js.map +1 -0
  157. package/build/dex/platypus/pool-pure.d.ts +8 -0
  158. package/build/dex/platypus/pool-pure.js +37 -0
  159. package/build/dex/platypus/pool-pure.js.map +1 -0
  160. package/build/dex/platypus/pool-subscriber.d.ts +14 -0
  161. package/build/dex/platypus/pool-subscriber.js +167 -0
  162. package/build/dex/platypus/pool-subscriber.js.map +1 -0
  163. package/build/dex/platypus/pool.d.ts +8 -0
  164. package/build/dex/platypus/pool.js +58 -0
  165. package/build/dex/platypus/pool.js.map +1 -0
  166. package/build/dex/platypus/types.d.ts +92 -0
  167. package/build/dex/platypus/types.js +10 -0
  168. package/build/dex/platypus/types.js.map +1 -0
  169. package/build/dex/quickswap/spiritswap-v3.d.ts +6 -0
  170. package/build/dex/quickswap/spiritswap-v3.js +19 -0
  171. package/build/dex/quickswap/spiritswap-v3.js.map +1 -0
  172. package/build/dex/sdai/config.d.ts +11 -0
  173. package/build/dex/sdai/config.js +21 -0
  174. package/build/dex/sdai/config.js.map +1 -0
  175. package/build/dex/sdai/constants.d.ts +2 -0
  176. package/build/dex/sdai/constants.js +6 -0
  177. package/build/dex/sdai/constants.js.map +1 -0
  178. package/build/dex/sdai/scripts/validate-state.d.ts +1 -0
  179. package/build/dex/sdai/scripts/validate-state.js +102 -0
  180. package/build/dex/sdai/scripts/validate-state.js.map +1 -0
  181. package/build/dex/sdai/sdai-pool.d.ts +16 -0
  182. package/build/dex/sdai/sdai-pool.js +85 -0
  183. package/build/dex/sdai/sdai-pool.js.map +1 -0
  184. package/build/dex/sdai/sdai.d.ts +51 -0
  185. package/build/dex/sdai/sdai.js +172 -0
  186. package/build/dex/sdai/sdai.js.map +1 -0
  187. package/build/dex/sdai/types.d.ts +21 -0
  188. package/build/dex/sdai/types.js +11 -0
  189. package/build/dex/sdai/types.js.map +1 -0
  190. package/build/dex/sdai/utils.d.ts +4 -0
  191. package/build/dex/sdai/utils.js +39 -0
  192. package/build/dex/sdai/utils.js.map +1 -0
  193. package/build/dex/smardex/config.d.ts +4 -0
  194. package/build/dex/smardex/config.js +64 -0
  195. package/build/dex/smardex/config.js.map +1 -0
  196. package/build/dex/smardex/constants.d.ts +18 -0
  197. package/build/dex/smardex/constants.js +33 -0
  198. package/build/dex/smardex/constants.js.map +1 -0
  199. package/build/dex/smardex/sdk/constants.d.ts +6 -0
  200. package/build/dex/smardex/sdk/constants.js +13 -0
  201. package/build/dex/smardex/sdk/constants.js.map +1 -0
  202. package/build/dex/smardex/sdk/core.d.ts +113 -0
  203. package/build/dex/smardex/sdk/core.js +499 -0
  204. package/build/dex/smardex/sdk/core.js.map +1 -0
  205. package/build/dex/smardex/sdk/errors.d.ts +15 -0
  206. package/build/dex/smardex/sdk/errors.js +22 -0
  207. package/build/dex/smardex/sdk/errors.js.map +1 -0
  208. package/build/dex/smardex/sdk/types.d.ts +62 -0
  209. package/build/dex/smardex/sdk/types.js +3 -0
  210. package/build/dex/smardex/sdk/types.js.map +1 -0
  211. package/build/dex/smardex/sdk/utils.d.ts +44 -0
  212. package/build/dex/smardex/sdk/utils.js +133 -0
  213. package/build/dex/smardex/sdk/utils.js.map +1 -0
  214. package/build/dex/smardex/smardex-event-pool.d.ts +28 -0
  215. package/build/dex/smardex/smardex-event-pool.js +119 -0
  216. package/build/dex/smardex/smardex-event-pool.js.map +1 -0
  217. package/build/dex/smardex/smardex.d.ts +65 -0
  218. package/build/dex/smardex/smardex.js +519 -0
  219. package/build/dex/smardex/smardex.js.map +1 -0
  220. package/build/dex/smardex/types.d.ts +55 -0
  221. package/build/dex/smardex/types.js +3 -0
  222. package/build/dex/smardex/types.js.map +1 -0
  223. package/build/dex/smoothy.d.ts +26 -0
  224. package/build/dex/smoothy.js +48 -0
  225. package/build/dex/smoothy.js.map +1 -0
  226. package/build/dex/solidly/forks-override/cone.d.ts +22 -0
  227. package/build/dex/solidly/forks-override/cone.js +53 -0
  228. package/build/dex/solidly/forks-override/cone.js.map +1 -0
  229. package/build/dex/solidly/forks-override/solisnek.d.ts +8 -0
  230. package/build/dex/solidly/forks-override/solisnek.js +15 -0
  231. package/build/dex/solidly/forks-override/solisnek.js.map +1 -0
  232. package/build/dex/stable-pool.d.ts +28 -0
  233. package/build/dex/stable-pool.js +62 -0
  234. package/build/dex/stable-pool.js.map +1 -0
  235. package/build/dex/swaap-v1/config.d.ts +17 -0
  236. package/build/dex/swaap-v1/config.js +56 -0
  237. package/build/dex/swaap-v1/config.js.map +1 -0
  238. package/build/dex/swaap-v1/constants.d.ts +6 -0
  239. package/build/dex/swaap-v1/constants.js +17 -0
  240. package/build/dex/swaap-v1/constants.js.map +1 -0
  241. package/build/dex/swaap-v1/libraries/ChainlinkUtils.d.ts +25 -0
  242. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js +62 -0
  243. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js.map +1 -0
  244. package/build/dex/swaap-v1/libraries/Const.d.ts +18 -0
  245. package/build/dex/swaap-v1/libraries/Const.js +26 -0
  246. package/build/dex/swaap-v1/libraries/Const.js.map +1 -0
  247. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.d.ts +77 -0
  248. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js +316 -0
  249. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js.map +1 -0
  250. package/build/dex/swaap-v1/libraries/LogExpMath.d.ts +75 -0
  251. package/build/dex/swaap-v1/libraries/LogExpMath.js +418 -0
  252. package/build/dex/swaap-v1/libraries/LogExpMath.js.map +1 -0
  253. package/build/dex/swaap-v1/libraries/MathMMM.d.ts +185 -0
  254. package/build/dex/swaap-v1/libraries/MathMMM.js +453 -0
  255. package/build/dex/swaap-v1/libraries/MathMMM.js.map +1 -0
  256. package/build/dex/swaap-v1/libraries/Num.d.ts +31 -0
  257. package/build/dex/swaap-v1/libraries/Num.js +167 -0
  258. package/build/dex/swaap-v1/libraries/Num.js.map +1 -0
  259. package/build/dex/swaap-v1/libraries/PoolQuotations.d.ts +23 -0
  260. package/build/dex/swaap-v1/libraries/PoolQuotations.js +131 -0
  261. package/build/dex/swaap-v1/libraries/PoolQuotations.js.map +1 -0
  262. package/build/dex/swaap-v1/libraries/Struct.d.ts +56 -0
  263. package/build/dex/swaap-v1/libraries/Struct.js +3 -0
  264. package/build/dex/swaap-v1/libraries/Struct.js.map +1 -0
  265. package/build/dex/swaap-v1/swaap-v1-pool.d.ts +45 -0
  266. package/build/dex/swaap-v1/swaap-v1-pool.js +656 -0
  267. package/build/dex/swaap-v1/swaap-v1-pool.js.map +1 -0
  268. package/build/dex/swaap-v1/swaap-v1.d.ts +61 -0
  269. package/build/dex/swaap-v1/swaap-v1.js +369 -0
  270. package/build/dex/swaap-v1/swaap-v1.js.map +1 -0
  271. package/build/dex/swaap-v1/types.d.ts +106 -0
  272. package/build/dex/swaap-v1/types.js +9 -0
  273. package/build/dex/swaap-v1/types.js.map +1 -0
  274. package/build/dex/trader-joe-v2.1/optimizer.js +1 -4
  275. package/build/dex/trader-joe-v2.1/optimizer.js.map +1 -1
  276. package/build/dex/trader-joe-v2.1.d.ts +43 -0
  277. package/build/dex/trader-joe-v2.1.js +79 -0
  278. package/build/dex/trader-joe-v2.1.js.map +1 -0
  279. package/build/executor/compressor/Compressor.d.ts +23 -0
  280. package/build/executor/compressor/Compressor.js +144 -0
  281. package/build/executor/compressor/Compressor.js.map +1 -0
  282. package/build/executor/compressor/compress.d.ts +17 -0
  283. package/build/executor/compressor/compress.js +187 -0
  284. package/build/executor/compressor/compress.js.map +1 -0
  285. package/build/executor/compressor/compress_functions/addressSubstitution.d.ts +6 -0
  286. package/build/executor/compressor/compress_functions/addressSubstitution.js +29 -0
  287. package/build/executor/compressor/compress_functions/addressSubstitution.js.map +1 -0
  288. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.d.ts +10 -0
  289. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js +40 -0
  290. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js.map +1 -0
  291. package/build/executor/compressor/compress_functions/byteSubstitution.d.ts +11 -0
  292. package/build/executor/compressor/compress_functions/byteSubstitution.js +64 -0
  293. package/build/executor/compressor/compress_functions/byteSubstitution.js.map +1 -0
  294. package/build/executor/compressor/compress_functions/ffSubstitution.d.ts +7 -0
  295. package/build/executor/compressor/compress_functions/ffSubstitution.js +54 -0
  296. package/build/executor/compressor/compress_functions/ffSubstitution.js.map +1 -0
  297. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.d.ts +8 -0
  298. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js +67 -0
  299. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js.map +1 -0
  300. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.d.ts +8 -0
  301. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js +61 -0
  302. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js.map +1 -0
  303. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.d.ts +6 -0
  304. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js +37 -0
  305. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js.map +1 -0
  306. package/build/executor/compressor/compress_functions/searchUnusedBytes.d.ts +9 -0
  307. package/build/executor/compressor/compress_functions/searchUnusedBytes.js +33 -0
  308. package/build/executor/compressor/compress_functions/searchUnusedBytes.js.map +1 -0
  309. package/build/executor/compressor/fetchSaved.d.ts +0 -0
  310. package/build/executor/compressor/fetchSaved.js +17 -0
  311. package/build/executor/compressor/fetchSaved.js.map +1 -0
  312. package/build/executor/compressor/utils/computeCostL2.d.ts +2 -0
  313. package/build/executor/compressor/utils/computeCostL2.js +14 -0
  314. package/build/executor/compressor/utils/computeCostL2.js.map +1 -0
  315. package/build/executor/compressor/utils/findLongestDuplicatedString.d.ts +2 -0
  316. package/build/executor/compressor/utils/findLongestDuplicatedString.js +30 -0
  317. package/build/executor/compressor/utils/findLongestDuplicatedString.js.map +1 -0
  318. package/build/executor/compressor/utils/getAllIndexes.d.ts +2 -0
  319. package/build/executor/compressor/utils/getAllIndexes.js +12 -0
  320. package/build/executor/compressor/utils/getAllIndexes.js.map +1 -0
  321. package/build/executor/compressor/utils/getByteForAddress.d.ts +2 -0
  322. package/build/executor/compressor/utils/getByteForAddress.js +14 -0
  323. package/build/executor/compressor/utils/getByteForAddress.js.map +1 -0
  324. package/build/executor/compressor/utils/intTo2Bytes.d.ts +2 -0
  325. package/build/executor/compressor/utils/intTo2Bytes.js +14 -0
  326. package/build/executor/compressor/utils/intTo2Bytes.js.map +1 -0
  327. package/build/executor/compressor/utils/intTo3Bytes.d.ts +2 -0
  328. package/build/executor/compressor/utils/intTo3Bytes.js +18 -0
  329. package/build/executor/compressor/utils/intTo3Bytes.js.map +1 -0
  330. package/build/executor/compressor/utils/intToByte.d.ts +2 -0
  331. package/build/executor/compressor/utils/intToByte.js +10 -0
  332. package/build/executor/compressor/utils/intToByte.js.map +1 -0
  333. package/package.json +1 -1
  334. package/src/abi/infusion/InfusionFactory.json +147 -0
  335. package/src/abi/infusion/InfusionPair.json +658 -0
  336. package/src/abi/infusion/InfusionRouter.json +442 -0
  337. package/src/abi/maverick-v2/MaverickV2Router.json +778 -0
  338. package/src/abi/oswap/oswap.abi.json +452 -0
  339. package/src/dex/generic-rfq/rate-fetcher.ts +6 -5
  340. package/src/dex/index.ts +4 -0
  341. package/src/dex/infusion/config.ts +21 -0
  342. package/src/dex/infusion/infusion-e2e.test.ts +110 -0
  343. package/src/dex/infusion/infusion-integration.test.ts +232 -0
  344. package/src/dex/infusion/infusion-stable-pool.ts +91 -0
  345. package/src/dex/infusion/infusion.ts +652 -0
  346. package/src/dex/infusion/types.ts +60 -0
  347. package/src/dex/infusion/utils/isStablePair.ts +18 -0
  348. package/src/dex/lite-psm/lite-psm.ts +2 -5
  349. package/src/dex/maker-psm/maker-psm.ts +2 -6
  350. package/src/dex/maverick-v2/config.ts +4 -0
  351. package/src/dex/maverick-v2/maverick-math/maverick-pool-math.ts +5 -0
  352. package/src/dex/maverick-v2/maverick-v2-e2e.test.ts +21 -43
  353. package/src/dex/maverick-v2/maverick-v2-integration.test.ts +100 -96
  354. package/src/dex/maverick-v2/maverick-v2-pool.ts +8 -8
  355. package/src/dex/maverick-v2/maverick-v2.ts +111 -81
  356. package/src/dex/maverick-v2/types.ts +4 -0
  357. package/src/dex/oswap/config.ts +32 -0
  358. package/src/dex/oswap/oswap-e2e.test.ts +91 -0
  359. package/src/dex/oswap/oswap-events.test.ts +88 -0
  360. package/src/dex/oswap/oswap-integration.test.ts +291 -0
  361. package/src/dex/oswap/oswap-pool.ts +190 -0
  362. package/src/dex/oswap/oswap.ts +392 -0
  363. package/src/dex/oswap/types.ts +29 -0
  364. package/tests/constants-e2e.ts +10 -1
  365. package/.idea/aws.xml +0 -17
  366. package/.idea/codeStyles/Project.xml +0 -19
  367. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  368. package/.idea/misc.xml +0 -6
  369. package/.idea/modules.xml +0 -8
  370. package/.idea/paraswap-dex-lib.iml +0 -9
  371. package/.idea/prettier.xml +0 -7
  372. package/.idea/vcs.xml +0 -6
  373. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.d.ts +0 -7
  374. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js +0 -20
  375. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js.map +0 -1
@@ -0,0 +1,652 @@
1
+ import { UniswapV2 } from '../uniswap-v2/uniswap-v2';
2
+ import {
3
+ Network,
4
+ NULL_ADDRESS,
5
+ SUBGRAPH_TIMEOUT,
6
+ DEST_TOKEN_PARASWAP_TRANSFERS,
7
+ SRC_TOKEN_PARASWAP_TRANSFERS,
8
+ } from '../../constants';
9
+ import {
10
+ AdapterExchangeParam,
11
+ Address,
12
+ DexExchangeParam,
13
+ ExchangePrices,
14
+ PoolLiquidity,
15
+ Token,
16
+ TransferFeeParams,
17
+ } from '../../types';
18
+ import { IDexHelper } from '../../dex-helper';
19
+ import erc20ABI from '../../abi/erc20.json';
20
+ import { getBigIntPow, getDexKeysWithNetwork, isETHAddress } from '../../utils';
21
+ import infusionFactoryABI from '../../abi/infusion/InfusionFactory.json';
22
+ import infusionPairABI from '../../abi/infusion/InfusionPair.json';
23
+ import infusionRouterABI from '../../abi/infusion/InfusionRouter.json';
24
+ import _ from 'lodash';
25
+ import { NumberAsString, SwapSide } from '@paraswap/core';
26
+ import { Interface, AbiCoder } from '@ethersproject/abi';
27
+ import { InfusionStablePool } from './infusion-stable-pool';
28
+ import { Uniswapv2ConstantProductPool } from '../uniswap-v2/uniswap-v2-constant-product-pool';
29
+ import {
30
+ PoolState,
31
+ InfusionData,
32
+ InfusionPair,
33
+ InfusionPoolOrderedParams,
34
+ InfusionParam,
35
+ } from './types';
36
+ import { InfusionConfig } from './config';
37
+ import { applyTransferFee } from '../../lib/token-transfer-fee';
38
+ import { isStablePair } from './utils/isStablePair';
39
+
40
+ export enum InfusionRouterFunctions {
41
+ sellExactEth = 'swapExactETHForTokens',
42
+ sellExactToken = 'swapExactTokensForETH',
43
+ swapExactIn = 'swapExactTokensForTokens',
44
+ }
45
+
46
+ const VelodromeFactoryABI = [
47
+ {
48
+ inputs: [{ internalType: 'bool', name: '_stable', type: 'bool' }],
49
+ name: 'getFee',
50
+ outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
51
+ stateMutability: 'view',
52
+ type: 'function',
53
+ },
54
+ ];
55
+
56
+ const velodromeFactoryIface = new Interface(VelodromeFactoryABI);
57
+ const erc20Iface = new Interface(erc20ABI);
58
+ const infusionPairIface = new Interface(infusionPairABI);
59
+ const defaultAbiCoder = new AbiCoder();
60
+
61
+ export class Infusion extends UniswapV2 {
62
+ pairs: { [key: string]: InfusionPair } = {};
63
+ stableFee?: number;
64
+ volatileFee?: number;
65
+
66
+ readonly isFeeOnTransferSupported: boolean = true;
67
+ readonly SRC_TOKEN_DEX_TRANSFERS = 1;
68
+ readonly DEST_TOKEN_DEX_TRANSFERS = 1;
69
+
70
+ public static dexKeysWithNetwork: { key: string; networks: Network[] }[] =
71
+ getDexKeysWithNetwork(_.pick(InfusionConfig, ['Infusion']));
72
+
73
+ constructor(
74
+ protected network: Network,
75
+ dexKey: string,
76
+ protected dexHelper: IDexHelper,
77
+ isDynamicFees = true,
78
+ factoryAddress?: Address,
79
+ subgraphURL?: string,
80
+ initCode?: string,
81
+ feeCode?: number,
82
+ poolGasCost?: number,
83
+ routerAddress?: Address,
84
+ ) {
85
+ super(
86
+ network,
87
+ dexKey,
88
+ dexHelper,
89
+ isDynamicFees,
90
+ factoryAddress !== undefined
91
+ ? factoryAddress
92
+ : InfusionConfig[dexKey][network].factoryAddress,
93
+ subgraphURL === ''
94
+ ? undefined
95
+ : subgraphURL !== undefined
96
+ ? subgraphURL
97
+ : InfusionConfig[dexKey][network].subgraphURL,
98
+ initCode !== undefined
99
+ ? initCode
100
+ : InfusionConfig[dexKey][network].initCode,
101
+ feeCode !== undefined ? feeCode : InfusionConfig[dexKey][network].feeCode,
102
+ poolGasCost !== undefined
103
+ ? poolGasCost
104
+ : InfusionConfig[dexKey][network].poolGasCost,
105
+ infusionPairIface,
106
+ );
107
+
108
+ this.stableFee = InfusionConfig[dexKey][network].stableFee;
109
+ this.volatileFee = InfusionConfig[dexKey][network].volatileFee;
110
+
111
+ this.factory = new dexHelper.web3Provider.eth.Contract(
112
+ infusionFactoryABI as any,
113
+ factoryAddress !== undefined
114
+ ? factoryAddress
115
+ : InfusionConfig[dexKey][network].factoryAddress,
116
+ );
117
+
118
+ this.router =
119
+ routerAddress !== undefined
120
+ ? routerAddress
121
+ : InfusionConfig[dexKey][network].router || '';
122
+
123
+ this.feeFactor =
124
+ InfusionConfig[dexKey][network].feeFactor || this.feeFactor;
125
+ }
126
+
127
+ async findInfusionPair(from: Token, to: Token, stable: boolean) {
128
+ if (from.address.toLowerCase() === to.address.toLowerCase()) return null;
129
+ const [token0, token1] =
130
+ from.address.toLowerCase() < to.address.toLowerCase()
131
+ ? [from, to]
132
+ : [to, from];
133
+
134
+ const typePostfix = this.poolPostfix(stable);
135
+ const key = `${token0.address.toLowerCase()}-${token1.address.toLowerCase()}-${typePostfix}`;
136
+ let pair = this.pairs[key];
137
+ if (pair) return pair;
138
+
139
+ let exchange = await this.factory.methods
140
+ // Infusion has additional boolean parameter "StablePool"
141
+ // At first we look for uniswap-like volatile pool
142
+ .getPair(token0.address, token1.address, stable)
143
+ .call();
144
+
145
+ if (exchange === NULL_ADDRESS) {
146
+ pair = { token0, token1, stable };
147
+ } else {
148
+ pair = { token0, token1, exchange, stable };
149
+ }
150
+ this.pairs[key] = pair;
151
+ return pair;
152
+ }
153
+
154
+ async batchCatchUpPairs(pairs: [Token, Token][], blockNumber: number) {
155
+ if (!blockNumber) return;
156
+ const pairsToFetch: InfusionPair[] = [];
157
+ for (const _pair of pairs) {
158
+ const pairs = await Promise.all([
159
+ this.findInfusionPair(_pair[0], _pair[1], true),
160
+ this.findInfusionPair(_pair[0], _pair[1], false),
161
+ ]);
162
+ for (const pair of pairs) {
163
+ if (!(pair && pair.exchange)) continue;
164
+ if (!pair.pool) {
165
+ pairsToFetch.push(pair);
166
+ } else if (!pair.pool.getState(blockNumber)) {
167
+ pairsToFetch.push(pair);
168
+ }
169
+ }
170
+ }
171
+
172
+ if (!pairsToFetch.length) return;
173
+
174
+ const reserves = await this.getManyPoolReserves(pairsToFetch, blockNumber);
175
+
176
+ if (reserves.length !== pairsToFetch.length) {
177
+ this.logger.error(
178
+ `Error_getManyPoolReserves didn't get any pool reserves`,
179
+ );
180
+ }
181
+
182
+ for (let i = 0; i < pairsToFetch.length; i++) {
183
+ const pairState = reserves[i];
184
+ const pair = pairsToFetch[i];
185
+ if (!pair.pool) {
186
+ await this.addPool(
187
+ pair,
188
+ pairState.reserves0,
189
+ pairState.reserves1,
190
+ pairState.feeCode,
191
+ blockNumber,
192
+ );
193
+ } else pair.pool.setState(pairState, blockNumber);
194
+ }
195
+ }
196
+
197
+ async getManyPoolReserves(
198
+ pairs: InfusionPair[],
199
+ blockNumber: number,
200
+ ): Promise<PoolState[]> {
201
+ try {
202
+ const multiCallFeeData = pairs.map(pair =>
203
+ this.getFeesMultiCallData(pair),
204
+ );
205
+ const calldata = pairs
206
+ .map((pair, i) => {
207
+ let calldata = [
208
+ {
209
+ target: pair.token0.address,
210
+ callData: erc20Iface.encodeFunctionData('balanceOf', [
211
+ pair.exchange!,
212
+ ]),
213
+ },
214
+ {
215
+ target: pair.token1.address,
216
+ callData: erc20Iface.encodeFunctionData('balanceOf', [
217
+ pair.exchange!,
218
+ ]),
219
+ },
220
+ ];
221
+ if (this.isDynamicFees) calldata.push(multiCallFeeData[i]!.callEntry);
222
+ return calldata;
223
+ })
224
+ .flat();
225
+
226
+ const data: { returnData: any[] } =
227
+ await this.dexHelper.multiContract.methods
228
+ .aggregate(calldata)
229
+ .call({}, blockNumber);
230
+
231
+ const returnData = _.chunk(data.returnData, this.isDynamicFees ? 3 : 2);
232
+
233
+ return pairs.map((pair, i) => ({
234
+ reserves0: defaultAbiCoder
235
+ .decode(['uint256'], returnData[i][0])[0]
236
+ .toString(),
237
+ reserves1: defaultAbiCoder
238
+ .decode(['uint256'], returnData[i][1])[0]
239
+ .toString(),
240
+ feeCode: this.isDynamicFees
241
+ ? multiCallFeeData[i]!.callDecoder(returnData[i][2])
242
+ : (pair.stable ? this.stableFee : this.volatileFee) || this.feeCode,
243
+ }));
244
+ } catch (e) {
245
+ this.logger.error(
246
+ `Error_getManyPoolReserves could not get reserves with error:`,
247
+ e,
248
+ );
249
+ return [];
250
+ }
251
+ }
252
+
253
+ async getSellPrice(
254
+ priceParams: InfusionPoolOrderedParams,
255
+ srcAmount: bigint,
256
+ ): Promise<bigint> {
257
+ return priceParams.stable
258
+ ? InfusionStablePool.getSellPrice(priceParams, srcAmount, this.feeFactor)
259
+ : Uniswapv2ConstantProductPool.getSellPrice(
260
+ priceParams,
261
+ srcAmount,
262
+ this.feeFactor,
263
+ );
264
+ }
265
+
266
+ async getPricesVolume(
267
+ _from: Token,
268
+ _to: Token,
269
+ amounts: bigint[],
270
+ side: SwapSide,
271
+ blockNumber: number,
272
+ // list of pool identifiers to use for pricing, if undefined use all pools
273
+ limitPools?: string[],
274
+ transferFees: TransferFeeParams = {
275
+ srcFee: 0,
276
+ destFee: 0,
277
+ srcDexFee: 0,
278
+ destDexFee: 0,
279
+ },
280
+ ): Promise<ExchangePrices<InfusionData> | null> {
281
+ try {
282
+ if (side === SwapSide.BUY) return null; // Buy side not implemented yet
283
+ const from = this.dexHelper.config.wrapETH(_from);
284
+ const to = this.dexHelper.config.wrapETH(_to);
285
+
286
+ if (from.address.toLowerCase() === to.address.toLowerCase()) {
287
+ return null;
288
+ }
289
+
290
+ const tokenAddress = [
291
+ from.address.toLowerCase(),
292
+ to.address.toLowerCase(),
293
+ ]
294
+ .sort((a, b) => (a > b ? 1 : -1))
295
+ .join('_');
296
+
297
+ await this.batchCatchUpPairs([[from, to]], blockNumber);
298
+
299
+ const resultPromises = [false, true].map(async stable => {
300
+ // We don't support fee on transfer for stable pools yet
301
+ if (
302
+ stable &&
303
+ (transferFees.srcFee !== 0 || transferFees.srcDexFee !== 0)
304
+ ) {
305
+ return null;
306
+ }
307
+
308
+ const poolIdentifier =
309
+ `${this.dexKey}_${tokenAddress}` + this.poolPostfix(stable);
310
+
311
+ if (limitPools && limitPools.every(p => p !== poolIdentifier))
312
+ return null;
313
+
314
+ const isSell = side === SwapSide.SELL;
315
+ const pairParam = await this.getInfusionPairOrderedParams(
316
+ from,
317
+ to,
318
+ blockNumber,
319
+ stable,
320
+ transferFees.srcDexFee,
321
+ );
322
+
323
+ if (!pairParam) return null;
324
+
325
+ const unitAmount = getBigIntPow(from.decimals);
326
+
327
+ const [unitVolumeWithFee, ...amountsWithFee] = applyTransferFee(
328
+ [unitAmount, ...amounts],
329
+ side,
330
+ isSell ? transferFees.srcFee : transferFees.destFee,
331
+ isSell ? SRC_TOKEN_PARASWAP_TRANSFERS : DEST_TOKEN_PARASWAP_TRANSFERS,
332
+ );
333
+
334
+ const unit = await this.getSellPricePath(unitVolumeWithFee, [
335
+ pairParam,
336
+ ]);
337
+
338
+ const prices = await Promise.all(
339
+ amountsWithFee.map(amount =>
340
+ amount === 0n ? 0n : this.getSellPricePath(amount, [pairParam]),
341
+ ),
342
+ );
343
+
344
+ const [unitOutWithFee, ...outputsWithFee] = applyTransferFee(
345
+ [unit, ...prices],
346
+ side,
347
+ // This part is confusing, because we treat differently SELL and BUY fees
348
+ // If Buy, we should apply transfer fee on srcToken on top of dexFee applied earlier
349
+ // But for Sell we should apply only one dexFee
350
+ isSell ? transferFees.destDexFee : transferFees.srcFee,
351
+ isSell ? this.DEST_TOKEN_DEX_TRANSFERS : SRC_TOKEN_PARASWAP_TRANSFERS,
352
+ );
353
+
354
+ return {
355
+ prices: outputsWithFee,
356
+ unit: unitOutWithFee,
357
+ data: {
358
+ router: this.router,
359
+ path: [from.address.toLowerCase(), to.address.toLowerCase()],
360
+ factory: this.factoryAddress,
361
+ initCode: this.initCode,
362
+ feeFactor: this.feeFactor,
363
+ isFeeTokenInRoute: Object.values(transferFees).some(f => f !== 0),
364
+ pools: [
365
+ {
366
+ address: pairParam.exchange,
367
+ fee: parseInt(pairParam.fee),
368
+ direction: pairParam.direction,
369
+ },
370
+ ],
371
+ },
372
+ exchange: this.dexKey,
373
+ poolIdentifier,
374
+ gasCost: this.poolGasCost,
375
+ poolAddresses: [pairParam.exchange],
376
+ };
377
+ });
378
+
379
+ const resultPools = (await Promise.all(
380
+ resultPromises,
381
+ )) as ExchangePrices<InfusionData>;
382
+ const resultPoolsFiltered = resultPools.filter(item => !!item); // filter null elements
383
+ return resultPoolsFiltered.length > 0 ? resultPoolsFiltered : null;
384
+ } catch (e) {
385
+ if (blockNumber === 0)
386
+ this.logger.error(
387
+ `Error_getPricesVolume: Aurelius block manager not yet instantiated`,
388
+ );
389
+ this.logger.error(`Error_getPrices:`, e);
390
+ return null;
391
+ }
392
+ }
393
+
394
+ async getTopPoolsForToken(
395
+ tokenAddress: Address,
396
+ count: number,
397
+ ): Promise<PoolLiquidity[]> {
398
+ if (!this.subgraphURL) return [];
399
+
400
+ let stableFieldKey = 'isStable';
401
+
402
+ const query = `query ($token: Bytes!, $count: Int) {
403
+ pools0: pairs(first: $count, orderBy: reserveUSD, orderDirection: desc, where: {token0: $token, reserve0_gt: 1, reserve1_gt: 1}) {
404
+ id
405
+ ${stableFieldKey}
406
+ token0 {
407
+ id
408
+ decimals
409
+ }
410
+ token1 {
411
+ id
412
+ decimals
413
+ }
414
+ reserveUSD
415
+ }
416
+ pools1: pairs(first: $count, orderBy: reserveUSD, orderDirection: desc, where: {token1: $token, reserve0_gt: 1, reserve1_gt: 1}) {
417
+ id
418
+ ${stableFieldKey}
419
+ token0 {
420
+ id
421
+ decimals
422
+ }
423
+ token1 {
424
+ id
425
+ decimals
426
+ }
427
+ reserveUSD
428
+ }
429
+ }`;
430
+
431
+ const { data } = await this.dexHelper.httpRequest.post(
432
+ this.subgraphURL,
433
+ {
434
+ query,
435
+ variables: { token: tokenAddress.toLowerCase(), count },
436
+ },
437
+ SUBGRAPH_TIMEOUT,
438
+ );
439
+
440
+ if (!(data && data.pools0 && data.pools1))
441
+ throw new Error("Couldn't fetch the pools from the subgraph");
442
+ const pools0 = _.map(data.pools0, pool => ({
443
+ exchange: this.dexKey,
444
+ stable: pool[stableFieldKey],
445
+ address: pool.id.toLowerCase(),
446
+ connectorTokens: [
447
+ {
448
+ address: pool.token1.id.toLowerCase(),
449
+ decimals: parseInt(pool.token1.decimals),
450
+ },
451
+ ],
452
+ liquidityUSD: parseFloat(pool.reserveUSD),
453
+ }));
454
+
455
+ const pools1 = _.map(data.pools1, pool => ({
456
+ exchange: this.dexKey,
457
+ stable: pool[stableFieldKey],
458
+ address: pool.id.toLowerCase(),
459
+ connectorTokens: [
460
+ {
461
+ address: pool.token0.id.toLowerCase(),
462
+ decimals: parseInt(pool.token0.decimals),
463
+ },
464
+ ],
465
+ liquidityUSD: parseFloat(pool.reserveUSD),
466
+ }));
467
+
468
+ return _.slice(
469
+ _.sortBy(_.concat(pools0, pools1), [pool => -1 * pool.liquidityUSD]),
470
+ 0,
471
+ count,
472
+ );
473
+ }
474
+
475
+ // Same as at uniswap-v2-pool.json, but extended with decimals and stable
476
+ async getInfusionPairOrderedParams(
477
+ from: Token,
478
+ to: Token,
479
+ blockNumber: number,
480
+ stable: boolean,
481
+ tokenDexTransferFee: number,
482
+ ): Promise<InfusionPoolOrderedParams | null> {
483
+ const pair = await this.findInfusionPair(from, to, stable);
484
+ if (!(pair && pair.pool && pair.exchange)) return null;
485
+ const pairState = pair?.pool.getState(blockNumber);
486
+
487
+ if (!pairState) {
488
+ this.logger.error(
489
+ `Error_orderPairParams expected reserves, got none (maybe the pool doesn't exist) ${
490
+ from.symbol || from.address
491
+ } ${to.symbol || to.address}`,
492
+ );
493
+ return null;
494
+ }
495
+
496
+ const fee = (pairState.feeCode + tokenDexTransferFee).toString();
497
+ const pairReversed =
498
+ pair.token1.address.toLowerCase() === from.address.toLowerCase();
499
+ if (pairReversed) {
500
+ return {
501
+ tokenIn: from.address,
502
+ tokenOut: to.address,
503
+ reservesIn: pairState.reserves1,
504
+ reservesOut: pairState.reserves0,
505
+ fee,
506
+ direction: false,
507
+ exchange: pair.exchange,
508
+ decimalsIn: from.decimals,
509
+ decimalsOut: to.decimals,
510
+ stable,
511
+ };
512
+ }
513
+ return {
514
+ tokenIn: from.address,
515
+ tokenOut: to.address,
516
+ reservesIn: pairState.reserves0,
517
+ reservesOut: pairState.reserves1,
518
+ fee,
519
+ direction: true,
520
+ exchange: pair.exchange,
521
+ decimalsIn: from.decimals,
522
+ decimalsOut: to.decimals,
523
+ stable,
524
+ };
525
+ }
526
+
527
+ async getPoolIdentifiers(
528
+ _from: Token,
529
+ _to: Token,
530
+ side: SwapSide,
531
+ blockNumber: number,
532
+ ): Promise<string[]> {
533
+ if (side === SwapSide.BUY) return [];
534
+
535
+ const from = this.dexHelper.config.wrapETH(_from);
536
+ const to = this.dexHelper.config.wrapETH(_to);
537
+
538
+ if (from.address.toLowerCase() === to.address.toLowerCase()) {
539
+ return [];
540
+ }
541
+
542
+ const tokenAddress = [from.address.toLowerCase(), to.address.toLowerCase()]
543
+ .sort((a, b) => (a > b ? 1 : -1))
544
+ .join('_');
545
+
546
+ const poolIdentifier = `${this.dexKey}_${tokenAddress}`;
547
+ const poolIdentifierUniswap = poolIdentifier + this.poolPostfix(false);
548
+ const poolIdentifierStable = poolIdentifier + this.poolPostfix(true);
549
+ return [poolIdentifierUniswap, poolIdentifierStable];
550
+ }
551
+
552
+ poolPostfix(stable: boolean) {
553
+ return stable ? 'S' : 'V';
554
+ }
555
+
556
+ getAdapters(side: SwapSide): { name: string; index: number }[] | null {
557
+ return null;
558
+ }
559
+
560
+ getAdapterParam(
561
+ srcToken: Address,
562
+ destToken: Address,
563
+ srcAmount: NumberAsString,
564
+ toAmount: NumberAsString, // required for buy case
565
+ data: InfusionData,
566
+ side: SwapSide,
567
+ ): AdapterExchangeParam {
568
+ return {
569
+ targetExchange: data.router,
570
+ payload: '',
571
+ networkFee: '0',
572
+ };
573
+ }
574
+
575
+ getDexParam(
576
+ src: Address,
577
+ dest: Address,
578
+ srcAmount: NumberAsString,
579
+ destAmount: NumberAsString,
580
+ recipient: Address,
581
+ data: InfusionData,
582
+ side: SwapSide,
583
+ ): DexExchangeParam {
584
+ if (side === SwapSide.BUY) throw new Error(`Buy not supported`);
585
+
586
+ let routerMethod: any;
587
+ let routerArgs: InfusionParam;
588
+ const stable = isStablePair(this.network, src, dest);
589
+
590
+ const from = isETHAddress(src)
591
+ ? this.dexHelper.config.data.wrappedNativeTokenAddress
592
+ : src;
593
+ const to = isETHAddress(dest)
594
+ ? this.dexHelper.config.data.wrappedNativeTokenAddress
595
+ : dest;
596
+
597
+ routerMethod = isETHAddress(src)
598
+ ? InfusionRouterFunctions.sellExactEth
599
+ : InfusionRouterFunctions.swapExactIn;
600
+ routerMethod = isETHAddress(dest)
601
+ ? InfusionRouterFunctions.sellExactToken
602
+ : routerMethod;
603
+
604
+ routerArgs = isETHAddress(src)
605
+ ? [
606
+ destAmount,
607
+ [{ from, to, stable }],
608
+ recipient,
609
+ Math.floor(new Date().getTime() / 1000) + 120,
610
+ ]
611
+ : [
612
+ srcAmount,
613
+ destAmount,
614
+ [{ from, to, stable }],
615
+ recipient,
616
+ Math.floor(new Date().getTime() / 1000) + 120,
617
+ ];
618
+
619
+ const exchangeData = new Interface(infusionRouterABI).encodeFunctionData(
620
+ routerMethod,
621
+ routerArgs as InfusionParam,
622
+ );
623
+
624
+ return {
625
+ needWrapNative: this.needWrapNative,
626
+ dexFuncHasRecipient: true,
627
+ exchangeData,
628
+ targetExchange: data.router,
629
+ returnAmountPos: undefined,
630
+ };
631
+ }
632
+
633
+ protected getFeesMultiCallData(pair: InfusionPair) {
634
+ const callEntry = {
635
+ target: this.factoryAddress,
636
+ callData: velodromeFactoryIface.encodeFunctionData('getFee', [
637
+ pair.stable,
638
+ ]),
639
+ };
640
+ const callDecoder = (values: any[]) =>
641
+ parseInt(
642
+ velodromeFactoryIface
643
+ .decodeFunctionResult('getFee', values)[0]
644
+ .toString(),
645
+ );
646
+
647
+ return {
648
+ callEntry,
649
+ callDecoder,
650
+ };
651
+ }
652
+ }
@@ -0,0 +1,60 @@
1
+ import {
2
+ UniswapV2Data,
3
+ UniswapV2PoolOrderedParams,
4
+ DexParams as UniswapV2DexParams,
5
+ UniswapPool,
6
+ } from '../uniswap-v2/types';
7
+ import { UniswapV2Pair } from '../uniswap-v2/uniswap-v2';
8
+
9
+ export type PoolState = {
10
+ reserves0: string;
11
+ reserves1: string;
12
+ feeCode: number;
13
+ };
14
+
15
+ // to calculate prices for stable pool, we need decimals of the stable tokens
16
+ export interface InfusionPoolOrderedParams extends UniswapV2PoolOrderedParams {
17
+ decimalsIn: number;
18
+ decimalsOut: number;
19
+ stable: boolean;
20
+ }
21
+
22
+ export type InfusionData = UniswapV2Data;
23
+
24
+ export type InfusionPool = UniswapPool;
25
+
26
+ export interface DexParams extends Omit<UniswapV2DexParams, 'feeCode'> {
27
+ feeCode: number;
28
+ stableFee?: number;
29
+ volatileFee?: number;
30
+ feeFactor?: number;
31
+ }
32
+
33
+ export interface InfusionPair extends UniswapV2Pair {
34
+ stable: boolean;
35
+ }
36
+
37
+ export type InfusionParam = SellOnInfusionParam | SellETHOnInfusionParam;
38
+
39
+ export type SellOnInfusionParam = [
40
+ amountIn: string,
41
+ amountOutMin: string,
42
+ routes: {
43
+ from: string;
44
+ to: string;
45
+ stable: boolean;
46
+ }[],
47
+ to: string,
48
+ deadline: number,
49
+ ];
50
+
51
+ export type SellETHOnInfusionParam = [
52
+ amountOutMin: string,
53
+ routes: {
54
+ from: string;
55
+ to: string;
56
+ stable: boolean;
57
+ }[],
58
+ to: string,
59
+ deadline: number,
60
+ ];