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

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 (513) 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 -0
  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/{trader-joe-v2-1-2 → integral}/config.d.ts +1 -1
  100. package/build/dex/integral/config.js +18 -0
  101. package/build/dex/integral/config.js.map +1 -0
  102. package/build/dex/{angle-transmuter/morphoOracle.d.ts → integral/integral-pool.d.ts} +12 -15
  103. package/build/dex/integral/integral-pool.js +67 -0
  104. package/build/dex/integral/integral-pool.js.map +1 -0
  105. package/build/dex/integral/integral.d.ts +48 -0
  106. package/build/dex/integral/integral.js +402 -0
  107. package/build/dex/integral/integral.js.map +1 -0
  108. package/build/dex/integral/types.d.ts +25 -0
  109. package/build/dex/integral/types.js +9 -0
  110. package/build/dex/integral/types.js.map +1 -0
  111. package/build/dex/jarvis-v6/jarvis-v6.js +1 -0
  112. package/build/dex/jarvis-v6/jarvis-v6.js.map +1 -1
  113. package/build/dex/jarvis.js +8 -0
  114. package/build/dex/jarvis.js.map +1 -1
  115. package/build/dex/kyberdmm/kyberdmm.js +4 -0
  116. package/build/dex/kyberdmm/kyberdmm.js.map +1 -1
  117. package/build/dex/lido/lido.js +5 -0
  118. package/build/dex/lido/lido.js.map +1 -1
  119. package/build/{abi/angle-transmuter/MorphoOracle.json → dex/lighter-v1/abi/erc20.json} +126 -97
  120. package/build/dex/lighter-v1/abi/factory.json +291 -0
  121. package/build/dex/lighter-v1/abi/order_book.json +594 -0
  122. package/build/dex/lighter-v1/abi/order_book_helper.json +176 -0
  123. package/build/dex/lighter-v1/abi/router.json +488 -0
  124. package/build/dex/{trader-joe-v2_1 → lighter-v1}/config.d.ts +1 -1
  125. package/build/dex/lighter-v1/config.js +17 -0
  126. package/build/dex/lighter-v1/config.js.map +1 -0
  127. package/build/dex/lighter-v1/constants.d.ts +2 -0
  128. package/build/dex/lighter-v1/constants.js +13 -0
  129. package/build/dex/lighter-v1/constants.js.map +1 -0
  130. package/build/dex/lighter-v1/lighter-v1-pool.d.ts +57 -0
  131. package/build/dex/lighter-v1/lighter-v1-pool.js +310 -0
  132. package/build/dex/lighter-v1/lighter-v1-pool.js.map +1 -0
  133. package/build/dex/{angle-transmuter/angle-transmuter.d.ts → lighter-v1/lighter-v1.d.ts} +17 -31
  134. package/build/dex/lighter-v1/lighter-v1.js +331 -0
  135. package/build/dex/lighter-v1/lighter-v1.js.map +1 -0
  136. package/build/dex/lighter-v1/types.d.ts +40 -0
  137. package/build/dex/lighter-v1/types.js +3 -0
  138. package/build/dex/lighter-v1/types.js.map +1 -0
  139. package/build/dex/maker-psm/maker-psm.js +1 -0
  140. package/build/dex/maker-psm/maker-psm.js.map +1 -1
  141. package/build/dex/maverick-v1/maverick-v1.js +4 -0
  142. package/build/dex/maverick-v1/maverick-v1.js.map +1 -1
  143. package/build/dex/nerve/nerve.js +4 -0
  144. package/build/dex/nerve/nerve.js.map +1 -1
  145. package/build/dex/onebit/onebit.js +5 -0
  146. package/build/dex/onebit/onebit.js.map +1 -1
  147. package/build/dex/pancakeswap-v3/pancakeswap-v3.js +4 -0
  148. package/build/dex/pancakeswap-v3/pancakeswap-v3.js.map +1 -1
  149. package/build/dex/pancakeswap-v3/types.d.ts +14 -0
  150. package/build/dex/pancakeswap-v3/types.js +3 -0
  151. package/build/dex/pancakeswap-v3/types.js.map +1 -0
  152. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js +1 -0
  153. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js.map +1 -1
  154. package/build/dex/platypus/platypus.js +17 -3
  155. package/build/dex/platypus/platypus.js.map +1 -1
  156. package/build/dex/polygon-migrator/polygon-migrator.js +1 -0
  157. package/build/dex/polygon-migrator/polygon-migrator.js.map +1 -1
  158. package/build/dex/quick-perps/quick-perps.js +7 -1
  159. package/build/dex/quick-perps/quick-perps.js.map +1 -1
  160. package/build/dex/quickswap/camelot-v3.d.ts +6 -0
  161. package/build/dex/quickswap/camelot-v3.js +19 -0
  162. package/build/dex/quickswap/camelot-v3.js.map +1 -0
  163. package/build/dex/quickswap/zyberswap-v3.d.ts +6 -0
  164. package/build/dex/quickswap/zyberswap-v3.js +19 -0
  165. package/build/dex/quickswap/zyberswap-v3.js.map +1 -0
  166. package/build/dex/quickswap-v3.d.ts +21 -0
  167. package/build/dex/quickswap-v3.js +40 -0
  168. package/build/dex/quickswap-v3.js.map +1 -0
  169. package/build/dex/{angle-transmuter → ramses-v2}/config.d.ts +1 -1
  170. package/build/dex/ramses-v2/config.js +28 -0
  171. package/build/dex/ramses-v2/config.js.map +1 -0
  172. package/build/dex/ramses-v2/constants.d.ts +28 -0
  173. package/build/dex/ramses-v2/constants.js +35 -0
  174. package/build/dex/ramses-v2/constants.js.map +1 -0
  175. package/build/dex/ramses-v2/contract-math/BitMath.d.ts +4 -0
  176. package/build/dex/ramses-v2/contract-math/BitMath.js +93 -0
  177. package/build/dex/ramses-v2/contract-math/BitMath.js.map +1 -0
  178. package/build/dex/ramses-v2/contract-math/FixedPoint128.d.ts +3 -0
  179. package/build/dex/ramses-v2/contract-math/FixedPoint128.js +8 -0
  180. package/build/dex/ramses-v2/contract-math/FixedPoint128.js.map +1 -0
  181. package/build/dex/ramses-v2/contract-math/FixedPoint96.d.ts +4 -0
  182. package/build/dex/ramses-v2/contract-math/FixedPoint96.js +9 -0
  183. package/build/dex/ramses-v2/contract-math/FixedPoint96.js.map +1 -0
  184. package/build/dex/ramses-v2/contract-math/FullMath.d.ts +4 -0
  185. package/build/dex/ramses-v2/contract-math/FullMath.js +19 -0
  186. package/build/dex/ramses-v2/contract-math/FullMath.js.map +1 -0
  187. package/build/dex/ramses-v2/contract-math/LiquidityMath.d.ts +3 -0
  188. package/build/dex/ramses-v2/contract-math/LiquidityMath.js +22 -0
  189. package/build/dex/ramses-v2/contract-math/LiquidityMath.js.map +1 -0
  190. package/build/dex/ramses-v2/contract-math/Oracle.d.ts +10 -0
  191. package/build/dex/ramses-v2/contract-math/Oracle.js +133 -0
  192. package/build/dex/ramses-v2/contract-math/Oracle.js.map +1 -0
  193. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.d.ts +10 -0
  194. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js +91 -0
  195. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js.map +1 -0
  196. package/build/dex/ramses-v2/contract-math/SwapMath.d.ts +8 -0
  197. package/build/dex/ramses-v2/contract-math/SwapMath.js +70 -0
  198. package/build/dex/ramses-v2/contract-math/SwapMath.js.map +1 -0
  199. package/build/dex/ramses-v2/contract-math/Tick.d.ts +7 -0
  200. package/build/dex/ramses-v2/contract-math/Tick.js +45 -0
  201. package/build/dex/ramses-v2/contract-math/Tick.js.map +1 -0
  202. package/build/dex/ramses-v2/contract-math/TickBitMap.d.ts +8 -0
  203. package/build/dex/ramses-v2/contract-math/TickBitMap.js +87 -0
  204. package/build/dex/ramses-v2/contract-math/TickBitMap.js.map +1 -0
  205. package/build/dex/ramses-v2/contract-math/TickMath.d.ts +8 -0
  206. package/build/dex/ramses-v2/contract-math/TickMath.js +162 -0
  207. package/build/dex/ramses-v2/contract-math/TickMath.js.map +1 -0
  208. package/build/dex/ramses-v2/contract-math/UnsafeMath.d.ts +3 -0
  209. package/build/dex/ramses-v2/contract-math/UnsafeMath.js +10 -0
  210. package/build/dex/ramses-v2/contract-math/UnsafeMath.js.map +1 -0
  211. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.d.ts +18 -0
  212. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js +392 -0
  213. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js.map +1 -0
  214. package/build/dex/ramses-v2/contract-math/utils.d.ts +3 -0
  215. package/build/dex/ramses-v2/contract-math/utils.js +16 -0
  216. package/build/dex/ramses-v2/contract-math/utils.js.map +1 -0
  217. package/build/dex/ramses-v2/ramses-v2-pool.d.ts +42 -0
  218. package/build/dex/ramses-v2/ramses-v2-pool.js +307 -0
  219. package/build/dex/ramses-v2/ramses-v2-pool.js.map +1 -0
  220. package/build/dex/ramses-v2/ramses-v2.d.ts +61 -0
  221. package/build/dex/ramses-v2/ramses-v2.js +690 -0
  222. package/build/dex/ramses-v2/ramses-v2.js.map +1 -0
  223. package/build/dex/ramses-v2/types.d.ts +154 -0
  224. package/build/dex/ramses-v2/types.js +9 -0
  225. package/build/dex/ramses-v2/types.js.map +1 -0
  226. package/build/dex/ramses-v2/utils.d.ts +6 -0
  227. package/build/dex/ramses-v2/utils.js +71 -0
  228. package/build/dex/ramses-v2/utils.js.map +1 -0
  229. package/build/dex/smoothy/smoothy.js +1 -0
  230. package/build/dex/smoothy/smoothy.js.map +1 -1
  231. package/build/dex/solidly/forks-override/fvm.d.ts +20 -0
  232. package/build/dex/solidly/forks-override/fvm.js +42 -0
  233. package/build/dex/solidly/forks-override/fvm.js.map +1 -0
  234. package/build/dex/solidly/solidly.js +1 -0
  235. package/build/dex/solidly/solidly.js.map +1 -1
  236. package/build/dex/solidly-v3/solidly-v3.js +1 -0
  237. package/build/dex/solidly-v3/solidly-v3.js.map +1 -1
  238. package/build/dex/spark/spark.js +6 -0
  239. package/build/dex/spark/spark.js.map +1 -1
  240. package/build/dex/stable-pool/stable-pool.js +4 -0
  241. package/build/dex/stable-pool/stable-pool.js.map +1 -1
  242. package/build/dex/sushiswap-v3/config.d.ts +4 -0
  243. package/build/dex/sushiswap-v3/config.js +132 -0
  244. package/build/dex/sushiswap-v3/config.js.map +1 -0
  245. package/build/dex/sushiswap-v3/constants.d.ts +4 -0
  246. package/build/dex/sushiswap-v3/constants.js +32 -0
  247. package/build/dex/sushiswap-v3/constants.js.map +1 -0
  248. package/build/dex/sushiswap-v3/sushiswap-v3-original.d.ts +56 -0
  249. package/build/dex/sushiswap-v3/sushiswap-v3-original.js +598 -0
  250. package/build/dex/sushiswap-v3/sushiswap-v3-original.js.map +1 -0
  251. package/build/dex/sushiswap-v3/sushiswap-v3-pool.d.ts +1 -0
  252. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js +6 -0
  253. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js.map +1 -0
  254. package/build/dex/sushiswap-v3/sushiswap-v3.d.ts +21 -0
  255. package/build/dex/sushiswap-v3/sushiswap-v3.js +58 -0
  256. package/build/dex/sushiswap-v3/sushiswap-v3.js.map +1 -0
  257. package/build/dex/sushiswap-v3/token.d.ts +6 -0
  258. package/build/dex/sushiswap-v3/token.js +23 -0
  259. package/build/dex/sushiswap-v3/token.js.map +1 -0
  260. package/build/dex/sushiswap-v3/types.d.ts +15 -0
  261. package/build/dex/sushiswap-v3/types.js +18 -0
  262. package/build/dex/sushiswap-v3/types.js.map +1 -0
  263. package/build/dex/swaap-v1/swaap-v1.js +4 -0
  264. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  265. package/build/dex/swaap-v2/swaap-v2.js +1 -0
  266. package/build/dex/swaap-v2/swaap-v2.js.map +1 -1
  267. package/build/dex/swell/swell.js +1 -0
  268. package/build/dex/swell/swell.js.map +1 -1
  269. package/build/dex/synthetix/synthetix.js +6 -0
  270. package/build/dex/synthetix/synthetix.js.map +1 -1
  271. package/build/dex/trader-joe-v2.1/trader-joe-v2.1.js +4 -0
  272. package/build/dex/trader-joe-v2.1/trader-joe-v2.1.js.map +1 -1
  273. package/build/dex/uniswap-v2/uniswap-v2.js +1 -0
  274. package/build/dex/uniswap-v2/uniswap-v2.js.map +1 -1
  275. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.d.ts +12 -0
  276. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js +23 -0
  277. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js.map +1 -0
  278. package/build/dex/uniswap-v3/uniswap-v3.js +4 -0
  279. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  280. package/build/dex/uniswap-v3.js +4 -0
  281. package/build/dex/uniswap-v3.js.map +1 -1
  282. package/build/dex/weth/weth.js +1 -0
  283. package/build/dex/weth/weth.js.map +1 -1
  284. package/build/dex/wombat/wombat.js +4 -0
  285. package/build/dex/wombat/wombat.js.map +1 -1
  286. package/build/dex/woo-fi/config.d.ts +4 -0
  287. package/build/dex/woo-fi/config.js +141 -0
  288. package/build/dex/woo-fi/config.js.map +1 -0
  289. package/build/dex/woo-fi/constants.d.ts +5 -0
  290. package/build/dex/woo-fi/constants.js +20 -0
  291. package/build/dex/woo-fi/constants.js.map +1 -0
  292. package/build/dex/woo-fi/types.d.ts +48 -0
  293. package/build/dex/woo-fi/types.js +3 -0
  294. package/build/dex/woo-fi/types.js.map +1 -0
  295. package/build/dex/woo-fi/woo-fi-decimal-math.d.ts +14 -0
  296. package/build/dex/woo-fi/woo-fi-decimal-math.js +42 -0
  297. package/build/dex/woo-fi/woo-fi-decimal-math.js.map +1 -0
  298. package/build/dex/woo-fi/woo-fi-math.d.ts +31 -0
  299. package/build/dex/woo-fi/woo-fi-math.js +300 -0
  300. package/build/dex/woo-fi/woo-fi-math.js.map +1 -0
  301. package/build/dex/woo-fi/woo-fi.d.ts +65 -0
  302. package/build/dex/woo-fi/woo-fi.js +480 -0
  303. package/build/dex/woo-fi/woo-fi.js.map +1 -0
  304. package/build/dex/woo-fi-v2/woo-fi-v2.js +4 -0
  305. package/build/dex/woo-fi-v2/woo-fi-v2.js.map +1 -1
  306. package/build/dex/wsteth/wsteth.js +8 -1
  307. package/build/dex/wsteth/wsteth.js.map +1 -1
  308. package/build/dex/zerox/index.js +1 -0
  309. package/build/dex/zerox/index.js.map +1 -1
  310. package/build/executor/Executor01BytecodeBuilder.js +4 -1
  311. package/build/executor/Executor01BytecodeBuilder.js.map +1 -1
  312. package/build/executor/Executor02BytecodeBuilder.js +5 -1
  313. package/build/executor/Executor02BytecodeBuilder.js.map +1 -1
  314. package/build/executor/ExecutorBytecodeBuilder.d.ts +1 -1
  315. package/build/executor/ExecutorBytecodeBuilder.js +5 -4
  316. package/build/executor/ExecutorBytecodeBuilder.js.map +1 -1
  317. package/build/executor/ExecutorDetector.d.ts +1 -1
  318. package/build/executor/ExecutorDetector.js.map +1 -1
  319. package/build/executor/IExecutorBytecodeBuilder.d.ts +6 -0
  320. package/build/executor/IExecutorBytecodeBuilder.js +3 -0
  321. package/build/executor/IExecutorBytecodeBuilder.js.map +1 -0
  322. package/build/executor/constants.d.ts +3 -1
  323. package/build/executor/constants.js +4 -2
  324. package/build/executor/constants.js.map +1 -1
  325. package/build/executor/utils.d.ts +2 -0
  326. package/build/executor/utils.js +30 -0
  327. package/build/executor/utils.js.map +1 -0
  328. package/build/types.d.ts +1 -0
  329. package/package.json +1 -1
  330. package/src/dex/aave-v1/aave-v1.ts +1 -0
  331. package/src/dex/aave-v2/aave-v2.ts +1 -0
  332. package/src/dex/aave-v3/aave-v3.ts +1 -0
  333. package/src/dex/algebra/algebra.ts +9 -0
  334. package/src/dex/angle-staked-stable/angle-staked-stable.ts +2 -1
  335. package/src/dex/bProtocol/bProtocol.ts +8 -0
  336. package/src/dex/balancer-v1/balancer-v1.ts +9 -0
  337. package/src/dex/balancer-v2/balancer-v2.ts +3 -2
  338. package/src/dex/bancor/bancor.ts +8 -0
  339. package/src/dex/camelot/camelot.ts +1 -0
  340. package/src/dex/compound/compound.ts +1 -0
  341. package/src/dex/curve-v1/curve-v1.ts +1 -0
  342. package/src/dex/curve-v1-factory/curve-v1-factory.ts +1 -0
  343. package/src/dex/curve-v2/curve-v2.ts +1 -0
  344. package/src/dex/dexalot/dexalot.ts +1 -0
  345. package/src/dex/dodo-v1/dodo-v1.ts +9 -0
  346. package/src/dex/dodo-v2.ts +9 -0
  347. package/src/dex/etherfi.ts +2 -0
  348. package/src/dex/generic-rfq/generic-rfq.ts +1 -0
  349. package/src/dex/gmx/gmx.ts +8 -0
  350. package/src/dex/hashflow/hashflow.ts +1 -0
  351. package/src/dex/jarvis-v6/jarvis-v6.ts +1 -0
  352. package/src/dex/jarvis.ts +14 -0
  353. package/src/dex/kyberdmm/kyberdmm.ts +9 -0
  354. package/src/dex/lido/lido.ts +8 -0
  355. package/src/dex/maker-psm/maker-psm.ts +1 -0
  356. package/src/dex/maverick-v1/maverick-v1.ts +9 -0
  357. package/src/dex/nerve/nerve.ts +8 -0
  358. package/src/dex/onebit/onebit.ts +8 -0
  359. package/src/dex/pancakeswap-v3/pancakeswap-v3.ts +9 -0
  360. package/src/dex/paraswap-limit-orders/paraswap-limit-orders.ts +1 -0
  361. package/src/dex/platypus/platypus.ts +20 -3
  362. package/src/dex/polygon-migrator/polygon-migrator.ts +1 -0
  363. package/src/dex/quick-perps/quick-perps.ts +11 -1
  364. package/src/dex/smoothy/smoothy.ts +1 -0
  365. package/src/dex/solidly/solidly.ts +1 -0
  366. package/src/dex/solidly-v3/solidly-v3.ts +1 -1
  367. package/src/dex/spark/spark.ts +10 -0
  368. package/src/dex/stable-pool/stable-pool.ts +8 -0
  369. package/src/dex/swaap-v1/swaap-v1.ts +9 -0
  370. package/src/dex/swaap-v2/swaap-v2.ts +1 -0
  371. package/src/dex/swell/swell.ts +1 -0
  372. package/src/dex/synthetix/synthetix.ts +11 -0
  373. package/src/dex/trader-joe-v2.1/trader-joe-v2.1.ts +9 -0
  374. package/src/dex/uniswap-v2/uniswap-v2.ts +1 -0
  375. package/src/dex/uniswap-v3/uniswap-v3.ts +9 -0
  376. package/src/dex/uniswap-v3.ts +9 -0
  377. package/src/dex/weth/weth.ts +1 -0
  378. package/src/dex/wombat/wombat.ts +9 -0
  379. package/src/dex/woo-fi-v2/woo-fi-v2.ts +5 -0
  380. package/src/dex/wsteth/wsteth.ts +13 -4
  381. package/src/dex/zerox/index.ts +1 -0
  382. package/src/executor/Executor01BytecodeBuilder.ts +8 -1
  383. package/src/executor/Executor02BytecodeBuilder.ts +13 -0
  384. package/src/executor/ExecutorBytecodeBuilder.ts +6 -1
  385. package/src/executor/ExecutorDetector.ts +3 -2
  386. package/src/executor/constants.ts +4 -1
  387. package/src/executor/executor01-bytecode-builder-e2e.test.ts +39 -0
  388. package/src/executor/utils.ts +44 -0
  389. package/src/types.ts +1 -0
  390. package/tests/constants-e2e.ts +6 -1
  391. package/build/abi/Redstone.json +0 -739
  392. package/build/abi/angle-transmuter/MorphoVault.json +0 -2506
  393. package/build/abi/angle-transmuter/Pyth.json +0 -1534
  394. package/build/abi/angle-transmuter/Transmuter.json +0 -1711
  395. package/build/abi/idle-dao/idle-cdo-factory.json +0 -38
  396. package/build/abi/idle-dao/idle-cdo.json +0 -1245
  397. package/build/abi/pharaoh/PharaohPool.abi.json +0 -1582
  398. package/build/abi/smardex/smardex-factory.json +0 -185
  399. package/build/abi/smardex/smardex-pool.json +0 -578
  400. package/build/abi/smardex/smardex-router.json +0 -648
  401. package/build/abi/trader-joe-v2_1/FactoryABI.json +0 -1208
  402. package/build/abi/trader-joe-v2_1/PairABI.json +0 -1493
  403. package/build/abi/trader-joe-v2_1/RouterABI.json +0 -1489
  404. package/build/abi/trader-joe-v2_1/StateMulticall.json +0 -193
  405. package/build/dex/angle-transmuter/angle-transmuter-pool.d.ts +0 -61
  406. package/build/dex/angle-transmuter/angle-transmuter-pool.js +0 -415
  407. package/build/dex/angle-transmuter/angle-transmuter-pool.js.map +0 -1
  408. package/build/dex/angle-transmuter/angle-transmuter.js +0 -262
  409. package/build/dex/angle-transmuter/angle-transmuter.js.map +0 -1
  410. package/build/dex/angle-transmuter/backedOracle.d.ts +0 -19
  411. package/build/dex/angle-transmuter/backedOracle.js +0 -56
  412. package/build/dex/angle-transmuter/backedOracle.js.map +0 -1
  413. package/build/dex/angle-transmuter/config.js +0 -30
  414. package/build/dex/angle-transmuter/config.js.map +0 -1
  415. package/build/dex/angle-transmuter/constants.d.ts +0 -77
  416. package/build/dex/angle-transmuter/constants.js +0 -94
  417. package/build/dex/angle-transmuter/constants.js.map +0 -1
  418. package/build/dex/angle-transmuter/morphoOracle.js +0 -179
  419. package/build/dex/angle-transmuter/morphoOracle.js.map +0 -1
  420. package/build/dex/angle-transmuter/morphoVault.d.ts +0 -19
  421. package/build/dex/angle-transmuter/morphoVault.js +0 -78
  422. package/build/dex/angle-transmuter/morphoVault.js.map +0 -1
  423. package/build/dex/angle-transmuter/pyth.d.ts +0 -19
  424. package/build/dex/angle-transmuter/pyth.js +0 -70
  425. package/build/dex/angle-transmuter/pyth.js.map +0 -1
  426. package/build/dex/angle-transmuter/redstone.d.ts +0 -20
  427. package/build/dex/angle-transmuter/redstone.js +0 -73
  428. package/build/dex/angle-transmuter/redstone.js.map +0 -1
  429. package/build/dex/angle-transmuter/transmuter.d.ts +0 -52
  430. package/build/dex/angle-transmuter/transmuter.js +0 -374
  431. package/build/dex/angle-transmuter/transmuter.js.map +0 -1
  432. package/build/dex/angle-transmuter/types.d.ts +0 -188
  433. package/build/dex/angle-transmuter/types.js +0 -33
  434. package/build/dex/angle-transmuter/types.js.map +0 -1
  435. package/build/dex/angle-transmuter/utils.d.ts +0 -9
  436. package/build/dex/angle-transmuter/utils.js +0 -252
  437. package/build/dex/angle-transmuter/utils.js.map +0 -1
  438. package/build/dex/idle-dao/config.d.ts +0 -6
  439. package/build/dex/idle-dao/config.js +0 -29
  440. package/build/dex/idle-dao/config.js.map +0 -1
  441. package/build/dex/idle-dao/idle-dao-pool.d.ts +0 -56
  442. package/build/dex/idle-dao/idle-dao-pool.js +0 -176
  443. package/build/dex/idle-dao/idle-dao-pool.js.map +0 -1
  444. package/build/dex/idle-dao/idle-dao-pooling-pool.d.ts +0 -16
  445. package/build/dex/idle-dao/idle-dao-pooling-pool.js +0 -57
  446. package/build/dex/idle-dao/idle-dao-pooling-pool.js.map +0 -1
  447. package/build/dex/idle-dao/idle-dao.d.ts +0 -52
  448. package/build/dex/idle-dao/idle-dao.js +0 -310
  449. package/build/dex/idle-dao/idle-dao.js.map +0 -1
  450. package/build/dex/idle-dao/tokens.d.ts +0 -16
  451. package/build/dex/idle-dao/tokens.js +0 -87
  452. package/build/dex/idle-dao/tokens.js.map +0 -1
  453. package/build/dex/idle-dao/types.d.ts +0 -37
  454. package/build/dex/idle-dao/types.js +0 -11
  455. package/build/dex/idle-dao/types.js.map +0 -1
  456. package/build/dex/idle-dao/utils.d.ts +0 -8
  457. package/build/dex/idle-dao/utils.js +0 -145
  458. package/build/dex/idle-dao/utils.js.map +0 -1
  459. package/build/dex/smardex/subgraph-queries.d.ts +0 -1
  460. package/build/dex/smardex/subgraph-queries.js +0 -17
  461. package/build/dex/smardex/subgraph-queries.js.map +0 -1
  462. package/build/dex/smardex/usd-reserves.d.ts +0 -23
  463. package/build/dex/smardex/usd-reserves.js +0 -86
  464. package/build/dex/smardex/usd-reserves.js.map +0 -1
  465. package/build/dex/trader-joe-v2-1-2/config.js +0 -47
  466. package/build/dex/trader-joe-v2-1-2/config.js.map +0 -1
  467. package/build/dex/trader-joe-v2-1-2/constants.d.ts +0 -20
  468. package/build/dex/trader-joe-v2-1-2/constants.js +0 -22
  469. package/build/dex/trader-joe-v2-1-2/constants.js.map +0 -1
  470. package/build/dex/trader-joe-v2-1-2/math/index.d.ts +0 -37
  471. package/build/dex/trader-joe-v2-1-2/math/index.js +0 -291
  472. package/build/dex/trader-joe-v2-1-2/math/index.js.map +0 -1
  473. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.d.ts +0 -60
  474. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.js +0 -248
  475. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.js.map +0 -1
  476. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.d.ts +0 -53
  477. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.js +0 -307
  478. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.js.map +0 -1
  479. package/build/dex/trader-joe-v2-1-2/types.d.ts +0 -82
  480. package/build/dex/trader-joe-v2-1-2/types.js +0 -9
  481. package/build/dex/trader-joe-v2-1-2/types.js.map +0 -1
  482. package/build/dex/trader-joe-v2_1/config.js +0 -47
  483. package/build/dex/trader-joe-v2_1/config.js.map +0 -1
  484. package/build/dex/trader-joe-v2_1/constants.d.ts +0 -20
  485. package/build/dex/trader-joe-v2_1/constants.js +0 -22
  486. package/build/dex/trader-joe-v2_1/constants.js.map +0 -1
  487. package/build/dex/trader-joe-v2_1/math/index.d.ts +0 -37
  488. package/build/dex/trader-joe-v2_1/math/index.js +0 -291
  489. package/build/dex/trader-joe-v2_1/math/index.js.map +0 -1
  490. package/build/dex/trader-joe-v2_1/trader-joe-v2.1.d.ts +0 -0
  491. package/build/dex/trader-joe-v2_1/trader-joe-v2.1.js +0 -384
  492. package/build/dex/trader-joe-v2_1/trader-joe-v2.1.js.map +0 -1
  493. package/build/dex/trader-joe-v2_1/trader-joe-v2_1-pool.d.ts +0 -60
  494. package/build/dex/trader-joe-v2_1/trader-joe-v2_1-pool.js +0 -247
  495. package/build/dex/trader-joe-v2_1/trader-joe-v2_1-pool.js.map +0 -1
  496. package/build/dex/trader-joe-v2_1/trader-joe-v2_1.d.ts +0 -53
  497. package/build/dex/trader-joe-v2_1/trader-joe-v2_1.js +0 -307
  498. package/build/dex/trader-joe-v2_1/trader-joe-v2_1.js.map +0 -1
  499. package/build/dex/trader-joe-v2_1/types.d.ts +0 -82
  500. package/build/dex/trader-joe-v2_1/types.js +0 -9
  501. package/build/dex/trader-joe-v2_1/types.js.map +0 -1
  502. package/build/dex/wombat/wombat-pool-poller.d.ts +0 -22
  503. package/build/dex/wombat/wombat-pool-poller.js +0 -164
  504. package/build/dex/wombat/wombat-pool-poller.js.map +0 -1
  505. package/build/dex-helper/Cache.d.ts +0 -31
  506. package/build/dex-helper/Cache.js +0 -106
  507. package/build/dex-helper/Cache.js.map +0 -1
  508. package/build/dex-helper/RedisBatcher.d.ts +0 -20
  509. package/build/dex-helper/RedisBatcher.js +0 -75
  510. package/build/dex-helper/RedisBatcher.js.map +0 -1
  511. package/build/dex-helper/RedisWrapper.d.ts +0 -37
  512. package/build/dex-helper/RedisWrapper.js +0 -165
  513. package/build/dex-helper/RedisWrapper.js.map +0 -1
