@paraswap/dex-lib 4.1.14 → 4.1.15

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 (320) hide show
  1. package/.idea/aws.xml +17 -0
  2. package/.idea/codeStyles/Project.xml +4 -44
  3. package/.idea/codeStyles/codeStyleConfig.xml +1 -1
  4. package/.idea/misc.xml +6 -0
  5. package/.idea/paraswap-dex-lib.iml +4 -7
  6. package/.idea/prettier.xml +1 -1
  7. package/build/abi/AaveV1_lending_pool.json +27 -0
  8. package/build/abi/integral/factory.json +333 -0
  9. package/build/abi/integral/oracle.json +501 -0
  10. package/build/abi/integral/pool.json +1041 -0
  11. package/build/abi/integral/relayer.json +1536 -0
  12. package/build/abi/platypus/asset.json +490 -0
  13. package/build/abi/platypus/avax-pool.json +820 -0
  14. package/build/abi/platypus/oracle.json +119 -0
  15. package/build/abi/platypus/pool.json +677 -0
  16. package/build/abi/smardex/all/smardex-router.json +648 -0
  17. package/build/abi/smardex/layer-1/smardex-factory.json +242 -0
  18. package/build/abi/smardex/layer-1/smardex-pool.json +506 -0
  19. package/build/abi/smardex/layer-2/smardex-factory.json +185 -0
  20. package/build/abi/smardex/layer-2/smardex-pool.json +578 -0
  21. package/build/abi/swaap-v1/pool.json +1346 -0
  22. package/build/abi/uniswap-v4/pool-manager.abi.json +1366 -0
  23. package/build/abi/uniswap-v4/quoter.abi.json +461 -0
  24. package/build/abi/uniswap-v4/router.abi.json +230 -0
  25. package/build/abi/uniswap-v4/state-view.abi.json +365 -0
  26. package/build/dex/aave-v1/aave-v1.d.ts +33 -0
  27. package/build/dex/aave-v1/aave-v1.js +158 -0
  28. package/build/dex/aave-v1/aave-v1.js.map +1 -0
  29. package/build/dex/aave-v1/config.d.ts +11 -0
  30. package/build/dex/aave-v1/config.js +20 -0
  31. package/build/dex/aave-v1/config.js.map +1 -0
  32. package/build/dex/aave-v1/tokens-mainnet.json +134 -0
  33. package/build/dex/aave-v1/tokens.d.ts +3 -0
  34. package/build/dex/aave-v1/tokens.js +50 -0
  35. package/build/dex/aave-v1/tokens.js.map +1 -0
  36. package/build/dex/aave-v1/types.d.ts +12 -0
  37. package/build/dex/aave-v1/types.js +3 -0
  38. package/build/dex/aave-v1/types.js.map +1 -0
  39. package/build/dex/bProtocol.d.ts +18 -0
  40. package/build/dex/bProtocol.js +39 -0
  41. package/build/dex/bProtocol.js.map +1 -0
  42. package/build/dex/bancor.d.ts +26 -0
  43. package/build/dex/bancor.js +58 -0
  44. package/build/dex/bancor.js.map +1 -0
  45. package/build/dex/compound.d.ts +18 -0
  46. package/build/dex/compound.js +46 -0
  47. package/build/dex/compound.js.map +1 -0
  48. package/build/dex/curve-v2.d.ts +58 -0
  49. package/build/dex/curve-v2.js +180 -0
  50. package/build/dex/curve-v2.js.map +1 -0
  51. package/build/dex/dodo-v1.d.ts +33 -0
  52. package/build/dex/dodo-v1.js +63 -0
  53. package/build/dex/dodo-v1.js.map +1 -0
  54. package/build/dex/fluid-dex/fluid-dex-generate-pool.d.ts +49 -0
  55. package/build/dex/fluid-dex/fluid-dex-generate-pool.js +104 -0
  56. package/build/dex/fluid-dex/fluid-dex-generate-pool.js.map +1 -0
  57. package/build/dex/integral/config.d.ts +4 -0
  58. package/build/dex/integral/config.js +20 -0
  59. package/build/dex/integral/config.js.map +1 -0
  60. package/build/dex/integral/context.d.ts +40 -0
  61. package/build/dex/integral/context.js +158 -0
  62. package/build/dex/integral/context.js.map +1 -0
  63. package/build/dex/integral/integral-factory.d.ts +24 -0
  64. package/build/dex/integral/integral-factory.js +95 -0
  65. package/build/dex/integral/integral-factory.js.map +1 -0
  66. package/build/dex/integral/integral-pool.d.ts +50 -0
  67. package/build/dex/integral/integral-pool.js +149 -0
  68. package/build/dex/integral/integral-pool.js.map +1 -0
  69. package/build/dex/integral/integral-pricing.d.ts +18 -0
  70. package/build/dex/integral/integral-pricing.js +114 -0
  71. package/build/dex/integral/integral-pricing.js.map +1 -0
  72. package/build/dex/integral/integral-relayer.d.ts +42 -0
  73. package/build/dex/integral/integral-relayer.js +192 -0
  74. package/build/dex/integral/integral-relayer.js.map +1 -0
  75. package/build/dex/integral/integral-token.d.ts +27 -0
  76. package/build/dex/integral/integral-token.js +59 -0
  77. package/build/dex/integral/integral-token.js.map +1 -0
  78. package/build/dex/integral/integral.d.ts +41 -0
  79. package/build/dex/integral/integral.js +376 -0
  80. package/build/dex/integral/integral.js.map +1 -0
  81. package/build/dex/integral/types.d.ts +85 -0
  82. package/build/dex/integral/types.js +9 -0
  83. package/build/dex/integral/types.js.map +1 -0
  84. package/build/dex/integral/utils-e2e.d.ts +9 -0
  85. package/build/dex/integral/utils-e2e.js +131 -0
  86. package/build/dex/integral/utils-e2e.js.map +1 -0
  87. package/build/dex/integral/utils.d.ts +17 -0
  88. package/build/dex/integral/utils.js +94 -0
  89. package/build/dex/integral/utils.js.map +1 -0
  90. package/build/dex/jarvis.d.ts +1 -2
  91. package/build/dex/jarvis.js +0 -58
  92. package/build/dex/jarvis.js.map +1 -1
  93. package/build/dex/lido.d.ts +19 -0
  94. package/build/dex/lido.js +42 -0
  95. package/build/dex/lido.js.map +1 -0
  96. package/build/dex/m-token/config.d.ts +3 -0
  97. package/build/dex/m-token/config.js +19 -0
  98. package/build/dex/m-token/config.js.map +1 -0
  99. package/build/dex/m-token/m-token.d.ts +29 -0
  100. package/build/dex/m-token/m-token.js +145 -0
  101. package/build/dex/m-token/m-token.js.map +1 -0
  102. package/build/dex/m-token/m-wrapped-m.d.ts +17 -0
  103. package/build/dex/m-token/m-wrapped-m.js +50 -0
  104. package/build/dex/m-token/m-wrapped-m.js.map +1 -0
  105. package/build/dex/m-token/types.d.ts +12 -0
  106. package/build/dex/m-token/types.js +3 -0
  107. package/build/dex/m-token/types.js.map +1 -0
  108. package/build/dex/onebit.d.ts +25 -0
  109. package/build/dex/onebit.js +42 -0
  110. package/build/dex/onebit.js.map +1 -0
  111. package/build/dex/platypus/asset.d.ts +14 -0
  112. package/build/dex/platypus/asset.js +97 -0
  113. package/build/dex/platypus/asset.js.map +1 -0
  114. package/build/dex/platypus/config.d.ts +11 -0
  115. package/build/dex/platypus/config.js +69 -0
  116. package/build/dex/platypus/config.js.map +1 -0
  117. package/build/dex/platypus/platypus.d.ts +62 -0
  118. package/build/dex/platypus/platypus.js +442 -0
  119. package/build/dex/platypus/platypus.js.map +1 -0
  120. package/build/dex/platypus/pool-avax.d.ts +8 -0
  121. package/build/dex/platypus/pool-avax.js +54 -0
  122. package/build/dex/platypus/pool-avax.js.map +1 -0
  123. package/build/dex/platypus/pool-base.d.ts +19 -0
  124. package/build/dex/platypus/pool-base.js +86 -0
  125. package/build/dex/platypus/pool-base.js.map +1 -0
  126. package/build/dex/platypus/pool-pure.d.ts +8 -0
  127. package/build/dex/platypus/pool-pure.js +37 -0
  128. package/build/dex/platypus/pool-pure.js.map +1 -0
  129. package/build/dex/platypus/pool-subscriber.d.ts +14 -0
  130. package/build/dex/platypus/pool-subscriber.js +167 -0
  131. package/build/dex/platypus/pool-subscriber.js.map +1 -0
  132. package/build/dex/platypus/pool.d.ts +8 -0
  133. package/build/dex/platypus/pool.js +58 -0
  134. package/build/dex/platypus/pool.js.map +1 -0
  135. package/build/dex/platypus/types.d.ts +92 -0
  136. package/build/dex/platypus/types.js +10 -0
  137. package/build/dex/platypus/types.js.map +1 -0
  138. package/build/dex/quickswap/spiritswap-v3.d.ts +6 -0
  139. package/build/dex/quickswap/spiritswap-v3.js +19 -0
  140. package/build/dex/quickswap/spiritswap-v3.js.map +1 -0
  141. package/build/dex/smardex/config.d.ts +4 -0
  142. package/build/dex/smardex/config.js +64 -0
  143. package/build/dex/smardex/config.js.map +1 -0
  144. package/build/dex/smardex/constants.d.ts +18 -0
  145. package/build/dex/smardex/constants.js +33 -0
  146. package/build/dex/smardex/constants.js.map +1 -0
  147. package/build/dex/smardex/sdk/constants.d.ts +6 -0
  148. package/build/dex/smardex/sdk/constants.js +13 -0
  149. package/build/dex/smardex/sdk/constants.js.map +1 -0
  150. package/build/dex/smardex/sdk/core.d.ts +113 -0
  151. package/build/dex/smardex/sdk/core.js +499 -0
  152. package/build/dex/smardex/sdk/core.js.map +1 -0
  153. package/build/dex/smardex/sdk/errors.d.ts +15 -0
  154. package/build/dex/smardex/sdk/errors.js +22 -0
  155. package/build/dex/smardex/sdk/errors.js.map +1 -0
  156. package/build/dex/smardex/sdk/types.d.ts +62 -0
  157. package/build/dex/smardex/sdk/types.js +3 -0
  158. package/build/dex/smardex/sdk/types.js.map +1 -0
  159. package/build/dex/smardex/sdk/utils.d.ts +44 -0
  160. package/build/dex/smardex/sdk/utils.js +133 -0
  161. package/build/dex/smardex/sdk/utils.js.map +1 -0
  162. package/build/dex/smardex/smardex-event-pool.d.ts +28 -0
  163. package/build/dex/smardex/smardex-event-pool.js +119 -0
  164. package/build/dex/smardex/smardex-event-pool.js.map +1 -0
  165. package/build/dex/smardex/smardex.d.ts +65 -0
  166. package/build/dex/smardex/smardex.js +519 -0
  167. package/build/dex/smardex/smardex.js.map +1 -0
  168. package/build/dex/smardex/types.d.ts +55 -0
  169. package/build/dex/smardex/types.js +3 -0
  170. package/build/dex/smardex/types.js.map +1 -0
  171. package/build/dex/smoothy.d.ts +26 -0
  172. package/build/dex/smoothy.js +48 -0
  173. package/build/dex/smoothy.js.map +1 -0
  174. package/build/dex/solidly/forks-override/cone.d.ts +22 -0
  175. package/build/dex/solidly/forks-override/cone.js +53 -0
  176. package/build/dex/solidly/forks-override/cone.js.map +1 -0
  177. package/build/dex/solidly/forks-override/solisnek.d.ts +8 -0
  178. package/build/dex/solidly/forks-override/solisnek.js +15 -0
  179. package/build/dex/solidly/forks-override/solisnek.js.map +1 -0
  180. package/build/dex/spark/spark-psm.js +2 -2
  181. package/build/dex/spark/spark-psm.js.map +1 -1
  182. package/build/dex/spark/spark.js +1 -1
  183. package/build/dex/spark/spark.js.map +1 -1
  184. package/build/dex/spark/susds-psm.d.ts +49 -0
  185. package/build/dex/spark/susds-psm.js +245 -0
  186. package/build/dex/spark/susds-psm.js.map +1 -0
  187. package/build/dex/stable-pool.d.ts +28 -0
  188. package/build/dex/stable-pool.js +62 -0
  189. package/build/dex/stable-pool.js.map +1 -0
  190. package/build/dex/swaap-v1/config.d.ts +17 -0
  191. package/build/dex/swaap-v1/config.js +56 -0
  192. package/build/dex/swaap-v1/config.js.map +1 -0
  193. package/build/dex/swaap-v1/constants.d.ts +6 -0
  194. package/build/dex/swaap-v1/constants.js +17 -0
  195. package/build/dex/swaap-v1/constants.js.map +1 -0
  196. package/build/dex/swaap-v1/libraries/ChainlinkUtils.d.ts +25 -0
  197. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js +62 -0
  198. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js.map +1 -0
  199. package/build/dex/swaap-v1/libraries/Const.d.ts +18 -0
  200. package/build/dex/swaap-v1/libraries/Const.js +26 -0
  201. package/build/dex/swaap-v1/libraries/Const.js.map +1 -0
  202. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.d.ts +77 -0
  203. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js +316 -0
  204. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js.map +1 -0
  205. package/build/dex/swaap-v1/libraries/LogExpMath.d.ts +75 -0
  206. package/build/dex/swaap-v1/libraries/LogExpMath.js +418 -0
  207. package/build/dex/swaap-v1/libraries/LogExpMath.js.map +1 -0
  208. package/build/dex/swaap-v1/libraries/MathMMM.d.ts +185 -0
  209. package/build/dex/swaap-v1/libraries/MathMMM.js +453 -0
  210. package/build/dex/swaap-v1/libraries/MathMMM.js.map +1 -0
  211. package/build/dex/swaap-v1/libraries/Num.d.ts +31 -0
  212. package/build/dex/swaap-v1/libraries/Num.js +167 -0
  213. package/build/dex/swaap-v1/libraries/Num.js.map +1 -0
  214. package/build/dex/swaap-v1/libraries/PoolQuotations.d.ts +23 -0
  215. package/build/dex/swaap-v1/libraries/PoolQuotations.js +131 -0
  216. package/build/dex/swaap-v1/libraries/PoolQuotations.js.map +1 -0
  217. package/build/dex/swaap-v1/libraries/Struct.d.ts +56 -0
  218. package/build/dex/swaap-v1/libraries/Struct.js +3 -0
  219. package/build/dex/swaap-v1/libraries/Struct.js.map +1 -0
  220. package/build/dex/swaap-v1/swaap-v1-pool.d.ts +45 -0
  221. package/build/dex/swaap-v1/swaap-v1-pool.js +656 -0
  222. package/build/dex/swaap-v1/swaap-v1-pool.js.map +1 -0
  223. package/build/dex/swaap-v1/swaap-v1.d.ts +61 -0
  224. package/build/dex/swaap-v1/swaap-v1.js +369 -0
  225. package/build/dex/swaap-v1/swaap-v1.js.map +1 -0
  226. package/build/dex/swaap-v1/types.d.ts +106 -0
  227. package/build/dex/swaap-v1/types.js +9 -0
  228. package/build/dex/swaap-v1/types.js.map +1 -0
  229. package/build/dex/trader-joe-v2.1/optimizer.d.ts +2 -0
  230. package/build/dex/trader-joe-v2.1/optimizer.js +47 -0
  231. package/build/dex/trader-joe-v2.1/optimizer.js.map +1 -0
  232. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.d.ts +7 -0
  233. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js +20 -0
  234. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js.map +1 -0
  235. package/build/dex/trader-joe-v2.1.d.ts +43 -0
  236. package/build/dex/trader-joe-v2.1.js +79 -0
  237. package/build/dex/trader-joe-v2.1.js.map +1 -0
  238. package/build/dex/uniswap-v4/config.d.ts +3 -0
  239. package/build/dex/uniswap-v4/config.js +58 -0
  240. package/build/dex/uniswap-v4/config.js.map +1 -0
  241. package/build/dex/uniswap-v4/constants.d.ts +7 -0
  242. package/build/dex/uniswap-v4/constants.js +18 -0
  243. package/build/dex/uniswap-v4/constants.js.map +1 -0
  244. package/build/dex/uniswap-v4/contract-math/BitMath.d.ts +4 -0
  245. package/build/dex/uniswap-v4/contract-math/BitMath.js +53 -0
  246. package/build/dex/uniswap-v4/contract-math/BitMath.js.map +1 -0
  247. package/build/dex/uniswap-v4/contract-math/FixedPoint128.d.ts +3 -0
  248. package/build/dex/uniswap-v4/contract-math/FixedPoint128.js +8 -0
  249. package/build/dex/uniswap-v4/contract-math/FixedPoint128.js.map +1 -0
  250. package/build/dex/uniswap-v4/contract-math/FixedPoint96.d.ts +4 -0
  251. package/build/dex/uniswap-v4/contract-math/FixedPoint96.js +9 -0
  252. package/build/dex/uniswap-v4/contract-math/FixedPoint96.js.map +1 -0
  253. package/build/dex/uniswap-v4/contract-math/FullMath.d.ts +4 -0
  254. package/build/dex/uniswap-v4/contract-math/FullMath.js +19 -0
  255. package/build/dex/uniswap-v4/contract-math/FullMath.js.map +1 -0
  256. package/build/dex/uniswap-v4/contract-math/LiquidityMath.d.ts +3 -0
  257. package/build/dex/uniswap-v4/contract-math/LiquidityMath.js +18 -0
  258. package/build/dex/uniswap-v4/contract-math/LiquidityMath.js.map +1 -0
  259. package/build/dex/uniswap-v4/contract-math/Position.d.ts +9 -0
  260. package/build/dex/uniswap-v4/contract-math/Position.js +39 -0
  261. package/build/dex/uniswap-v4/contract-math/Position.js.map +1 -0
  262. package/build/dex/uniswap-v4/contract-math/SqrtPriceMath.d.ts +11 -0
  263. package/build/dex/uniswap-v4/contract-math/SqrtPriceMath.js +80 -0
  264. package/build/dex/uniswap-v4/contract-math/SqrtPriceMath.js.map +1 -0
  265. package/build/dex/uniswap-v4/contract-math/SwapMath.d.ts +8 -0
  266. package/build/dex/uniswap-v4/contract-math/SwapMath.js +70 -0
  267. package/build/dex/uniswap-v4/contract-math/SwapMath.js.map +1 -0
  268. package/build/dex/uniswap-v4/contract-math/Tick.d.ts +9 -0
  269. package/build/dex/uniswap-v4/contract-math/Tick.js +40 -0
  270. package/build/dex/uniswap-v4/contract-math/Tick.js.map +1 -0
  271. package/build/dex/uniswap-v4/contract-math/TickBitMap.d.ts +8 -0
  272. package/build/dex/uniswap-v4/contract-math/TickBitMap.js +40 -0
  273. package/build/dex/uniswap-v4/contract-math/TickBitMap.js.map +1 -0
  274. package/build/dex/uniswap-v4/contract-math/TickMath.d.ts +9 -0
  275. package/build/dex/uniswap-v4/contract-math/TickMath.js +164 -0
  276. package/build/dex/uniswap-v4/contract-math/TickMath.js.map +1 -0
  277. package/build/dex/uniswap-v4/contract-math/UnsafeMath.d.ts +4 -0
  278. package/build/dex/uniswap-v4/contract-math/UnsafeMath.js +16 -0
  279. package/build/dex/uniswap-v4/contract-math/UnsafeMath.js.map +1 -0
  280. package/build/dex/uniswap-v4/contract-math/uniswap-v4-math.d.ts +8 -0
  281. package/build/dex/uniswap-v4/contract-math/uniswap-v4-math.js +11 -0
  282. package/build/dex/uniswap-v4/contract-math/uniswap-v4-math.js.map +1 -0
  283. package/build/dex/uniswap-v4/contract-math/uniswap-v4-pool-math.d.ts +15 -0
  284. package/build/dex/uniswap-v4/contract-math/uniswap-v4-pool-math.js +108 -0
  285. package/build/dex/uniswap-v4/contract-math/uniswap-v4-pool-math.js.map +1 -0
  286. package/build/dex/uniswap-v4/contract-math/utils.d.ts +4 -0
  287. package/build/dex/uniswap-v4/contract-math/utils.js +23 -0
  288. package/build/dex/uniswap-v4/contract-math/utils.js.map +1 -0
  289. package/build/dex/uniswap-v4/encoder.d.ts +16 -0
  290. package/build/dex/uniswap-v4/encoder.js +104 -0
  291. package/build/dex/uniswap-v4/encoder.js.map +1 -0
  292. package/build/dex/uniswap-v4/subgraph.d.ts +5 -0
  293. package/build/dex/uniswap-v4/subgraph.js +80 -0
  294. package/build/dex/uniswap-v4/subgraph.js.map +1 -0
  295. package/build/dex/uniswap-v4/types.d.ts +98 -0
  296. package/build/dex/uniswap-v4/types.js +3 -0
  297. package/build/dex/uniswap-v4/types.js.map +1 -0
  298. package/build/dex/uniswap-v4/uniswap-v4-pool-manager.d.ts +33 -0
  299. package/build/dex/uniswap-v4/uniswap-v4-pool-manager.js +260 -0
  300. package/build/dex/uniswap-v4/uniswap-v4-pool-manager.js.map +1 -0
  301. package/build/dex/uniswap-v4/uniswap-v4.d.ts +38 -0
  302. package/build/dex/uniswap-v4/uniswap-v4.js +169 -0
  303. package/build/dex/uniswap-v4/uniswap-v4.js.map +1 -0
  304. package/build/dex/uniswap-v4/utils.d.ts +2 -0
  305. package/build/dex/uniswap-v4/utils.js +15 -0
  306. package/build/dex/uniswap-v4/utils.js.map +1 -0
  307. package/build/dex/zerox/index.d.ts +25 -3
  308. package/build/dex/zerox/index.js +42 -50
  309. package/build/dex/zerox/index.js.map +1 -1
  310. package/build/dex/zerox/types.d.ts +0 -29
  311. package/build/dex/zerox/types.js +1 -8
  312. package/build/dex/zerox/types.js.map +1 -1
  313. package/package.json +1 -1
  314. package/src/dex/spark/spark-psm.ts +2 -2
  315. package/src/dex/spark/spark.ts +1 -1
  316. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  317. package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +0 -94
  318. package/build/dex/uniswap-v3/uniswap-v3-new.js +0 -923
  319. package/build/dex/uniswap-v3/uniswap-v3-new.js.map +0 -1
  320. package/scripts/get-uniswap-v3-dexes.ts +0 -64
