@paraswap/dex-lib 3.3.0 → 3.3.1-return-amount-pos.1

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 (521) hide show
  1. package/.idea/aws.xml +17 -0
  2. package/.idea/codeStyles/Project.xml +19 -0
  3. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  4. package/.idea/misc.xml +6 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/paraswap-dex-lib.iml +9 -0
  7. package/.idea/prettier.xml +7 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/README.md +12 -0
  10. package/build/abi/AugustusV6.abi.json +395 -0
  11. package/build/abi/algebra/AlgebraPool.abi.json +727 -0
  12. package/build/abi/curve-v1/StableSwapFRXETH.json +889 -0
  13. package/build/abi/curve-v1/StableSwapWBETH.json +1223 -0
  14. package/build/abi/{wombat/pool.json → integral/relayer.json} +446 -587
  15. package/build/abi/sushiswap-v3/QuoterV2.json +267 -0
  16. package/build/abi/sushiswap-v3/RouterProcessor3.json +289 -0
  17. package/build/abi/uniswap-v3/UniswapV3Quoter.abi.json +193 -0
  18. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3QuoterV2.abi.json +285 -0
  19. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3Router.abi.json +583 -0
  20. package/build/abi/wBETH.json +1527 -0
  21. package/build/abi/woo-fi/WooFeeManager.abi.json +318 -0
  22. package/build/abi/woo-fi/WooPP.abi.json +548 -0
  23. package/build/abi/woo-fi/Wooracle.abi.json +260 -0
  24. package/build/dex/aave-v1/aave-v1.js +1 -0
  25. package/build/dex/aave-v1/aave-v1.js.map +1 -1
  26. package/build/dex/aave-v2/aave-v2.js +1 -0
  27. package/build/dex/aave-v2/aave-v2.js.map +1 -1
  28. package/build/dex/aave-v3/aave-v3.js +1 -0
  29. package/build/dex/aave-v3/aave-v3.js.map +1 -1
  30. package/build/dex/aave-v3/tokens/arbitrum.json +50 -0
  31. package/build/dex/aave-v3/tokens/avalanche.json +74 -0
  32. package/build/dex/aave-v3/tokens/fantom.json +62 -0
  33. package/build/dex/aave-v3/tokens/optimism.json +50 -0
  34. package/build/dex/aave-v3/tokens/polygon.json +116 -0
  35. package/build/dex/algebra/algebra-pool.d.ts +114 -0
  36. package/build/dex/algebra/algebra-pool.js +448 -0
  37. package/build/dex/algebra/algebra-pool.js.map +1 -0
  38. package/build/dex/algebra/algebra.js +4 -0
  39. package/build/dex/algebra/algebra.js.map +1 -1
  40. package/build/dex/angle-staked-stable/angle-staked-stable.d.ts +1 -1
  41. package/build/dex/angle-staked-stable/angle-staked-stable.js +1 -4
  42. package/build/dex/angle-staked-stable/angle-staked-stable.js.map +1 -1
  43. package/build/dex/bProtocol/bProtocol.js +5 -0
  44. package/build/dex/bProtocol/bProtocol.js.map +1 -1
  45. package/build/dex/balancer-v1/balancer-v1.js +4 -0
  46. package/build/dex/balancer-v1/balancer-v1.js.map +1 -1
  47. package/build/dex/balancer-v2/Gyro3Pool.d.ts +43 -0
  48. package/build/dex/balancer-v2/Gyro3Pool.js +160 -0
  49. package/build/dex/balancer-v2/Gyro3Pool.js.map +1 -0
  50. package/build/dex/balancer-v2/LinearMath.d.ts +88 -0
  51. package/build/dex/balancer-v2/LinearMath.js +285 -0
  52. package/build/dex/balancer-v2/LinearMath.js.map +1 -0
  53. package/build/dex/balancer-v2/LinearPool.d.ts +81 -0
  54. package/build/dex/balancer-v2/LinearPool.js +444 -0
  55. package/build/dex/balancer-v2/LinearPool.js.map +1 -0
  56. package/build/dex/balancer-v2/PhantomStablePool.d.ts +90 -0
  57. package/build/dex/balancer-v2/PhantomStablePool.js +418 -0
  58. package/build/dex/balancer-v2/PhantomStablePool.js.map +1 -0
  59. package/build/dex/balancer-v2/StableMath.d.ts +9 -0
  60. package/build/dex/balancer-v2/StableMath.js +272 -0
  61. package/build/dex/balancer-v2/StableMath.js.map +1 -0
  62. package/build/dex/balancer-v2/balancer-v2-pool.d.ts +140 -0
  63. package/build/dex/balancer-v2/balancer-v2-pool.js +647 -0
  64. package/build/dex/balancer-v2/balancer-v2-pool.js.map +1 -0
  65. package/build/dex/balancer-v2/balancer-v2.js +1 -0
  66. package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
  67. package/build/dex/bancor/bancor.js +4 -0
  68. package/build/dex/bancor/bancor.js.map +1 -1
  69. package/build/dex/camelot/camelot.js +1 -0
  70. package/build/dex/camelot/camelot.js.map +1 -1
  71. package/build/dex/compound/compound.js +1 -0
  72. package/build/dex/compound/compound.js.map +1 -1
  73. package/build/dex/curve-v1/curve-v1.js +1 -0
  74. package/build/dex/curve-v1/curve-v1.js.map +1 -1
  75. package/build/dex/curve-v1/pools/frxETHpool.d.ts +7 -0
  76. package/build/dex/curve-v1/pools/frxETHpool.js +27 -0
  77. package/build/dex/curve-v1/pools/frxETHpool.js.map +1 -0
  78. package/build/dex/curve-v1/pools/wbETHpool.d.ts +29 -0
  79. package/build/dex/curve-v1/pools/wbETHpool.js +408 -0
  80. package/build/dex/curve-v1/pools/wbETHpool.js.map +1 -0
  81. package/build/dex/curve-v1-factory/curve-v1-factory.js +1 -0
  82. package/build/dex/curve-v1-factory/curve-v1-factory.js.map +1 -1
  83. package/build/dex/curve-v2/curve-v2.js +1 -0
  84. package/build/dex/curve-v2/curve-v2.js.map +1 -1
  85. package/build/dex/dexalot/dexalot.js +1 -0
  86. package/build/dex/dexalot/dexalot.js.map +1 -1
  87. package/build/dex/dodo-v1/dodo-v1.js +4 -0
  88. package/build/dex/dodo-v1/dodo-v1.js.map +1 -1
  89. package/build/dex/dodo-v2.js +4 -0
  90. package/build/dex/dodo-v2.js.map +1 -1
  91. package/build/dex/etherfi.js +2 -0
  92. package/build/dex/etherfi.js.map +1 -1
  93. package/build/dex/generic-rfq/generic-rfq.js +1 -0
  94. package/build/dex/generic-rfq/generic-rfq.js.map +1 -1
  95. package/build/dex/gmx/gmx.js +4 -0
  96. package/build/dex/gmx/gmx.js.map +1 -1
  97. package/build/dex/hashflow/hashflow.js +1 -0
  98. package/build/dex/hashflow/hashflow.js.map +1 -1
  99. package/build/dex/idex.d.ts +1 -1
  100. package/build/dex/{trader-joe-v2-1-2 → integral}/config.d.ts +1 -1
  101. package/build/dex/integral/config.js +18 -0
  102. package/build/dex/integral/config.js.map +1 -0
  103. package/build/dex/{angle-transmuter/morphoOracle.d.ts → integral/integral-pool.d.ts} +12 -15
  104. package/build/dex/integral/integral-pool.js +67 -0
  105. package/build/dex/integral/integral-pool.js.map +1 -0
  106. package/build/dex/integral/integral.d.ts +48 -0
  107. package/build/dex/integral/integral.js +402 -0
  108. package/build/dex/integral/integral.js.map +1 -0
  109. package/build/dex/integral/types.d.ts +25 -0
  110. package/build/dex/integral/types.js +9 -0
  111. package/build/dex/integral/types.js.map +1 -0
  112. package/build/dex/jarvis-v6/jarvis-v6.js +1 -0
  113. package/build/dex/jarvis-v6/jarvis-v6.js.map +1 -1
  114. package/build/dex/jarvis.js +8 -0
  115. package/build/dex/jarvis.js.map +1 -1
  116. package/build/dex/kyberdmm/kyberdmm.js +4 -0
  117. package/build/dex/kyberdmm/kyberdmm.js.map +1 -1
  118. package/build/dex/lido/lido.js +5 -0
  119. package/build/dex/lido/lido.js.map +1 -1
  120. package/build/{abi/angle-transmuter/MorphoOracle.json → dex/lighter-v1/abi/erc20.json} +126 -97
  121. package/build/dex/lighter-v1/abi/factory.json +291 -0
  122. package/build/dex/lighter-v1/abi/order_book.json +594 -0
  123. package/build/dex/lighter-v1/abi/order_book_helper.json +176 -0
  124. package/build/dex/lighter-v1/abi/router.json +488 -0
  125. package/build/dex/{trader-joe-v2_1 → lighter-v1}/config.d.ts +1 -1
  126. package/build/dex/lighter-v1/config.js +17 -0
  127. package/build/dex/lighter-v1/config.js.map +1 -0
  128. package/build/dex/lighter-v1/constants.d.ts +2 -0
  129. package/build/dex/lighter-v1/constants.js +13 -0
  130. package/build/dex/lighter-v1/constants.js.map +1 -0
  131. package/build/dex/lighter-v1/lighter-v1-pool.d.ts +57 -0
  132. package/build/dex/lighter-v1/lighter-v1-pool.js +310 -0
  133. package/build/dex/lighter-v1/lighter-v1-pool.js.map +1 -0
  134. package/build/dex/{angle-transmuter/angle-transmuter.d.ts → lighter-v1/lighter-v1.d.ts} +17 -31
  135. package/build/dex/lighter-v1/lighter-v1.js +331 -0
  136. package/build/dex/lighter-v1/lighter-v1.js.map +1 -0
  137. package/build/dex/lighter-v1/types.d.ts +40 -0
  138. package/build/dex/lighter-v1/types.js +3 -0
  139. package/build/dex/lighter-v1/types.js.map +1 -0
  140. package/build/dex/maker-psm/maker-psm.js +1 -0
  141. package/build/dex/maker-psm/maker-psm.js.map +1 -1
  142. package/build/dex/maverick-v1/maverick-v1.js +4 -0
  143. package/build/dex/maverick-v1/maverick-v1.js.map +1 -1
  144. package/build/dex/nerve/nerve.js +4 -0
  145. package/build/dex/nerve/nerve.js.map +1 -1
  146. package/build/dex/onebit/onebit.js +5 -0
  147. package/build/dex/onebit/onebit.js.map +1 -1
  148. package/build/dex/pancakeswap-v3/pancakeswap-v3.js +4 -0
  149. package/build/dex/pancakeswap-v3/pancakeswap-v3.js.map +1 -1
  150. package/build/dex/pancakeswap-v3/types.d.ts +14 -0
  151. package/build/dex/pancakeswap-v3/types.js +3 -0
  152. package/build/dex/pancakeswap-v3/types.js.map +1 -0
  153. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js +1 -0
  154. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js.map +1 -1
  155. package/build/dex/platypus/platypus.js +17 -3
  156. package/build/dex/platypus/platypus.js.map +1 -1
  157. package/build/dex/polygon-migrator/polygon-migrator.js +1 -0
  158. package/build/dex/polygon-migrator/polygon-migrator.js.map +1 -1
  159. package/build/dex/quick-perps/quick-perps.js +7 -1
  160. package/build/dex/quick-perps/quick-perps.js.map +1 -1
  161. package/build/dex/quickswap/camelot-v3.d.ts +6 -0
  162. package/build/dex/quickswap/camelot-v3.js +19 -0
  163. package/build/dex/quickswap/camelot-v3.js.map +1 -0
  164. package/build/dex/quickswap/zyberswap-v3.d.ts +6 -0
  165. package/build/dex/quickswap/zyberswap-v3.js +19 -0
  166. package/build/dex/quickswap/zyberswap-v3.js.map +1 -0
  167. package/build/dex/quickswap-v3.d.ts +21 -0
  168. package/build/dex/quickswap-v3.js +40 -0
  169. package/build/dex/quickswap-v3.js.map +1 -0
  170. package/build/dex/{angle-transmuter → ramses-v2}/config.d.ts +1 -1
  171. package/build/dex/ramses-v2/config.js +28 -0
  172. package/build/dex/ramses-v2/config.js.map +1 -0
  173. package/build/dex/ramses-v2/constants.d.ts +28 -0
  174. package/build/dex/ramses-v2/constants.js +35 -0
  175. package/build/dex/ramses-v2/constants.js.map +1 -0
  176. package/build/dex/ramses-v2/contract-math/BitMath.d.ts +4 -0
  177. package/build/dex/ramses-v2/contract-math/BitMath.js +93 -0
  178. package/build/dex/ramses-v2/contract-math/BitMath.js.map +1 -0
  179. package/build/dex/ramses-v2/contract-math/FixedPoint128.d.ts +3 -0
  180. package/build/dex/ramses-v2/contract-math/FixedPoint128.js +8 -0
  181. package/build/dex/ramses-v2/contract-math/FixedPoint128.js.map +1 -0
  182. package/build/dex/ramses-v2/contract-math/FixedPoint96.d.ts +4 -0
  183. package/build/dex/ramses-v2/contract-math/FixedPoint96.js +9 -0
  184. package/build/dex/ramses-v2/contract-math/FixedPoint96.js.map +1 -0
  185. package/build/dex/ramses-v2/contract-math/FullMath.d.ts +4 -0
  186. package/build/dex/ramses-v2/contract-math/FullMath.js +19 -0
  187. package/build/dex/ramses-v2/contract-math/FullMath.js.map +1 -0
  188. package/build/dex/ramses-v2/contract-math/LiquidityMath.d.ts +3 -0
  189. package/build/dex/ramses-v2/contract-math/LiquidityMath.js +22 -0
  190. package/build/dex/ramses-v2/contract-math/LiquidityMath.js.map +1 -0
  191. package/build/dex/ramses-v2/contract-math/Oracle.d.ts +10 -0
  192. package/build/dex/ramses-v2/contract-math/Oracle.js +133 -0
  193. package/build/dex/ramses-v2/contract-math/Oracle.js.map +1 -0
  194. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.d.ts +10 -0
  195. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js +91 -0
  196. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js.map +1 -0
  197. package/build/dex/ramses-v2/contract-math/SwapMath.d.ts +8 -0
  198. package/build/dex/ramses-v2/contract-math/SwapMath.js +70 -0
  199. package/build/dex/ramses-v2/contract-math/SwapMath.js.map +1 -0
  200. package/build/dex/ramses-v2/contract-math/Tick.d.ts +7 -0
  201. package/build/dex/ramses-v2/contract-math/Tick.js +45 -0
  202. package/build/dex/ramses-v2/contract-math/Tick.js.map +1 -0
  203. package/build/dex/ramses-v2/contract-math/TickBitMap.d.ts +8 -0
  204. package/build/dex/ramses-v2/contract-math/TickBitMap.js +87 -0
  205. package/build/dex/ramses-v2/contract-math/TickBitMap.js.map +1 -0
  206. package/build/dex/ramses-v2/contract-math/TickMath.d.ts +8 -0
  207. package/build/dex/ramses-v2/contract-math/TickMath.js +162 -0
  208. package/build/dex/ramses-v2/contract-math/TickMath.js.map +1 -0
  209. package/build/dex/ramses-v2/contract-math/UnsafeMath.d.ts +3 -0
  210. package/build/dex/ramses-v2/contract-math/UnsafeMath.js +10 -0
  211. package/build/dex/ramses-v2/contract-math/UnsafeMath.js.map +1 -0
  212. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.d.ts +18 -0
  213. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js +392 -0
  214. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js.map +1 -0
  215. package/build/dex/ramses-v2/contract-math/utils.d.ts +3 -0
  216. package/build/dex/ramses-v2/contract-math/utils.js +16 -0
  217. package/build/dex/ramses-v2/contract-math/utils.js.map +1 -0
  218. package/build/dex/ramses-v2/ramses-v2-pool.d.ts +42 -0
  219. package/build/dex/ramses-v2/ramses-v2-pool.js +307 -0
  220. package/build/dex/ramses-v2/ramses-v2-pool.js.map +1 -0
  221. package/build/dex/ramses-v2/ramses-v2.d.ts +61 -0
  222. package/build/dex/ramses-v2/ramses-v2.js +690 -0
  223. package/build/dex/ramses-v2/ramses-v2.js.map +1 -0
  224. package/build/dex/ramses-v2/types.d.ts +154 -0
  225. package/build/dex/ramses-v2/types.js +9 -0
  226. package/build/dex/ramses-v2/types.js.map +1 -0
  227. package/build/dex/ramses-v2/utils.d.ts +6 -0
  228. package/build/dex/ramses-v2/utils.js +71 -0
  229. package/build/dex/ramses-v2/utils.js.map +1 -0
  230. package/build/dex/smoothy/smoothy.js +1 -0
  231. package/build/dex/smoothy/smoothy.js.map +1 -1
  232. package/build/dex/solidly/forks-override/fvm.d.ts +20 -0
  233. package/build/dex/solidly/forks-override/fvm.js +42 -0
  234. package/build/dex/solidly/forks-override/fvm.js.map +1 -0
  235. package/build/dex/solidly/solidly.js +1 -0
  236. package/build/dex/solidly/solidly.js.map +1 -1
  237. package/build/dex/solidly-v3/solidly-v3.js +1 -0
  238. package/build/dex/solidly-v3/solidly-v3.js.map +1 -1
  239. package/build/dex/spark/spark.js +6 -0
  240. package/build/dex/spark/spark.js.map +1 -1
  241. package/build/dex/stable-pool/stable-pool.js +4 -0
  242. package/build/dex/stable-pool/stable-pool.js.map +1 -1
  243. package/build/dex/sushiswap-v3/config.d.ts +4 -0
  244. package/build/dex/sushiswap-v3/config.js +132 -0
  245. package/build/dex/sushiswap-v3/config.js.map +1 -0
  246. package/build/dex/sushiswap-v3/constants.d.ts +4 -0
  247. package/build/dex/sushiswap-v3/constants.js +32 -0
  248. package/build/dex/sushiswap-v3/constants.js.map +1 -0
  249. package/build/dex/sushiswap-v3/sushiswap-v3-original.d.ts +56 -0
  250. package/build/dex/sushiswap-v3/sushiswap-v3-original.js +598 -0
  251. package/build/dex/sushiswap-v3/sushiswap-v3-original.js.map +1 -0
  252. package/build/dex/sushiswap-v3/sushiswap-v3-pool.d.ts +1 -0
  253. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js +6 -0
  254. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js.map +1 -0
  255. package/build/dex/sushiswap-v3/sushiswap-v3.d.ts +21 -0
  256. package/build/dex/sushiswap-v3/sushiswap-v3.js +58 -0
  257. package/build/dex/sushiswap-v3/sushiswap-v3.js.map +1 -0
  258. package/build/dex/sushiswap-v3/token.d.ts +6 -0
  259. package/build/dex/sushiswap-v3/token.js +23 -0
  260. package/build/dex/sushiswap-v3/token.js.map +1 -0
  261. package/build/dex/sushiswap-v3/types.d.ts +15 -0
  262. package/build/dex/sushiswap-v3/types.js +18 -0
  263. package/build/dex/sushiswap-v3/types.js.map +1 -0
  264. package/build/dex/swaap-v1/swaap-v1.js +4 -0
  265. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  266. package/build/dex/swaap-v2/swaap-v2.js +1 -0
  267. package/build/dex/swaap-v2/swaap-v2.js.map +1 -1
  268. package/build/dex/swell/swell.js +1 -0
  269. package/build/dex/swell/swell.js.map +1 -1
  270. package/build/dex/synthetix/synthetix.js +6 -0
  271. package/build/dex/synthetix/synthetix.js.map +1 -1
  272. package/build/dex/trader-joe-v2.1/trader-joe-v2.1.js +4 -0
  273. package/build/dex/trader-joe-v2.1/trader-joe-v2.1.js.map +1 -1
  274. package/build/dex/uniswap-v2/uniswap-v2.js +1 -0
  275. package/build/dex/uniswap-v2/uniswap-v2.js.map +1 -1
  276. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.d.ts +12 -0
  277. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js +23 -0
  278. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js.map +1 -0
  279. package/build/dex/uniswap-v3/uniswap-v3.js +4 -0
  280. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  281. package/build/dex/uniswap-v3.js +4 -0
  282. package/build/dex/uniswap-v3.js.map +1 -1
  283. package/build/dex/weth/weth.js +1 -0
  284. package/build/dex/weth/weth.js.map +1 -1
  285. package/build/dex/wombat/wombat.js +4 -0
  286. package/build/dex/wombat/wombat.js.map +1 -1
  287. package/build/dex/woo-fi/config.d.ts +4 -0
  288. package/build/dex/woo-fi/config.js +141 -0
  289. package/build/dex/woo-fi/config.js.map +1 -0
  290. package/build/dex/woo-fi/constants.d.ts +5 -0
  291. package/build/dex/woo-fi/constants.js +20 -0
  292. package/build/dex/woo-fi/constants.js.map +1 -0
  293. package/build/dex/woo-fi/types.d.ts +48 -0
  294. package/build/dex/woo-fi/types.js +3 -0
  295. package/build/dex/woo-fi/types.js.map +1 -0
  296. package/build/dex/woo-fi/woo-fi-decimal-math.d.ts +14 -0
  297. package/build/dex/woo-fi/woo-fi-decimal-math.js +42 -0
  298. package/build/dex/woo-fi/woo-fi-decimal-math.js.map +1 -0
  299. package/build/dex/woo-fi/woo-fi-math.d.ts +31 -0
  300. package/build/dex/woo-fi/woo-fi-math.js +300 -0
  301. package/build/dex/woo-fi/woo-fi-math.js.map +1 -0
  302. package/build/dex/woo-fi/woo-fi.d.ts +65 -0
  303. package/build/dex/woo-fi/woo-fi.js +480 -0
  304. package/build/dex/woo-fi/woo-fi.js.map +1 -0
  305. package/build/dex/woo-fi-v2/woo-fi-v2.js +4 -0
  306. package/build/dex/woo-fi-v2/woo-fi-v2.js.map +1 -1
  307. package/build/dex/wsteth/wsteth.js +8 -1
  308. package/build/dex/wsteth/wsteth.js.map +1 -1
  309. package/build/dex/zerox/index.js +1 -0
  310. package/build/dex/zerox/index.js.map +1 -1
  311. package/build/executor/Executor01BytecodeBuilder.js +4 -1
  312. package/build/executor/Executor01BytecodeBuilder.js.map +1 -1
  313. package/build/executor/Executor02BytecodeBuilder.js +5 -1
  314. package/build/executor/Executor02BytecodeBuilder.js.map +1 -1
  315. package/build/executor/ExecutorBytecodeBuilder.d.ts +1 -1
  316. package/build/executor/ExecutorBytecodeBuilder.js +5 -4
  317. package/build/executor/ExecutorBytecodeBuilder.js.map +1 -1
  318. package/build/executor/ExecutorDetector.d.ts +1 -1
  319. package/build/executor/ExecutorDetector.js.map +1 -1
  320. package/build/executor/IExecutorBytecodeBuilder.d.ts +6 -0
  321. package/build/executor/IExecutorBytecodeBuilder.js +3 -0
  322. package/build/executor/IExecutorBytecodeBuilder.js.map +1 -0
  323. package/build/executor/constants.d.ts +3 -1
  324. package/build/executor/constants.js +4 -2
  325. package/build/executor/constants.js.map +1 -1
  326. package/build/executor/utils.d.ts +2 -0
  327. package/build/executor/utils.js +30 -0
  328. package/build/executor/utils.js.map +1 -0
  329. package/build/router/simpleswap.js +6 -3
  330. package/build/router/simpleswap.js.map +1 -1
  331. package/build/types.d.ts +1 -0
  332. package/dex-template/__DexName__-e2e.test.ts.template +2 -9
  333. package/dex-template/__DexName__.ts.template +2 -29
  334. package/funding.json +5 -0
  335. package/package.json +1 -1
  336. package/src/dex/aave-v1/aave-v1.ts +1 -0
  337. package/src/dex/aave-v2/aave-v2.ts +1 -0
  338. package/src/dex/aave-v3/aave-v3.ts +1 -0
  339. package/src/dex/algebra/algebra.ts +9 -0
  340. package/src/dex/angle-staked-stable/angle-staked-stable.ts +2 -5
  341. package/src/dex/bProtocol/bProtocol.ts +8 -0
  342. package/src/dex/balancer-v1/balancer-v1.ts +9 -0
  343. package/src/dex/balancer-v2/balancer-v2.ts +3 -2
  344. package/src/dex/bancor/bancor.ts +8 -0
  345. package/src/dex/camelot/camelot.ts +1 -0
  346. package/src/dex/compound/compound.ts +1 -0
  347. package/src/dex/curve-v1/curve-v1.ts +1 -0
  348. package/src/dex/curve-v1-factory/curve-v1-factory.ts +1 -0
  349. package/src/dex/curve-v2/curve-v2.ts +1 -0
  350. package/src/dex/dexalot/dexalot.ts +1 -0
  351. package/src/dex/dodo-v1/dodo-v1.ts +9 -0
  352. package/src/dex/dodo-v2.ts +9 -0
  353. package/src/dex/etherfi.ts +2 -0
  354. package/src/dex/generic-rfq/generic-rfq.ts +1 -0
  355. package/src/dex/gmx/gmx.ts +8 -0
  356. package/src/dex/hashflow/hashflow.ts +1 -0
  357. package/src/dex/idex.ts +5 -3
  358. package/src/dex/jarvis-v6/jarvis-v6.ts +1 -0
  359. package/src/dex/jarvis.ts +14 -0
  360. package/src/dex/kyberdmm/kyberdmm.ts +9 -0
  361. package/src/dex/lido/lido.ts +8 -0
  362. package/src/dex/maker-psm/maker-psm.ts +1 -0
  363. package/src/dex/maverick-v1/maverick-v1.ts +9 -0
  364. package/src/dex/nerve/nerve.ts +8 -0
  365. package/src/dex/onebit/onebit.ts +8 -0
  366. package/src/dex/pancakeswap-v3/pancakeswap-v3.ts +9 -0
  367. package/src/dex/paraswap-limit-orders/paraswap-limit-orders.ts +1 -0
  368. package/src/dex/platypus/platypus.ts +20 -3
  369. package/src/dex/polygon-migrator/polygon-migrator.ts +1 -0
  370. package/src/dex/quick-perps/quick-perps.ts +11 -1
  371. package/src/dex/smoothy/smoothy.ts +1 -0
  372. package/src/dex/solidly/solidly.ts +1 -0
  373. package/src/dex/solidly-v3/solidly-v3.ts +1 -1
  374. package/src/dex/spark/spark.ts +10 -0
  375. package/src/dex/stable-pool/stable-pool.ts +8 -0
  376. package/src/dex/swaap-v1/swaap-v1.ts +9 -0
  377. package/src/dex/swaap-v2/swaap-v2.ts +1 -0
  378. package/src/dex/swell/swell.ts +1 -0
  379. package/src/dex/synthetix/synthetix.ts +11 -0
  380. package/src/dex/trader-joe-v2.1/trader-joe-v2.1.ts +9 -0
  381. package/src/dex/uniswap-v2/uniswap-v2.ts +1 -0
  382. package/src/dex/uniswap-v3/uniswap-v3.ts +9 -0
  383. package/src/dex/uniswap-v3.ts +9 -0
  384. package/src/dex/weth/weth.ts +1 -0
  385. package/src/dex/wombat/wombat.ts +9 -0
  386. package/src/dex/woo-fi-v2/woo-fi-v2.ts +5 -0
  387. package/src/dex/wsteth/wsteth.ts +13 -4
  388. package/src/dex/zerox/index.ts +1 -0
  389. package/src/executor/Executor01BytecodeBuilder.ts +8 -1
  390. package/src/executor/Executor02BytecodeBuilder.ts +13 -0
  391. package/src/executor/ExecutorBytecodeBuilder.ts +6 -1
  392. package/src/executor/ExecutorDetector.ts +3 -2
  393. package/src/executor/constants.ts +4 -1
  394. package/src/executor/executor01-bytecode-builder-e2e.test.ts +39 -0
  395. package/src/executor/utils.ts +44 -0
  396. package/src/router/simpleswap.ts +7 -3
  397. package/src/types.ts +1 -0
  398. package/tests/constants-e2e.ts +6 -1
  399. package/build/abi/Redstone.json +0 -739
  400. package/build/abi/angle-transmuter/MorphoVault.json +0 -2506
  401. package/build/abi/angle-transmuter/Pyth.json +0 -1534
  402. package/build/abi/angle-transmuter/Transmuter.json +0 -1711
  403. package/build/abi/idle-dao/idle-cdo-factory.json +0 -38
  404. package/build/abi/idle-dao/idle-cdo.json +0 -1245
  405. package/build/abi/pharaoh/PharaohPool.abi.json +0 -1582
  406. package/build/abi/smardex/smardex-factory.json +0 -185
  407. package/build/abi/smardex/smardex-pool.json +0 -578
  408. package/build/abi/smardex/smardex-router.json +0 -648
  409. package/build/abi/trader-joe-v2_1/FactoryABI.json +0 -1208
  410. package/build/abi/trader-joe-v2_1/PairABI.json +0 -1493
  411. package/build/abi/trader-joe-v2_1/RouterABI.json +0 -1489
  412. package/build/abi/trader-joe-v2_1/StateMulticall.json +0 -193
  413. package/build/dex/angle-transmuter/angle-transmuter-pool.d.ts +0 -61
  414. package/build/dex/angle-transmuter/angle-transmuter-pool.js +0 -415
  415. package/build/dex/angle-transmuter/angle-transmuter-pool.js.map +0 -1
  416. package/build/dex/angle-transmuter/angle-transmuter.js +0 -262
  417. package/build/dex/angle-transmuter/angle-transmuter.js.map +0 -1
  418. package/build/dex/angle-transmuter/backedOracle.d.ts +0 -19
  419. package/build/dex/angle-transmuter/backedOracle.js +0 -56
  420. package/build/dex/angle-transmuter/backedOracle.js.map +0 -1
  421. package/build/dex/angle-transmuter/config.js +0 -30
  422. package/build/dex/angle-transmuter/config.js.map +0 -1
  423. package/build/dex/angle-transmuter/constants.d.ts +0 -77
  424. package/build/dex/angle-transmuter/constants.js +0 -94
  425. package/build/dex/angle-transmuter/constants.js.map +0 -1
  426. package/build/dex/angle-transmuter/morphoOracle.js +0 -179
  427. package/build/dex/angle-transmuter/morphoOracle.js.map +0 -1
  428. package/build/dex/angle-transmuter/morphoVault.d.ts +0 -19
  429. package/build/dex/angle-transmuter/morphoVault.js +0 -78
  430. package/build/dex/angle-transmuter/morphoVault.js.map +0 -1
  431. package/build/dex/angle-transmuter/pyth.d.ts +0 -19
  432. package/build/dex/angle-transmuter/pyth.js +0 -70
  433. package/build/dex/angle-transmuter/pyth.js.map +0 -1
  434. package/build/dex/angle-transmuter/redstone.d.ts +0 -20
  435. package/build/dex/angle-transmuter/redstone.js +0 -73
  436. package/build/dex/angle-transmuter/redstone.js.map +0 -1
  437. package/build/dex/angle-transmuter/transmuter.d.ts +0 -52
  438. package/build/dex/angle-transmuter/transmuter.js +0 -374
  439. package/build/dex/angle-transmuter/transmuter.js.map +0 -1
  440. package/build/dex/angle-transmuter/types.d.ts +0 -188
  441. package/build/dex/angle-transmuter/types.js +0 -33
  442. package/build/dex/angle-transmuter/types.js.map +0 -1
  443. package/build/dex/angle-transmuter/utils.d.ts +0 -9
  444. package/build/dex/angle-transmuter/utils.js +0 -252
  445. package/build/dex/angle-transmuter/utils.js.map +0 -1
  446. package/build/dex/idle-dao/config.d.ts +0 -6
  447. package/build/dex/idle-dao/config.js +0 -29
  448. package/build/dex/idle-dao/config.js.map +0 -1
  449. package/build/dex/idle-dao/idle-dao-pool.d.ts +0 -56
  450. package/build/dex/idle-dao/idle-dao-pool.js +0 -176
  451. package/build/dex/idle-dao/idle-dao-pool.js.map +0 -1
  452. package/build/dex/idle-dao/idle-dao-pooling-pool.d.ts +0 -16
  453. package/build/dex/idle-dao/idle-dao-pooling-pool.js +0 -57
  454. package/build/dex/idle-dao/idle-dao-pooling-pool.js.map +0 -1
  455. package/build/dex/idle-dao/idle-dao.d.ts +0 -52
  456. package/build/dex/idle-dao/idle-dao.js +0 -310
  457. package/build/dex/idle-dao/idle-dao.js.map +0 -1
  458. package/build/dex/idle-dao/tokens.d.ts +0 -16
  459. package/build/dex/idle-dao/tokens.js +0 -87
  460. package/build/dex/idle-dao/tokens.js.map +0 -1
  461. package/build/dex/idle-dao/types.d.ts +0 -37
  462. package/build/dex/idle-dao/types.js +0 -11
  463. package/build/dex/idle-dao/types.js.map +0 -1
  464. package/build/dex/idle-dao/utils.d.ts +0 -8
  465. package/build/dex/idle-dao/utils.js +0 -145
  466. package/build/dex/idle-dao/utils.js.map +0 -1
  467. package/build/dex/smardex/subgraph-queries.d.ts +0 -1
  468. package/build/dex/smardex/subgraph-queries.js +0 -17
  469. package/build/dex/smardex/subgraph-queries.js.map +0 -1
  470. package/build/dex/smardex/usd-reserves.d.ts +0 -23
  471. package/build/dex/smardex/usd-reserves.js +0 -86
  472. package/build/dex/smardex/usd-reserves.js.map +0 -1
  473. package/build/dex/trader-joe-v2-1-2/config.js +0 -47
  474. package/build/dex/trader-joe-v2-1-2/config.js.map +0 -1
  475. package/build/dex/trader-joe-v2-1-2/constants.d.ts +0 -20
  476. package/build/dex/trader-joe-v2-1-2/constants.js +0 -22
  477. package/build/dex/trader-joe-v2-1-2/constants.js.map +0 -1
  478. package/build/dex/trader-joe-v2-1-2/math/index.d.ts +0 -37
  479. package/build/dex/trader-joe-v2-1-2/math/index.js +0 -291
  480. package/build/dex/trader-joe-v2-1-2/math/index.js.map +0 -1
  481. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.d.ts +0 -60
  482. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.js +0 -248
  483. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.js.map +0 -1
  484. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.d.ts +0 -53
  485. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.js +0 -307
  486. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.js.map +0 -1
  487. package/build/dex/trader-joe-v2-1-2/types.d.ts +0 -82
  488. package/build/dex/trader-joe-v2-1-2/types.js +0 -9
  489. package/build/dex/trader-joe-v2-1-2/types.js.map +0 -1
  490. package/build/dex/trader-joe-v2_1/config.js +0 -47
  491. package/build/dex/trader-joe-v2_1/config.js.map +0 -1
  492. package/build/dex/trader-joe-v2_1/constants.d.ts +0 -20
  493. package/build/dex/trader-joe-v2_1/constants.js +0 -22
  494. package/build/dex/trader-joe-v2_1/constants.js.map +0 -1
  495. package/build/dex/trader-joe-v2_1/math/index.d.ts +0 -37
  496. package/build/dex/trader-joe-v2_1/math/index.js +0 -291
  497. package/build/dex/trader-joe-v2_1/math/index.js.map +0 -1
  498. package/build/dex/trader-joe-v2_1/trader-joe-v2.1.d.ts +0 -0
  499. package/build/dex/trader-joe-v2_1/trader-joe-v2.1.js +0 -384
  500. package/build/dex/trader-joe-v2_1/trader-joe-v2.1.js.map +0 -1
  501. package/build/dex/trader-joe-v2_1/trader-joe-v2_1-pool.d.ts +0 -60
  502. package/build/dex/trader-joe-v2_1/trader-joe-v2_1-pool.js +0 -247
  503. package/build/dex/trader-joe-v2_1/trader-joe-v2_1-pool.js.map +0 -1
  504. package/build/dex/trader-joe-v2_1/trader-joe-v2_1.d.ts +0 -53
  505. package/build/dex/trader-joe-v2_1/trader-joe-v2_1.js +0 -307
  506. package/build/dex/trader-joe-v2_1/trader-joe-v2_1.js.map +0 -1
  507. package/build/dex/trader-joe-v2_1/types.d.ts +0 -82
  508. package/build/dex/trader-joe-v2_1/types.js +0 -9
  509. package/build/dex/trader-joe-v2_1/types.js.map +0 -1
  510. package/build/dex/wombat/wombat-pool-poller.d.ts +0 -22
  511. package/build/dex/wombat/wombat-pool-poller.js +0 -164
  512. package/build/dex/wombat/wombat-pool-poller.js.map +0 -1
  513. package/build/dex-helper/Cache.d.ts +0 -31
  514. package/build/dex-helper/Cache.js +0 -106
  515. package/build/dex-helper/Cache.js.map +0 -1
  516. package/build/dex-helper/RedisBatcher.d.ts +0 -20
  517. package/build/dex-helper/RedisBatcher.js +0 -75
  518. package/build/dex-helper/RedisBatcher.js.map +0 -1
  519. package/build/dex-helper/RedisWrapper.d.ts +0 -37
  520. package/build/dex-helper/RedisWrapper.js +0 -165
  521. package/build/dex-helper/RedisWrapper.js.map +0 -1