@@ -12,6 +12,7 @@ import { SimpleExchange } from '../simple-exchange';
12
12
  import StablePoolABI from '../../abi/StablePool.json';
13
13
  import { IDexHelper } from '../../dex-helper';
14
14
  import { StablePoolFunctions, StablePoolData, StablePoolParam } from './types';
15
+ import { extractReturnAmountPosition } from '../../executor/utils';
15
16
 
16
17
  export class StablePool
17
18
  extends SimpleExchange
@@ -123,6 +124,13 @@ export class StablePool
123
124
  dexFuncHasRecipient: false,
124
125
  exchangeData: swapData,
125
126
  targetExchange: exchange,
127
+ returnAmountPos:
128
+ side === SwapSide.SELL
129
+ ? extractReturnAmountPosition(
130
+ this.exchangeRouterInterface,
131
+ StablePoolFunctions.swap,
132
+ )
133
+ : undefined,
126
134
  };
127
135
  }
128
136
  }
@@ -41,6 +41,7 @@ import {
41
41
  import { SwaapV1Pool } from './swaap-v1-pool';
42
42
  import PoolABI from '../../abi/swaap-v1/pool.json';
43
43
  import { PoolQuotations } from './libraries/PoolQuotations';
44
+ import { extractReturnAmountPosition } from '../../executor/utils';
44
45
 
45
46
  export class SwaapV1 extends SimpleExchange implements IDex<SwaapV1Data> {
46
47
  static readonly poolInterface = new Interface(PoolABI);
@@ -286,6 +287,14 @@ export class SwaapV1 extends SimpleExchange implements IDex<SwaapV1Data> {
286
287
  dexFuncHasRecipient: false,
287
288
  exchangeData: swapData,
288
289
  targetExchange: data.pool,
290
+ returnAmountPos:
291
+ side === SwapSide.SELL
292
+ ? extractReturnAmountPosition(
293
+ SwaapV1.poolInterface,
294
+ functionName,
295
+ 'tokenAmountOut',
296
+ )
297
+ : undefined,
289
298
  };
290
299
  }
291
300
 
@@ -476,6 +476,7 @@ export class SwaapV2 extends SimpleExchange implements IDex<SwaapV2Data> {
476
476
  exchangeData: callData,
477
477
  specialDexFlag: SpecialDex.SWAP_ON_SWAAP_V2_SINGLE,
478
478
  targetExchange: router,
479
+ returnAmountPos: undefined,
479
480
  };
480
481
  }