@@ -0,0 +1,16 @@
1
+ import { PoolKey } from './types';
2
+ import { Address } from '../../types';
3
+ export declare enum Actions {
4
+ SWAP_EXACT_IN_SINGLE = 6,// 0x06 -> 6
5
+ SWAP_EXACT_IN = 7,// 0x07 -> 7
6
+ SWAP_EXACT_OUT_SINGLE = 8,// 0x08 -> 8
7
+ SWAP_EXACT_OUT = 9,// 0x09 -> 9
8
+ SETTLE = 11,// 0x0b -> 11
9
+ SETTLE_ALL = 12,// 0x0c -> 12
10
+ SETTLE_PAIR = 13,// 0x0d -> 13
11
+ TAKE = 14,// 0x0e -> 14
12
+ TAKE_ALL = 15,// 0x0f -> 15
13
+ TAKE_PORTION = 16,// 0x10 -> 16
14
+ TAKE_PAIR = 17
15
+ }
16
+ export declare function swapExactInputSingleCalldata(srcToken: Address, destToken: Address, poolKey: PoolKey, zeroForOne: boolean, amountIn: bigint, amountOutMinimum: bigint, recipient: Address): string;
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Actions = void 0;
7
+ exports.swapExactInputSingleCalldata = swapExactInputSingleCalldata;
8
+ const ethers_1 = require("ethers");
9
+ const router_abi_json_1 = __importDefault(require("../../abi/uniswap-v4/router.abi.json"));
10
+ const abi_1 = require("@ethersproject/abi");
11
+ const utils_1 = require("../../utils");
12
+ const constants_1 = require("../../constants");
13
+ const routerIface = new abi_1.Interface(router_abi_json_1.default);
14
+ var Commands;
15
+ (function (Commands) {
16
+ Commands[Commands["V4_SWAP"] = 16] = "V4_SWAP";
17
+ })(Commands || (Commands = {}));
18
+ var Actions;
19
+ (function (Actions) {
20
+ // Swapping
21
+ Actions[Actions["SWAP_EXACT_IN_SINGLE"] = 6] = "SWAP_EXACT_IN_SINGLE";
22
+ Actions[Actions["SWAP_EXACT_IN"] = 7] = "SWAP_EXACT_IN";
23
+ Actions[Actions["SWAP_EXACT_OUT_SINGLE"] = 8] = "SWAP_EXACT_OUT_SINGLE";
24
+ Actions[Actions["SWAP_EXACT_OUT"] = 9] = "SWAP_EXACT_OUT";
25
+ // Settling (paying funds)
26
+ Actions[Actions["SETTLE"] = 11] = "SETTLE";
27
+ Actions[Actions["SETTLE_ALL"] = 12] = "SETTLE_ALL";
28
+ Actions[Actions["SETTLE_PAIR"] = 13] = "SETTLE_PAIR";
29
+ // Taking (receiving funds)
30
+ Actions[Actions["TAKE"] = 14] = "TAKE";
31
+ Actions[Actions["TAKE_ALL"] = 15] = "TAKE_ALL";
32
+ Actions[Actions["TAKE_PORTION"] = 16] = "TAKE_PORTION";
33
+ Actions[Actions["TAKE_PAIR"] = 17] = "TAKE_PAIR";
34
+ })(Actions || (exports.Actions = Actions = {}));
35
+ var ActionConstants;
36
+ (function (ActionConstants) {
37
+ ActionConstants[ActionConstants["OPEN_DELTA"] = 0] = "OPEN_DELTA";
38
+ // This value is equivalent to 1<<255, i.e. a singular 1 in the most significant bit.
39
+ ActionConstants["CONTRACT_BALANCE"] = "57896044618658097711785492504343953926634992332820282019728792003956564819968";
40
+ // address(1)
41
+ ActionConstants["MSG_SENDER"] = "0x0000000000000000000000000000000000000001";
42
+ // address(2)
43
+ ActionConstants["ADDRESS_THIS"] = "0x0000000000000000000000000000000000000002";
44
+ })(ActionConstants || (ActionConstants = {}));
45
+ function swapExactInputSingleCalldata(srcToken, destToken, poolKey, zeroForOne, amountIn, amountOutMinimum, recipient) {
46
+ const command = ethers_1.ethers.utils.solidityPack(['uint8'], [Commands.V4_SWAP]);
47
+ const actions = ethers_1.ethers.utils.solidityPack(['uint8', 'uint8', 'uint8'], [Actions.SWAP_EXACT_IN_SINGLE, Actions.SETTLE, Actions.TAKE]);
48
+ const exactInputSingleParams = {
49
+ poolKey,
50
+ zeroForOne,
51
+ amountIn,
52
+ amountOutMinimum,
53
+ hookData: '0x', // empty bytes
54
+ };
55
+ // encode SWAP_EXACT_IN_SINGLE
56
+ const swap = ethers_1.ethers.utils.defaultAbiCoder.encode([
57
+ /*
58
+ ExactInputSingleParams {
59
+ PoolKey poolKey;
60
+ bool zeroForOne;
61
+ uint128 amountIn;
62
+ uint128 amountOutMinimum;
63
+ bytes hookData;
64
+ }
65
+ */
66
+ 'tuple((address,address,uint24,int24,address) poolKey, bool zeroForOne, uint128 amountIn, uint128 amountOutMinimum, bytes hookData)',
67
+ ], [
68
+ [
69
+ [
70
+ poolKey.currency0,
71
+ poolKey.currency1,
72
+ poolKey.fee,
73
+ poolKey.tickSpacing,
74
+ poolKey.hooks,
75
+ ],
76
+ exactInputSingleParams.zeroForOne,
77
+ exactInputSingleParams.amountIn,
78
+ exactInputSingleParams.amountOutMinimum,
79
+ exactInputSingleParams.hookData,
80
+ ],
81
+ ]);
82
+ // encode SETTLE
83
+ const settle = ethers_1.ethers.utils.defaultAbiCoder.encode(['address', 'uint256', 'bool'],
84
+ // srcToken, amountIn (`OPEN_DELTA` to settle all needed funds), takeFundsFromMsgSender (Executor in our case)
85
+ [
86
+ (0, utils_1.isETHAddress)(srcToken) ? constants_1.NULL_ADDRESS : srcToken,
87
+ ActionConstants.OPEN_DELTA,
88
+ true,
89
+ ]);
90
+ // encode TAKE
91
+ const take = ethers_1.ethers.utils.defaultAbiCoder.encode(['address', 'address', 'uint256'],
92
+ // destToken, recipient, amountOut (`OPEN_DELTA` to take all funds)
93
+ [
94
+ (0, utils_1.isETHAddress)(destToken) ? constants_1.NULL_ADDRESS : destToken,
95
+ recipient,
96
+ ActionConstants.OPEN_DELTA,
97
+ ]);
98
+ const input = ethers_1.ethers.utils.defaultAbiCoder.encode(['bytes', 'bytes[]'], [actions, [swap, settle, take]]);
99
+ return routerIface.encodeFunctionData('execute(bytes,bytes[])', [
100
+ command,
101
+ [input],
102
+ ]);
103
+ }
104
+ //# sourceMappingURL=encoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../../src/dex/uniswap-v4/encoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { SubgraphPool } from './types';
2
+ import { IDexHelper } from '../../dex-helper';
3
+ import { Logger } from 'log4js';
4
+ export declare function querySinglePoolFromSubgraphById(dexHelper: IDexHelper, subgraphUrl: string, blockNumber: number, id: string): Promise<SubgraphPool | null>;
5
+ export declare function queryOnePageForAllAvailablePoolsFromSubgraph(dexHelper: IDexHelper, logger: Logger, dexKey: string, subgraphUrl: string, blockNumber: number, skip: number, limit: number, latestBlock?: boolean): Promise<SubgraphPool[]>;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.querySinglePoolFromSubgraphById = querySinglePoolFromSubgraphById;
4
+ exports.queryOnePageForAllAvailablePoolsFromSubgraph = queryOnePageForAllAvailablePoolsFromSubgraph;
5
+ const constants_1 = require("./constants");
6
+ async function querySinglePoolFromSubgraphById(dexHelper, subgraphUrl, blockNumber, id) {
7
+ const ticksLimit = 200;
8
+ const poolQuery = `query {
9
+ pools(
10
+ block: { number: ${blockNumber} },
11
+ where: {id: "${id}"}
12
+ ) {
13
+ id
14
+ fee: feeTier
15
+ tickSpacing
16
+ token0 {
17
+ address: id
18
+ }
19
+ token1 {
20
+ address: id
21
+ }
22
+ hooks
23
+ }
24
+ }`;
25
+ // tick
26
+ // ticks(first: ${ticksLimit}) {
27
+ // id
28
+ // liquidityGross
29
+ // liquidityNet
30
+ // tickIdx
31
+ // }
32
+ const { data } = await dexHelper.httpRequest.querySubgraph(subgraphUrl, {
33
+ query: poolQuery,
34
+ variables: {},
35
+ }, { timeout: constants_1.SUBGRAPH_TIMEOUT });
36
+ return data.pools[0] || null;
37
+ }
38
+ async function queryOnePageForAllAvailablePoolsFromSubgraph(dexHelper, logger, dexKey, subgraphUrl, blockNumber, skip, limit, latestBlock = false) {
39
+ const ticksLimit = 300;
40
+ const poolsQuery = `query ($skip: Int!) {
41
+ pools(
42
+ ${latestBlock ? '' : `block: { number: ${blockNumber} }`}
43
+ orderBy: volumeUSD
44
+ orderDirection: desc
45
+ skip: $skip
46
+ first: ${limit}
47
+ ) {
48
+ id
49
+ fee: feeTier
50
+ tickSpacing
51
+ token0 {
52
+ address: id
53
+ }
54
+ token1 {
55
+ address: id
56
+ }
57
+ hooks
58
+ tick
59
+ ticks(first: ${ticksLimit}) {
60
+ id
61
+ liquidityGross
62
+ liquidityNet
63
+ tickIdx
64
+ }
65
+ }
66
+ }`;
67
+ // console.log('poolsQuery: ', poolsQuery);
68
+ const res = await dexHelper.httpRequest.querySubgraph(subgraphUrl, {
69
+ query: poolsQuery,
70
+ variables: { skip: skip },
71
+ }, { timeout: constants_1.SUBGRAPH_TIMEOUT });
72
+ if (res.errors &&
73
+ res.errors.length &&
74
+ res.errors[0].message.includes('missing block')) {
75
+ logger.info(`${dexKey}: subgraph fallback to the latest block...`);
76
+ return queryOnePageForAllAvailablePoolsFromSubgraph(dexHelper, logger, dexKey, subgraphUrl, blockNumber, skip, limit, true);
77
+ }
78
+ return res.data.pools;
79
+ }
80
+ //# sourceMappingURL=subgraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../../src/dex/uniswap-v4/subgraph.ts"],"names":[],"mappings":";;AAKA,0EAgDC;AAED,oGA2EC;AAjID,2CAA+C;AAIxC,KAAK,UAAU,+BAA+B,CACnD,SAAqB,EACrB,WAAmB,EACnB,WAAmB,EACnB,EAAU;IAEV,MAAM,UAAU,GAAG,GAAG,CAAC;IAEvB,MAAM,SAAS,GAAG;;2BAEO,WAAW;uBACf,EAAE;;;;;;;;;;;;;IAarB,CAAC;IAEH,cAAc;IACd,uCAAuC;IACvC,eAAe;IACf,2BAA2B;IAC3B,yBAAyB;IACzB,oBAAoB;IACpB,YAAY;IAEZ,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,aAAa,CAKxD,WAAW,EACX;QACE,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,EAAE;KACd,EACD,EAAE,OAAO,EAAE,4BAAgB,EAAE,CAC9B,CAAC;IAEF,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC/B,CAAC;AAEM,KAAK,UAAU,4CAA4C,CAChE,SAAqB,EACrB,MAAc,EACd,MAAc,EACd,WAAmB,EACnB,WAAmB,EACnB,IAAY,EACZ,KAAa,EACb,WAAW,GAAG,KAAK;IAEnB,MAAM,UAAU,GAAG,GAAG,CAAC;IAEvB,MAAM,UAAU,GAAG;;UAEX,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,WAAW,IAAI;;;;iBAI/C,KAAK;;;;;;;;;;;;;uBAaC,UAAU;;;;;;;MAO3B,CAAC;IAEL,2CAA2C;IAE3C,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,aAAa,CAMnD,WAAW,EACX;QACE,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;KAC1B,EACD,EAAE,OAAO,EAAE,4BAAgB,EAAE,CAC9B,CAAC;IAEF,IACE,GAAG,CAAC,MAAM;QACV,GAAG,CAAC,MAAM,CAAC,MAAM;QACjB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAC/C,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,4CAA4C,CAAC,CAAC;QACnE,OAAO,4CAA4C,CACjD,SAAS,EACT,MAAM,EACN,MAAM,EACN,WAAW,EACX,WAAW,EACX,IAAI,EACJ,KAAK,EACL,IAAI,CACL,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { Address, NumberAsString } from '../../types';
2
+ export type ModifyLiquidityParams = {
3
+ liquidityDelta: bigint;
4
+ tickLower: bigint;
5
+ tickUpper: bigint;
6
+ owner: string;
7
+ tickSpacing: bigint;
8
+ salt: string;
9
+ };
10
+ export type ModifyLiquidityState = {
11
+ flippedLower: boolean;
12
+ liquidityGrossAfterLower: bigint;
13
+ flippedUpper: boolean;
14
+ liquidityGrossAfterUpper: bigint;
15
+ };
16
+ export type TickInfo = {
17
+ liquidityGross: bigint;
18
+ liquidityNet: bigint;
19
+ feeGrowthOutside0X128?: bigint;
20
+ feeGrowthOutside1X128?: bigint;
21
+ };
22
+ export type PositionState = {
23
+ liquidity: bigint;
24
+ feeGrowthInside0LastX128: bigint;
25
+ feeGrowthInside1LastX128: bigint;
26
+ };
27
+ export type Tick = {
28
+ id: string;
29
+ tickIdx: string;
30
+ liquidityGross: string;
31
+ liquidityNet: string;
32
+ };
33
+ export type PoolManagerState = {
34
+ _pools: PoolState[];
35
+ };
36
+ export type PoolState = {
37
+ id: string;
38
+ token0: string;
39
+ token1: string;
40
+ fee: string;
41
+ hooks: string;
42
+ feeGrowthGlobal0X128?: bigint;
43
+ feeGrowthGlobal1X128?: bigint;
44
+ liquidity?: bigint;
45
+ slot0?: Slot0;
46
+ tick: number;
47
+ tickSpacing: number;
48
+ ticks: Record<NumberAsString, TickInfo>;
49
+ tickBitmap?: Record<NumberAsString, bigint>;
50
+ positions?: Record<string, PositionState>;
51
+ };
52
+ export type FeeGrowthGlobals = {
53
+ feeGrowthGlobal0: bigint;
54
+ feeGrowthGlobal1: bigint;
55
+ };
56
+ export type Slot0 = {
57
+ sqrtPriceX96: bigint;
58
+ tick: number;
59
+ protocolFee: number;
60
+ lpFee: number;
61
+ };
62
+ export type UniswapV4Data = {
63
+ exchange: Address;
64
+ zeroForOne: boolean;
65
+ pool: Pool;
66
+ };
67
+ export type Pool = {
68
+ id: string;
69
+ key: PoolKey;
70
+ };
71
+ export type SubgraphPool = {
72
+ id: string;
73
+ fee: string;
74
+ hooks: string;
75
+ token0: {
76
+ address: string;
77
+ };
78
+ token1: {
79
+ address: string;
80
+ };
81
+ tick: number;
82
+ tickSpacing: number;
83
+ ticks: Tick[];
84
+ };
85
+ export type DexParams = {
86
+ poolManager: Address;
87
+ quoter: Address;
88
+ router: Address;
89
+ subgraphURL: string;
90
+ stateView: string;
91
+ };
92
+ export type PoolKey = {
93
+ currency0: Address;
94
+ currency1: Address;
95
+ fee: string;
96
+ tickSpacing: number;
97
+ hooks: Address;
98
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/uniswap-v4/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { InitializeStateOptions, StatefulEventSubscriber } from '../../stateful-event-subscriber';
2
+ import { DexParams, FeeGrowthGlobals, Pool, PoolManagerState, Slot0 } from './types';
3
+ import { Address, Log, Logger } from '../../types';
4
+ import { BlockHeader } from 'web3-eth';
5
+ import { Interface } from 'ethers/lib/utils';
6
+ import { IDexHelper } from '../../dex-helper';
7
+ import { AsyncOrSync, DeepReadonly } from 'ts-essentials';
8
+ import { LogDescription } from '@ethersproject/abi/lib.esm';
9
+ import { MultiCallParams } from '../../lib/multi-wrapper';
10
+ export declare class UniswapV4PoolManager extends StatefulEventSubscriber<PoolManagerState> {
11
+ readonly dexHelper: IDexHelper;
12
+ private readonly network;
13
+ private readonly config;
14
+ protected logger: Logger;
15
+ handlers: {
16
+ [event: string]: (event: any, pool: PoolManagerState, log: Log, blockHeader: Readonly<BlockHeader>) => AsyncOrSync<PoolManagerState>;
17
+ };
18
+ logDecoder: (log: Log) => any;
19
+ stateViewIface: Interface;
20
+ poolManagerIface: Interface;
21
+ private poolsCacheKey;
22
+ constructor(dexHelper: IDexHelper, parentName: string, network: number, config: DexParams, logger: Logger, mapKey?: string);
23
+ initialize(blockNumber: number, options?: InitializeStateOptions<PoolManagerState>): Promise<void>;
24
+ protected processLog(state: PoolManagerState, log: Readonly<Log>, blockHeader: Readonly<BlockHeader>): Promise<DeepReadonly<PoolManagerState>>;
25
+ getAvailablePoolsForPair(srcToken: Address, destToken: Address, blockNumber: number): Pool[];
26
+ private queryAllAvailablePools;
27
+ protected _getStateRequestCallDataPerPool(poolId: string): MultiCallParams<bigint | Slot0 | FeeGrowthGlobals>[];
28
+ generateState(blockNumber: number): Promise<PoolManagerState>;
29
+ handleInitializeEvent(event: LogDescription, state: PoolManagerState, log: Log): Promise<PoolManagerState>;
30
+ handleSwapEvent(event: any, state: PoolManagerState, log: Log, blockHeader: BlockHeader): PoolManagerState;
31
+ handleDonateEvent(event: any, state: PoolManagerState, log: Log, blockHeader: BlockHeader): PoolManagerState;
32
+ handleModifyLiquidityEvent(event: any, state: PoolManagerState, log: Log, blockHeader: BlockHeader): PoolManagerState;
33
+ }
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.UniswapV4PoolManager = void 0;
7
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
8
+ const state_view_abi_json_1 = __importDefault(require("../../abi/uniswap-v4/state-view.abi.json"));
9
+ const pool_manager_abi_json_1 = __importDefault(require("../../abi/uniswap-v4/pool-manager.abi.json"));
10
+ const utils_1 = require("ethers/lib/utils");
11
+ const subgraph_1 = require("./subgraph");
12
+ const utils_2 = require("../../utils");
13
+ const constants_1 = require("../../constants");
14
+ const constants_2 = require("./constants");
15
+ const ethers_1 = require("ethers");
16
+ const utils_3 = require("./utils");
17
+ const decoders_1 = require("../../lib/decoders");
18
+ const uniswap_v4_pool_math_1 = require("./contract-math/uniswap-v4-pool-math");
19
+ class UniswapV4PoolManager extends stateful_event_subscriber_1.StatefulEventSubscriber {
20
+ dexHelper;
21
+ network;
22
+ config;
23
+ logger;
24
+ handlers = {};
25
+ logDecoder;
26
+ stateViewIface;
27
+ poolManagerIface;
28
+ poolsCacheKey = 'pools_states';
29
+ constructor(dexHelper, parentName, network, config, logger, mapKey = '') {
30
+ super(parentName, `${parentName} PoolManager`, dexHelper, logger, true, mapKey);
31
+ this.dexHelper = dexHelper;
32
+ this.network = network;
33
+ this.config = config;
34
+ this.logger = logger;
35
+ this.stateViewIface = new utils_1.Interface(state_view_abi_json_1.default);
36
+ this.poolManagerIface = new utils_1.Interface(pool_manager_abi_json_1.default);
37
+ this.addressesSubscribed = [this.config.poolManager];
38
+ this.logDecoder = (log) => this.poolManagerIface.parseLog(log);
39
+ // Add handlers
40
+ this.handlers['Initialize'] = this.handleInitializeEvent.bind(this);
41
+ this.handlers['Swap'] = this.handleSwapEvent.bind(this);
42
+ this.handlers['Donate'] = this.handleDonateEvent.bind(this);
43
+ this.handlers['ModifyLiquidity'] =
44
+ this.handleModifyLiquidityEvent.bind(this);
45
+ }
46
+ async initialize(blockNumber, options) {
47
+ await super.initialize(blockNumber, options);
48
+ }
49
+ async processLog(state, log, blockHeader) {
50
+ const event = this.logDecoder(log);
51
+ if (event.name in this.handlers) {
52
+ await this.handlers[event.name](event, state, log, blockHeader);
53
+ }
54
+ return state;
55
+ }
56
+ getAvailablePoolsForPair(srcToken, destToken, blockNumber) {
57
+ const isEthSrc = (0, utils_2.isETHAddress)(srcToken);
58
+ const isEthDest = (0, utils_2.isETHAddress)(destToken);
59
+ const src = isEthSrc ? constants_1.NULL_ADDRESS : srcToken.toLowerCase();
60
+ const dest = isEthDest ? constants_1.NULL_ADDRESS : destToken.toLowerCase();
61
+ const state = this.getState(blockNumber);
62
+ if (!state) {
63
+ ethers_1.logger.info(`${this.name} PoolManager: state was not found blocknumber: ${blockNumber}`);
64
+ return [];
65
+ }
66
+ const poolStates = state._pools.filter(pool => (pool.token0 === src && pool.token1 === dest) ||
67
+ (pool.token0 === dest && pool.token1 === src));
68
+ return poolStates.map(state => ({
69
+ id: state.id,
70
+ key: {
71
+ currency0: state.token0,
72
+ currency1: state.token1,
73
+ fee: state.fee,
74
+ tickSpacing: state.tickSpacing,
75
+ hooks: state.hooks,
76
+ },
77
+ }));
78
+ }
79
+ async queryAllAvailablePools(blockNumber) {
80
+ const cachedPools = await this.dexHelper.cache.getAndCacheLocally(this.parentName, this.network, this.poolsCacheKey, constants_2.POOL_CACHE_REFRESH_INTERVAL);
81
+ if (cachedPools) {
82
+ const pools = JSON.parse(cachedPools);
83
+ return pools;
84
+ }
85
+ let pools = [];
86
+ let curPage = 0;
87
+ const limit = 1000;
88
+ let currentSubgraphPools = await (0, subgraph_1.queryOnePageForAllAvailablePoolsFromSubgraph)(this.dexHelper, this.logger, this.parentName, this.config.subgraphURL, blockNumber, curPage * limit, limit);
89
+ pools = pools.concat(currentSubgraphPools);
90
+ while (currentSubgraphPools.length === limit) {
91
+ curPage++;
92
+ currentSubgraphPools = await (0, subgraph_1.queryOnePageForAllAvailablePoolsFromSubgraph)(this.dexHelper, this.logger, this.parentName, this.config.subgraphURL, blockNumber, curPage * limit, limit);
93
+ pools = pools.concat(currentSubgraphPools);
94
+ }
95
+ console.log('pools 0', pools[0]);
96
+ this.dexHelper.cache.setexAndCacheLocally(this.parentName, this.network, this.poolsCacheKey, constants_2.POOL_CACHE_REFRESH_INTERVAL, JSON.stringify(pools));
97
+ return pools;
98
+ }
99
+ _getStateRequestCallDataPerPool(poolId) {
100
+ const callData = [
101
+ {
102
+ target: this.config.stateView,
103
+ callData: this.stateViewIface.encodeFunctionData('getLiquidity', [
104
+ poolId,
105
+ ]),
106
+ decodeFunction: decoders_1.uint256ToBigInt,
107
+ },
108
+ {
109
+ target: this.config.stateView,
110
+ callData: this.stateViewIface.encodeFunctionData('getSlot0', [poolId]),
111
+ decodeFunction: (result) => {
112
+ const [, toDecode] = (0, decoders_1.extractSuccessAndValue)(result);
113
+ const decoded = this.stateViewIface.decodeFunctionResult('getSlot0', toDecode);
114
+ return {
115
+ sqrtPriceX96: BigInt(decoded[0]),
116
+ tick: decoded[1],
117
+ protocolFee: decoded[2],
118
+ lpFee: decoded[3],
119
+ };
120
+ },
121
+ },
122
+ {
123
+ target: this.config.stateView,
124
+ callData: this.stateViewIface.encodeFunctionData('getFeeGrowthGlobals', [poolId]),
125
+ decodeFunction: (result) => {
126
+ const [, toDecode] = (0, decoders_1.extractSuccessAndValue)(result);
127
+ const decoded = this.stateViewIface.decodeFunctionResult('getFeeGrowthGlobals', toDecode);
128
+ return {
129
+ feeGrowthGlobal0: BigInt(decoded[0]),
130
+ feeGrowthGlobal1: BigInt(decoded[1]),
131
+ };
132
+ },
133
+ },
134
+ ];
135
+ return callData;
136
+ }
137
+ async generateState(blockNumber) {
138
+ let pools = await this.queryAllAvailablePools(blockNumber);
139
+ pools = pools.filter(pool => pool.id ===
140
+ '0x20c3a15e34e5d88aeba004b0753af69e4f6bea80eae2263f7a92e919cd33cc56'.toLowerCase() ||
141
+ pool.id ===
142
+ '0x32c53756fb0b730fa9daa03418f4e4bd47ea2dce4a23f0794788f3802ed34478'.toLowerCase());
143
+ const callData = pools.reduce((memo, pool) => {
144
+ const calldata = this._getStateRequestCallDataPerPool(pool.id);
145
+ memo = memo.concat(calldata);
146
+ return memo;
147
+ }, []);
148
+ const results = await this.dexHelper.multiWrapper.tryAggregate(false, callData, blockNumber, this.dexHelper.multiWrapper.defaultBatchSize, false);
149
+ // console.log('results: ', results);
150
+ const combinedResults = results.reduce((memo, curItem, curIndex) => {
151
+ const isLiquidityResult = curIndex % 3 === 0;
152
+ const isFeeGrowthResult = curIndex % 2 === 0;
153
+ if (isLiquidityResult) {
154
+ memo.push({
155
+ liquidity: curItem.returnData,
156
+ });
157
+ }
158
+ else if (isFeeGrowthResult) {
159
+ const prevIndex = memo.length - 1;
160
+ memo[prevIndex].feeGrowthGlobals =
161
+ curItem.returnData;
162
+ }
163
+ else {
164
+ const prevIndex = memo.length - 1;
165
+ memo[prevIndex].slot0 = curItem.returnData;
166
+ }
167
+ return memo;
168
+ }, []);
169
+ const poolsStates = pools.map((pool, index) => ({
170
+ id: pool.id,
171
+ token0: pool.token0.address,
172
+ token1: pool.token1.address,
173
+ fee: pool.fee,
174
+ hooks: pool.hooks,
175
+ feeGrowthGlobal0X128: combinedResults[index]?.feeGrowthGlobals?.feeGrowthGlobal0,
176
+ feeGrowthGlobal1X128: combinedResults[index]?.feeGrowthGlobals?.feeGrowthGlobal1,
177
+ liquidity: combinedResults[index].liquidity,
178
+ slot0: combinedResults[index].slot0,
179
+ tick: pool.tick,
180
+ tickSpacing: pool.tickSpacing,
181
+ ticks: pool.ticks.reduce((memo, tick) => {
182
+ memo[tick.tickIdx] = {
183
+ liquidityGross: BigInt(tick.liquidityGross),
184
+ liquidityNet: BigInt(tick.liquidityNet),
185
+ };
186
+ return memo;
187
+ }, {}),
188
+ }));
189
+ const resPool = poolsStates.find(pool => pool.id.toLowerCase() ===
190
+ '0x20c3a15e34e5d88aeba004b0753af69e4f6bea80eae2263f7a92e919cd33cc56'.toLowerCase());
191
+ console.log('block number: ', blockNumber);
192
+ console.log('poolsStates[0]: ', poolsStates[0]);
193
+ // console.log('resPool slot0: ', resPool?.slot0);
194
+ console.log('------------------------------------');
195
+ return {
196
+ _pools: poolsStates.sort(utils_3.sortPools),
197
+ };
198
+ }
199
+ async handleInitializeEvent(event, state, log) {
200
+ const id = event.args.id.toLowerCase();
201
+ const subgraphPool = await (0, subgraph_1.querySinglePoolFromSubgraphById)(this.dexHelper, this.config.subgraphURL, log.blockNumber, id);
202
+ if (subgraphPool) {
203
+ const callData = this._getStateRequestCallDataPerPool(subgraphPool.id);
204
+ const results = await this.dexHelper.multiWrapper.tryAggregate(false, callData, log.blockNumber, this.dexHelper.multiWrapper.defaultBatchSize, false);
205
+ const newPool = {
206
+ id: subgraphPool.id,
207
+ token0: subgraphPool.token0.address,
208
+ token1: subgraphPool.token1.address,
209
+ fee: subgraphPool.fee,
210
+ tickSpacing: subgraphPool.tickSpacing,
211
+ hooks: subgraphPool.hooks,
212
+ liquidity: results[0].returnData,
213
+ slot0: results[1].returnData,
214
+ // tick: parseInt(subgraphPool.tick),
215
+ // ticks: subgraphPool.ticks,
216
+ };
217
+ const pools = state._pools;
218
+ pools.push(newPool);
219
+ state = {
220
+ ...state,
221
+ _pools: pools.sort(utils_3.sortPools),
222
+ };
223
+ }
224
+ return state;
225
+ // return this.generateState(log.blockNumber); // since Initialize is rare event we could dp like this
226
+ }
227
+ handleSwapEvent(event, state, log, blockHeader) {
228
+ this.logger.info(`handle Swap event`);
229
+ return state;
230
+ }
231
+ handleDonateEvent(event, state, log, blockHeader) {
232
+ this.logger.info(`handle Donate event`);
233
+ return state;
234
+ }
235
+ handleModifyLiquidityEvent(event, state, log, blockHeader) {
236
+ const id = event.args.id.toLowerCase();
237
+ const poolState = state._pools.find(pool => pool.id.toLowerCase() === id.toLowerCase());
238
+ if (!poolState) {
239
+ this.logger.info(`${this.parentName}: State for pool ${id} is not found...`);
240
+ return state;
241
+ }
242
+ const owner = event.args.sender.toLowerCase();
243
+ const tickLower = parseInt(event.args.tickLower);
244
+ const tickUpper = parseInt(event.args.tickUpper);
245
+ const liquidityDelta = BigInt(event.args.liquidityDelta);
246
+ const salt = event.args.salt.toLowerCase();
247
+ uniswap_v4_pool_math_1.uniswapV4PoolMath.modifyLiquidity(poolState, {
248
+ owner,
249
+ tickLower,
250
+ tickSpacing: poolState.tickSpacing,
251
+ tickUpper,
252
+ liquidityDelta,
253
+ salt,
254
+ });
255
+ console.log('event.args: ', event.args);
256
+ return state;
257
+ }
258
+ }
259
+ exports.UniswapV4PoolManager = UniswapV4PoolManager;
260
+ //# sourceMappingURL=uniswap-v4-pool-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswap-v4-pool-manager.js","sourceRoot":"","sources":["../../../src/dex/uniswap-v4/uniswap-v4-pool-manager.ts"],"names":[],"mappings":"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"}