@paraswap/dex-lib 4.1.7 → 4.1.8

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 (294) hide show
  1. package/.idea/codeStyles/Project.xml +44 -4
  2. package/.idea/codeStyles/codeStyleConfig.xml +1 -1
  3. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  4. package/.idea/paraswap-dex-lib.iml +7 -4
  5. package/build/dex/angle-staked-stable/angle-staked-stable.js +2 -1
  6. package/build/dex/angle-staked-stable/angle-staked-stable.js.map +1 -1
  7. package/build/dex/angle-transmuter/angle-transmuter.js.map +1 -1
  8. package/build/dex/balancer-v1/config.js +2 -1
  9. package/build/dex/balancer-v1/config.js.map +1 -1
  10. package/build/dex/jarvis.d.ts +2 -1
  11. package/build/dex/jarvis.js +58 -0
  12. package/build/dex/jarvis.js.map +1 -1
  13. package/build/dex/weth/weth.js +2 -1
  14. package/build/dex/weth/weth.js.map +1 -1
  15. package/build/dex/zerox/index.d.ts +3 -25
  16. package/build/dex/zerox/index.js +50 -42
  17. package/build/dex/zerox/index.js.map +1 -1
  18. package/build/dex/zerox/types.d.ts +29 -0
  19. package/build/dex/zerox/types.js +8 -1
  20. package/build/dex/zerox/types.js.map +1 -1
  21. package/package.json +1 -1
  22. package/scripts/get-uniswap-v3-dexes.ts +64 -0
  23. package/src/dex/aave-gsm/aave-gsm-gas-estimation.test.ts +32 -0
  24. package/src/dex/aave-v2/aave-v2-gas-estimation.test.ts +28 -0
  25. package/src/dex/aave-v3/aave-v3-gas-estimation.test.ts +66 -0
  26. package/src/dex/aave-v3-stata/aave-v3-stata-gas-estimation.test.ts +41 -0
  27. package/src/dex/aave-v3-stata-v2/aave-v3-stata-v2-gas-estimation.test.ts +41 -0
  28. package/src/dex/angle-staked-stable/angle-staked-stable-gas-estimation.test.ts +29 -0
  29. package/src/dex/angle-staked-stable/angle-staked-stable.ts +2 -1
  30. package/src/dex/angle-transmuter/angle-transmuter-gas-estimation.test.ts +41 -0
  31. package/src/dex/angle-transmuter/angle-transmuter.ts +0 -1
  32. package/src/dex/balancer-v1/balancer-v1-gas-estimation.test.ts +29 -0
  33. package/src/dex/balancer-v1/config.ts +2 -1
  34. package/src/dex/balancer-v2/balancer-v2-gas-estimation.test.ts +98 -0
  35. package/src/dex/balancer-v3/balancer-v3-gas-estimation.test.ts +30 -0
  36. package/src/dex/bancor/bancor-gas-estimation.test.ts +30 -0
  37. package/src/dex/bebop/bebop-gas-estimation.test.ts +30 -0
  38. package/src/dex/concentrator-arusd/concentrator-arusd-gas-estimation.test.ts +29 -0
  39. package/src/dex/curve-v1/curve-v1-gas-estimation.test.ts +29 -0
  40. package/src/dex/curve-v2/curve-v2-gas-estimation.test.ts +29 -0
  41. package/src/dex/fluid-dex/fluid-dex-gas-estimation.test.ts +29 -0
  42. package/src/dex/fx-protocol-rusd/fx-protocol-rusd-gas-estimation.test.ts +29 -0
  43. package/src/dex/hashflow/hashflow-gas-estimation.test.ts +30 -0
  44. package/src/dex/idle-dao/idle-dao--gas-estimation.test.ts +30 -0
  45. package/src/dex/lido/lido-gas-estimation.test.ts +29 -0
  46. package/src/dex/lite-psm/lite-psm-gas-estimation.test.ts +34 -0
  47. package/src/dex/maker-psm/maker-psm-gas-estimation.test.ts +34 -0
  48. package/src/dex/maverick-v1/maverick-v1-gas-estimation.test.ts +29 -0
  49. package/src/dex/maverick-v2/maverick-v2-gas-estimation.test.ts +29 -0
  50. package/src/dex/pancakeswap-v3/pancakeswap-v3-gas-estimation.test.ts +29 -0
  51. package/src/dex/polygon-migrator/polygon-migrator-gas-estimation.test.ts +41 -0
  52. package/src/dex/sky-converter/sky-converter-gas-estimation.test.ts +78 -0
  53. package/src/dex/solidly/solidly-gas-estimation.test.ts +29 -0
  54. package/src/dex/solidly-v3/solidly-v3-gas-estimation.test.ts +29 -0
  55. package/src/dex/spark/spark-gas-estimation.test.ts +29 -0
  56. package/src/dex/stader/stader-gas-estimation.test.ts +29 -0
  57. package/src/dex/stkgho/stkgho-gas-estimation.test.ts +29 -0
  58. package/src/dex/swaap-v2/swaap-v2-estimation.test.ts +29 -0
  59. package/src/dex/swell/swell-estimation.test.ts +29 -0
  60. package/src/dex/trader-joe-v2.1/trader-joe-v2.1-gas-estimation.test.ts +29 -0
  61. package/src/dex/uniswap-v2/uniswap-v2-gas-estimation.test.ts +98 -0
  62. package/src/dex/uniswap-v3/uniswap-v3-gas-estimation.test.ts +98 -0
  63. package/src/dex/usual/usual-gas-estimation.test.ts +54 -0
  64. package/src/dex/usual-pp/usual-pp-gas-estimation.test.ts +29 -0
  65. package/src/dex/weth/weth-gas-estimation.test.ts +42 -0
  66. package/src/dex/weth/weth.ts +3 -1
  67. package/src/dex/wombat/wombat-gas-estimation.test.ts +29 -0
  68. package/src/dex/wsteth/wsteth-gas-estimation.test.ts +41 -0
  69. package/src/dex/wusdm/wusdm-gas-estimation.test.ts +41 -0
  70. package/tests/constants-e2e.ts +8 -0
  71. package/tests/tenderly-simulation-new.test.ts +151 -0
  72. package/tests/tenderly-simulation-new.ts +698 -0
  73. package/tests/token-storage-slots.json +532 -0
  74. package/tests/utils-e2e.ts +137 -1
  75. package/.idea/aws.xml +0 -17
  76. package/.idea/misc.xml +0 -6
  77. package/.idea/prettier.xml +0 -7
  78. package/build/abi/AaveV1_lending_pool.json +0 -27
  79. package/build/abi/integral/factory.json +0 -333
  80. package/build/abi/integral/oracle.json +0 -501
  81. package/build/abi/integral/pool.json +0 -1041
  82. package/build/abi/integral/relayer.json +0 -1536
  83. package/build/abi/platypus/asset.json +0 -490
  84. package/build/abi/platypus/avax-pool.json +0 -820
  85. package/build/abi/platypus/oracle.json +0 -119
  86. package/build/abi/platypus/pool.json +0 -677
  87. package/build/abi/smardex/all/smardex-router.json +0 -648
  88. package/build/abi/smardex/layer-1/smardex-factory.json +0 -242
  89. package/build/abi/smardex/layer-1/smardex-pool.json +0 -506
  90. package/build/abi/smardex/layer-2/smardex-factory.json +0 -185
  91. package/build/abi/smardex/layer-2/smardex-pool.json +0 -578
  92. package/build/abi/swaap-v1/pool.json +0 -1346
  93. package/build/dex/aave-v1/aave-v1.d.ts +0 -33
  94. package/build/dex/aave-v1/aave-v1.js +0 -158
  95. package/build/dex/aave-v1/aave-v1.js.map +0 -1
  96. package/build/dex/aave-v1/config.d.ts +0 -11
  97. package/build/dex/aave-v1/config.js +0 -20
  98. package/build/dex/aave-v1/config.js.map +0 -1
  99. package/build/dex/aave-v1/tokens-mainnet.json +0 -134
  100. package/build/dex/aave-v1/tokens.d.ts +0 -3
  101. package/build/dex/aave-v1/tokens.js +0 -50
  102. package/build/dex/aave-v1/tokens.js.map +0 -1
  103. package/build/dex/aave-v1/types.d.ts +0 -12
  104. package/build/dex/aave-v1/types.js +0 -3
  105. package/build/dex/aave-v1/types.js.map +0 -1
  106. package/build/dex/bProtocol.d.ts +0 -18
  107. package/build/dex/bProtocol.js +0 -39
  108. package/build/dex/bProtocol.js.map +0 -1
  109. package/build/dex/bancor.d.ts +0 -26
  110. package/build/dex/bancor.js +0 -58
  111. package/build/dex/bancor.js.map +0 -1
  112. package/build/dex/compound.d.ts +0 -18
  113. package/build/dex/compound.js +0 -46
  114. package/build/dex/compound.js.map +0 -1
  115. package/build/dex/curve-v2.d.ts +0 -58
  116. package/build/dex/curve-v2.js +0 -180
  117. package/build/dex/curve-v2.js.map +0 -1
  118. package/build/dex/dodo-v1.d.ts +0 -33
  119. package/build/dex/dodo-v1.js +0 -63
  120. package/build/dex/dodo-v1.js.map +0 -1
  121. package/build/dex/fluid-dex/fluid-dex-generate-pool.d.ts +0 -49
  122. package/build/dex/fluid-dex/fluid-dex-generate-pool.js +0 -104
  123. package/build/dex/fluid-dex/fluid-dex-generate-pool.js.map +0 -1
  124. package/build/dex/integral/config.d.ts +0 -4
  125. package/build/dex/integral/config.js +0 -20
  126. package/build/dex/integral/config.js.map +0 -1
  127. package/build/dex/integral/context.d.ts +0 -40
  128. package/build/dex/integral/context.js +0 -158
  129. package/build/dex/integral/context.js.map +0 -1
  130. package/build/dex/integral/integral-factory.d.ts +0 -24
  131. package/build/dex/integral/integral-factory.js +0 -95
  132. package/build/dex/integral/integral-factory.js.map +0 -1
  133. package/build/dex/integral/integral-pool.d.ts +0 -50
  134. package/build/dex/integral/integral-pool.js +0 -149
  135. package/build/dex/integral/integral-pool.js.map +0 -1
  136. package/build/dex/integral/integral-pricing.d.ts +0 -18
  137. package/build/dex/integral/integral-pricing.js +0 -114
  138. package/build/dex/integral/integral-pricing.js.map +0 -1
  139. package/build/dex/integral/integral-relayer.d.ts +0 -42
  140. package/build/dex/integral/integral-relayer.js +0 -192
  141. package/build/dex/integral/integral-relayer.js.map +0 -1
  142. package/build/dex/integral/integral-token.d.ts +0 -27
  143. package/build/dex/integral/integral-token.js +0 -59
  144. package/build/dex/integral/integral-token.js.map +0 -1
  145. package/build/dex/integral/integral.d.ts +0 -41
  146. package/build/dex/integral/integral.js +0 -376
  147. package/build/dex/integral/integral.js.map +0 -1
  148. package/build/dex/integral/types.d.ts +0 -85
  149. package/build/dex/integral/types.js +0 -9
  150. package/build/dex/integral/types.js.map +0 -1
  151. package/build/dex/integral/utils-e2e.d.ts +0 -9
  152. package/build/dex/integral/utils-e2e.js +0 -131
  153. package/build/dex/integral/utils-e2e.js.map +0 -1
  154. package/build/dex/integral/utils.d.ts +0 -17
  155. package/build/dex/integral/utils.js +0 -94
  156. package/build/dex/integral/utils.js.map +0 -1
  157. package/build/dex/lido.d.ts +0 -19
  158. package/build/dex/lido.js +0 -42
  159. package/build/dex/lido.js.map +0 -1
  160. package/build/dex/m-token/config.d.ts +0 -3
  161. package/build/dex/m-token/config.js +0 -19
  162. package/build/dex/m-token/config.js.map +0 -1
  163. package/build/dex/m-token/m-token.d.ts +0 -29
  164. package/build/dex/m-token/m-token.js +0 -145
  165. package/build/dex/m-token/m-token.js.map +0 -1
  166. package/build/dex/m-token/m-wrapped-m.d.ts +0 -17
  167. package/build/dex/m-token/m-wrapped-m.js +0 -50
  168. package/build/dex/m-token/m-wrapped-m.js.map +0 -1
  169. package/build/dex/m-token/types.d.ts +0 -12
  170. package/build/dex/m-token/types.js +0 -3
  171. package/build/dex/m-token/types.js.map +0 -1
  172. package/build/dex/onebit.d.ts +0 -25
  173. package/build/dex/onebit.js +0 -42
  174. package/build/dex/onebit.js.map +0 -1
  175. package/build/dex/platypus/asset.d.ts +0 -14
  176. package/build/dex/platypus/asset.js +0 -97
  177. package/build/dex/platypus/asset.js.map +0 -1
  178. package/build/dex/platypus/config.d.ts +0 -11
  179. package/build/dex/platypus/config.js +0 -69
  180. package/build/dex/platypus/config.js.map +0 -1
  181. package/build/dex/platypus/platypus.d.ts +0 -62
  182. package/build/dex/platypus/platypus.js +0 -442
  183. package/build/dex/platypus/platypus.js.map +0 -1
  184. package/build/dex/platypus/pool-avax.d.ts +0 -8
  185. package/build/dex/platypus/pool-avax.js +0 -54
  186. package/build/dex/platypus/pool-avax.js.map +0 -1
  187. package/build/dex/platypus/pool-base.d.ts +0 -19
  188. package/build/dex/platypus/pool-base.js +0 -86
  189. package/build/dex/platypus/pool-base.js.map +0 -1
  190. package/build/dex/platypus/pool-pure.d.ts +0 -8
  191. package/build/dex/platypus/pool-pure.js +0 -37
  192. package/build/dex/platypus/pool-pure.js.map +0 -1
  193. package/build/dex/platypus/pool-subscriber.d.ts +0 -14
  194. package/build/dex/platypus/pool-subscriber.js +0 -167
  195. package/build/dex/platypus/pool-subscriber.js.map +0 -1
  196. package/build/dex/platypus/pool.d.ts +0 -8
  197. package/build/dex/platypus/pool.js +0 -58
  198. package/build/dex/platypus/pool.js.map +0 -1
  199. package/build/dex/platypus/types.d.ts +0 -92
  200. package/build/dex/platypus/types.js +0 -10
  201. package/build/dex/platypus/types.js.map +0 -1
  202. package/build/dex/quickswap/spiritswap-v3.d.ts +0 -6
  203. package/build/dex/quickswap/spiritswap-v3.js +0 -19
  204. package/build/dex/quickswap/spiritswap-v3.js.map +0 -1
  205. package/build/dex/smardex/config.d.ts +0 -4
  206. package/build/dex/smardex/config.js +0 -64
  207. package/build/dex/smardex/config.js.map +0 -1
  208. package/build/dex/smardex/constants.d.ts +0 -18
  209. package/build/dex/smardex/constants.js +0 -33
  210. package/build/dex/smardex/constants.js.map +0 -1
  211. package/build/dex/smardex/sdk/constants.d.ts +0 -6
  212. package/build/dex/smardex/sdk/constants.js +0 -13
  213. package/build/dex/smardex/sdk/constants.js.map +0 -1
  214. package/build/dex/smardex/sdk/core.d.ts +0 -113
  215. package/build/dex/smardex/sdk/core.js +0 -499
  216. package/build/dex/smardex/sdk/core.js.map +0 -1
  217. package/build/dex/smardex/sdk/errors.d.ts +0 -15
  218. package/build/dex/smardex/sdk/errors.js +0 -22
  219. package/build/dex/smardex/sdk/errors.js.map +0 -1
  220. package/build/dex/smardex/sdk/types.d.ts +0 -62
  221. package/build/dex/smardex/sdk/types.js +0 -3
  222. package/build/dex/smardex/sdk/types.js.map +0 -1
  223. package/build/dex/smardex/sdk/utils.d.ts +0 -44
  224. package/build/dex/smardex/sdk/utils.js +0 -133
  225. package/build/dex/smardex/sdk/utils.js.map +0 -1
  226. package/build/dex/smardex/smardex-event-pool.d.ts +0 -28
  227. package/build/dex/smardex/smardex-event-pool.js +0 -119
  228. package/build/dex/smardex/smardex-event-pool.js.map +0 -1
  229. package/build/dex/smardex/smardex.d.ts +0 -65
  230. package/build/dex/smardex/smardex.js +0 -519
  231. package/build/dex/smardex/smardex.js.map +0 -1
  232. package/build/dex/smardex/types.d.ts +0 -55
  233. package/build/dex/smardex/types.js +0 -3
  234. package/build/dex/smardex/types.js.map +0 -1
  235. package/build/dex/smoothy.d.ts +0 -26
  236. package/build/dex/smoothy.js +0 -48
  237. package/build/dex/smoothy.js.map +0 -1
  238. package/build/dex/solidly/forks-override/cone.d.ts +0 -22
  239. package/build/dex/solidly/forks-override/cone.js +0 -53
  240. package/build/dex/solidly/forks-override/cone.js.map +0 -1
  241. package/build/dex/solidly/forks-override/solisnek.d.ts +0 -8
  242. package/build/dex/solidly/forks-override/solisnek.js +0 -15
  243. package/build/dex/solidly/forks-override/solisnek.js.map +0 -1
  244. package/build/dex/stable-pool.d.ts +0 -28
  245. package/build/dex/stable-pool.js +0 -62
  246. package/build/dex/stable-pool.js.map +0 -1
  247. package/build/dex/swaap-v1/config.d.ts +0 -17
  248. package/build/dex/swaap-v1/config.js +0 -56
  249. package/build/dex/swaap-v1/config.js.map +0 -1
  250. package/build/dex/swaap-v1/constants.d.ts +0 -6
  251. package/build/dex/swaap-v1/constants.js +0 -17
  252. package/build/dex/swaap-v1/constants.js.map +0 -1
  253. package/build/dex/swaap-v1/libraries/ChainlinkUtils.d.ts +0 -25
  254. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js +0 -62
  255. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js.map +0 -1
  256. package/build/dex/swaap-v1/libraries/Const.d.ts +0 -18
  257. package/build/dex/swaap-v1/libraries/Const.js +0 -26
  258. package/build/dex/swaap-v1/libraries/Const.js.map +0 -1
  259. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.d.ts +0 -77
  260. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js +0 -316
  261. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js.map +0 -1
  262. package/build/dex/swaap-v1/libraries/LogExpMath.d.ts +0 -75
  263. package/build/dex/swaap-v1/libraries/LogExpMath.js +0 -418
  264. package/build/dex/swaap-v1/libraries/LogExpMath.js.map +0 -1
  265. package/build/dex/swaap-v1/libraries/MathMMM.d.ts +0 -185
  266. package/build/dex/swaap-v1/libraries/MathMMM.js +0 -453
  267. package/build/dex/swaap-v1/libraries/MathMMM.js.map +0 -1
  268. package/build/dex/swaap-v1/libraries/Num.d.ts +0 -31
  269. package/build/dex/swaap-v1/libraries/Num.js +0 -167
  270. package/build/dex/swaap-v1/libraries/Num.js.map +0 -1
  271. package/build/dex/swaap-v1/libraries/PoolQuotations.d.ts +0 -23
  272. package/build/dex/swaap-v1/libraries/PoolQuotations.js +0 -131
  273. package/build/dex/swaap-v1/libraries/PoolQuotations.js.map +0 -1
  274. package/build/dex/swaap-v1/libraries/Struct.d.ts +0 -56
  275. package/build/dex/swaap-v1/libraries/Struct.js +0 -3
  276. package/build/dex/swaap-v1/libraries/Struct.js.map +0 -1
  277. package/build/dex/swaap-v1/swaap-v1-pool.d.ts +0 -45
  278. package/build/dex/swaap-v1/swaap-v1-pool.js +0 -656
  279. package/build/dex/swaap-v1/swaap-v1-pool.js.map +0 -1
  280. package/build/dex/swaap-v1/swaap-v1.d.ts +0 -61
  281. package/build/dex/swaap-v1/swaap-v1.js +0 -369
  282. package/build/dex/swaap-v1/swaap-v1.js.map +0 -1
  283. package/build/dex/swaap-v1/types.d.ts +0 -106
  284. package/build/dex/swaap-v1/types.js +0 -9
  285. package/build/dex/swaap-v1/types.js.map +0 -1
  286. package/build/dex/trader-joe-v2.1/optimizer.d.ts +0 -2
  287. package/build/dex/trader-joe-v2.1/optimizer.js +0 -47
  288. package/build/dex/trader-joe-v2.1/optimizer.js.map +0 -1
  289. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.d.ts +0 -7
  290. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js +0 -20
  291. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js.map +0 -1
  292. package/build/dex/trader-joe-v2.1.d.ts +0 -43
  293. package/build/dex/trader-joe-v2.1.js +0 -79
  294. package/build/dex/trader-joe-v2.1.js.map +0 -1