481
482
 
@@ -291,6 +291,7 @@ export class Swell
291
291
  srcAmount,
292
292
  ])
293
293
  : undefined,
294
+ returnAmountPos: undefined,
294
295
  };
295
296
  }
296
297
 
@@ -31,6 +31,7 @@ import { SynthetixState } from './synthetix-state';
31
31
  // There are so many ABIs, where I need only one or two functions
32
32
  // So, I decided to unite them into one combined interface
33
33
  import CombinedSynthetixABI from '../../abi/synthetix/CombinedSynthetix.abi.json';
34
+ import { extractReturnAmountPosition } from '../../executor/utils';
34
35
 
35
36
  export class Synthetix extends SimpleExchange implements IDex<SynthetixData> {
36
37
  readonly hasConstantPriceLargeAmounts = false;
@@ -357,6 +358,16 @@ export class Synthetix extends SimpleExchange implements IDex<SynthetixData> {
357
358
  dexFuncHasRecipient: false,
358
359
  exchangeData: swapData,
359
360
  targetExchange: exchange,
361
+ returnAmountPos:
362
+ side === SwapSide.SELL
363
+ ? extractReturnAmountPosition(
364
+ this.combinedIface,
365
+ this.network === Network.OPTIMISM
366
+ ? 'exchange'
367
+ : 'exchangeAtomically',
368
+ 'amountReceived',
369
+ )
370
+ : undefined,
360
371
  };
361
372
  }
