@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
@@ -13,6 +13,7 @@ import { SimpleExchange } from '../simple-exchange';
13
13
  import OnebitABI from '../../abi/Onebit.json';
14
14
  import { IDexHelper } from '../../dex-helper';
15
15
  import { OnebitData, OnebitFunctions, OnebitParam } from './types';
16
+ import { extractReturnAmountPosition } from '../../executor/utils';
16
17
 
17
18
  export class Onebit
18
19
  extends SimpleExchange
@@ -100,6 +101,13 @@ export class Onebit
100
101
  dexFuncHasRecipient: true,
101
102
  exchangeData: swapData,
102
103
  targetExchange: data.router,
104
+ returnAmountPos:
105
+ _side === SwapSide.SELL
106
+ ? extractReturnAmountPosition(
107
+ this.exchangeRouterInterface,
108
+ swapFunction,
109
+ )
110
+ : undefined,
103
111
  };
104
112
  }
105
113
  }
@@ -61,6 +61,7 @@ import {
61
61
  OnPoolCreatedCallback,
62
62
  PancakeswapV3Factory,
63
63
  } from './pancakeswap-v3-factory';
64
+ import { extractReturnAmountPosition } from '../../executor/utils';
64
65
 
65
66
  type PoolPairsInfo = {
66
67
  token0: Address;
@@ -894,6 +895,14 @@ export class PancakeswapV3
894
895
  dexFuncHasRecipient: true,
895
896
  exchangeData,
896
897
  targetExchange: this.config.router,
898
+ returnAmountPos:
899
+ side === SwapSide.SELL
900
+ ? extractReturnAmountPosition(
901
+ this.routerIface,
902
+ swapFunction,
903
+ 'amountOut',
904
+ )
905
+ : undefined,
897
906
  };
898
907
  }
899
908
 
@@ -398,6 +398,7 @@ export class ParaSwapLimitOrders
398
398
  dexFuncHasRecipient: true,
399
399
  exchangeData: swapData,
400
400
  targetExchange: this.augustusRFQAddress,
401
+ returnAmountPos: undefined,
401
402
  };
402
403
  }
403
404
 
@@ -38,6 +38,7 @@ import PoolABI from '../../abi/platypus/pool.json';
38
38
  import AvaxPoolABI from '../../abi/platypus/avax-pool.json';
39
39
  import AssetABI from '../../abi/platypus/asset.json';
40
40
  import OracleABI from '../../abi/platypus/oracle.json';
41
+ import { extractReturnAmountPosition } from '../../executor/utils';
41
42
 
