@paraswap/dex-lib 4.7.27-1 → 4.7.27-ekubo-v3.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 (341) hide show
  1. package/build/abi/PendleRouterStatic.json +19 -0
  2. package/build/abi/apex-defi/ApexDefiFactory.abi.json +1749 -0
  3. package/build/abi/apex-defi/ApexDefiRouter.abi.json +1120 -0
  4. package/build/abi/apex-defi/ApexDefiToken.abi.json +229 -0
  5. package/build/abi/apex-defi/ApexDefiWrapper.abi.json +92 -0
  6. package/build/abi/apex-defi/ApexDefiWrapperFactory.abi.json +1107 -0
  7. package/build/abi/ekubo-v3/core.json +797 -0
  8. package/build/abi/ekubo-v3/mev-capture-router.json +936 -0
  9. package/build/abi/ekubo-v3/quote-data-fetcher.json +161 -0
  10. package/build/abi/ekubo-v3/twamm-data-fetcher.json +216 -0
  11. package/build/abi/ekubo-v3/twamm.json +613 -0
  12. package/build/abi/idle-dao/idle-cdo-factory.json +38 -0
  13. package/build/abi/idle-dao/idle-cdo.json +1245 -0
  14. package/build/abi/infusion/InfusionFactory.json +147 -0
  15. package/build/abi/infusion/InfusionPair.json +658 -0
  16. package/build/abi/infusion/InfusionRouter.json +442 -0
  17. package/build/abi/maker-psm/pot.json +322 -0
  18. package/build/abi/maker-psm/psm.json +243 -0
  19. package/build/abi/maker-psm/vat.json +363 -0
  20. package/build/abi/nomiswap-v2/nomiswap-v2-pool.json +773 -0
  21. package/build/abi/pangolin-v3/PangolinV3StateMulticall.abi.json +796 -0
  22. package/build/abi/pendle/pendle-deployer.abi.json +520 -0
  23. package/build/abi/pendle/pendle-oracle.abi.json +413 -0
  24. package/build/abi/quick-perps/fast-price-events.json +70 -0
  25. package/build/abi/quick-perps/fast-price-feed.json +741 -0
  26. package/build/abi/quick-perps/reader.json +313 -0
  27. package/build/abi/quick-perps/vault-price-feed.json +323 -0
  28. package/build/abi/quick-perps/vault.json +1953 -0
  29. package/build/abi/ring-v2/few-wrapped-token.json +587 -0
  30. package/build/abi/ring-v2/ring-v2-factory.json +125 -0
  31. package/build/abi/ring-v2/ring-v2-pool.json +461 -0
  32. package/build/abi/ring-v2/ring-v2-router.json +332 -0
  33. package/build/abi/stabull/stabull-curve.json +738 -0
  34. package/build/abi/stabull/stabull-router.json +76 -0
  35. package/build/abi/uniswap-v2/excalibur-pool.json +881 -0
  36. package/build/abi/uniswap-v2/mdex-factory.json +759 -0
  37. package/build/abi/uniswap-v4/hooks/SpotDynamicFeeManager.json +26 -0
  38. package/build/abi/uniswap-v4/hooks/SpotHook.json +54 -0
  39. package/build/abi/uniswap-v4/hooks/SpotPolicyManager.json +45 -0
  40. package/build/abi/uniswap-v4/hooks/cabalcoin-hook.abi.json +682 -0
  41. package/build/abi/uniswap-v4/hooks/fee-hook.abi.json +1335 -0
  42. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying-factory.d.ts +29 -0
  43. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying-factory.js +153 -0
  44. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying-factory.js.map +1 -0
  45. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying.d.ts +40 -0
  46. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying.js +323 -0
  47. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying.js.map +1 -0
  48. package/build/dex/aave-pt-to-underlying/config.d.ts +3 -0
  49. package/build/dex/aave-pt-to-underlying/config.js +24 -0
  50. package/build/dex/aave-pt-to-underlying/config.js.map +1 -0
  51. package/build/dex/aave-pt-to-underlying/constants.d.ts +2 -0
  52. package/build/dex/aave-pt-to-underlying/constants.js +6 -0
  53. package/build/dex/aave-pt-to-underlying/constants.js.map +1 -0
  54. package/build/dex/aave-pt-to-underlying/types.d.ts +24 -0
  55. package/build/dex/aave-pt-to-underlying/types.js +3 -0
  56. package/build/dex/aave-pt-to-underlying/types.js.map +1 -0
  57. package/build/dex/aave-pt-to-usdc/aave-pt-to-usdc.d.ts +39 -0
  58. package/build/dex/aave-pt-to-usdc/aave-pt-to-usdc.js +244 -0
  59. package/build/dex/aave-pt-to-usdc/aave-pt-to-usdc.js.map +1 -0
  60. package/build/dex/aave-pt-to-usdc/config.d.ts +3 -0
  61. package/build/dex/aave-pt-to-usdc/config.js +47 -0
  62. package/build/dex/aave-pt-to-usdc/config.js.map +1 -0
  63. package/build/dex/aave-pt-to-usdc/constants.d.ts +2 -0
  64. package/build/dex/aave-pt-to-usdc/constants.js +6 -0
  65. package/build/dex/aave-pt-to-usdc/constants.js.map +1 -0
  66. package/build/dex/aave-pt-to-usdc/types.d.ts +22 -0
  67. package/build/dex/aave-pt-to-usdc/types.js +3 -0
  68. package/build/dex/aave-pt-to-usdc/types.js.map +1 -0
  69. package/build/dex/algebra-integral/algebra-integral-factory.d.ts +1 -3
  70. package/build/dex/algebra-integral/algebra-integral-factory.js +1 -59
  71. package/build/dex/algebra-integral/algebra-integral-factory.js.map +1 -1
  72. package/build/dex/algebra-integral/algebra-integral.d.ts +0 -3
  73. package/build/dex/algebra-integral/algebra-integral.js +4 -112
  74. package/build/dex/algebra-integral/algebra-integral.js.map +1 -1
  75. package/build/dex/algebra-integral/constants.d.ts +0 -2
  76. package/build/dex/algebra-integral/constants.js +1 -5
  77. package/build/dex/algebra-integral/constants.js.map +1 -1
  78. package/build/dex/apex-defi/apex-defi-factory.d.ts +26 -0
  79. package/build/dex/apex-defi/apex-defi-factory.js +53 -0
  80. package/build/dex/apex-defi/apex-defi-factory.js.map +1 -0
  81. package/build/dex/apex-defi/apex-defi-pool.d.ts +55 -0
  82. package/build/dex/apex-defi/apex-defi-pool.js +247 -0
  83. package/build/dex/apex-defi/apex-defi-pool.js.map +1 -0
  84. package/build/dex/apex-defi/apex-defi-wrapper-factory.d.ts +57 -0
  85. package/build/dex/apex-defi/apex-defi-wrapper-factory.js +250 -0
  86. package/build/dex/apex-defi/apex-defi-wrapper-factory.js.map +1 -0
  87. package/build/dex/apex-defi/apex-defi.d.ts +97 -0
  88. package/build/dex/apex-defi/apex-defi.js +1021 -0
  89. package/build/dex/apex-defi/apex-defi.js.map +1 -0
  90. package/build/dex/apex-defi/config.d.ts +4 -0
  91. package/build/dex/apex-defi/config.js +138 -0
  92. package/build/dex/apex-defi/config.js.map +1 -0
  93. package/build/dex/apex-defi/types.d.ts +32 -0
  94. package/build/dex/apex-defi/types.js +3 -0
  95. package/build/dex/apex-defi/types.js.map +1 -0
  96. package/build/dex/apex-defi/utils.d.ts +46 -0
  97. package/build/dex/apex-defi/utils.js +133 -0
  98. package/build/dex/apex-defi/utils.js.map +1 -0
  99. package/build/dex/ekubo/pools/base-pool.d.ts +47 -0
  100. package/build/dex/ekubo/pools/base-pool.js +184 -0
  101. package/build/dex/ekubo/pools/base-pool.js.map +1 -0
  102. package/build/dex/ekubo/pools/iface.d.ts +46 -0
  103. package/build/dex/ekubo/pools/iface.js +75 -0
  104. package/build/dex/ekubo/pools/iface.js.map +1 -0
  105. package/build/dex/ekubo/pools/math/price.d.ts +7 -0
  106. package/build/dex/ekubo/pools/math/price.js +112 -0
  107. package/build/dex/ekubo/pools/math/price.js.map +1 -0
  108. package/build/dex/ekubo/pools/oracle-pool.d.ts +10 -0
  109. package/build/dex/ekubo/pools/oracle-pool.js +19 -0
  110. package/build/dex/ekubo/pools/oracle-pool.js.map +1 -0
  111. package/build/dex/ekubo/pools/pool-utils.d.ts +44 -0
  112. package/build/dex/ekubo/pools/pool-utils.js +240 -0
  113. package/build/dex/ekubo/pools/pool-utils.js.map +1 -0
  114. package/build/dex/ekubo-v3/config.d.ts +13 -0
  115. package/build/dex/ekubo-v3/config.js +23 -0
  116. package/build/dex/ekubo-v3/config.js.map +1 -0
  117. package/build/dex/ekubo-v3/ekubo-v3-pool-manager.d.ts +34 -0
  118. package/build/dex/ekubo-v3/ekubo-v3-pool-manager.js +421 -0
  119. package/build/dex/ekubo-v3/ekubo-v3-pool-manager.js.map +1 -0
  120. package/build/dex/ekubo-v3/ekubo-v3.d.ts +38 -0
  121. package/build/dex/ekubo-v3/ekubo-v3.js +315 -0
  122. package/build/dex/ekubo-v3/ekubo-v3.js.map +1 -0
  123. package/build/dex/ekubo-v3/pools/base.d.ts +42 -0
  124. package/build/dex/ekubo-v3/pools/base.js +307 -0
  125. package/build/dex/ekubo-v3/pools/base.js.map +1 -0
  126. package/build/dex/ekubo-v3/pools/full-range.d.ts +25 -0
  127. package/build/dex/ekubo-v3/pools/full-range.js +105 -0
  128. package/build/dex/ekubo-v3/pools/full-range.js.map +1 -0
  129. package/build/dex/ekubo-v3/pools/math/constants.d.ts +12 -0
  130. package/build/dex/ekubo-v3/pools/math/constants.js +16 -0
  131. package/build/dex/ekubo-v3/pools/math/constants.js.map +1 -0
  132. package/build/dex/ekubo-v3/pools/math/delta.d.ts +2 -0
  133. package/build/dex/ekubo-v3/pools/math/delta.js +51 -0
  134. package/build/dex/ekubo-v3/pools/math/delta.js.map +1 -0
  135. package/build/dex/ekubo-v3/pools/math/sqrt-ratio.d.ts +8 -0
  136. package/build/dex/ekubo-v3/pools/math/sqrt-ratio.js +113 -0
  137. package/build/dex/ekubo-v3/pools/math/sqrt-ratio.js.map +1 -0
  138. package/build/dex/ekubo-v3/pools/math/swap.d.ts +18 -0
  139. package/build/dex/ekubo-v3/pools/math/swap.js +128 -0
  140. package/build/dex/ekubo-v3/pools/math/swap.js.map +1 -0
  141. package/build/dex/ekubo-v3/pools/math/tick.d.ts +8 -0
  142. package/build/dex/ekubo-v3/pools/math/tick.js +129 -0
  143. package/build/dex/ekubo-v3/pools/math/tick.js.map +1 -0
  144. package/build/dex/ekubo-v3/pools/math/twamm/exp2.d.ts +1 -0
  145. package/build/dex/ekubo-v3/pools/math/twamm/exp2.js +86 -0
  146. package/build/dex/ekubo-v3/pools/math/twamm/exp2.js.map +1 -0
  147. package/build/dex/ekubo-v3/pools/math/twamm/sqrt-ratio.d.ts +1 -0
  148. package/build/dex/ekubo-v3/pools/math/twamm/sqrt-ratio.js +56 -0
  149. package/build/dex/ekubo-v3/pools/math/twamm/sqrt-ratio.js.map +1 -0
  150. package/build/dex/ekubo-v3/pools/mev-capture.d.ts +8 -0
  151. package/build/dex/ekubo-v3/pools/mev-capture.js +42 -0
  152. package/build/dex/ekubo-v3/pools/mev-capture.js.map +1 -0
  153. package/build/dex/ekubo-v3/pools/oracle.d.ts +8 -0
  154. package/build/dex/ekubo-v3/pools/oracle.js +18 -0
  155. package/build/dex/ekubo-v3/pools/oracle.js.map +1 -0
  156. package/build/dex/ekubo-v3/pools/pool.d.ts +56 -0
  157. package/build/dex/ekubo-v3/pools/pool.js +88 -0
  158. package/build/dex/ekubo-v3/pools/pool.js.map +1 -0
  159. package/build/dex/ekubo-v3/pools/stableswap.d.ts +22 -0
  160. package/build/dex/ekubo-v3/pools/stableswap.js +123 -0
  161. package/build/dex/ekubo-v3/pools/stableswap.js.map +1 -0
  162. package/build/dex/ekubo-v3/pools/twamm.d.ts +40 -0
  163. package/build/dex/ekubo-v3/pools/twamm.js +265 -0
  164. package/build/dex/ekubo-v3/pools/twamm.js.map +1 -0
  165. package/build/dex/ekubo-v3/pools/utils.d.ts +62 -0
  166. package/build/dex/ekubo-v3/pools/utils.js +160 -0
  167. package/build/dex/ekubo-v3/pools/utils.js.map +1 -0
  168. package/build/dex/ekubo-v3/types.d.ts +58 -0
  169. package/build/dex/ekubo-v3/types.js +3 -0
  170. package/build/dex/ekubo-v3/types.js.map +1 -0
  171. package/build/dex/ekubo-v3/utils.d.ts +10 -0
  172. package/build/dex/ekubo-v3/utils.js +54 -0
  173. package/build/dex/ekubo-v3/utils.js.map +1 -0
  174. package/build/dex/idle-dao/config.d.ts +5 -0
  175. package/build/dex/idle-dao/config.js +24 -0
  176. package/build/dex/idle-dao/config.js.map +1 -0
  177. package/build/dex/idle-dao/idle-dao.d.ts +42 -0
  178. package/build/dex/idle-dao/idle-dao.js +279 -0
  179. package/build/dex/idle-dao/idle-dao.js.map +1 -0
  180. package/build/dex/idle-dao/token_list.d.ts +4 -0
  181. package/build/dex/idle-dao/token_list.js +289 -0
  182. package/build/dex/idle-dao/token_list.js.map +1 -0
  183. package/build/dex/idle-dao/tokens.d.ts +9 -0
  184. package/build/dex/idle-dao/tokens.js +68 -0
  185. package/build/dex/idle-dao/tokens.js.map +1 -0
  186. package/build/dex/idle-dao/types.d.ts +35 -0
  187. package/build/dex/idle-dao/types.js +11 -0
  188. package/build/dex/idle-dao/types.js.map +1 -0
  189. package/build/dex/idle-dao/utils.d.ts +8 -0
  190. package/build/dex/idle-dao/utils.js +149 -0
  191. package/build/dex/idle-dao/utils.js.map +1 -0
  192. package/build/dex/index.js +2 -0
  193. package/build/dex/index.js.map +1 -1
  194. package/build/dex/infusion/config.d.ts +3 -0
  195. package/build/dex/infusion/config.js +20 -0
  196. package/build/dex/infusion/config.js.map +1 -0
  197. package/build/dex/infusion/infusion-stable-pool.d.ts +4 -0
  198. package/build/dex/infusion/infusion-stable-pool.js +74 -0
  199. package/build/dex/infusion/infusion-stable-pool.js.map +1 -0
  200. package/build/dex/infusion/infusion.d.ts +51 -0
  201. package/build/dex/infusion/infusion.js +461 -0
  202. package/build/dex/infusion/infusion.js.map +1 -0
  203. package/build/dex/infusion/types.d.ts +45 -0
  204. package/build/dex/infusion/types.js +3 -0
  205. package/build/dex/infusion/types.js.map +1 -0
  206. package/build/dex/infusion/utils/isStablePair.d.ts +2 -0
  207. package/build/dex/infusion/utils/isStablePair.js +18 -0
  208. package/build/dex/infusion/utils/isStablePair.js.map +1 -0
  209. package/build/dex/maker-psm/config.d.ts +11 -0
  210. package/build/dex/maker-psm/config.js +53 -0
  211. package/build/dex/maker-psm/config.js.map +1 -0
  212. package/build/dex/maker-psm/maker-psm-event-pool.d.ts +43 -0
  213. package/build/dex/maker-psm/maker-psm-event-pool.js +132 -0
  214. package/build/dex/maker-psm/maker-psm-event-pool.js.map +1 -0
  215. package/build/dex/maker-psm/maker-psm.d.ts +103 -0
  216. package/build/dex/maker-psm/maker-psm.js +493 -0
  217. package/build/dex/maker-psm/maker-psm.js.map +1 -0
  218. package/build/dex/maker-psm/types.d.ts +39 -0
  219. package/build/dex/maker-psm/types.js +3 -0
  220. package/build/dex/maker-psm/types.js.map +1 -0
  221. package/build/dex/miro-migrator/miro-migrator-state.d.ts +27 -0
  222. package/build/dex/miro-migrator/miro-migrator-state.js +89 -0
  223. package/build/dex/miro-migrator/miro-migrator-state.js.map +1 -0
  224. package/build/dex/quick-perps/config.d.ts +11 -0
  225. package/build/dex/quick-perps/config.js +27 -0
  226. package/build/dex/quick-perps/config.js.map +1 -0
  227. package/build/dex/quick-perps/fast-price-feed.d.ts +26 -0
  228. package/build/dex/quick-perps/fast-price-feed.js +184 -0
  229. package/build/dex/quick-perps/fast-price-feed.js.map +1 -0
  230. package/build/dex/quick-perps/pool.d.ts +21 -0
  231. package/build/dex/quick-perps/pool.js +229 -0
  232. package/build/dex/quick-perps/pool.js.map +1 -0
  233. package/build/dex/quick-perps/quick-perps.d.ts +53 -0
  234. package/build/dex/quick-perps/quick-perps.js +247 -0
  235. package/build/dex/quick-perps/quick-perps.js.map +1 -0
  236. package/build/dex/quick-perps/types.d.ts +98 -0
  237. package/build/dex/quick-perps/types.js +3 -0
  238. package/build/dex/quick-perps/types.js.map +1 -0
  239. package/build/dex/quick-perps/usdq.d.ts +15 -0
  240. package/build/dex/quick-perps/usdq.js +62 -0
  241. package/build/dex/quick-perps/usdq.js.map +1 -0
  242. package/build/dex/quick-perps/vault-price-feed.d.ts +43 -0
  243. package/build/dex/quick-perps/vault-price-feed.js +203 -0
  244. package/build/dex/quick-perps/vault-price-feed.js.map +1 -0
  245. package/build/dex/quick-perps/vault-utils.d.ts +8 -0
  246. package/build/dex/quick-perps/vault-utils.js +42 -0
  247. package/build/dex/quick-perps/vault-utils.js.map +1 -0
  248. package/build/dex/quick-perps/vault.d.ts +46 -0
  249. package/build/dex/quick-perps/vault.js +182 -0
  250. package/build/dex/quick-perps/vault.js.map +1 -0
  251. package/build/dex/solidly/forks-override/aerodrome.d.ts +14 -0
  252. package/build/dex/solidly/forks-override/aerodrome.js +50 -0
  253. package/build/dex/solidly/forks-override/aerodrome.js.map +1 -0
  254. package/build/dex/solidly/forks-override/chronos.d.ts +23 -0
  255. package/build/dex/solidly/forks-override/chronos.js +141 -0
  256. package/build/dex/solidly/forks-override/chronos.js.map +1 -0
  257. package/build/dex/solidly/forks-override/usdfi.d.ts +8 -0
  258. package/build/dex/solidly/forks-override/usdfi.js +15 -0
  259. package/build/dex/solidly/forks-override/usdfi.js.map +1 -0
  260. package/build/dex/solidly/forks-override/velocimeter.d.ts +23 -0
  261. package/build/dex/solidly/forks-override/velocimeter.js +77 -0
  262. package/build/dex/solidly/forks-override/velocimeter.js.map +1 -0
  263. package/build/dex/stabull/config.d.ts +3 -0
  264. package/build/dex/stabull/config.js +177 -0
  265. package/build/dex/stabull/config.js.map +1 -0
  266. package/build/dex/stabull/stabull-pool.d.ts +46 -0
  267. package/build/dex/stabull/stabull-pool.js +113 -0
  268. package/build/dex/stabull/stabull-pool.js.map +1 -0
  269. package/build/dex/stabull/stabull.d.ts +55 -0
  270. package/build/dex/stabull/stabull.js +286 -0
  271. package/build/dex/stabull/stabull.js.map +1 -0
  272. package/build/dex/stabull/types.d.ts +21 -0
  273. package/build/dex/stabull/types.js +3 -0
  274. package/build/dex/stabull/types.js.map +1 -0
  275. package/build/dex/uniswap-v2/dfyn.d.ts +19 -0
  276. package/build/dex/uniswap-v2/dfyn.js +61 -0
  277. package/build/dex/uniswap-v2/dfyn.js.map +1 -0
  278. package/build/dex/uniswap-v2/excalibur.d.ts +24 -0
  279. package/build/dex/uniswap-v2/excalibur.js +47 -0
  280. package/build/dex/uniswap-v2/excalibur.js.map +1 -0
  281. package/build/dex/uniswap-v2/mdex.d.ts +24 -0
  282. package/build/dex/uniswap-v2/mdex.js +50 -0
  283. package/build/dex/uniswap-v2/mdex.js.map +1 -0
  284. package/build/dex/uniswap-v2/nomiswap-v2.d.ts +24 -0
  285. package/build/dex/uniswap-v2/nomiswap-v2.js +57 -0
  286. package/build/dex/uniswap-v2/nomiswap-v2.js.map +1 -0
  287. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.d.ts +4 -0
  288. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.js +56 -0
  289. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.js.map +1 -0
  290. package/build/dex/uniswap-v4/contract-math/Position.d.ts +9 -0
  291. package/build/dex/uniswap-v4/contract-math/Position.js +39 -0
  292. package/build/dex/uniswap-v4/contract-math/Position.js.map +1 -0
  293. package/build/dex/uniswap-v4/hooks/arena.d.ts +6 -0
  294. package/build/dex/uniswap-v4/hooks/arena.js +10 -0
  295. package/build/dex/uniswap-v4/hooks/arena.js.map +1 -0
  296. package/build/dex/uniswap-v4/hooks/base-fee/base-fee-hook.d.ts +0 -0
  297. package/build/dex/uniswap-v4/hooks/base-fee/base-fee-hook.js +2 -0
  298. package/build/dex/uniswap-v4/hooks/base-fee/base-fee-hook.js.map +1 -0
  299. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.d.ts +7 -0
  300. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.js +28 -0
  301. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.js.map +1 -0
  302. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.d.ts +0 -0
  303. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.js +2 -0
  304. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.js.map +1 -0
  305. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.d.ts +7 -0
  306. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.js +28 -0
  307. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.js.map +1 -0
  308. package/build/dex/uniswap-v4/hooks/fee-hook/types.d.ts +0 -0
  309. package/build/dex/uniswap-v4/hooks/fee-hook/types.js +2 -0
  310. package/build/dex/uniswap-v4/hooks/fee-hook/types.js.map +1 -0
  311. package/build/dex/uniswap-v4/hooks/index.d.ts +1 -0
  312. package/build/dex/uniswap-v4/hooks/index.js +18 -0
  313. package/build/dex/uniswap-v4/hooks/index.js.map +1 -0
  314. package/build/dex/uniswap-v4/hooks/spot.d.ts +15 -0
  315. package/build/dex/uniswap-v4/hooks/spot.js +109 -0
  316. package/build/dex/uniswap-v4/hooks/spot.js.map +1 -0
  317. package/build/dex/uniswap-v4/hooks/template.d.ts +150 -0
  318. package/build/dex/uniswap-v4/hooks/template.js +104 -0
  319. package/build/dex/uniswap-v4/hooks/template.js.map +1 -0
  320. package/build/dex/usdc-transmuter/usdc-transmuter-pool.d.ts +26 -0
  321. package/build/dex/usdc-transmuter/usdc-transmuter-pool.js +75 -0
  322. package/build/dex/usdc-transmuter/usdc-transmuter-pool.js.map +1 -0
  323. package/build/dex/usual/usual-usdc-usdc.d.ts +17 -0
  324. package/build/dex/usual/usual-usdc-usdc.js +59 -0
  325. package/build/dex/usual/usual-usdc-usdc.js.map +1 -0
  326. package/build/dex/yo/config.d.ts +3 -0
  327. package/build/dex/yo/config.js +21 -0
  328. package/build/dex/yo/config.js.map +1 -0
  329. package/build/dex/yo/types.d.ts +13 -0
  330. package/build/dex/yo/types.js +3 -0
  331. package/build/dex/yo/types.js.map +1 -0
  332. package/build/dex/yo/yo-pool.d.ts +13 -0
  333. package/build/dex/yo/yo-pool.js +26 -0
  334. package/build/dex/yo/yo-pool.js.map +1 -0
  335. package/build/dex/yo/yo.d.ts +39 -0
  336. package/build/dex/yo/yo.js +248 -0
  337. package/build/dex/yo/yo.js.map +1 -0
  338. package/build/implementations/api-paraswap-sdk.d.ts +25 -0
  339. package/build/implementations/api-paraswap-sdk.js +102 -0
  340. package/build/implementations/api-paraswap-sdk.js.map +1 -0
  341. package/package.json +3 -3