362
373
 
@@ -21,6 +21,7 @@ import {
21
21
  TraderJoeV2RouterParam,
22
22
  } from './types';
23
23
  import { TRADERJOE_V2_1_ROUTER_ADDRESS } from './config';
24
+ import { extractReturnAmountPosition } from '../../executor/utils';
24
25
 
25
26
  export class TraderJoeV21
26
27
  extends SimpleExchange
@@ -166,6 +167,14 @@ export class TraderJoeV21
166
167
  dexFuncHasRecipient: true,
167
168
  exchangeData: swapData,
168
169
  targetExchange: this.routerAddress,
170
+ returnAmountPos:
171
+ side === SwapSide.SELL
172
+ ? extractReturnAmountPosition(
173
+ this.exchangeRouterInterface,
174
+ swapFunction,
175
+ 'amountOut',
176
+ )
177
+ : undefined,
169
178
  };
170
179
  }
171
180
  }
@@ -914,6 +914,7 @@ export class UniswapV2
914
914
  targetExchange,
915
915
  specialDexFlag,
916
916
  transferSrcTokenBeforeSwap,
917
+ returnAmountPos: undefined,
917
918
  };
918
919
  }
919
920
 
@@ -71,6 +71,7 @@ import {
71
71
  import { OptimalSwapExchange } from '@paraswap/core';
72
72
  import { OnPoolCreatedCallback, UniswapV3Factory } from './uniswap-v3-factory';
73
73
  import { hexConcat, hexlify, hexZeroPad, hexValue } from 'ethers/lib/utils';
74
+ import { extractReturnAmountPosition } from '../../executor/utils';
74
75
 
75
76
  type PoolPairsInfo = {
76
77
  token0: Address;
@@ -1141,6 +1142,14 @@ export class UniswapV3
1141
1142
  dexFuncHasRecipient: true,
1142
1143
  exchangeData,
1143
1144
  targetExchange: this.config.router,
1145
+ returnAmountPos:
1146
+ side === SwapSide.SELL
1147
+ ? extractReturnAmountPosition(
1148
+ this.routerIface,
1149
+ swapFunction,
1150
+ 'amountOut',
1151
+ )
1152
+ : undefined,
1144
1153
  };
1145
1154
  }