42
43
  export class Platypus extends SimpleExchange implements IDex<PlatypusData> {
43
44
  static readonly erc20Interface = new Interface(ERC20ABI);
@@ -497,22 +498,34 @@ export class Platypus extends SimpleExchange implements IDex<PlatypusData> {
497
498
  data: PlatypusData,
498
499
  side: SwapSide,
499
500
  ): DexExchangeParam {
501
+ const iface = isETHAddress(srcToken)
502
+ ? Platypus.avaxPoolInterface
503
+ : isETHAddress(destToken)
504
+ ? Platypus.avaxPoolInterface
505
+ : Platypus.poolInterface;
506
+
507
+ const swapFunction = isETHAddress(srcToken)
508
+ ? 'swapFromETH'
509
+ : isETHAddress(destToken)
510
+ ? 'swapToETH'
511
+ : 'swap';
512
+
500
513
  const swapData = isETHAddress(srcToken)
501
- ? Platypus.avaxPoolInterface.encodeFunctionData('swapFromETH', [
514
+ ? iface.encodeFunctionData(swapFunction, [
502
515
  destToken,
503
516
  1,
504
517
  recipient,
505
518
  getLocalDeadlineAsFriendlyPlaceholder(),
506
519
  ])
507
520
  : isETHAddress(destToken)
508
- ? Platypus.avaxPoolInterface.encodeFunctionData('swapToETH', [
521
+ ? iface.encodeFunctionData(swapFunction, [
509
522
  srcToken,
510
523
  srcAmount,
511
524
  1,
512
525
  recipient,
513
526
  getLocalDeadlineAsFriendlyPlaceholder(),
514
527
  ])
515
- : Platypus.poolInterface.encodeFunctionData('swap', [
528
+ : iface.encodeFunctionData(swapFunction, [
516
529
  srcToken,
517
530
  destToken,
518
531
  srcAmount,
@@ -526,6 +539,10 @@ export class Platypus extends SimpleExchange implements IDex<PlatypusData> {
526
539
  dexFuncHasRecipient: true,
527
540
  exchangeData: swapData,
528
541
  targetExchange: data.pool,
542
+ returnAmountPos:
543
+ side === SwapSide.SELL
544
+ ? extractReturnAmountPosition(iface, swapFunction, 'actualToAmount')
545
+ : undefined,
529
546
  };
530
547
  }
531
548
 
@@ -181,6 +181,7 @@ export class PolygonMigrator
181
181
  dexFuncHasRecipient: false,
182
182
  exchangeData: swapData,
183
183
  targetExchange: this.migratorAddress,
184
+ returnAmountPos: undefined,
184
185
  };
185
186
  }
186
187
 
@@ -24,6 +24,7 @@ import { QuickPerpsConfig, Adapters } from './config';
24
24
  import { Vault } from './vault';
25
25
  import ERC20ABI from '../../abi/erc20.json';
26
26
  import { solidityPack } from 'ethers/lib/utils';
27
+ import { extractReturnAmountPosition } from '../../executor/utils';
27
28
 
28
29
  const QuickPerpsGasCost = 300 * 1000;
29
30
 
@@ -228,7 +229,9 @@ export class QuickPerps extends SimpleExchange implements IDex<QuickPerpsData> {
228
229
  data: QuickPerpsData,
229
230
  side: SwapSide,
230
231
  ): DexExchangeParam {
231
- const swapData = Vault.interface.encodeFunctionData('swap', [
232
+ const iface = Vault.interface;
233
+ const functionName = 'swap';
234
+ const swapData = iface.encodeFunctionData(functionName, [
232
235
  srcToken,
233
236
  destToken,
234
237
  recipient,
@@ -241,6 +244,13 @@ export class QuickPerps extends SimpleExchange implements IDex<QuickPerpsData> {
241
244
  targetExchange: this.params.vault,
242
245
  swappedAmountNotPresentInExchangeData: true,
243
246
  transferSrcTokenBeforeSwap: this.params.vault,
247
+ returnAmountPos:
248
+ side === SwapSide.SELL
249
+ ? extractReturnAmountPosition(
250
+ iface,
251
+ functionName,
252
+ )
253
+ : undefined,
244
254
  };
245
255
  }
246
256
 
@@ -104,6 +104,7 @@ export class Smoothy
104
104
  dexFuncHasRecipient: false,
105
105
  exchangeData: swapData,
106
106
  targetExchange: exchange,
107
+ returnAmountPos: undefined,
107
108
  };
108
109
  }
109
110
  }
@@ -683,6 +683,7 @@ export class Solidly extends UniswapV2 {
683
683
  transferSrcTokenBeforeSwap: data.isFeeTokenInRoute
684
684
  ? undefined
685
685
  : data.pools[0].address,
686
+ returnAmountPos: undefined,
686
687
  };
687
688
  }
688
689
  }
@@ -47,7 +47,6 @@ import { assert, DeepReadonly } from 'ts-essentials';
47
47
  import { uniswapV3Math } from './contract-math/uniswap-v3-math';
48
48
  import { Contract } from 'web3-eth-contract';
49
49
  import { AbiItem } from 'web3-utils';
50
- import { OptimalSwapExchange } from '@paraswap/core';
51
50
  import { TickMath } from './contract-math/TickMath';
52
51
  import { OnPoolCreatedCallback, SolidlyV3Factory } from './solidly-v3-factory';
53
52
 
@@ -725,6 +724,7 @@ export class SolidlyV3
725
724
  dexFuncHasRecipient: true,
726
725
  exchangeData: swapData,
727
726
  targetExchange: data.poolAddress,
727
+ returnAmountPos: undefined,
728
728
  };
729
729
  }
730
730
 
@@ -24,6 +24,7 @@ import { Interface } from 'ethers/lib/utils';
24
24
  import { SparkSDaiEventPool } from './spark-sdai-pool';
25
25
  import { BI_POWS } from '../../bigint-constants';
26
26
  import { SDAI_DEPOSIT_GAS_COST, SDAI_REDEEM_GAS_COST } from './constants';
27
+ import { extractReturnAmountPosition } from '../../executor/utils';
27
28
 
28
29
  export class Spark
29
30
  extends SimpleExchange
@@ -241,6 +242,15 @@ export class Spark
241
242
  dexFuncHasRecipient: true,
242
243
  exchangeData: swapData,
243
244
  targetExchange: exchange,
245
+ returnAmountPos: isSell
246
+ ? extractReturnAmountPosition(
247
+ this.sdaiInterface,
248
+ this.isDai(srcToken)
249
+ ? SparkSDaiFunctions.deposit
250
+ : SparkSDaiFunctions.redeem,
251
+ this.isDai(srcToken) ? 'shares' : 'assets',
252
+ )
253
+ : undefined,
244
254
  };
245
255
  }
246
256
 
@@ -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