@@ -0,0 +1,8 @@
1
+ import { DeepReadonly } from 'ts-essentials';
2
+ import { FullRangePool, FullRangePoolState } from './full-range';
3
+ import { PoolKeyed, Quote } from './pool';
4
+ import { StableswapPoolTypeConfig } from './utils';
5
+ export declare class OraclePool extends FullRangePool {
6
+ protected _quote(amount: bigint, isToken1: boolean, state: DeepReadonly<FullRangePoolState.Object>, sqrtRatioLimit?: bigint): Quote;
7
+ quoteOracle(this: PoolKeyed<StableswapPoolTypeConfig>, amount: bigint, isToken1: boolean, state: DeepReadonly<FullRangePoolState.Object>, sqrtRatioLimit?: bigint): Quote;
8
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OraclePool = void 0;
4
+ const full_range_1 = require("./full-range");
5
+ // TODO
6
+ const BASE_GAS_COST_OF_ONE_ORACLE_SWAP = 32_000;
7
+ class OraclePool extends full_range_1.FullRangePool {
8
+ _quote(amount, isToken1, state, sqrtRatioLimit) {
9
+ return this.quoteOracle(amount, isToken1, state, sqrtRatioLimit);
10
+ }
11
+ quoteOracle(amount, isToken1, state, sqrtRatioLimit) {
12
+ const fullRangeQuote = full_range_1.FullRangePool.prototype.quoteFullRange.call(this, amount, isToken1, state, sqrtRatioLimit);
13
+ fullRangeQuote.gasConsumed = BASE_GAS_COST_OF_ONE_ORACLE_SWAP;
14
+ return fullRangeQuote;
15
+ }
16
+ }
17
+ exports.OraclePool = OraclePool;
18
+ //# sourceMappingURL=oracle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracle.js","sourceRoot":"","sources":["../../../../src/dex/ekubo-v3/pools/oracle.ts"],"names":[],"mappings":";;;AACA,6CAAiE;AAIjE,OAAO;AACP,MAAM,gCAAgC,GAAG,MAAM,CAAC;AAEhD,MAAa,UAAW,SAAQ,0BAAa;IACxB,MAAM,CACvB,MAAc,EACd,QAAiB,EACjB,KAA8C,EAC9C,cAAuB;QAEvB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IACnE,CAAC;IAEM,WAAW,CAEhB,MAAc,EACd,QAAiB,EACjB,KAA8C,EAC9C,cAAuB;QAEvB,MAAM,cAAc,GAAG,0BAAa,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAChE,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,KAAK,EACL,cAAc,CACf,CAAC;QAEF,cAAc,CAAC,WAAW,GAAG,gCAAgC,CAAC;QAE9D,OAAO,cAAc,CAAC;IACxB,CAAC;CACF;AA7BD,gCA6BC"}
@@ -0,0 +1,56 @@
1
+ import { Interface, Result } from '@ethersproject/abi';
2
+ import { Logger } from 'log4js';
3
+ import { DeepReadonly } from 'ts-essentials';
4
+ import { IDexHelper } from '../../../dex-helper/idex-helper';
5
+ import { StatefulEventSubscriber } from '../../../stateful-event-subscriber';
6
+ import { BlockHeader, Log } from '../../../types';
7
+ import { PoolKey, PoolTypeConfig } from './utils';
8
+ import { EventSubscriber } from '../../../dex-helper';
9
+ export type Quote<StateAfter = undefined> = {
10
+ consumedAmount: bigint;
11
+ calculatedAmount: bigint;
12
+ gasConsumed: number;
13
+ skipAhead: number;
14
+ } & (StateAfter extends undefined ? {} : {
15
+ stateAfter: StateAfter;
16
+ });
17
+ export interface PoolKeyed<C extends PoolTypeConfig> {
18
+ key: PoolKey<C>;
19
+ }
20
+ export interface IEkuboPool<C extends PoolTypeConfig> extends PoolKeyed<C>, EventSubscriber {
21
+ initializationBlockNumber(): number;
22
+ quote(amount: bigint, token: bigint, blockNumber: number): Quote;
23
+ updateState(blockNumber: number): Promise<void>;
24
+ computeTvl(): [bigint, bigint];
25
+ }
26
+ export type NamedEventHandler<State> = (args: Result, oldState: DeepReadonly<State>, blockHeader: Readonly<BlockHeader>) => DeepReadonly<State> | null;
27
+ export type AnonymousEventHandler<State> = (data: string, oldState: DeepReadonly<State>, blockHeader: Readonly<BlockHeader>) => DeepReadonly<State> | null;
28
+ export declare class NamedEventHandlers<State> {
29
+ private readonly iface;
30
+ private readonly handlers;
31
+ constructor(iface: Interface, handlers: Record<string, NamedEventHandler<State>>);
32
+ parseLog(log: Readonly<Log>, oldState: DeepReadonly<State>, blockHeader: Readonly<BlockHeader>): DeepReadonly<State> | null;
33
+ }
34
+ export declare abstract class EkuboPool<C extends PoolTypeConfig, S> extends StatefulEventSubscriber<S> implements IEkuboPool<C> {
35
+ private readonly initBlockNumber;
36
+ readonly key: PoolKey<C>;
37
+ private readonly namedEventHandlers;
38
+ private readonly anonymousEventHandlers;
39
+ protected constructor(parentName: string, dexHelper: IDexHelper, logger: Logger, initBlockNumber: number, key: PoolKey<C>, namedEventHandlers: Record<string, NamedEventHandlers<S>>, anonymousEventHandlers: Record<string, AnonymousEventHandler<S>>);
40
+ initializationBlockNumber(): number;
41
+ updateState(blockNumber: number): Promise<void>;
42
+ quote(amount: bigint, token: bigint, blockNumber: number): Quote;
43
+ computeTvl(): [bigint, bigint];
44
+ /**
45
+ * The function is called every time any of the subscribed
46
+ * addresses release log. The function accepts the current
47
+ * state, updates the state according to the log, and returns
48
+ * the updated state.
49
+ * @param state - Current state of event subscriber
50
+ * @param log - Log released by one of the subscribed addresses
51
+ * @returns Updates state of the event subscriber after the log
52
+ */
53
+ protected processLog(state: DeepReadonly<S>, log: Readonly<Log>, blockHeader: Readonly<BlockHeader>): DeepReadonly<S> | null;
54
+ protected abstract _quote(amount: bigint, isToken1: boolean, state: DeepReadonly<S>, sqrtRatioLimit?: bigint): Quote;
55
+ protected abstract _computeTvl(state: DeepReadonly<S>): [bigint, bigint];
56
+ }
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EkuboPool = exports.NamedEventHandlers = void 0;
4
+ const stateful_event_subscriber_1 = require("../../../stateful-event-subscriber");
5
+ class NamedEventHandlers {
6
+ iface;
7
+ handlers;
8
+ constructor(iface, handlers) {
9
+ this.iface = iface;
10
+ this.handlers = handlers;
11
+ }
12
+ parseLog(log, oldState, blockHeader) {
13
+ const event = this.iface.parseLog(log);
14
+ return (this.handlers[event.name]?.(event.args, oldState, blockHeader) ?? null);
15
+ }
16
+ }
17
+ exports.NamedEventHandlers = NamedEventHandlers;
18
+ class EkuboPool extends stateful_event_subscriber_1.StatefulEventSubscriber {
19
+ initBlockNumber;
20
+ key;
21
+ namedEventHandlers;
22
+ anonymousEventHandlers;
23
+ constructor(parentName, dexHelper, logger, initBlockNumber, key, namedEventHandlers, anonymousEventHandlers) {
24
+ super(parentName, key.stringId, dexHelper, logger);
25
+ this.initBlockNumber = initBlockNumber;
26
+ this.key = key;
27
+ this.namedEventHandlers = namedEventHandlers;
28
+ this.anonymousEventHandlers = anonymousEventHandlers;
29
+ this.addressesSubscribed = [
30
+ ...new Set(Object.keys(namedEventHandlers).concat(Object.keys(anonymousEventHandlers))),
31
+ ];
32
+ }
33
+ initializationBlockNumber() {
34
+ return this.initBlockNumber;
35
+ }
36
+ async updateState(blockNumber) {
37
+ this.setState(await this.generateState(blockNumber), blockNumber);
38
+ }
39
+ quote(amount, token, blockNumber) {
40
+ const isToken1 = token === this.key.token1;
41
+ if (!isToken1 && this.key.token0 !== token) {
42
+ throw new Error('Invalid token');
43
+ }
44
+ if (amount === 0n) {
45
+ return {
46
+ consumedAmount: 0n,
47
+ calculatedAmount: 0n,
48
+ gasConsumed: 0,
49
+ skipAhead: 0,
50
+ };
51
+ }
52
+ const state = this.getState(blockNumber);
53
+ if (state === null) {
54
+ throw new Error(`Quote for block number ${blockNumber} requested but state is not recent enough`);
55
+ }
56
+ const quote = this._quote(amount, isToken1, state);
57
+ if (quote.calculatedAmount === 0n) {
58
+ quote.gasConsumed = 0;
59
+ }
60
+ return quote;
61
+ }
62
+ computeTvl() {
63
+ const state = this.getStaleState();
64
+ if (state === null) {
65
+ throw new Error('pool has no state');
66
+ }
67
+ return this._computeTvl(state);
68
+ }
69
+ /**
70
+ * The function is called every time any of the subscribed
71
+ * addresses release log. The function accepts the current
72
+ * state, updates the state according to the log, and returns
73
+ * the updated state.
74
+ * @param state - Current state of event subscriber
75
+ * @param log - Log released by one of the subscribed addresses
76
+ * @returns Updates state of the event subscriber after the log
77
+ */
78
+ processLog(state, log, blockHeader) {
79
+ const emitter = log.address;
80
+ if (log.topics.length === 0) {
81
+ return this.anonymousEventHandlers[emitter]?.(log.data, state, blockHeader);
82
+ }
83
+ return (this.namedEventHandlers[emitter]?.parseLog(log, state, blockHeader) ??
84
+ null);
85
+ }
86
+ }
87
+ exports.EkuboPool = EkuboPool;
88
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../../src/dex/ekubo-v3/pools/pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { DeepReadonly } from 'ts-essentials';
2
+ import { IDexHelper } from '../../../dex-helper/idex-helper';
3
+ import { Logger } from '../../../types';
4
+ import { EkuboContracts } from '../types';
5
+ import { EkuboPool, PoolKeyed, Quote } from './pool';
6
+ import { PoolKey, StableswapPoolTypeConfig } from './utils';
7
+ import { FullRangePoolState } from './full-range';
8
+ export declare class StableswapPool extends EkuboPool<StableswapPoolTypeConfig, FullRangePoolState.Object> {
9
+ readonly lowerPrice: bigint;
10
+ readonly upperPrice: bigint;
11
+ private readonly quoteDataFetcher;
12
+ constructor(parentName: string, dexHelper: IDexHelper, logger: Logger, contracts: EkuboContracts, initBlockNumber: number, key: PoolKey<StableswapPoolTypeConfig>);
13
+ generateState(blockNumber?: number | 'latest'): Promise<DeepReadonly<FullRangePoolState.Object>>;
14
+ protected _quote(amount: bigint, isToken1: boolean, state: DeepReadonly<FullRangePoolState.Object>, sqrtRatioLimit?: bigint): Quote;
15
+ quoteStableswap(this: PoolKeyed<StableswapPoolTypeConfig> & StableswapBounds, amount: bigint, isToken1: boolean, state: DeepReadonly<FullRangePoolState.Object>, sqrtRatioLimit?: bigint): Quote<FullRangePoolState.Object>;
16
+ protected _computeTvl(state: FullRangePoolState.Object): [bigint, bigint];
17
+ }
18
+ export interface StableswapBounds {
19
+ lowerPrice: bigint;
20
+ upperPrice: bigint;
21
+ }
22
+ export declare function computeStableswapBounds(config: StableswapPoolTypeConfig): StableswapBounds;
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StableswapPool = void 0;
4
+ exports.computeStableswapBounds = computeStableswapBounds;
5
+ const pool_1 = require("./pool");
6
+ const swap_1 = require("./math/swap");
7
+ const tick_1 = require("./math/tick");
8
+ const utils_1 = require("./utils");
9
+ const delta_1 = require("./math/delta");
10
+ const base_1 = require("./base");
11
+ const full_range_1 = require("./full-range");
12
+ const GAS_COST_OF_ONE_STABLESWAP_SWAP = 16_818;
13
+ class StableswapPool extends pool_1.EkuboPool {
14
+ lowerPrice;
15
+ upperPrice;
16
+ quoteDataFetcher;
17
+ constructor(parentName, dexHelper, logger, contracts, initBlockNumber, key) {
18
+ const { contract: { address }, interface: iface, quoteDataFetcher, } = contracts.core;
19
+ super(parentName, dexHelper, logger, initBlockNumber, key, {
20
+ [address]: new pool_1.NamedEventHandlers(iface, {
21
+ PositionUpdated: (args, oldState) => full_range_1.FullRangePoolState.fromPositionUpdatedEvent(oldState, args.liquidityDelta.toBigInt()),
22
+ }),
23
+ }, {
24
+ [address]: data => full_range_1.FullRangePoolState.fromSwappedEvent((0, utils_1.parseSwappedEvent)(data)),
25
+ });
26
+ this.quoteDataFetcher = quoteDataFetcher;
27
+ const bounds = computeStableswapBounds(key.config.poolTypeConfig);
28
+ this.lowerPrice = bounds.lowerPrice;
29
+ this.upperPrice = bounds.upperPrice;
30
+ }
31
+ async generateState(blockNumber) {
32
+ const data = await this.quoteDataFetcher.getQuoteData([this.key.toAbi()], 0, {
33
+ blockTag: blockNumber,
34
+ });
35
+ return full_range_1.FullRangePoolState.fromQuoter(data[0]);
36
+ }
37
+ _quote(amount, isToken1, state, sqrtRatioLimit) {
38
+ return this.quoteStableswap(amount, isToken1, state, sqrtRatioLimit);
39
+ }
40
+ quoteStableswap(amount, isToken1, state, sqrtRatioLimit) {
41
+ const isIncreasing = (0, swap_1.isPriceIncreasing)(amount, isToken1);
42
+ let { sqrtRatio, liquidity } = state;
43
+ sqrtRatioLimit ??= isIncreasing ? tick_1.MAX_SQRT_RATIO : tick_1.MIN_SQRT_RATIO;
44
+ let calculatedAmount = 0n;
45
+ let initializedTicksCrossed = 0;
46
+ let amountRemaining = amount;
47
+ while (amountRemaining !== 0n && sqrtRatio !== sqrtRatioLimit) {
48
+ let stepLiquidity = liquidity;
49
+ const inRange = sqrtRatio < this.upperPrice && sqrtRatio > this.lowerPrice;
50
+ let nextTickSqrtRatio = null;
51
+ if (inRange) {
52
+ nextTickSqrtRatio = isIncreasing ? this.upperPrice : this.lowerPrice;
53
+ }
54
+ else {
55
+ stepLiquidity = 0n;
56
+ if (sqrtRatio <= this.lowerPrice) {
57
+ if (isIncreasing) {
58
+ nextTickSqrtRatio = this.lowerPrice;
59
+ }
60
+ }
61
+ else {
62
+ if (!isIncreasing) {
63
+ nextTickSqrtRatio = this.upperPrice;
64
+ }
65
+ }
66
+ }
67
+ const stepSqrtRatioLimit = nextTickSqrtRatio === null ||
68
+ nextTickSqrtRatio < sqrtRatioLimit !== isIncreasing
69
+ ? sqrtRatioLimit
70
+ : nextTickSqrtRatio;
71
+ const step = (0, swap_1.computeStep)({
72
+ fee: this.key.config.fee,
73
+ sqrtRatio,
74
+ liquidity: stepLiquidity,
75
+ isToken1,
76
+ sqrtRatioLimit: stepSqrtRatioLimit,
77
+ amount: amountRemaining,
78
+ });
79
+ amountRemaining -= step.consumedAmount;
80
+ calculatedAmount += step.calculatedAmount;
81
+ sqrtRatio = step.sqrtRatioNext;
82
+ if (sqrtRatio === nextTickSqrtRatio) {
83
+ initializedTicksCrossed++;
84
+ }
85
+ }
86
+ return {
87
+ consumedAmount: amount - amountRemaining,
88
+ calculatedAmount,
89
+ gasConsumed: GAS_COST_OF_ONE_STABLESWAP_SWAP +
90
+ (0, base_1.initializedTicksCrossedGasCosts)(initializedTicksCrossed),
91
+ skipAhead: 0,
92
+ stateAfter: {
93
+ sqrtRatio,
94
+ liquidity,
95
+ },
96
+ };
97
+ }
98
+ _computeTvl(state) {
99
+ const { sqrtRatio, liquidity } = state;
100
+ let [amount0, amount1] = [0n, 0n];
101
+ if (sqrtRatio < this.upperPrice) {
102
+ amount0 = (0, delta_1.amount0Delta)(sqrtRatio, this.upperPrice, liquidity, false);
103
+ }
104
+ if (sqrtRatio > this.lowerPrice) {
105
+ amount1 = (0, delta_1.amount1Delta)(this.lowerPrice, sqrtRatio, liquidity, false);
106
+ }
107
+ return [amount0, amount1];
108
+ }
109
+ }
110
+ exports.StableswapPool = StableswapPool;
111
+ function computeStableswapBounds(config) {
112
+ const { centerTick, amplificationFactor } = config;
113
+ const liquidityWidth = tick_1.MAX_TICK >> amplificationFactor;
114
+ const [lowerTick, upperTick] = [
115
+ centerTick - liquidityWidth,
116
+ centerTick + liquidityWidth,
117
+ ];
118
+ return {
119
+ lowerPrice: lowerTick > tick_1.MIN_TICK ? (0, tick_1.toSqrtRatio)(lowerTick) : tick_1.MIN_SQRT_RATIO,
120
+ upperPrice: upperTick < tick_1.MAX_TICK ? (0, tick_1.toSqrtRatio)(upperTick) : tick_1.MAX_SQRT_RATIO,
121
+ };
122
+ }
123
+ //# sourceMappingURL=stableswap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stableswap.js","sourceRoot":"","sources":["../../../../src/dex/ekubo-v3/pools/stableswap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { Logger } from 'log4js';
2
+ import { DeepReadonly } from 'ts-essentials';
3
+ import { IDexHelper } from '../../../dex-helper/idex-helper';
4
+ import { EkuboContracts, PoolInitializationState, TwammQuoteData } from '../types';
5
+ import { FullRangePoolState } from './full-range';
6
+ import { EkuboPool, Quote } from './pool';
7
+ import { PoolKey, StableswapPoolTypeConfig, SwappedEvent } from './utils';
8
+ export declare class TwammPool extends EkuboPool<StableswapPoolTypeConfig, TwammPoolState.Object> {
9
+ private readonly twammDataFetcher;
10
+ constructor(parentName: string, dexHelper: IDexHelper, logger: Logger, contracts: EkuboContracts, initBlockNumber: number, key: PoolKey<StableswapPoolTypeConfig>);
11
+ generateState(blockNumber?: number | 'latest'): Promise<DeepReadonly<TwammPoolState.Object>>;
12
+ protected _quote(amount: bigint, isToken1: boolean, state: DeepReadonly<TwammPoolState.Object>): Quote;
13
+ quoteTwamm(amount: bigint, isToken1: boolean, state: DeepReadonly<TwammPoolState.Object>, overrideTime?: bigint): Quote;
14
+ protected _computeTvl(state: TwammPoolState.Object): [bigint, bigint];
15
+ }
16
+ interface VirtualOrdersExecutedEvent {
17
+ token0SaleRate: bigint;
18
+ token1SaleRate: bigint;
19
+ }
20
+ export declare namespace TwammPoolState {
21
+ interface SaleRateDelta {
22
+ time: bigint;
23
+ saleRateDelta0: bigint;
24
+ saleRateDelta1: bigint;
25
+ }
26
+ interface Object {
27
+ fullRangePoolState: FullRangePoolState.Object;
28
+ token0SaleRate: bigint;
29
+ token1SaleRate: bigint;
30
+ lastExecutionTime: bigint;
31
+ virtualOrderDeltas: SaleRateDelta[];
32
+ }
33
+ function fromPoolInitialization(state: PoolInitializationState): DeepReadonly<Object>;
34
+ function fromQuoter(data: TwammQuoteData): DeepReadonly<Object>;
35
+ function fromSwappedEvent(oldState: DeepReadonly<Object>, ev: SwappedEvent): Object;
36
+ function fromPositionUpdatedEvent(oldState: DeepReadonly<Object>, liquidityDelta: bigint): Object | null;
37
+ function fromVirtualOrdersExecutedEvent(oldState: DeepReadonly<Object>, ev: VirtualOrdersExecutedEvent, timestamp: bigint): Object;
38
+ function fromOrderUpdatedEvent(oldState: DeepReadonly<Object>, [startTime, endTime]: [bigint, bigint], orderSaleRateDelta: bigint, isToken1: boolean): Object | null;
39
+ }
40
+ export {};
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TwammPoolState = exports.TwammPool = void 0;
4
+ const full_range_1 = require("./full-range");
5
+ const pool_1 = require("./pool");
6
+ const constants_1 = require("./math/constants");
7
+ const sqrt_ratio_1 = require("./math/sqrt-ratio");
8
+ const tick_1 = require("./math/tick");
9
+ const sqrt_ratio_2 = require("./math/twamm/sqrt-ratio");
10
+ const utils_1 = require("./utils");
11
+ const base_1 = require("./base");
12
+ const utils_2 = require("ethers/lib/utils");
13
+ const utils_3 = require("../utils");
14
+ const SLOT_DURATION_SECS = 12n;
15
+ const BASE_GAS_COST_OF_ONE_TWAMM_SWAP = 30_716;
16
+ // TODO
17
+ const BASE_GAS_COST_OF_ONE_TWAMM_FULL_RANGE_SWAP = 19_000;
18
+ const GAS_COST_OF_ONE_VIRTUAL_ORDER_DELTA = 7_500;
19
+ const LOG_BASE_256 = Math.log(256);
20
+ class TwammPool extends pool_1.EkuboPool {
21
+ twammDataFetcher;
22
+ constructor(parentName, dexHelper, logger, contracts, initBlockNumber, key) {
23
+ const { contract: { address: coreAddress }, interface: coreIface, } = contracts.core;
24
+ const { contract: { address: twammAddress }, interface: twammIface, quoteDataFetcher: twammDataFetcher, } = contracts.twamm;
25
+ super(parentName, dexHelper, logger, initBlockNumber, key, {
26
+ [coreAddress]: new pool_1.NamedEventHandlers(coreIface, {
27
+ PositionUpdated: (args, oldState) => TwammPoolState.fromPositionUpdatedEvent(oldState, args.liquidityDelta.toBigInt()),
28
+ }),
29
+ [twammAddress]: new pool_1.NamedEventHandlers(twammIface, {
30
+ OrderUpdated: (args, oldState) => {
31
+ const orderKey = args.orderKey;
32
+ if (key.token0 !== BigInt(orderKey.token0) ||
33
+ key.token1 !== BigInt(orderKey.token1) ||
34
+ key.config.fee !== BigInt((0, utils_2.hexDataSlice)(orderKey.config, 0, 8))) {
35
+ return null;
36
+ }
37
+ const isToken1 = Boolean(Number((0, utils_2.hexDataSlice)(orderKey.config, 8, 9)));
38
+ return TwammPoolState.fromOrderUpdatedEvent(oldState, [
39
+ BigInt((0, utils_2.hexDataSlice)(orderKey.config, 16, 24)),
40
+ BigInt((0, utils_2.hexDataSlice)(orderKey.config, 24, 32)),
41
+ ], args.saleRateDelta.toBigInt(), isToken1);
42
+ },
43
+ }),
44
+ }, {
45
+ [coreAddress]: (data, oldState) => TwammPoolState.fromSwappedEvent(oldState, (0, utils_1.parseSwappedEvent)(data)),
46
+ [twammAddress]: (data, oldState, blockHeader) => TwammPoolState.fromVirtualOrdersExecutedEvent(oldState, parseVirtualOrdersExecutedEvent(data), BigInt(blockHeader.timestamp)),
47
+ });
48
+ this.twammDataFetcher = twammDataFetcher;
49
+ }
50
+ async generateState(blockNumber) {
51
+ const quoteData = await this.twammDataFetcher.getPoolState(this.key.toAbi(), {
52
+ blockTag: blockNumber,
53
+ });
54
+ return TwammPoolState.fromQuoter(quoteData);
55
+ }
56
+ _quote(amount, isToken1, state) {
57
+ return this.quoteTwamm(amount, isToken1, state);
58
+ }
59
+ quoteTwamm(amount, isToken1, state, overrideTime) {
60
+ const currentTime = overrideTime ??
61
+ (0, utils_3.bigintMax)(state.lastExecutionTime + SLOT_DURATION_SECS, BigInt(Math.floor(Date.now() / 1000)));
62
+ const fee = this.key.config.fee;
63
+ const quoteFullRangePool = full_range_1.FullRangePool.prototype.quoteFullRange.bind(this);
64
+ const liquidity = state.fullRangePoolState.liquidity;
65
+ let nextSqrtRatio = state.fullRangePoolState.sqrtRatio;
66
+ let token0SaleRate = state.token0SaleRate;
67
+ let token1SaleRate = state.token1SaleRate;
68
+ let lastExecutionTime = state.lastExecutionTime;
69
+ let virtualOrderDeltaTimesCrossed = 0;
70
+ let swapCount = 0;
71
+ let nextSaleRateDeltaIndex = state.virtualOrderDeltas.findIndex(srd => srd.time > lastExecutionTime);
72
+ let fullRangePoolState = state.fullRangePoolState;
73
+ while (lastExecutionTime != currentTime) {
74
+ const saleRateDelta = state.virtualOrderDeltas[nextSaleRateDeltaIndex];
75
+ const nextExecutionTime = saleRateDelta
76
+ ? (0, utils_3.bigintMin)(saleRateDelta.time, currentTime)
77
+ : currentTime;
78
+ const timeElapsed = nextExecutionTime - lastExecutionTime;
79
+ if (timeElapsed > constants_1.MAX_U32) {
80
+ throw new Error('Too much time passed since last execution');
81
+ }
82
+ const [amount0, amount1] = [
83
+ (token0SaleRate * BigInt(timeElapsed)) >> 32n,
84
+ (token1SaleRate * BigInt(timeElapsed)) >> 32n,
85
+ ];
86
+ if (amount0 > 0n && amount1 > 0n) {
87
+ let currentSqrtRatio = nextSqrtRatio;
88
+ if (currentSqrtRatio > tick_1.MAX_SQRT_RATIO) {
89
+ currentSqrtRatio = tick_1.MAX_SQRT_RATIO;
90
+ }
91
+ else if (currentSqrtRatio < tick_1.MIN_SQRT_RATIO) {
92
+ currentSqrtRatio = tick_1.MIN_SQRT_RATIO;
93
+ }
94
+ nextSqrtRatio = (0, sqrt_ratio_2.calculateNextSqrtRatio)(currentSqrtRatio, liquidity, token0SaleRate, token1SaleRate, timeElapsed, fee);
95
+ const [amount, isToken1] = currentSqrtRatio < nextSqrtRatio ? [amount1, true] : [amount0, false];
96
+ const quote = quoteFullRangePool(amount, isToken1, fullRangePoolState, nextSqrtRatio);
97
+ swapCount++;
98
+ fullRangePoolState = quote.stateAfter;
99
+ }
100
+ else if (amount0 > 0n || amount1 > 0n) {
101
+ const [amount, isToken1] = amount0 !== 0n ? [amount0, false] : [amount1, true];
102
+ const quote = quoteFullRangePool(amount, isToken1, fullRangePoolState);
103
+ swapCount++;
104
+ fullRangePoolState = quote.stateAfter;
105
+ nextSqrtRatio = quote.stateAfter.sqrtRatio;
106
+ }
107
+ if (saleRateDelta) {
108
+ if (saleRateDelta.time === nextExecutionTime) {
109
+ token0SaleRate += saleRateDelta.saleRateDelta0;
110
+ token1SaleRate += saleRateDelta.saleRateDelta1;
111
+ nextSaleRateDeltaIndex++;
112
+ virtualOrderDeltaTimesCrossed++;
113
+ }
114
+ }
115
+ lastExecutionTime = nextExecutionTime;
116
+ }
117
+ const finalQuote = quoteFullRangePool(amount, isToken1, fullRangePoolState);
118
+ return {
119
+ calculatedAmount: finalQuote.calculatedAmount,
120
+ consumedAmount: finalQuote.consumedAmount,
121
+ gasConsumed: BASE_GAS_COST_OF_ONE_TWAMM_SWAP +
122
+ swapCount * BASE_GAS_COST_OF_ONE_TWAMM_FULL_RANGE_SWAP +
123
+ virtualOrderDeltaTimesCrossed * GAS_COST_OF_ONE_VIRTUAL_ORDER_DELTA +
124
+ (Math.log(Number(currentTime - state.lastExecutionTime)) /
125
+ LOG_BASE_256) *
126
+ base_1.GAS_COST_OF_ONE_EXTRA_BITMAP_SLOAD,
127
+ skipAhead: finalQuote.skipAhead,
128
+ };
129
+ }
130
+ _computeTvl(state) {
131
+ return full_range_1.FullRangePoolState.computeTvl(state.fullRangePoolState);
132
+ }
133
+ }
134
+ exports.TwammPool = TwammPool;
135
+ function parseVirtualOrdersExecutedEvent(data) {
136
+ let n = BigInt(data);
137
+ const token1SaleRate = BigInt.asUintN(112, n);
138
+ n >>= 112n;
139
+ const token0SaleRate = BigInt.asUintN(112, n);
140
+ return {
141
+ token0SaleRate,
142
+ token1SaleRate,
143
+ };
144
+ }
145
+ var TwammPoolState;
146
+ (function (TwammPoolState) {
147
+ function fromPoolInitialization(state) {
148
+ return {
149
+ fullRangePoolState: full_range_1.FullRangePoolState.fromPoolInitialization(state),
150
+ token0SaleRate: 0n,
151
+ token1SaleRate: 0n,
152
+ lastExecutionTime: BigInt(state.blockHeader.timestamp),
153
+ virtualOrderDeltas: [],
154
+ };
155
+ }
156
+ TwammPoolState.fromPoolInitialization = fromPoolInitialization;
157
+ function fromQuoter(data) {
158
+ const liquidity = data.liquidity.toBigInt();
159
+ const sqrtRatioFloat = data.sqrtRatio.toBigInt();
160
+ return {
161
+ fullRangePoolState: {
162
+ sqrtRatio: (0, sqrt_ratio_1.floatSqrtRatioToFixed)(sqrtRatioFloat),
163
+ liquidity,
164
+ },
165
+ token0SaleRate: data.saleRateToken0.toBigInt(),
166
+ token1SaleRate: data.saleRateToken1.toBigInt(),
167
+ lastExecutionTime: data.lastVirtualOrderExecutionTime.toBigInt(),
168
+ virtualOrderDeltas: data.saleRateDeltas.map(srd => ({
169
+ time: srd.time.toBigInt(),
170
+ saleRateDelta0: srd.saleRateDelta0.toBigInt(),
171
+ saleRateDelta1: srd.saleRateDelta1.toBigInt(),
172
+ })),
173
+ };
174
+ }
175
+ TwammPoolState.fromQuoter = fromQuoter;
176
+ function fromSwappedEvent(oldState, ev) {
177
+ const clonedState = structuredClone(oldState);
178
+ clonedState.fullRangePoolState.liquidity = ev.liquidityAfter;
179
+ clonedState.fullRangePoolState.sqrtRatio = ev.sqrtRatioAfter;
180
+ return clonedState;
181
+ }
182
+ TwammPoolState.fromSwappedEvent = fromSwappedEvent;
183
+ function fromPositionUpdatedEvent(oldState, liquidityDelta) {
184
+ if (liquidityDelta === 0n) {
185
+ return null;
186
+ }
187
+ const clonedState = structuredClone(oldState);
188
+ clonedState.fullRangePoolState.liquidity += liquidityDelta;
189
+ return clonedState;
190
+ }
191
+ TwammPoolState.fromPositionUpdatedEvent = fromPositionUpdatedEvent;
192
+ function fromVirtualOrdersExecutedEvent(oldState, ev, timestamp) {
193
+ const clonedState = structuredClone(oldState);
194
+ clonedState.lastExecutionTime = timestamp;
195
+ clonedState.token0SaleRate = ev.token0SaleRate;
196
+ clonedState.token1SaleRate = ev.token1SaleRate;
197
+ const virtualOrderDeltas = clonedState.virtualOrderDeltas;
198
+ for (let virtualOrder = virtualOrderDeltas[0]; typeof virtualOrder !== 'undefined'; virtualOrder = virtualOrderDeltas[0]) {
199
+ if (virtualOrder.time > timestamp) {
200
+ break;
201
+ }
202
+ virtualOrderDeltas.shift();
203
+ }
204
+ return clonedState;
205
+ }
206
+ TwammPoolState.fromVirtualOrdersExecutedEvent = fromVirtualOrdersExecutedEvent;
207
+ function fromOrderUpdatedEvent(oldState, [startTime, endTime], orderSaleRateDelta, isToken1) {
208
+ if (orderSaleRateDelta === 0n) {
209
+ return null;
210
+ }
211
+ const clonedState = structuredClone(oldState);
212
+ const virtualOrderDeltas = clonedState.virtualOrderDeltas;
213
+ let startIndex = 0;
214
+ for (const [time, saleRateDelta] of [
215
+ [startTime, orderSaleRateDelta],
216
+ [endTime, -orderSaleRateDelta],
217
+ ]) {
218
+ if (time > clonedState.lastExecutionTime) {
219
+ let idx = findOrderIndex(virtualOrderDeltas, time, startIndex);
220
+ if (idx < 0) {
221
+ idx = ~idx;
222
+ virtualOrderDeltas.splice(idx, 0, {
223
+ time,
224
+ saleRateDelta0: 0n,
225
+ saleRateDelta1: 0n,
226
+ });
227
+ }
228
+ const virtualOrderDelta = virtualOrderDeltas[idx];
229
+ virtualOrderDelta[`saleRateDelta${isToken1 ? '1' : '0'}`] +=
230
+ saleRateDelta;
231
+ if (virtualOrderDelta.saleRateDelta0 === 0n &&
232
+ virtualOrderDelta.saleRateDelta1 === 0n) {
233
+ virtualOrderDeltas.splice(idx, 1);
234
+ startIndex = idx;
235
+ }
236
+ else {
237
+ startIndex = idx + 1;
238
+ }
239
+ }
240
+ else {
241
+ clonedState[`token${isToken1 ? '1' : '0'}SaleRate`] += saleRateDelta;
242
+ }
243
+ }
244
+ return clonedState;
245
+ }
246
+ TwammPoolState.fromOrderUpdatedEvent = fromOrderUpdatedEvent;
247
+ function findOrderIndex(virtualOrderDeltas, searchTime, startIndex = 0) {
248
+ let l = startIndex, r = virtualOrderDeltas.length - 1;
249
+ while (l <= r) {
250
+ const mid = Math.floor((l + r) / 2);
251
+ const midOrderTime = virtualOrderDeltas[mid].time;
252
+ if (midOrderTime === searchTime) {
253
+ return mid;
254
+ }
255
+ else if (midOrderTime < searchTime) {
256
+ l = mid + 1;
257
+ }
258
+ else {
259
+ r = mid - 1;
260
+ }
261
+ }
262
+ return ~l; // Bitwise NOT of the insertion point
263
+ }
264
+ })(TwammPoolState || (exports.TwammPoolState = TwammPoolState = {}));
265
+ //# sourceMappingURL=twamm.js.map