1146
1155
 
@@ -15,6 +15,7 @@ import {
15
15
  import UniswapV3RouterABI from '../abi/UniswapV3Router.json';
16
16
  import { NumberAsString } from '@paraswap/core';
17
17
  import { IDexHelper } from '../dex-helper';
18
+ import { extractReturnAmountPosition } from '../executor/utils';
18
19
 
19
20
  const UNISWAP_V3_ROUTER_ADDRESSES: { [network: number]: Address } = {
20
21
  [Network.MAINNET]: '0xE592427A0AEce92De3Edee1F18E0157C05861564',
@@ -228,6 +229,14 @@ export class UniswapV3
228
229
  dexFuncHasRecipient: true,
229
230
  exchangeData,
230
231
  targetExchange: this.routerAddress,
232
+ returnAmountPos:
233
+ side === SwapSide.SELL
234
+ ? extractReturnAmountPosition(
235
+ this.exchangeRouterInterface,
236
+ swapFunction,
237
+ 'amountOut',
238
+ )
239
+ : undefined,
231
240
  };
232
241
  }
233
242
  }
@@ -170,6 +170,7 @@ export class Weth
170
170
  dexFuncHasRecipient: false,
171
171
  exchangeData: swapData,
172
172
  targetExchange: this.address,
173
+ returnAmountPos: undefined,
173
174
  };