@@ -0,0 +1,690 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.RamsesV2 = void 0;
30
+ const abi_1 = require("@ethersproject/abi");
31
+ const lodash_1 = __importDefault(require("lodash"));
32
+ const solidity_1 = require("@ethersproject/solidity");
33
+ const constants_1 = require("../../constants");
34
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
35
+ const utils_1 = require("../../utils");
36
+ const types_1 = require("./types");
37
+ const simple_exchange_1 = require("../simple-exchange");
38
+ const config_1 = require("./config");
39
+ const ramses_v2_pool_1 = require("./ramses-v2-pool");
40
+ const UniswapV3Router_abi_json_1 = __importDefault(require("../../abi/uniswap-v3/UniswapV3Router.abi.json"));
41
+ const UniswapV3Quoter_abi_json_1 = __importDefault(require("../../abi/uniswap-v3/UniswapV3Quoter.abi.json"));
42
+ const UniswapMulti_abi_json_1 = __importDefault(require("../../abi/uniswap-v3/UniswapMulti.abi.json"));
43
+ const DirectSwap_json_1 = __importDefault(require("../../abi/DirectSwap.json"));
44
+ const RamsesV2StateMulticall_abi_json_1 = __importDefault(require("../../abi/RamsesV2StateMulticall.abi.json"));
45
+ const constants_2 = require("./constants");
46
+ const ts_essentials_1 = require("ts-essentials");
47
+ const uniswap_v3_math_1 = require("./contract-math/uniswap-v3-math");
48
+ const balancer_fetcher_1 = require("../../lib/tokens/balancer-fetcher");
49
+ const types_2 = require("../../lib/tokens/types");
50
+ const UNISWAPV3_CLEAN_NOT_EXISTING_POOL_TTL_MS = 60 * 60 * 24 * 1000; // 24 hours
51
+ const UNISWAPV3_CLEAN_NOT_EXISTING_POOL_INTERVAL_MS = 30 * 60 * 1000; // Once in 30 minutes
52
+ const UNISWAPV3_QUOTE_GASLIMIT = 200000;
53
+ class RamsesV2 extends simple_exchange_1.SimpleExchange {
54
+ constructor(network, dexKey, dexHelper, adapters = config_1.Adapters[network] || {}, routerIface = new abi_1.Interface(UniswapV3Router_abi_json_1.default), quoterIface = new abi_1.Interface(UniswapV3Quoter_abi_json_1.default), config = config_1.RamsesV2Config[dexKey][network]) {
55
+ super(dexHelper, dexKey);
56
+ this.network = network;
57
+ this.dexHelper = dexHelper;
58
+ this.adapters = adapters;
59
+ this.routerIface = routerIface;
60
+ this.quoterIface = quoterIface;
61
+ this.config = config;
62
+ this.isFeeOnTransferSupported = false;
63
+ this.eventPools = {};
64
+ this.hasConstantPriceLargeAmounts = false;
65
+ this.needWrapNative = true;
66
+ this.directSwapIface = new abi_1.Interface(DirectSwap_json_1.default);
67
+ this.logger = dexHelper.getLogger(dexKey + '-' + network);
68
+ this.uniswapMulti = new this.dexHelper.web3Provider.eth.Contract(UniswapMulti_abi_json_1.default, this.config.uniswapMulticall);
69
+ this.stateMultiContract = new this.dexHelper.web3Provider.eth.Contract(RamsesV2StateMulticall_abi_json_1.default, this.config.stateMulticall);
70
+ // To receive revert reasons
71
+ this.dexHelper.web3Provider.eth.handleRevert = false;
72
+ // Normalize once all config addresses and use across all scenarios
73
+ this.config = this._toLowerForAllConfigAddresses();
74
+ this.notExistingPoolSetKey =
75
+ `${constants_1.CACHE_PREFIX}_${network}_${dexKey}_not_existings_pool_set`.toLowerCase();
76
+ }
77
+ get supportedFees() {
78
+ return this.config.supportedFees;
79
+ }
80
+ getAdapters(side) {
81
+ return this.adapters[side] ? this.adapters[side] : null;
82
+ }
83
+ getPoolIdentifier(srcAddress, destAddress, fee) {
84
+ const tokenAddresses = this._sortTokens(srcAddress, destAddress).join('_');
85
+ return `${this.dexKey}_${tokenAddresses}_${fee}`;
86
+ }
87
+ async initializePricing(blockNumber) {
88
+ if (!this.dexHelper.config.isSlave) {
89
+ const cleanExpiredNotExistingPoolsKeys = async () => {
90
+ const maxTimestamp = Date.now() - UNISWAPV3_CLEAN_NOT_EXISTING_POOL_TTL_MS;
91
+ await this.dexHelper.cache.zremrangebyscore(this.notExistingPoolSetKey, 0, maxTimestamp);
92
+ };
93
+ this.intervalTask = setInterval(cleanExpiredNotExistingPoolsKeys.bind(this), UNISWAPV3_CLEAN_NOT_EXISTING_POOL_INTERVAL_MS);
94
+ }
95
+ }
96
+ async getPool(srcAddress, destAddress, fee, blockNumber) {
97
+ let pool = this.eventPools[this.getPoolIdentifier(srcAddress, destAddress, fee)];
98
+ if (pool === undefined) {
99
+ const [token0, token1] = this._sortTokens(srcAddress, destAddress);
100
+ const key = `${token0}_${token1}_${fee}`.toLowerCase();
101
+ const notExistingPoolScore = await this.dexHelper.cache.zscore(this.notExistingPoolSetKey, key);
102
+ const poolDoesNotExist = notExistingPoolScore !== null;
103
+ if (poolDoesNotExist) {
104
+ this.eventPools[this.getPoolIdentifier(srcAddress, destAddress, fee)] =
105
+ null;
106
+ return null;
107
+ }
108
+ await this.dexHelper.cache.hset(this.dexmapKey, key, JSON.stringify({
109
+ token0,
110
+ token1,
111
+ fee: fee.toString(),
112
+ }));
113
+ this.logger.trace(`starting to listen to new pool: ${key}`);
114
+ pool = new ramses_v2_pool_1.RamsesV2EventPool(this.dexHelper, this.dexKey, this.stateMultiContract, this.erc20Interface, this.config.factory, fee, token0, token1, this.logger, this.cacheStateKey, this.config.initHash);
115
+ try {
116
+ await pool.initialize(blockNumber, {
117
+ initCallback: (state) => {
118
+ //really hacky, we need to push poolAddress so that we subscribeToLogs in StatefulEventSubscriber
119
+ pool.addressesSubscribed[0] = state.pool;
120
+ pool.poolAddress = state.pool;
121
+ },
122
+ });
123
+ }
124
+ catch (e) {
125
+ if (e instanceof Error && e.message.endsWith('Pool does not exist')) {
126
+ // no need to await we want the set to have the pool key but it's not blocking
127
+ this.dexHelper.cache.zadd(this.notExistingPoolSetKey, [Date.now(), key], 'NX');
128
+ // Pool does not exist for this feeCode, so we can set it to null
129
+ // to prevent more requests for this pool
130
+ pool = null;
131
+ this.logger.trace(`${this.dexHelper}: Pool: srcAddress=${srcAddress}, destAddress=${destAddress}, fee=${fee} not found`, e);
132
+ }
133
+ else {
134
+ // Unexpected Error. Break execution. Do not save the pool in this.eventPools
135
+ this.logger.error(`${this.dexKey}: Can not generate pool state for srcAddress=${srcAddress}, destAddress=${destAddress}, fee=${fee} pool`, e);
136
+ throw new Error('Cannot generate pool state');
137
+ }
138
+ }
139
+ if (pool !== null) {
140
+ const allEventPools = Object.values(this.eventPools);
141
+ this.logger.info(`starting to listen to new non-null pool: ${key}. Already following ${allEventPools
142
+ // Not that I like this reduce, but since it is done only on initialization, expect this to be ok
143
+ .reduce((acc, curr) => (curr !== null ? ++acc : acc), 0)} non-null pools or ${allEventPools.length} total pools`);
144
+ }
145
+ this.eventPools[this.getPoolIdentifier(srcAddress, destAddress, fee)] =
146
+ pool;
147
+ }
148
+ return pool;
149
+ }
150
+ async addMasterPool(poolKey, blockNumber) {
151
+ const _pairs = await this.dexHelper.cache.hget(this.dexmapKey, poolKey);
152
+ if (!_pairs) {
153
+ this.logger.warn(`did not find poolConfig in for key ${this.dexmapKey} ${poolKey}`);
154
+ return false;
155
+ }
156
+ const poolInfo = JSON.parse(_pairs);
157
+ const pool = await this.getPool(poolInfo.token0, poolInfo.token1, BigInt(poolInfo.fee), blockNumber);
158
+ if (!pool) {
159
+ return false;
160
+ }
161
+ return true;
162
+ }
163
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
164
+ const _srcToken = this.dexHelper.config.wrapETH(srcToken);
165
+ const _destToken = this.dexHelper.config.wrapETH(destToken);
166
+ const [_srcAddress, _destAddress] = this._getLoweredAddresses(_srcToken, _destToken);
167
+ if (_srcAddress === _destAddress)
168
+ return [];
169
+ const pools = (await Promise.all(this.supportedFees.map(async (fee) => this.getPool(_srcAddress, _destAddress, fee, blockNumber)))).filter(pool => pool);
170
+ if (pools.length === 0)
171
+ return [];
172
+ return pools.map(pool => this.getPoolIdentifier(_srcAddress, _destAddress, pool.feeCode));
173
+ }
174
+ async getPricingFromRpc(from, to, amounts, side, pools) {
175
+ if (pools.length === 0) {
176
+ return null;
177
+ }
178
+ this.logger.warn(`fallback to rpc for ${pools.length} pool(s)`);
179
+ const requests = pools.map(pool => ({
180
+ owner: pool.poolAddress,
181
+ asset: side == constants_1.SwapSide.SELL ? from.address : to.address,
182
+ assetType: types_2.AssetType.ERC20,
183
+ ids: [
184
+ {
185
+ id: types_2.DEFAULT_ID_ERC20,
186
+ spenders: [],
187
+ },
188
+ ],
189
+ }), []);
190
+ const balances = await (0, balancer_fetcher_1.getBalances)(this.dexHelper.multiWrapper, requests);
191
+ pools = pools.filter((pool, index) => {
192
+ const balance = balances[index].amounts[types_2.DEFAULT_ID_ERC20_AS_STRING];
193
+ if (balance >= amounts[amounts.length - 1]) {
194
+ return true;
195
+ }
196
+ this.logger.warn(`[${this.network}][${pool.parentName}] have no balance ${pool.poolAddress} ${from.address} ${to.address}. (Balance: ${balance})`);
197
+ return false;
198
+ });
199
+ pools.forEach(pool => {
200
+ this.logger.warn(`[${this.network}][${pool.parentName}] fallback to rpc for ${pool.name}`);
201
+ });
202
+ const unitVolume = (0, utils_1.getBigIntPow)((side === constants_1.SwapSide.SELL ? from : to).decimals);
203
+ const chunks = amounts.length - 1;
204
+ const _width = Math.floor(chunks / this.config.chunksCount);
205
+ const _amounts = [unitVolume].concat(Array.from(Array(this.config.chunksCount).keys()).map(i => amounts[(i + 1) * _width]));
206
+ const calldata = pools.map(pool => _amounts.map(_amount => ({
207
+ target: this.config.quoter,
208
+ gasLimit: UNISWAPV3_QUOTE_GASLIMIT,
209
+ callData: side === constants_1.SwapSide.SELL
210
+ ? this.quoterIface.encodeFunctionData('quoteExactInputSingle', [
211
+ [
212
+ from.address,
213
+ to.address,
214
+ _amount.toString(),
215
+ pool.feeCodeAsString,
216
+ 0, //sqrtPriceLimitX96
217
+ ],
218
+ ])
219
+ : this.quoterIface.encodeFunctionData('quoteExactOutputSingle', [
220
+ [
221
+ from.address,
222
+ to.address,
223
+ _amount.toString(),
224
+ pool.feeCodeAsString,
225
+ 0, //sqrtPriceLimitX96
226
+ ],
227
+ ]),
228
+ })));
229
+ const data = await this.uniswapMulti.methods
230
+ .multicall(calldata.flat())
231
+ .call();
232
+ const decode = (j) => {
233
+ if (!data.returnData[j].success) {
234
+ return 0n;
235
+ }
236
+ const decoded = abi_1.defaultAbiCoder.decode(['uint256'], data.returnData[j].returnData);
237
+ return BigInt(decoded[0].toString());
238
+ };
239
+ let i = 0;
240
+ const result = pools.map(pool => {
241
+ const _rates = _amounts.map(() => decode(i++));
242
+ const unit = _rates[0];
243
+ const prices = (0, utils_1.interpolate)(_amounts.slice(1), _rates.slice(1), amounts, side);
244
+ return {
245
+ prices,
246
+ unit,
247
+ data: {
248
+ path: [
249
+ {
250
+ tokenIn: from.address,
251
+ tokenOut: to.address,
252
+ fee: pool.feeCodeAsString,
253
+ },
254
+ ],
255
+ exchange: pool.poolAddress,
256
+ },
257
+ poolIdentifier: this.getPoolIdentifier(pool.token0, pool.token1, pool.feeCode),
258
+ exchange: this.dexKey,
259
+ gasCost: prices.map(p => (p === 0n ? 0 : UNISWAPV3_QUOTE_GASLIMIT)),
260
+ poolAddresses: [pool.poolAddress],
261
+ };
262
+ });
263
+ return result;
264
+ }
265
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
266
+ try {
267
+ const _srcToken = this.dexHelper.config.wrapETH(srcToken);
268
+ const _destToken = this.dexHelper.config.wrapETH(destToken);
269
+ const [_srcAddress, _destAddress] = this._getLoweredAddresses(_srcToken, _destToken);
270
+ if (_srcAddress === _destAddress)
271
+ return null;
272
+ let selectedPools = [];
273
+ if (!limitPools) {
274
+ selectedPools = (await Promise.all(this.supportedFees.map(async (fee) => {
275
+ const locallyFoundPool = this.eventPools[this.getPoolIdentifier(_srcAddress, _destAddress, fee)];
276
+ if (locallyFoundPool)
277
+ return locallyFoundPool;
278
+ const newlyFetchedPool = await this.getPool(_srcAddress, _destAddress, fee, blockNumber);
279
+ return newlyFetchedPool;
280
+ }))).filter(utils_1.isTruthy);
281
+ }
282
+ else {
283
+ const pairIdentifierWithoutFee = this.getPoolIdentifier(_srcAddress, _destAddress, 0n).slice(0, -1);
284
+ const poolIdentifiers = limitPools.filter(identifier => identifier.startsWith(pairIdentifierWithoutFee));
285
+ selectedPools = (await Promise.all(poolIdentifiers.map(async (identifier) => {
286
+ let locallyFoundPool = this.eventPools[identifier];
287
+ if (locallyFoundPool)
288
+ return locallyFoundPool;
289
+ const [, srcAddress, destAddress, fee] = identifier.split('_');
290
+ const newlyFetchedPool = await this.getPool(srcAddress, destAddress, BigInt(fee), blockNumber);
291
+ return newlyFetchedPool;
292
+ }))).filter(utils_1.isTruthy);
293
+ }
294
+ if (selectedPools.length === 0)
295
+ return null;
296
+ const poolsToUse = selectedPools.reduce((acc, pool) => {
297
+ let state = pool.getState(blockNumber);
298
+ if (state === null) {
299
+ this.logger.trace(`${this.dexKey}: State === null. Fallback to rpc ${pool.name}`);
300
+ acc.poolWithoutState.push(pool);
301
+ }
302
+ else {
303
+ acc.poolWithState.push(pool);
304
+ }
305
+ return acc;
306
+ }, {
307
+ poolWithState: [],
308
+ poolWithoutState: [],
309
+ });
310
+ const rpcResultsPromise = this.getPricingFromRpc(_srcToken, _destToken, amounts, side, poolsToUse.poolWithoutState);
311
+ const states = poolsToUse.poolWithState.map(p => p.getState(blockNumber));
312
+ const unitAmount = (0, utils_1.getBigIntPow)(side == constants_1.SwapSide.SELL ? _srcToken.decimals : _destToken.decimals);
313
+ const _amounts = [...amounts.slice(1)];
314
+ const [token0] = this._sortTokens(_srcAddress, _destAddress);
315
+ const zeroForOne = token0 === _srcAddress ? true : false;
316
+ const result = await Promise.all(poolsToUse.poolWithState.map(async (pool, i) => {
317
+ const state = states[i];
318
+ if (state.liquidity <= 0n) {
319
+ this.logger.trace(`pool have 0 liquidity`);
320
+ return null;
321
+ }
322
+ const balanceDestToken = _destAddress === pool.token0 ? state.balance0 : state.balance1;
323
+ const unitResult = this._getOutputs(state, [unitAmount], zeroForOne, side, balanceDestToken);
324
+ const pricesResult = this._getOutputs(state, _amounts, zeroForOne, side, balanceDestToken);
325
+ if (!unitResult || !pricesResult) {
326
+ this.logger.debug('Prices or unit is not calculated');
327
+ return null;
328
+ }
329
+ const prices = [0n, ...pricesResult.outputs];
330
+ const gasCost = [
331
+ 0,
332
+ ...pricesResult.outputs.map((p, index) => {
333
+ if (p == 0n) {
334
+ return 0;
335
+ }
336
+ else {
337
+ return (constants_2.UNISWAPV3_POOL_SEARCH_OVERHEAD +
338
+ constants_2.UNISWAPV3_TICK_BASE_OVERHEAD +
339
+ pricesResult.tickCounts[index] * constants_2.UNISWAPV3_TICK_GAS_COST);
340
+ }
341
+ }),
342
+ ];
343
+ return {
344
+ unit: unitResult.outputs[0],
345
+ prices,
346
+ data: {
347
+ path: [
348
+ {
349
+ tokenIn: _srcAddress,
350
+ tokenOut: _destAddress,
351
+ fee: pool.feeCode.toString(),
352
+ },
353
+ ],
354
+ },
355
+ poolIdentifier: this.getPoolIdentifier(pool.token0, pool.token1, pool.feeCode),
356
+ exchange: this.dexKey,
357
+ gasCost: gasCost,
358
+ poolAddresses: [pool.poolAddress],
359
+ };
360
+ }));
361
+ const rpcResults = await rpcResultsPromise;
362
+ const notNullResult = result.filter(res => res !== null);
363
+ if (rpcResults) {
364
+ rpcResults.forEach(r => {
365
+ if (r) {
366
+ notNullResult.push(r);
367
+ }
368
+ });
369
+ }
370
+ return notNullResult;
371
+ }
372
+ catch (e) {
373
+ this.logger.error(`Error_getPricesVolume ${srcToken.symbol || srcToken.address}, ${destToken.symbol || destToken.address}, ${side}:`, e);
374
+ return null;
375
+ }
376
+ }
377
+ getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
378
+ const { path: rawPath } = data;
379
+ const path = this._encodePath(rawPath, side);
380
+ const payload = this.abiCoder.encodeParameter({
381
+ ParentStruct: {
382
+ path: 'bytes',
383
+ deadline: 'uint256',
384
+ },
385
+ }, {
386
+ path,
387
+ deadline: (0, simple_exchange_1.getLocalDeadlineAsFriendlyPlaceholder)(), // FIXME: more gas efficient to pass block.timestamp in adapter
388
+ });
389
+ return {
390
+ targetExchange: this.config.router,
391
+ payload,
392
+ networkFee: '0',
393
+ };
394
+ }
395
+ getCalldataGasCost(poolPrices) {
396
+ const gasCost = CALLDATA_GAS_COST.DEX_OVERHEAD +
397
+ CALLDATA_GAS_COST.LENGTH_SMALL +
398
+ // ParentStruct header
399
+ CALLDATA_GAS_COST.OFFSET_SMALL +
400
+ // ParentStruct -> path header
401
+ CALLDATA_GAS_COST.OFFSET_SMALL +
402
+ // ParentStruct -> deadline
403
+ CALLDATA_GAS_COST.TIMESTAMP +
404
+ // ParentStruct -> path (20+3+20 = 43 = 32+11 bytes)
405
+ CALLDATA_GAS_COST.LENGTH_SMALL +
406
+ CALLDATA_GAS_COST.FULL_WORD +
407
+ CALLDATA_GAS_COST.wordNonZeroBytes(11);
408
+ const arr = new Array(poolPrices.prices.length);
409
+ poolPrices.prices.forEach((p, index) => {
410
+ if (p == 0n) {
411
+ arr[index] = 0;
412
+ }
413
+ else {
414
+ arr[index] = gasCost;
415
+ }
416
+ });
417
+ return arr;
418
+ }
419
+ getTokenFromAddress(address) {
420
+ // In this Dex decimals are not used
421
+ return { address, decimals: 0 };
422
+ }
423
+ async preProcessTransaction(optimalSwapExchange, srcToken, _0, _1, options) {
424
+ if (!options.isDirectMethod) {
425
+ return [
426
+ optimalSwapExchange,
427
+ {
428
+ deadline: BigInt((0, simple_exchange_1.getLocalDeadlineAsFriendlyPlaceholder)()),
429
+ },
430
+ ];
431
+ }
432
+ (0, ts_essentials_1.assert)(optimalSwapExchange.data !== undefined, `preProcessTransaction: data field is missing`);
433
+ let isApproved;
434
+ try {
435
+ this.erc20Contract.options.address =
436
+ this.dexHelper.config.wrapETH(srcToken).address;
437
+ const allowance = await this.erc20Contract.methods
438
+ .allowance(this.augustusAddress, this.config.router)
439
+ .call(undefined, 'latest');
440
+ isApproved =
441
+ BigInt(allowance.toString()) >= BigInt(optimalSwapExchange.srcAmount);
442
+ }
443
+ catch (e) {
444
+ this.logger.error(`preProcessTransaction failed to retrieve allowance info: `, e);
445
+ }
446
+ return [
447
+ {
448
+ ...optimalSwapExchange,
449
+ data: {
450
+ ...optimalSwapExchange.data,
451
+ isApproved,
452
+ },
453
+ },
454
+ {
455
+ deadline: BigInt((0, simple_exchange_1.getLocalDeadlineAsFriendlyPlaceholder)()),
456
+ },
457
+ ];
458
+ }
459
+ getDirectParam(srcToken, destToken, srcAmount, destAmount, expectedAmount, data, side, permit, uuid, feePercent, deadline, partner, beneficiary, contractMethod) {
460
+ if (contractMethod !== constants_2.DirectMethods.directSell &&
461
+ contractMethod !== constants_2.DirectMethods.directBuy) {
462
+ throw new Error(`Invalid contract method ${contractMethod}`);
463
+ }
464
+ let isApproved = !!data.isApproved;
465
+ if (data.isApproved === undefined) {
466
+ this.logger.warn(`isApproved is undefined, defaulting to false`);
467
+ }
468
+ const path = this._encodePath(data.path, side);
469
+ const swapParams = [
470
+ srcToken,
471
+ destToken,
472
+ this.config.router,
473
+ srcAmount,
474
+ destAmount,
475
+ expectedAmount,
476
+ feePercent,
477
+ deadline,
478
+ partner,
479
+ isApproved,
480
+ beneficiary,
481
+ path,
482
+ permit,
483
+ (0, utils_1.uuidToBytes16)(uuid),
484
+ ];
485
+ const encoder = (...params) => {
486
+ return this.directSwapIface.encodeFunctionData(side === constants_1.SwapSide.SELL
487
+ ? constants_2.DirectMethods.directSell
488
+ : constants_2.DirectMethods.directBuy, [params]);
489
+ };
490
+ return {
491
+ params: swapParams,
492
+ encoder,
493
+ networkFee: '0',
494
+ };
495
+ }
496
+ static getDirectFunctionName() {
497
+ return [constants_2.DirectMethods.directSell, constants_2.DirectMethods.directBuy];
498
+ }
499
+ async getSimpleParam(srcToken, destToken, srcAmount, destAmount, data, side) {
500
+ const swapFunction = side === constants_1.SwapSide.SELL
501
+ ? types_1.RamsesV2Functions.exactInput
502
+ : types_1.RamsesV2Functions.exactOutput;
503
+ const path = this._encodePath(data.path, side);
504
+ const swapFunctionParams = side === constants_1.SwapSide.SELL
505
+ ? {
506
+ recipient: this.augustusAddress,
507
+ deadline: (0, simple_exchange_1.getLocalDeadlineAsFriendlyPlaceholder)(),
508
+ amountIn: srcAmount,
509
+ amountOutMinimum: destAmount,
510
+ path,
511
+ }
512
+ : {
513
+ recipient: this.augustusAddress,
514
+ deadline: (0, simple_exchange_1.getLocalDeadlineAsFriendlyPlaceholder)(),
515
+ amountOut: destAmount,
516
+ amountInMaximum: srcAmount,
517
+ path,
518
+ };
519
+ const swapData = this.routerIface.encodeFunctionData(swapFunction, [
520
+ swapFunctionParams,
521
+ ]);
522
+ return this.buildSimpleParamWithoutWETHConversion(srcToken, srcAmount, destToken, destAmount, swapData, this.config.router);
523
+ }
524
+ async getTopPoolsForToken(tokenAddress, limit) {
525
+ const _tokenAddress = tokenAddress.toLowerCase();
526
+ const res = await this._querySubgraph(`query ($token: Bytes!, $count: Int) {
527
+ pools0: pools(first: $count, orderBy: totalValueLockedUSD, orderDirection: desc, where: {token0: $token}) {
528
+ id
529
+ token0 {
530
+ id
531
+ decimals
532
+ }
533
+ token1 {
534
+ id
535
+ decimals
536
+ }
537
+ totalValueLockedUSD
538
+ }
539
+ pools1: pools(first: $count, orderBy: totalValueLockedUSD, orderDirection: desc, where: {token1: $token}) {
540
+ id
541
+ token0 {
542
+ id
543
+ decimals
544
+ }
545
+ token1 {
546
+ id
547
+ decimals
548
+ }
549
+ totalValueLockedUSD
550
+ }
551
+ }`, {
552
+ token: _tokenAddress,
553
+ count: limit,
554
+ });
555
+ if (!(res && res.pools0 && res.pools1)) {
556
+ this.logger.error(`Error_${this.dexKey}_Subgraph: couldn't fetch the pools from the subgraph`);
557
+ return [];
558
+ }
559
+ const pools0 = lodash_1.default.map(res.pools0, pool => ({
560
+ exchange: this.dexKey,
561
+ address: pool.id.toLowerCase(),
562
+ connectorTokens: [
563
+ {
564
+ address: pool.token1.id.toLowerCase(),
565
+ decimals: parseInt(pool.token1.decimals),
566
+ },
567
+ ],
568
+ liquidityUSD: parseFloat(pool.totalValueLockedUSD) * constants_2.UNISWAPV3_EFFICIENCY_FACTOR,
569
+ }));
570
+ const pools1 = lodash_1.default.map(res.pools1, pool => ({
571
+ exchange: this.dexKey,
572
+ address: pool.id.toLowerCase(),
573
+ connectorTokens: [
574
+ {
575
+ address: pool.token0.id.toLowerCase(),
576
+ decimals: parseInt(pool.token0.decimals),
577
+ },
578
+ ],
579
+ liquidityUSD: parseFloat(pool.totalValueLockedUSD) * constants_2.UNISWAPV3_EFFICIENCY_FACTOR,
580
+ }));
581
+ const pools = lodash_1.default.slice(lodash_1.default.sortBy(lodash_1.default.concat(pools0, pools1), [pool => -1 * pool.liquidityUSD]), 0, limit);
582
+ return pools;
583
+ }
584
+ async _getPoolsFromIdentifiers(poolIdentifiers, blockNumber) {
585
+ const pools = await Promise.all(poolIdentifiers.map(async (identifier) => {
586
+ const [, srcAddress, destAddress, fee] = identifier.split('_');
587
+ return this.getPool(srcAddress, destAddress, BigInt(fee), blockNumber);
588
+ }));
589
+ return pools.filter(pool => pool);
590
+ }
591
+ _getLoweredAddresses(srcToken, destToken) {
592
+ return [srcToken.address.toLowerCase(), destToken.address.toLowerCase()];
593
+ }
594
+ _sortTokens(srcAddress, destAddress) {
595
+ return [srcAddress, destAddress].sort((a, b) => (a < b ? -1 : 1));
596
+ }
597
+ _toLowerForAllConfigAddresses() {
598
+ // If new config property will be added, the TS will throw compile error
599
+ const newConfig = {
600
+ router: this.config.router.toLowerCase(),
601
+ quoter: this.config.quoter.toLowerCase(),
602
+ factory: this.config.factory.toLowerCase(),
603
+ supportedFees: this.config.supportedFees,
604
+ stateMulticall: this.config.stateMulticall.toLowerCase(),
605
+ chunksCount: this.config.chunksCount,
606
+ uniswapMulticall: this.config.uniswapMulticall,
607
+ deployer: this.config.deployer?.toLowerCase(),
608
+ initHash: this.config.initHash,
609
+ subgraphURL: this.config.subgraphURL,
610
+ };
611
+ return newConfig;
612
+ }
613
+ _getOutputs(state, amounts, zeroForOne, side, destTokenBalance) {
614
+ try {
615
+ const outputsResult = uniswap_v3_math_1.uniswapV3Math.queryOutputs(state, amounts, zeroForOne, side);
616
+ if (side === constants_1.SwapSide.SELL) {
617
+ if (outputsResult.outputs[0] > destTokenBalance) {
618
+ return null;
619
+ }
620
+ for (let i = 0; i < outputsResult.outputs.length; i++) {
621
+ if (outputsResult.outputs[i] > destTokenBalance) {
622
+ outputsResult.outputs[i] = 0n;
623
+ outputsResult.tickCounts[i] = 0;
624
+ }
625
+ }
626
+ }
627
+ else {
628
+ if (amounts[0] > destTokenBalance) {
629
+ return null;
630
+ }
631
+ // This may be improved by first checking outputs and requesting outputs
632
+ // only for amounts that makes more sense, but I don't think this is really
633
+ // important now
634
+ for (let i = 0; i < amounts.length; i++) {
635
+ if (amounts[i] > destTokenBalance) {
636
+ outputsResult.outputs[i] = 0n;
637
+ outputsResult.tickCounts[i] = 0;
638
+ }
639
+ }
640
+ }
641
+ return outputsResult;
642
+ }
643
+ catch (e) {
644
+ this.logger.debug(`${this.dexKey}: received error in _getOutputs while calculating outputs`, e);
645
+ return null;
646
+ }
647
+ }
648
+ async _querySubgraph(query, variables, timeout = 30000) {
649
+ try {
650
+ const res = await this.dexHelper.httpRequest.post(this.config.subgraphURL, { query, variables }, undefined, { timeout: timeout });
651
+ return res.data;
652
+ }
653
+ catch (e) {
654
+ this.logger.error(`${this.dexKey}: can not query subgraph: `, e);
655
+ return {};
656
+ }
657
+ }
658
+ _encodePath(path, side) {
659
+ if (path.length === 0) {
660
+ this.logger.error(`${this.dexKey}: Received invalid path=${path} for side=${side} to encode`);
661
+ return '0x';
662
+ }
663
+ const { _path, types } = path.reduce(({ _path, types }, curr, index) => {
664
+ if (index === 0) {
665
+ return {
666
+ types: ['address', 'uint24', 'address'],
667
+ _path: [curr.tokenIn, curr.fee, curr.tokenOut],
668
+ };
669
+ }
670
+ else {
671
+ return {
672
+ types: [...types, 'uint24', 'address'],
673
+ _path: [..._path, curr.fee, curr.tokenOut],
674
+ };
675
+ }
676
+ }, { _path: [], types: [] });
677
+ return side === constants_1.SwapSide.BUY
678
+ ? (0, solidity_1.pack)(types.reverse(), _path.reverse())
679
+ : (0, solidity_1.pack)(types, _path);
680
+ }
681
+ releaseResources() {
682
+ if (this.intervalTask !== undefined) {
683
+ clearInterval(this.intervalTask);
684
+ this.intervalTask = undefined;
685
+ }
686
+ }
687
+ }
688
+ exports.RamsesV2 = RamsesV2;
689
+ RamsesV2.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(lodash_1.default.pick(config_1.RamsesV2Config, ['RamsesV2']));
690
+ //# sourceMappingURL=ramses-v2.js.map