@@ -0,0 +1,29 @@
1
+ /* eslint-disable no-console */
2
+ import 'dotenv/config';
3
+ import { testGasEstimation } from '../../../tests/utils-e2e';
4
+ import { Tokens } from '../../../tests/constants-e2e';
5
+ import { Network, SwapSide } from '../../constants';
6
+ import { ContractMethodV6 } from '@paraswap/core';
7
+
8
+ describe('TraderJoeV2.1 Gas Estimation', () => {
9
+ const dexKey = 'traderjoev2.1';
10
+ const network = Network.MAINNET;
11
+
12
+ describe('swapExactAmountIn', () => {
13
+ const USDT = Tokens[network]['USDT'];
14
+ const USDC = Tokens[network]['USDC'];
15
+ const amount = 100000000n;
16
+
17
+ it('swapExactTokensForTokens', async () => {
18
+ await testGasEstimation(
19
+ network,
20
+ USDT,
21
+ USDC,
22
+ amount,
23
+ SwapSide.SELL,
24
+ dexKey,
25
+ ContractMethodV6.swapExactAmountIn,
26
+ );
27
+ });
28
+ });
29
+ });
@@ -0,0 +1,98 @@
1
+ /* eslint-disable no-console */
2
+ import dotenv from 'dotenv';
3
+ import { testGasEstimation } from '../../../tests/utils-e2e';
4
+ import { Tokens } from '../../../tests/constants-e2e';
5
+ import { Network, SwapSide } from '../../constants';
6
+ import { ContractMethodV6 } from '@paraswap/core';
7
+ import { ethers } from 'ethers';
8
+
9
+ dotenv.config();
10
+
11
+ describe('UniswapV2 Gas Estimation', () => {
12
+ const dexKey = 'UniswapV2';
13
+ const network = Network.MAINNET;
14
+ const tokens = Tokens[network];
15
+ const ETH = tokens['ETH'];
16
+ const WETH = tokens['WETH'];
17
+ const USDT = tokens['USDT'];
18
+ const USDC = tokens['USDC'];
19
+ const WBTC = tokens['WBTC'];
20
+ const amount = 100000000n; // 100 usdt
21
+
22
+ const methods: ContractMethodV6[] = [
23
+ ContractMethodV6.swapExactAmountInOnUniswapV2,
24
+ ContractMethodV6.swapExactAmountIn,
25
+ ];
26
+
27
+ methods.forEach(async method => {
28
+ describe(method, () => {
29
+ it('one swap', async () => {
30
+ await testGasEstimation(
31
+ network,
32
+ USDT,
33
+ USDC,
34
+ amount,
35
+ SwapSide.SELL,
36
+ dexKey,
37
+ method,
38
+ );
39
+ });
40
+
41
+ it('one swap with unwrap', async () => {
42
+ await testGasEstimation(
43
+ network,
44
+ USDT,
45
+ ETH,
46
+ amount,
47
+ SwapSide.SELL,
48
+ dexKey,
49
+ method,
50
+ );
51
+ });
52
+
53
+ it('one swap with wrap', async () => {
54
+ const oneEth = ethers.utils.parseEther('1').toBigInt();
55
+
56
+ await testGasEstimation(
57
+ network,
58
+ ETH,
59
+ USDT,
60
+ oneEth,
61
+ SwapSide.SELL,
62
+ dexKey,
63
+ method,
64
+ );
65
+ });
66
+
67
+ it('two swaps', async () => {
68
+ const route = [USDT.address, WETH.address, USDC.address];
69
+
70
+ await testGasEstimation(
71
+ network,
72
+ USDT,
73
+ USDC,
74
+ amount,
75
+ SwapSide.SELL,
76
+ dexKey,
77
+ method,
78
+ route,
79
+ );
80
+ });
81
+
82
+ it('three swaps', async () => {
83
+ const route = [USDT.address, WETH.address, WBTC.address, USDC.address];
84
+
85
+ await testGasEstimation(
86
+ network,
87
+ USDT,
88
+ USDC,
89
+ amount,
90
+ SwapSide.SELL,
91
+ dexKey,
92
+ method,
93
+ route,
94
+ );
95
+ });
96
+ });
97
+ });
98
+ });
@@ -0,0 +1,98 @@
1
+ /* eslint-disable no-console */
2
+ import dotenv from 'dotenv';
3
+ import { testGasEstimation } from '../../../tests/utils-e2e';
4
+ import { Tokens } from '../../../tests/constants-e2e';
5
+ import { Network, SwapSide } from '../../constants';
6
+ import { ContractMethodV6 } from '@paraswap/core';
7
+ import { ethers } from 'ethers';
8
+
9
+ dotenv.config();
10
+
11
+ describe('UniswapV3 Gas Estimation', () => {
12
+ const dexKey = 'UniswapV3';
13
+ const network = Network.MAINNET;
14
+ const tokens = Tokens[network];
15
+ const ETH = tokens['ETH'];
16
+ const WETH = tokens['WETH'];
17
+ const USDT = tokens['USDT'];
18
+ const USDC = tokens['USDC'];
19
+ const WBTC = tokens['WBTC'];
20
+ const amount = 100000000n; // 100 usdt
21
+
22
+ const methods: ContractMethodV6[] = [
23
+ ContractMethodV6.swapExactAmountInOnUniswapV3,
24
+ ContractMethodV6.swapExactAmountIn,
25
+ ];
26
+
27
+ methods.forEach(async method => {
28
+ describe(method, () => {
29
+ it('one swap', async () => {
30
+ await testGasEstimation(
31
+ network,
32
+ USDT,
33
+ USDC,
34
+ amount,
35
+ SwapSide.SELL,
36
+ dexKey,
37
+ method,
38
+ );
39
+ });
40
+
41
+ it('one swap with unwrap', async () => {
42
+ await testGasEstimation(
43
+ network,
44
+ USDT,
45
+ ETH,
46
+ amount,
47
+ SwapSide.SELL,
48
+ dexKey,
49
+ method,
50
+ );
51
+ });
52
+
53
+ it('one swap with wrap', async () => {
54
+ const oneEth = ethers.utils.parseEther('1').toBigInt();
55
+
56
+ await testGasEstimation(
57
+ network,
58
+ ETH,
59
+ USDT,
60
+ oneEth,
61
+ SwapSide.SELL,
62
+ dexKey,
63
+ method,
64
+ );
65
+ });
66
+
67
+ it('two swaps', async () => {
68
+ const route = [USDT.address, WETH.address, USDC.address];
69
+
70
+ await testGasEstimation(
71
+ network,
72
+ USDT,
73
+ USDC,
74
+ amount,
75
+ SwapSide.SELL,
76
+ dexKey,
77
+ method,
78
+ route,
79
+ );
80
+ });
81
+
82
+ it('three swaps', async () => {
83
+ const route = [USDT.address, WETH.address, WBTC.address, USDC.address];
84
+
85
+ await testGasEstimation(
86
+ network,
87
+ USDT,
88
+ USDC,
89
+ amount,
90
+ SwapSide.SELL,
91
+ dexKey,
92
+ method,
93
+ route,
94
+ );
95
+ });
96
+ });
97
+ });
98
+ });
@@ -0,0 +1,54 @@
1
+ /* eslint-disable no-console */
2
+ import 'dotenv/config';
3
+ import { testGasEstimation } from '../../../tests/utils-e2e';
4
+ import { Tokens } from '../../../tests/constants-e2e';
5
+ import { Network, SwapSide } from '../../constants';
6
+ import { ContractMethodV6 } from '@paraswap/core';
7
+
8
+ describe('Usual Gas Estimation', () => {
9
+ const network = Network.MAINNET;
10
+
11
+ describe('UsualBond', () => {
12
+ const dexKey = 'UsualBond';
13
+
14
+ describe('swapExactAmountIn', () => {
15
+ const USD0 = Tokens[network]['USD0'];
16
+ const USD0pp = Tokens[network]['USD0++'];
17
+ const amount = 100000n;
18
+
19
+ it('mint', async () => {
20
+ await testGasEstimation(
21
+ network,
22
+ USD0,
23
+ USD0pp,
24
+ amount,
25
+ SwapSide.SELL,
26
+ dexKey,
27
+ ContractMethodV6.swapExactAmountIn,
28
+ );
29
+ });
30
+ });
31
+ });
32
+
33
+ describe('UsualMUsd0', () => {
34
+ const dexKey = 'UsualMUsd0';
35
+
36
+ describe('swapExactAmountIn', () => {
37
+ const UsualM = Tokens[network]['UsualM'];
38
+ const USD0 = Tokens[network]['USD0'];
39
+ const amount = 100000n;
40
+
41
+ it('swap', async () => {
42
+ await testGasEstimation(
43
+ network,
44
+ UsualM,
45
+ USD0,
46
+ amount,
47
+ SwapSide.SELL,
48
+ dexKey,
49
+ ContractMethodV6.swapExactAmountIn,
50
+ );
51
+ });
52
+ });
53
+ });
54
+ });
@@ -0,0 +1,29 @@
1
+ /* eslint-disable no-console */
2
+ import 'dotenv/config';
3
+ import { testGasEstimation } from '../../../tests/utils-e2e';
4
+ import { Tokens } from '../../../tests/constants-e2e';
5
+ import { Network, SwapSide } from '../../constants';
6
+ import { ContractMethodV6 } from '@paraswap/core';
7
+
8
+ describe('UsualPP Gas Estimation', () => {
9
+ const dexKey = 'UsualPP';
10
+ const network = Network.MAINNET;
11
+
12
+ describe('swapExactAmountIn', () => {
13
+ const USD0pp = Tokens[network]['USD0++'];
14
+ const USD0 = Tokens[network]['USD0'];
15
+ const amount = 100000000n;
16
+
17
+ it('unlockUsd0ppFloorPrice', async () => {
18
+ await testGasEstimation(
19
+ network,
20
+ USD0pp,
21
+ USD0,
22
+ amount,
23
+ SwapSide.SELL,
24
+ dexKey,
25
+ ContractMethodV6.swapExactAmountIn,
26
+ );
27
+ });
28
+ });
29
+ });
@@ -0,0 +1,42 @@
1
+ /* eslint-disable no-console */
2
+ import 'dotenv/config';
3
+ import { testGasEstimation } from '../../../tests/utils-e2e';
4
+ import { Tokens } from '../../../tests/constants-e2e';
5
+ import { Network, SwapSide } from '../../constants';
6
+ import { ContractMethodV6 } from '@paraswap/core';
7
+ import { ethers } from 'ethers';
8
+
9
+ describe('Weth Gas Estimation', () => {
10
+ const dexKey = 'Weth';
11
+ const network = Network.MAINNET;
12
+
13
+ describe('swapExactAmountIn', () => {
14
+ const ETH = Tokens[network]['ETH'];
15
+ const WETH = Tokens[network]['WETH'];
16
+ const amount = ethers.utils.parseEther('1').toBigInt();
17
+
18
+ it('wrap', async () => {
19
+ await testGasEstimation(
20
+ network,
21
+ ETH,
22
+ WETH,
23
+ amount,
24
+ SwapSide.SELL,
25
+ dexKey,
26
+ ContractMethodV6.swapExactAmountIn,
27
+ );
28
+ });
29
+
30
+ it('unwrap', async () => {
31
+ await testGasEstimation(
32
+ network,
33
+ WETH,
34
+ ETH,
35
+ amount,
36
+ SwapSide.SELL,
37
+ dexKey,
38
+ ContractMethodV6.swapExactAmountIn,
39
+ );
40
+ });
41
+ });
42
+ });
@@ -94,11 +94,13 @@ export class Weth
94
94
 