174
175
  }
175
176
 
@@ -32,6 +32,7 @@ import { WombatBmw } from './wombat-bmw';
32
32
  import { fromWad } from './utils';
33
33
  import { WombatPool } from './wombat-pool';
34
34
  import { StatePollingManager } from '../../lib/stateful-rpc-poller/state-polling-manager';
35
+ import { extractReturnAmountPosition } from '../../executor/utils';
35
36
 
36
37
  export class Wombat extends SimpleExchange implements IDex<WombatData> {
37
38
  // contract interfaces
@@ -339,6 +340,14 @@ export class Wombat extends SimpleExchange implements IDex<WombatData> {
339
340
  dexFuncHasRecipient: true,
340
341
  exchangeData: swapData,
341
342
  targetExchange: exchange,
343
+ returnAmountPos:
344
+ side === SwapSide.SELL
345
+ ? extractReturnAmountPosition(
346
+ Wombat.poolInterface,
347
+ 'swap',
348
+ 'actualToAmount',
349
+ )
350
+ : undefined,
342
351
  };
343
352
  }
344
353
 
@@ -28,6 +28,7 @@ import { addressDecode } from '../../lib/decoders';
28
28
  import { ifaces } from './utils';
29
29
  import { StatePollingManager } from '../../lib/stateful-rpc-poller/state-polling-manager';
30
30
  import { solidityPack } from 'ethers/lib/utils';
31
+ import { extractReturnAmountPosition } from '../../executor/utils';
31
32
 
32
33
  export class WooFiV2 extends SimpleExchange implements IDex<WooFiV2Data> {
33
34
  readonly math: WooFiV2Math;
@@ -357,6 +358,10 @@ export class WooFiV2 extends SimpleExchange implements IDex<WooFiV2Data> {
357
358
  exchangeData: swapData,
358
359
  targetExchange: this.config.wooPPV2Address,
359
360
  transferSrcTokenBeforeSwap: this.config.wooPPV2Address,
361
+ returnAmountPos:
362
+ side === SwapSide.SELL
363
+ ? extractReturnAmountPosition(ifaces.PPV2, 'swap', 'realToAmount')
364
+ : undefined,
360
365
  };
361
366
  }
362
367
 
@@ -23,6 +23,7 @@ import { uint256ToBigInt } from '../../lib/decoders';
23
23
  import { Utils } from '../../utils';
24
24
  import WSTETH_ABI from '../../abi/wstETH.json';
25
25
  import STETH_ABI from '../../abi/stETH.json';
26
+ import { extractReturnAmountPosition } from '../../executor/utils';
26
27
 
27
28
  export class WstETH extends SimpleExchange implements IDex<WstETHData> {
28
29
  static readonly wstETHIface = new Interface(WSTETH_ABI);
@@ -252,16 +253,24 @@ export class WstETH extends SimpleExchange implements IDex<WstETHData> {
252
253
  data: WstETHData,
253
254
  side: SwapSide,
254
255
  ): Promise<DexExchangeParam> {
255
- const exchangeData = WstETH.wstETHIface.encodeFunctionData(
256
- srcToken.toLowerCase() === this.config.stETHAddress ? 'wrap' : 'unwrap',
257
- [srcAmount],
258
- );
256
+ const swapFunction =
257
+ srcToken.toLowerCase() === this.config.stETHAddress ? 'wrap' : 'unwrap';
258
+ const exchangeData = WstETH.wstETHIface.encodeFunctionData(swapFunction, [
259
+ srcAmount,
260
+ ]);
259
261
 
260
262
  return {
261
263
  needWrapNative: this.needWrapNative,
262
264
  dexFuncHasRecipient: false,
263
265
  exchangeData,
264
266
  targetExchange: this.config.wstETHAddress,
267
+ returnAmountPos:
268
+ side === SwapSide.SELL
269
+ ? extractReturnAmountPosition(
270
+ WstETH.wstETHIface,
271
+ swapFunction,
272
+ )
273
+ : undefined,
265
274
  };
266
275
  }
267
276
 
@@ -257,6 +257,7 @@ export class ZeroX
257
257
  dexFuncHasRecipient: false,
258
258
  exchangeData: swapData,
259
259
  targetExchange: this.getExchange(data),
260
+ returnAmountPos: undefined,
260
261
  };
261
262
  }
262
263
 
@@ -4,7 +4,7 @@ import { OptimalRate } from '@paraswap/core';
4
4
  import { isETHAddress } from '../utils';
5
5
  import { DepositWithdrawReturn } from '../dex/weth/types';
6
6
  import { Executors, Flag, SpecialDex } from './types';
7
- import { BYTES_64_LENGTH } from './constants';
7
+ import { BYTES_64_LENGTH, DEFAULT_RETURN_AMOUNT_POS } from './constants';
8
8
  import {
9
9
  DexCallDataParams,
10
10
  ExecutorBytecodeBuilder,
@@ -351,6 +351,11 @@ export class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder<
351
351
  const swap = priceRoute.bestRoute[routeIndex].swaps[swapIndex];
352
352
  let { exchangeData, specialDexFlag } = exchangeParam;
353
353
 
354
+ const returnAmountPos =
355
+ exchangeParam.returnAmountPos !== undefined
356
+ ? exchangeParam.returnAmountPos
357
+ : DEFAULT_RETURN_AMOUNT_POS;
358
+
354
359
  let destTokenPos = 0;
355
360
  if (checkDestTokenBalanceAfterSwap && !dontCheckBalanceAfterSwap) {
356
361
  const destTokenAddr = isETHAddress(swap.destToken)
@@ -393,6 +398,8 @@ export class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder<
393
398
  destTokenPos,
394
399
  specialDexFlag || SpecialDex.DEFAULT,
395
400
  flag,
401
+ undefined,
402
+ returnAmountPos,
396
403
  );
397
404
  }
398
405
 
@@ -22,6 +22,7 @@ import {
22
22
  ZEROS_20_BYTES,
23
23
  ZEROS_28_BYTES,
24
24
  ZEROS_4_BYTES,
25
+ DEFAULT_RETURN_AMOUNT_POS,
25
26
  } from './constants';
26
27
  import { assert } from 'ts-essentials';
27
28
 
@@ -276,6 +277,16 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder<
276
277
  let { exchangeData, specialDexFlag, targetExchange, needWrapNative } =
277
278
  exchangeParam;
278
279
 
280
+ const routeNeedsRootUnwrapEth = this.doesRouteNeedsRootUnwrapEth(
281
+ priceRoute,
282
+ exchangeParams,
283
+ );
284
+
285
+ const returnAmountPos =
286
+ exchangeParam.returnAmountPos !== undefined && !routeNeedsRootUnwrapEth // prevent returnAmoutPos optimisation if route needs root unwrap eth
287
+ ? exchangeParam.returnAmountPos
288
+ : DEFAULT_RETURN_AMOUNT_POS;
289
+
279
290
  const applyVerticalBranching = this.doesSwapNeedToApplyVerticalBranching(
280
291
  priceRoute,
281
292
  routeIndex,
@@ -343,6 +354,8 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder<
343
354
  destTokenPos,
344
355
  specialDexFlag || SpecialDex.DEFAULT,
345
356
  flag,
357
+ undefined,
358
+ returnAmountPos,
346
359
  );
347
360
  }
348
361
 