95
95
  if (!isWETHSwap) return null;
96
96
 
97
+ const gasCost = isETHAddress(srcToken.address) ? 6_500 : 9000;
98
+
97
99
  return [
98
100
  {
99
101
  prices: amounts,
100
102
  unit: this.unitPrice,
101
- gasCost: this.poolGasCost,
103
+ gasCost,
102
104
  exchange: this.dexKey,
103
105
  poolAddresses: [this.address],
104
106
  data: null,
@@ -0,0 +1,29 @@
1
+ /* eslint-disable no-console */
2
+ import 'dotenv/config';
3
+ import { testGasEstimation } from '../../../tests/utils-e2e';
4
+ import { Tokens } from '../../../tests/constants-e2e';
5
+ import { Network, SwapSide } from '../../constants';
6
+ import { ContractMethodV6 } from '@paraswap/core';
7
+
8
+ describe('Wombat Gas Estimation', () => {
9
+ const dexKey = 'Wombat';
10
+ const network = Network.MAINNET;
11
+
12
+ describe('swapExactAmountIn', () => {
13
+ const USDT = Tokens[network]['USDT'];
14
+ const USDC = Tokens[network]['USDC'];
15
+ const amount = 100000000n;
16
+
17
+ it('swapExactTokensForTokens', async () => {
18
+ await testGasEstimation(
19
+ network,
20
+ USDT,
21
+ USDC,
22
+ amount,
23
+ SwapSide.SELL,
24
+ dexKey,
25
+ ContractMethodV6.swapExactAmountIn,
26
+ );
27
+ });
28
+ });
29
+ });
@@ -0,0 +1,41 @@
1
+ /* eslint-disable no-console */
2
+ import 'dotenv/config';
3
+ import { testGasEstimation } from '../../../tests/utils-e2e';
4
+ import { Tokens } from '../../../tests/constants-e2e';
5
+ import { Network, SwapSide } from '../../constants';
6
+ import { ContractMethodV6 } from '@paraswap/core';
7
+
8
+ describe('wstETH Gas Estimation', () => {
9
+ const dexKey = 'wstETH';
10
+ const network = Network.MAINNET;
11
+
12
+ describe('swapExactAmountIn', () => {
13
+ const STETH = Tokens[network]['STETH'];
14
+ const wstETH = Tokens[network]['wstETH'];
15
+ const amount = 1000000000000000000n;
16
+
17
+ it('wrap', async () => {
18
+ await testGasEstimation(
19
+ network,
20
+ STETH,
21
+ wstETH,
22
+ amount,
23
+ SwapSide.SELL,
24
+ dexKey,
25
+ ContractMethodV6.swapExactAmountIn,
26
+ );
27
+ });
28
+
29
+ it('unwrap', async () => {
30
+ await testGasEstimation(
31
+ network,
32
+ wstETH,
33
+ STETH,
34
+ amount,
35
+ SwapSide.SELL,
36
+ dexKey,
37
+ ContractMethodV6.swapExactAmountIn,
38
+ );
39
+ });
40
+ });
41
+ });
@@ -0,0 +1,41 @@
1
+ /* eslint-disable no-console */
2
+ import 'dotenv/config';
3
+ import { testGasEstimation } from '../../../tests/utils-e2e';
4
+ import { Tokens } from '../../../tests/constants-e2e';
5
+ import { Network, SwapSide } from '../../constants';
6
+ import { ContractMethodV6 } from '@paraswap/core';
7
+
8
+ describe('wUSDM Gas Estimation', () => {
9
+ const dexKey = 'wUSDM';
10
+ const network = Network.MAINNET;
11
+
12
+ describe('swapExactAmountIn', () => {
13
+ const wUSDM = Tokens[network]['wUSDM'];
14
+ const USDM = Tokens[network]['USDM'];
15
+ const amount = 500n;
16
+
17
+ it('deposit', async () => {
18
+ await testGasEstimation(
19
+ network,
20
+ USDM,
21
+ wUSDM,
22
+ amount,
23
+ SwapSide.SELL,
24
+ dexKey,
25
+ ContractMethodV6.swapExactAmountIn,
26
+ );
27
+ });
28
+
29
+ it('redeem', async () => {
30
+ await testGasEstimation(
31
+ network,
32
+ wUSDM,
33
+ USDM,
34
+ amount,
35
+ SwapSide.SELL,
36
+ dexKey,
37
+ ContractMethodV6.swapExactAmountIn,
38
+ );
39
+ });
40
+ });
41
+ });
@@ -591,6 +591,14 @@ export const Tokens: {
591
591
  decimals: 6,
592
592
  symbol: 'USUALM',
593
593
  },
594
+ stataEthWETH: {
595
+ address: '0x252231882FB38481497f3C767469106297c8d93b',
596
+ decimals: 18,
597
+ },
598
+ waEthWETH: {
599
+ address: '0x0bfc9d54Fc184518A81162F8fB99c2eACa081202',
600
+ decimals: 18,
601
+ },
594
602
  },
595
603
  [Network.POLYGON]: {
596
604
  jGBP: {
@@ -0,0 +1,151 @@
1
+ import { ethers } from 'ethers';
2
+ import { TenderlySimulatorNew } from './tenderly-simulation-new';
3
+
4
+ describe('Tenderly', () => {
5
+ const tenderly = TenderlySimulatorNew.getInstance();
6
+ const USDC = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
7
+ const USDT = '0xdac17f958d2ee523a2206206994597c13d831ec7';
8
+ const account = '0x89f53c184ed91cd333fdec0eceeddcaea0cc28cf';
9
+ const spender = '0x6a000f20005980200259b80c5102003040001068';
10
+
11
+ describe('calculateAddressBalanceSlot', () => {
12
+ it('should calculate account balance storage slot', () => {
13
+ const balanceOfSlot = ethers.utils.defaultAbiCoder.encode(['uint'], [9]); // usdc's `balanceOf` mapping slot
14
+ // https://dashboard.tenderly.co/paraswap/paraswap/simulator/d7964910-d8ce-446b-a347-c4f1da1acead/debugger?trace=0.2.0.0
15
+ const expected =
16
+ '0x8cef03c2b7574a38d9a9e8dd69980240d41d70485643f407de33055936c48f97';
17
+ const calculated = tenderly.calculateAddressBalanceSlot(
18
+ balanceOfSlot,
19
+ account,
20
+ );
21
+ // assert
22
+ expect(calculated).toEqual(expected);
23
+ });
24
+ });
25
+
26
+ describe('calculateAddressAllowanceSlots', () => {
27
+ it('should calculate account balance storage slot', () => {
28
+ const allowanceSlot = ethers.utils.defaultAbiCoder.encode(['uint'], [10]); // usdc's `allowance` mapping slot
29
+ // https://dashboard.tenderly.co/paraswap/paraswap/simulator/e2a6cad1-4a82-4ba7-8c3e-ef097315542c/debugger?trace=0.2.0
30
+ const expected =
31
+ '0x371a34ab690ce2826b137a25bfdaf43d0b93c819878de2df8877f1fb50ffb206';
32
+ const calculated = tenderly.calculateAddressAllowanceSlot(
33
+ allowanceSlot,
34
+ account,
35
+ spender,
36
+ );
37
+ // assert
38
+ expect(calculated).toEqual(expected);
39
+ });
40
+ });
41
+
42
+ describe('buildBalanceOfSimulationRequest', () => {
43
+ it('should build `balanceOf` simulation request', () => {
44
+ const request = tenderly.buildBalanceOfSimulationRequest(
45
+ 1,
46
+ USDC,
47
+ account,
48
+ );
49
+
50
+ const expectedCallData = ethers.utils.hexConcat([
51
+ '0x70a08231', // selector
52
+ ethers.utils.defaultAbiCoder.encode(['address'], [account]),
53
+ ]);
54
+
55
+ expect(request.data).toEqual(expectedCallData);
56
+ });
57
+ });
58
+
59
+ describe('buildAllowanceSimulationRequest', () => {
60
+ it('should build `allowance` simulation request', () => {
61
+ const request = tenderly.buildAllowanceSimulationRequest(
62
+ 1,
63
+ USDC,
64
+ account,
65
+ spender,
66
+ );
67
+
68
+ const expectedCallData = ethers.utils.hexConcat([
69
+ '0xdd62ed3e', // selector
70
+ ethers.utils.defaultAbiCoder.encode(
71
+ ['address', 'address'],
72
+ [account, spender],
73
+ ),
74
+ ]);
75
+ // assert
76
+ expect(request.data).toEqual(expectedCallData);
77
+ });
78
+ });
79
+
80
+ describe('findTokenBalanceOfSlot', () => {
81
+ it('should find Mainnet USDC `balanceOf` storage slot', async () => {
82
+ const expectedSlot = ethers.utils.defaultAbiCoder.encode(['uint'], [9]);
83
+ const foundSlot = await tenderly.findTokenBalanceOfSlot(1, USDC);
84
+ // assert
85
+ expect(foundSlot.slot).toEqual(expectedSlot);
86
+ });
87
+
88
+ it('should find Mainnet USDT `balanceOf` storage slot', async () => {
89
+ const expectedSlot = ethers.utils.defaultAbiCoder.encode(['uint'], [2]);
90
+ const foundSlot = await tenderly.findTokenBalanceOfSlot(1, USDT);
91
+ // assert
92
+ expect(foundSlot.slot).toEqual(expectedSlot);
93
+ });
94
+
95
+ it('should find Mainnet stETH `balanceOf` storage slot', async () => {
96
+ const expectedSlot = ethers.utils.defaultAbiCoder.encode(['uint'], [0]);
97
+ const foundSlot = await tenderly.findTokenBalanceOfSlot(
98
+ 1,
99
+ '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', // Lido's `stETH`
100
+ );
101
+ // assert
102
+ expect(foundSlot.slot).toEqual(expectedSlot);
103
+ });
104
+
105
+ it('should find Mainnet aEthDai `balanceOf` storage slot', async () => {
106
+ const expectedSlot = ethers.utils.defaultAbiCoder.encode(['uint'], [52]);
107
+ const foundSlot = await tenderly.findTokenBalanceOfSlot(
108
+ 1,
109
+ '0x018008bfb33d285247A21d44E50697654f754e63', // Aave's `aEthDai`
110
+ );
111
+ // assert
112
+ expect(foundSlot.slot).toEqual(expectedSlot);
113
+ });
114
+ });
115
+
116
+ describe('findTokenAllowanceSlot', () => {
117
+ it('should find Mainnet USDC `allowance` storage slot', async () => {
118
+ const expectedSlot = ethers.utils.defaultAbiCoder.encode(['uint'], [10]);
119
+ const foundSlot = await tenderly.findTokenAllowanceSlot(1, USDC);
120
+ // assert
121
+ expect(foundSlot.slot).toEqual(expectedSlot);
122
+ });
123
+
124
+ it('should find Mainnet USDT `allowance` storage slot', async () => {
125
+ const expectedSlot = ethers.utils.defaultAbiCoder.encode(['uint'], [5]);
126
+ const foundSlot = await tenderly.findTokenAllowanceSlot(1, USDT);
127
+ // assert
128
+ expect(foundSlot.slot).toEqual(expectedSlot);
129
+ });
130
+
131
+ it('should find Mainnet stETH `allowance` storage slot', async () => {
132
+ const expectedSlot = ethers.utils.defaultAbiCoder.encode(['uint'], [1]);
133
+ const foundSlot = await tenderly.findTokenAllowanceSlot(
134
+ 1,
135
+ '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', // Lido's `stETH`
136
+ );
137
+ // assert
138
+ expect(foundSlot.slot).toEqual(expectedSlot);
139
+ });
140
+
141
+ it('should find Mainnet aEthDai `allowance` storage slot', async () => {
142
+ const expectedSlot = ethers.utils.defaultAbiCoder.encode(['uint'], [53]);
143
+ const foundSlot = await tenderly.findTokenAllowanceSlot(
144
+ 1,
145
+ '0x018008bfb33d285247A21d44E50697654f754e63', // Aave's `aEthDai`
146
+ );
147
+ // assert
148
+ expect(foundSlot.slot).toEqual(expectedSlot);
149
+ });
150
+ });
151
+ });