@@ -25,6 +25,7 @@ import {
25
25
  import { Executors, Flag, SpecialDex } from './types';
26
26
  import { MAX_UINT, Network } from '../constants';
27
27
  import { DexExchangeBuildParam, DexExchangeParam } from '../types';
28
+ import { ExecutorDetector } from './ExecutorDetector';
28
29
 
29
30
  const {
30
31
  utils: { hexlify, hexDataLength, hexConcat, hexZeroPad, solidityPack },
@@ -228,6 +229,7 @@ export abstract class ExecutorBytecodeBuilder<S = {}, D = {}> {
228
229
  specialDexFlag: SpecialDex,
229
230
  flag: Flag,
230
231
  toAmountPos = 0,
232
+ returnAmountPos = DEFAULT_RETURN_AMOUNT_POS,
231
233
  ): string {
232
234
  const builder =
233
235
  this.type !== Executors.THREE
@@ -242,6 +244,7 @@ export abstract class ExecutorBytecodeBuilder<S = {}, D = {}> {
242
244
  specialDexFlag,
243
245
  flag,
244
246
  toAmountPos,
247
+ returnAmountPos,
245
248
  );
246
249
  }
247
250
 
@@ -252,13 +255,15 @@ export abstract class ExecutorBytecodeBuilder<S = {}, D = {}> {
252
255
  destTokenPos: number,
253
256
  specialDexFlag: SpecialDex,
254
257
  flag: Flag,
258
+ toAmountPos = 0, // not used for Executor01 and Executor02, just to follow the same interface
259
+ returnAmountPos = DEFAULT_RETURN_AMOUNT_POS,
255
260
  ) {
256
261
  return solidityPack(EXECUTOR_01_02_FUNCTION_CALL_DATA_TYPES, [
257
262
  tokenAddress, // token address
258
263
  hexZeroPad(hexlify(hexDataLength(calldata) + BYTES_28_LENGTH), 4), // calldata length + bytes28(0)
259
264
  hexZeroPad(hexlify(fromAmountPos), 2), // fromAmountPos
260
265
  hexZeroPad(hexlify(destTokenPos), 2), // destTokenPos
261
- hexZeroPad(hexlify(DEFAULT_RETURN_AMOUNT_POS), 1), // TODO: Fix returnAmount Pos
266
+ hexZeroPad(hexlify(returnAmountPos), 1), // returnAmountPos
262
267
  hexZeroPad(hexlify(specialDexFlag), 1), // special
263
268
  hexZeroPad(hexlify(flag), 2), // flag
264
269
  ZEROS_28_BYTES, // bytes28(0)
@@ -21,7 +21,7 @@ export class ExecutorDetector {
21
21
  [RouteExecutionType.SINGLE_STEP]: Executors.ONE, // simpleSwap via Executor01
22
22
  [RouteExecutionType.HORIZONTAL_SEQUENCE]: Executors.ONE, // multiSwap via Executor01
23
23
  [RouteExecutionType.VERTICAL_BRANCH]: Executors.TWO, // simpleSwap with percentage on a path via Executor02
24
- [RouteExecutionType.VERTICAL_BRANCH_HORIZONTAL_SEQUENCE]: Executors.TWO, // multiSwap with pecentages on paths via Executor02
24
+ [RouteExecutionType.VERTICAL_BRANCH_HORIZONTAL_SEQUENCE]: Executors.TWO, // multiSwap with percentages on paths via Executor02
25
25
  // megaSwap via Executor02
26
26
  [RouteExecutionType.NESTED_VERTICAL_BRANCH_HORIZONTAL_SEQUENCE]:
27
27
  Executors.TWO,
@@ -46,7 +46,7 @@ export class ExecutorDetector {
46
46
  this.wethBytecodeBuilder = new WETHBytecodeBuilder(this.dexHelper);
47
47
  }
48
48
 
49
- protected getRouteExecutionType(priceRoute: OptimalRate): RouteExecutionType {
49
+ public getRouteExecutionType(priceRoute: OptimalRate): RouteExecutionType {
50
50
  if (
51
51
  priceRoute.bestRoute.length === 1 &&
52
52
  priceRoute.bestRoute[0].percent === 100 &&
@@ -85,6 +85,7 @@ export class ExecutorDetector {
85
85
 
86
86
  throw new Error('Route type is not supported yet');
87
87
  }
88
+
88
89
  detectSpecialExecutor(priceRoute: OptimalRate): Executors | null {
89
90
  if (isSingleWrapRoute(priceRoute)) return Executors.WETH;
90
91
  return null;
@@ -47,7 +47,10 @@ export const EXECUTOR_03_FUNCTION_CALL_DATA_TYPES: string[] = [
47
47
 
48
48
  export const APPROVE_CALLDATA_DEST_TOKEN_POS = 68;
49
49
  export const WRAP_UNWRAP_FROM_AMOUNT_POS = 4;
50
- export const DEFAULT_RETURN_AMOUNT_POS = '0xff';
50
+ export const DEFAULT_RETURN_AMOUNT_POS = 255;
51
+
52
+ export const RETURN_AMOUNT_POS_0 = 0;
53
+ export const RETURN_AMOUNT_POS_32 = 32;
51
54
 
52
55
  // TODO-v6?: can it be removed after approval/cache task, because we are going to give approvals only once,
53
56
  // therefore for any case initial allowance would be 0
@@ -183,6 +183,45 @@ describe('Executor01ByteCodeBuilder e2e tests', () => {
183
183
  provider,
184
184
  );
185
185
  });
186
+
187
+ it('simpleSwap USDC -> ETH', async () => {
188
+ await testE2E(
189
+ tokens['USDC'],
190
+ tokens['ETH'],
191
+ holders['USDC'],
192
+ '100000000',
193
+ SwapSide.SELL,
194
+ dexKey,
195
+ ContractMethod.simpleSwap,
196
+ network,
197
+ provider,
198
+ );
199
+ });
200
+ });
201
+
202
+ describe('Etherfi', () => {
203
+ const dexKey = 'EtherFi';
204
+
205
+ const tokens = Tokens[network];
206
+ const holders = Holders[network];
207
+ const provider = new StaticJsonRpcProvider(
208
+ generateConfig(network).privateHttpProvider,
209
+ network,
210
+ );
211
+
212
+ it('simpleSwap eETH -> weETH', async () => {
213
+ await testE2E(
214
+ tokens['eETH'],
215
+ tokens['weETH'],
216
+ holders['eETH'],
217
+ '100000000000000000',
218
+ SwapSide.SELL,
219
+ dexKey,
220
+ ContractMethod.simpleSwap,
221
+ network,
222
+ provider,
223
+ );
224
+ });
186
225
  });
187
226
 
188
227
  describe('BalancerV2', () => {
@@ -0,0 +1,44 @@
1
+ import { FunctionFragment, Interface } from '@ethersproject/abi';
2
+ import { RETURN_AMOUNT_POS_0, RETURN_AMOUNT_POS_32 } from './constants';
3
+
4
+ export const extractReturnAmountPosition = (
5
+ iface: Interface,
6
+ functionName: string | FunctionFragment,
7
+ outputName = '',
8
+ ): number => {
9
+ const func =
10
+ typeof functionName === 'string'
11
+ ? iface.getFunction(functionName)
12
+ : functionName;
13
+ const outputs = func.outputs || [];
14
+ const index = outputs.findIndex(
15
+ ({ name }) => name === outputName || (outputName === '' && name === null),
16
+ );
17
+
18
+ if (index < 0) {
19
+ throw new Error(
20
+ `Function ${functionName} was not found in the provided abi`,
21
+ );
22
+ }
23
+
24
+ if (index === 0) {
25
+ return RETURN_AMOUNT_POS_0;
26
+ }
27
+
28
+ let position = RETURN_AMOUNT_POS_0;
29
+ let curIndex = 0;
30
+ while (curIndex < index) {
31
+ const output = outputs[curIndex];
32
+
33
+ if (output.type.includes('[]') || output.type.includes('struct')) {
34
+ throw new Error(
35
+ `extractReturnAmountPosition doesn't support outputs of type array or struct. Please define returnAmountPos manually for this case.`,
36
+ );
37
+ }
38
+
39
+ position += RETURN_AMOUNT_POS_32;
40
+ curIndex++;
41
+ }
42
+
43
+ return position;
44
+ };
package/src/types.ts CHANGED
@@ -170,6 +170,7 @@ export type DexExchangeParam = {
170
170
  specialDexSupportsInsertFromAmount?: boolean;
171
171
  swappedAmountNotPresentInExchangeData?: boolean;
172
172
  preSwapUnwrapCalldata?: string;
173
+ returnAmountPos: number | undefined;
173
174
  };
174
175
 
175
176
  export type DexExchangeBuildParam = DexExchangeParam & {
@@ -407,6 +407,10 @@ export const Tokens: {
407
407
  address: '0x35fa164735182de50811e8e2e824cfb9b6118ac2',
408
408
  decimals: 18,
409
409
  },
410
+ weETH: {
411
+ address: '0xcd5fe23c85820f7b72d0926fc9b05b43e359b7ee',
412
+ decimals: 18,
413
+ },
410
414
  },
411
415
  [Network.ROPSTEN]: {
412
416
  DAI: {
@@ -1375,6 +1379,7 @@ export const Holders: {
1375
1379
  BNT: '0xf727e20e081aAE428E7c6bE07b156bB21ab587a7',
1376
1380
  USDe: '0x74e6c48e667d698a4cf90665b6960a5bae39e603',
1377
1381
  eETH: '0x0f1DfeF1a40557d279d0de6E49aB306891A638b8',
1382
+ weETH: '0xfB4cB868727D9622258bf2B26A8CFc95f6742669',
1378
1383
  },
1379
1384
  [Network.ROPSTEN]: {
1380
1385
  ETH: '0x43262A12d8610AA70C15DbaeAC321d51613c9071',
@@ -1541,7 +1546,7 @@ export const Holders: {
1541
1546
  LINK: '0x7f1fa204bb700853d36994da19f830b6ad18455c',
1542
1547
  DMT: '0x40414f138eb2ef938e6c3629897ef99d4464d4e8',
1543
1548
  PENDLE: '0x5bdf85216ec1e38d6458c870992a69e38e03f7ef',
1544
- wstETH: '0x916792f7734089470de27297903bed8a4630b26d',
1549
+ wstETH: '0x27edc7700f1820cb38ec3bbb84c542945f21b5a1',
1545
1550
  EURA: '0x6dd7b830896b56812aa667bdd14b71c8b3252f8e',
1546
1551
  stEUR: '0xE588611e7A2392507879E3be80531654b85C16aA',
1547
1552
  USDA: '0xa86ff337db9107b54862d30d1a598f8be847b05e',