@paraswap/dex-lib 4.8.13 → 4.8.14

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 (270) hide show
  1. package/build/abi/PendleRouterStatic.json +19 -0
  2. package/build/abi/{MStableAsset.json → apex-defi/ApexDefiFactory.abi.json} +992 -788
  3. package/build/abi/{BProtocol.json → apex-defi/ApexDefiRouter.abi.json} +539 -574
  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/{OneInchLp.json → apex-defi/ApexDefiWrapperFactory.abi.json} +577 -774
  7. package/build/abi/clear/ClearFactory.json +71 -0
  8. package/build/abi/clear/ClearSwap.json +334 -0
  9. package/build/abi/clear/ClearVault.json +20 -0
  10. package/build/abi/ekubo-v3/boosted-fees-data-fetcher.json +108 -0
  11. package/build/abi/ekubo-v3/boosted-fees.json +538 -0
  12. package/build/abi/pangolin-v3/PangolinV3StateMulticall.abi.json +796 -0
  13. package/build/abi/pendle/pendle-deployer.abi.json +520 -0
  14. package/build/abi/pendle/pendle-oracle.abi.json +413 -0
  15. package/build/abi/ring-v2/few-wrapped-token.json +587 -0
  16. package/build/abi/ring-v2/ring-v2-factory.json +125 -0
  17. package/build/abi/ring-v2/ring-v2-pool.json +461 -0
  18. package/build/abi/ring-v2/ring-v2-router.json +332 -0
  19. package/build/abi/stabull/stabull-curve.json +738 -0
  20. package/build/abi/stabull/stabull-router.json +76 -0
  21. package/build/abi/uniswap-v4/hooks/SpotDynamicFeeManager.json +26 -0
  22. package/build/abi/uniswap-v4/hooks/SpotHook.json +54 -0
  23. package/build/abi/uniswap-v4/hooks/SpotPolicyManager.json +45 -0
  24. package/build/abi/uniswap-v4/hooks/cabalcoin-hook.abi.json +682 -0
  25. package/build/abi/uniswap-v4/hooks/fee-hook.abi.json +1335 -0
  26. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying-factory.d.ts +29 -0
  27. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying-factory.js +153 -0
  28. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying-factory.js.map +1 -0
  29. package/build/dex/{usual-bond/usual-bond.d.ts → aave-pt-to-underlying/aave-pt-to-underlying.d.ts} +23 -18
  30. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying.js +323 -0
  31. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying.js.map +1 -0
  32. package/build/dex/aave-pt-to-underlying/config.d.ts +3 -0
  33. package/build/dex/aave-pt-to-underlying/config.js +24 -0
  34. package/build/dex/aave-pt-to-underlying/config.js.map +1 -0
  35. package/build/dex/aave-pt-to-underlying/constants.d.ts +2 -0
  36. package/build/dex/aave-pt-to-underlying/constants.js +6 -0
  37. package/build/dex/aave-pt-to-underlying/constants.js.map +1 -0
  38. package/build/dex/aave-pt-to-underlying/types.d.ts +24 -0
  39. package/build/dex/aave-pt-to-underlying/types.js.map +1 -0
  40. package/build/dex/aave-pt-to-usdc/aave-pt-to-usdc.d.ts +39 -0
  41. package/build/dex/aave-pt-to-usdc/aave-pt-to-usdc.js +244 -0
  42. package/build/dex/aave-pt-to-usdc/aave-pt-to-usdc.js.map +1 -0
  43. package/build/dex/aave-pt-to-usdc/config.d.ts +3 -0
  44. package/build/dex/aave-pt-to-usdc/config.js +47 -0
  45. package/build/dex/aave-pt-to-usdc/config.js.map +1 -0
  46. package/build/dex/aave-pt-to-usdc/constants.d.ts +2 -0
  47. package/build/dex/aave-pt-to-usdc/constants.js +6 -0
  48. package/build/dex/aave-pt-to-usdc/constants.js.map +1 -0
  49. package/build/dex/aave-pt-to-usdc/types.d.ts +22 -0
  50. package/build/dex/aave-pt-to-usdc/types.js.map +1 -0
  51. package/build/dex/apex-defi/apex-defi-factory.d.ts +26 -0
  52. package/build/dex/apex-defi/apex-defi-factory.js +53 -0
  53. package/build/dex/apex-defi/apex-defi-factory.js.map +1 -0
  54. package/build/dex/apex-defi/apex-defi-pool.d.ts +55 -0
  55. package/build/dex/apex-defi/apex-defi-pool.js +247 -0
  56. package/build/dex/apex-defi/apex-defi-pool.js.map +1 -0
  57. package/build/dex/apex-defi/apex-defi-wrapper-factory.d.ts +57 -0
  58. package/build/dex/apex-defi/apex-defi-wrapper-factory.js +250 -0
  59. package/build/dex/apex-defi/apex-defi-wrapper-factory.js.map +1 -0
  60. package/build/dex/apex-defi/apex-defi.d.ts +97 -0
  61. package/build/dex/apex-defi/apex-defi.js +1021 -0
  62. package/build/dex/apex-defi/apex-defi.js.map +1 -0
  63. package/build/dex/apex-defi/config.d.ts +4 -0
  64. package/build/dex/apex-defi/config.js +138 -0
  65. package/build/dex/apex-defi/config.js.map +1 -0
  66. package/build/dex/apex-defi/types.d.ts +32 -0
  67. package/build/dex/apex-defi/types.js +3 -0
  68. package/build/dex/{usual-bond → apex-defi}/types.js.map +1 -1
  69. package/build/dex/apex-defi/utils.d.ts +46 -0
  70. package/build/dex/apex-defi/utils.js +133 -0
  71. package/build/dex/apex-defi/utils.js.map +1 -0
  72. package/build/dex/balancer-v3/config.js +66 -0
  73. package/build/dex/balancer-v3/config.js.map +1 -1
  74. package/build/dex/balancer-v3/getPoolsApi.js +7 -7
  75. package/build/dex/balancer-v3/getPoolsApi.js.map +1 -1
  76. package/build/dex/balancer-v3/getTopPoolsApi.js +2 -4
  77. package/build/dex/balancer-v3/getTopPoolsApi.js.map +1 -1
  78. package/build/dex/balancer-v3/hooks/balancer-hook-event-subscriber.d.ts +1 -1
  79. package/build/dex/balancer-v3/hooks/balancer-hook-event-subscriber.js +44 -17
  80. package/build/dex/balancer-v3/hooks/balancer-hook-event-subscriber.js.map +1 -1
  81. package/build/dex/balancer-v3/hooks/loadHooksConfig.js +10 -1
  82. package/build/dex/balancer-v3/hooks/loadHooksConfig.js.map +1 -1
  83. package/build/dex/balancer-v3/utils.js +5 -3
  84. package/build/dex/balancer-v3/utils.js.map +1 -1
  85. package/build/dex/clear/clear-factory.d.ts +33 -0
  86. package/build/dex/clear/clear-factory.js +123 -0
  87. package/build/dex/clear/clear-factory.js.map +1 -0
  88. package/build/dex/clear/clear.d.ts +53 -0
  89. package/build/dex/clear/clear.js +311 -0
  90. package/build/dex/clear/clear.js.map +1 -0
  91. package/build/dex/{se-vlr → clear}/config.d.ts +1 -1
  92. package/build/dex/clear/config.js +14 -0
  93. package/build/dex/clear/config.js.map +1 -0
  94. package/build/dex/clear/types.d.ts +18 -0
  95. package/build/dex/clear/types.js +3 -0
  96. package/build/dex/{se-vlr → clear}/types.js.map +1 -1
  97. package/build/dex/ekubo-v3/extension-type.d.ts +9 -0
  98. package/build/dex/ekubo-v3/extension-type.js +36 -0
  99. package/build/dex/ekubo-v3/extension-type.js.map +1 -0
  100. package/build/dex/ekubo-v3/pools/boosted-fees.d.ts +39 -0
  101. package/build/dex/ekubo-v3/pools/boosted-fees.js +189 -0
  102. package/build/dex/ekubo-v3/pools/boosted-fees.js.map +1 -0
  103. package/build/dex/ekubo-v3/pools/concentrated.d.ts +47 -0
  104. package/build/dex/ekubo-v3/pools/concentrated.js +324 -0
  105. package/build/dex/ekubo-v3/pools/concentrated.js.map +1 -0
  106. package/build/dex/ekubo-v3/pools/timed.d.ts +25 -0
  107. package/build/dex/ekubo-v3/pools/timed.js +91 -0
  108. package/build/dex/ekubo-v3/pools/timed.js.map +1 -0
  109. package/build/dex/infusion/infusion-stable-pool.d.ts +1 -1
  110. package/build/dex/infusion/infusion-stable-pool.js +1 -1
  111. package/build/dex/infusion/infusion-stable-pool.js.map +1 -1
  112. package/build/dex/infusion/infusion.d.ts +3 -3
  113. package/build/dex/infusion/infusion.js +65 -104
  114. package/build/dex/infusion/infusion.js.map +1 -1
  115. package/build/dex/maker-psm/maker-psm-event-pool.d.ts +43 -0
  116. package/build/dex/maker-psm/maker-psm-event-pool.js +132 -0
  117. package/build/dex/maker-psm/maker-psm-event-pool.js.map +1 -0
  118. package/build/dex/miro-migrator/miro-migrator-state.d.ts +27 -0
  119. package/build/dex/miro-migrator/miro-migrator-state.js +89 -0
  120. package/build/dex/miro-migrator/miro-migrator-state.js.map +1 -0
  121. package/build/dex/solidly/forks-override/aerodrome.d.ts +1 -1
  122. package/build/dex/solidly/forks-override/aerodrome.js +18 -14
  123. package/build/dex/solidly/forks-override/aerodrome.js.map +1 -1
  124. package/build/dex/{usual-bond → stabull}/config.d.ts +1 -1
  125. package/build/dex/stabull/config.js +177 -0
  126. package/build/dex/stabull/config.js.map +1 -0
  127. package/build/dex/{se-vlr/se-vlr-pool.d.ts → stabull/stabull-pool.d.ts} +13 -6
  128. package/build/dex/stabull/stabull-pool.js +113 -0
  129. package/build/dex/stabull/stabull-pool.js.map +1 -0
  130. package/build/dex/stabull/stabull.d.ts +55 -0
  131. package/build/dex/stabull/stabull.js +286 -0
  132. package/build/dex/stabull/stabull.js.map +1 -0
  133. package/build/dex/stabull/types.d.ts +21 -0
  134. package/build/dex/stabull/types.js +3 -0
  135. package/build/dex/stabull/types.js.map +1 -0
  136. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.d.ts +4 -0
  137. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.js +56 -0
  138. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.js.map +1 -0
  139. package/build/dex/uniswap-v4/contract-math/Position.d.ts +6 -0
  140. package/build/dex/uniswap-v4/contract-math/Position.js +29 -0
  141. package/build/dex/uniswap-v4/contract-math/Position.js.map +1 -1
  142. package/build/dex/uniswap-v4/hooks/arena.d.ts +6 -0
  143. package/build/dex/uniswap-v4/hooks/arena.js +10 -0
  144. package/build/dex/uniswap-v4/hooks/arena.js.map +1 -0
  145. package/build/dex/uniswap-v4/hooks/base-fee/base-fee-hook.d.ts +0 -0
  146. package/build/dex/uniswap-v4/hooks/base-fee/base-fee-hook.js +2 -0
  147. package/build/dex/uniswap-v4/hooks/base-fee/base-fee-hook.js.map +1 -0
  148. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.d.ts +7 -0
  149. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.js +28 -0
  150. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.js.map +1 -0
  151. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.d.ts +0 -0
  152. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.js +2 -0
  153. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.js.map +1 -0
  154. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.d.ts +7 -0
  155. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.js +28 -0
  156. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.js.map +1 -0
  157. package/build/dex/uniswap-v4/hooks/fee-hook/types.d.ts +0 -0
  158. package/build/dex/uniswap-v4/hooks/fee-hook/types.js +2 -0
  159. package/build/dex/uniswap-v4/hooks/fee-hook/types.js.map +1 -0
  160. package/build/dex/uniswap-v4/hooks/index.d.ts +1 -0
  161. package/build/dex/uniswap-v4/hooks/index.js +18 -0
  162. package/build/dex/uniswap-v4/hooks/index.js.map +1 -0
  163. package/build/dex/uniswap-v4/hooks/spot.d.ts +15 -0
  164. package/build/dex/uniswap-v4/hooks/spot.js +109 -0
  165. package/build/dex/uniswap-v4/hooks/spot.js.map +1 -0
  166. package/build/dex/uniswap-v4/hooks/template.d.ts +150 -0
  167. package/build/dex/uniswap-v4/hooks/template.js +104 -0
  168. package/build/dex/uniswap-v4/hooks/template.js.map +1 -0
  169. package/build/dex/usdc-transmuter/usdc-transmuter-pool.d.ts +26 -0
  170. package/build/dex/usdc-transmuter/usdc-transmuter-pool.js +75 -0
  171. package/build/dex/usdc-transmuter/usdc-transmuter-pool.js.map +1 -0
  172. package/build/dex/usual/usual-usdc-usdc.d.ts +17 -0
  173. package/build/dex/usual/usual-usdc-usdc.js +59 -0
  174. package/build/dex/usual/usual-usdc-usdc.js.map +1 -0
  175. package/build/dex/yo/config.d.ts +3 -0
  176. package/build/dex/yo/config.js +21 -0
  177. package/build/dex/yo/config.js.map +1 -0
  178. package/build/dex/yo/types.d.ts +13 -0
  179. package/build/dex/yo/types.js +3 -0
  180. package/build/dex/yo/types.js.map +1 -0
  181. package/build/dex/yo/yo-pool.d.ts +13 -0
  182. package/build/dex/yo/yo-pool.js +26 -0
  183. package/build/dex/yo/yo-pool.js.map +1 -0
  184. package/build/dex/yo/yo.d.ts +39 -0
  185. package/build/dex/yo/yo.js +248 -0
  186. package/build/dex/yo/yo.js.map +1 -0
  187. package/build/implementations/api-paraswap-sdk.d.ts +25 -0
  188. package/build/implementations/api-paraswap-sdk.js +102 -0
  189. package/build/implementations/api-paraswap-sdk.js.map +1 -0
  190. package/package.json +1 -1
  191. package/build/abi/Jarvis.json +0 -1172
  192. package/build/abi/Onebit.json +0 -736
  193. package/build/abi/Shell.json +0 -1294
  194. package/build/abi/TraderJoeV2Router.json +0 -50
  195. package/build/abi/wUSDM.json +0 -757
  196. package/build/abi/zrx.v2.json +0 -1967
  197. package/build/abi/zrx.v3.json +0 -3454
  198. package/build/abi/zrx.v4.json +0 -2193
  199. package/build/dex/OneInchLp.d.ts +0 -24
  200. package/build/dex/OneInchLp.js +0 -43
  201. package/build/dex/OneInchLp.js.map +0 -1
  202. package/build/dex/bProtocol/bProtocol.d.ts +0 -15
  203. package/build/dex/bProtocol/bProtocol.js +0 -56
  204. package/build/dex/bProtocol/bProtocol.js.map +0 -1
  205. package/build/dex/bProtocol/types.d.ts +0 -11
  206. package/build/dex/bProtocol/types.js +0 -8
  207. package/build/dex/bProtocol/types.js.map +0 -1
  208. package/build/dex/jarvis.d.ts +0 -56
  209. package/build/dex/jarvis.js +0 -163
  210. package/build/dex/jarvis.js.map +0 -1
  211. package/build/dex/mStable.d.ts +0 -44
  212. package/build/dex/mStable.js +0 -75
  213. package/build/dex/mStable.js.map +0 -1
  214. package/build/dex/onebit/onebit.d.ts +0 -16
  215. package/build/dex/onebit/onebit.js +0 -61
  216. package/build/dex/onebit/onebit.js.map +0 -1
  217. package/build/dex/onebit/types.d.ts +0 -14
  218. package/build/dex/onebit/types.js +0 -8
  219. package/build/dex/onebit/types.js.map +0 -1
  220. package/build/dex/se-vlr/config.js +0 -24
  221. package/build/dex/se-vlr/config.js.map +0 -1
  222. package/build/dex/se-vlr/se-vlr-pool.js +0 -70
  223. package/build/dex/se-vlr/se-vlr-pool.js.map +0 -1
  224. package/build/dex/se-vlr/se-vlr.d.ts +0 -35
  225. package/build/dex/se-vlr/se-vlr.js +0 -131
  226. package/build/dex/se-vlr/se-vlr.js.map +0 -1
  227. package/build/dex/se-vlr/types.d.ts +0 -6
  228. package/build/dex/shell.d.ts +0 -25
  229. package/build/dex/shell.js +0 -41
  230. package/build/dex/shell.js.map +0 -1
  231. package/build/dex/trader-joe-v2.d.ts +0 -40
  232. package/build/dex/trader-joe-v2.js +0 -74
  233. package/build/dex/trader-joe-v2.js.map +0 -1
  234. package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +0 -94
  235. package/build/dex/uniswap-v3/uniswap-v3-new.js +0 -923
  236. package/build/dex/uniswap-v3/uniswap-v3-new.js.map +0 -1
  237. package/build/dex/usual-bond/config.js +0 -13
  238. package/build/dex/usual-bond/config.js.map +0 -1
  239. package/build/dex/usual-bond/types.d.ts +0 -7
  240. package/build/dex/usual-bond/usual-bond.js +0 -176
  241. package/build/dex/usual-bond/usual-bond.js.map +0 -1
  242. package/build/dex/wusdm/config.d.ts +0 -3
  243. package/build/dex/wusdm/config.js +0 -43
  244. package/build/dex/wusdm/config.js.map +0 -1
  245. package/build/dex/wusdm/constants.d.ts +0 -2
  246. package/build/dex/wusdm/constants.js +0 -6
  247. package/build/dex/wusdm/constants.js.map +0 -1
  248. package/build/dex/wusdm/types.d.ts +0 -18
  249. package/build/dex/wusdm/types.js +0 -11
  250. package/build/dex/wusdm/types.js.map +0 -1
  251. package/build/dex/wusdm/wusdm-pool.d.ts +0 -21
  252. package/build/dex/wusdm/wusdm-pool.js +0 -74
  253. package/build/dex/wusdm/wusdm-pool.js.map +0 -1
  254. package/build/dex/wusdm/wusdm.d.ts +0 -46
  255. package/build/dex/wusdm/wusdm.js +0 -243
  256. package/build/dex/wusdm/wusdm.js.map +0 -1
  257. package/build/dex/zerox/config.d.ts +0 -2
  258. package/build/dex/zerox/config.js +0 -33
  259. package/build/dex/zerox/config.js.map +0 -1
  260. package/build/dex/zerox/index.d.ts +0 -22
  261. package/build/dex/zerox/index.js +0 -225
  262. package/build/dex/zerox/index.js.map +0 -1
  263. package/build/dex/zerox/order.d.ts +0 -88
  264. package/build/dex/zerox/order.js +0 -53
  265. package/build/dex/zerox/order.js.map +0 -1
  266. package/build/dex/zerox/types.d.ts +0 -73
  267. package/build/dex/zerox/types.js +0 -21
  268. package/build/dex/zerox/types.js.map +0 -1
  269. /package/build/dex/{se-vlr → aave-pt-to-underlying}/types.js +0 -0
  270. /package/build/dex/{usual-bond → aave-pt-to-usdc}/types.js +0 -0
@@ -0,0 +1,311 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.Clear = void 0;
40
+ const abi_1 = require("@ethersproject/abi");
41
+ const simple_exchange_1 = require("../simple-exchange");
42
+ const config_1 = require("./config");
43
+ const constants_1 = require("../../constants");
44
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
45
+ const utils_1 = require("../../utils");
46
+ const ClearSwap_json_1 = __importDefault(require("../../abi/clear/ClearSwap.json"));
47
+ const ClearVault_json_1 = __importDefault(require("../../abi/clear/ClearVault.json"));
48
+ const clear_factory_1 = require("./clear-factory");
49
+ const decoders_1 = require("../../lib/decoders");
50
+ const utils_2 = require("../../executor/utils");
51
+ const CLEAR_GAS_COST = 150_000;
52
+ /**
53
+ * Clear DEX Integration for ParaSwap
54
+ *
55
+ * Clear is a depeg arbitrage protocol for stablecoins
56
+ * - Vaults contain N tokens (multi-token, not pairs)
57
+ * - Pricing via ClearSwap.previewSwap() - returns 0 when no depeg
58
+ * - Discovery via StatefulEventSubscriber (getters + NewClearVault events)
59
+ * - Each (vault, tokenA, tokenB) combination = one "pool" for ParaSwap
60
+ */
61
+ class Clear extends simple_exchange_1.SimpleExchange {
62
+ network;
63
+ dexKey;
64
+ dexHelper;
65
+ logger;
66
+ config;
67
+ factory;
68
+ hasConstantPriceLargeAmounts = false;
69
+ isFeeOnTransferSupported = false;
70
+ static dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.ClearConfig);
71
+ clearSwapIface = new abi_1.Interface(ClearSwap_json_1.default);
72
+ clearVaultIface = new abi_1.Interface(ClearVault_json_1.default);
73
+ vaults = [];
74
+ constructor(network, dexKey, dexHelper) {
75
+ super(dexHelper, dexKey);
76
+ this.network = network;
77
+ this.dexKey = dexKey;
78
+ this.dexHelper = dexHelper;
79
+ this.config = config_1.ClearConfig[dexKey][network];
80
+ this.logger = dexHelper.getLogger(dexKey);
81
+ this.factory = new clear_factory_1.ClearFactory(dexKey, this.config, network, dexHelper, this.logger);
82
+ }
83
+ getAdapters(_side) {
84
+ return null;
85
+ }
86
+ async initializePricing(blockNumber) {
87
+ await this.factory.initialize(blockNumber);
88
+ }
89
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
90
+ if (side === constants_1.SwapSide.BUY)
91
+ return [];
92
+ const allVaults = this.factory.getState(blockNumber) || [];
93
+ const src = srcToken.address.toLowerCase();
94
+ const dest = destToken.address.toLowerCase();
95
+ const matchingVaults = allVaults.filter(vault => {
96
+ const addrs = vault.tokens;
97
+ return addrs.includes(src) && addrs.includes(dest);
98
+ });
99
+ return matchingVaults.map(vault => `${this.dexKey}_${vault.address}_${srcToken.address}_${destToken.address}`.toLowerCase());
100
+ }
101
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
102
+ // Only SELL side supported
103
+ if (side === constants_1.SwapSide.BUY) {
104
+ return null;
105
+ }
106
+ const poolIdentifiers = limitPools ||
107
+ (await this.getPoolIdentifiers(srcToken, destToken, side, blockNumber));
108
+ if (poolIdentifiers.length === 0) {
109
+ return null;
110
+ }
111
+ try {
112
+ const calls = [];
113
+ const vaultInfos = [];
114
+ for (const poolIdentifier of poolIdentifiers) {
115
+ const vaultAddress = poolIdentifier.split('_')[1];
116
+ const startIdx = calls.length;
117
+ for (const amount of amounts.slice(1)) {
118
+ calls.push({
119
+ target: this.config.swapAddress,
120
+ callData: this.clearSwapIface.encodeFunctionData('previewSwap', [
121
+ vaultAddress,
122
+ srcToken.address,
123
+ destToken.address,
124
+ amount,
125
+ ]),
126
+ decodeFunction: (result) => result.amountOut.toBigInt(),
127
+ });
128
+ }
129
+ vaultInfos.push({ address: vaultAddress, poolIdentifier, startIdx });
130
+ }
131
+ const results = await this.dexHelper.multiWrapper.tryAggregate(false, calls, blockNumber, this.dexHelper.multiWrapper.defaultBatchSize, false);
132
+ const poolPrices = [];
133
+ for (const { address, poolIdentifier, startIdx } of vaultInfos) {
134
+ const prices = [
135
+ 0n,
136
+ ...amounts.slice(1).map((_, i) => {
137
+ const r = results[startIdx + i];
138
+ return r.success ? r.returnData : 0n;
139
+ }),
140
+ ];
141
+ if (prices.every(p => p === 0n))
142
+ continue;
143
+ poolPrices.push({
144
+ prices,
145
+ unit: (0, utils_1.getBigIntPow)(destToken.decimals),
146
+ data: { vault: address },
147
+ poolIdentifiers: [poolIdentifier],
148
+ exchange: this.dexKey,
149
+ gasCost: this.config.poolGasCost || CLEAR_GAS_COST,
150
+ poolAddresses: [address],
151
+ });
152
+ }
153
+ return poolPrices.length > 0 ? poolPrices : null;
154
+ }
155
+ catch (error) {
156
+ this.logger.error(`getPricesVolume error: ${error}`);
157
+ return null;
158
+ }
159
+ }
160
+ // Not used in V6, but required by interface
161
+ getAdapterParam() {
162
+ return {
163
+ targetExchange: '0x',
164
+ payload: '0x',
165
+ networkFee: '0',
166
+ };
167
+ }
168
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, _side) {
169
+ const exchangeData = this.clearSwapIface.encodeFunctionData('swap', [
170
+ recipient,
171
+ data.vault,
172
+ srcToken,
173
+ destToken,
174
+ srcAmount,
175
+ destAmount,
176
+ false,
177
+ ]);
178
+ return {
179
+ needWrapNative: this.needWrapNative,
180
+ dexFuncHasRecipient: true,
181
+ exchangeData,
182
+ targetExchange: this.config.swapAddress,
183
+ returnAmountPos: (0, utils_2.extractReturnAmountPosition)(this.clearSwapIface, 'swap', 'amountOut'),
184
+ };
185
+ }
186
+ /**
187
+ * Gas cost for exchangeData calldata
188
+ * swap(address recipient, address vault, address srcToken, address destToken, uint256 srcAmount, uint256 destAmount, bool useIous)
189
+ */
190
+ getCalldataGasCost(_poolPrices) {
191
+ return (CALLDATA_GAS_COST.DEX_OVERHEAD +
192
+ CALLDATA_GAS_COST.ADDRESS + // recipient
193
+ CALLDATA_GAS_COST.ADDRESS + // vault
194
+ CALLDATA_GAS_COST.ADDRESS + // srcToken
195
+ CALLDATA_GAS_COST.ADDRESS + // destToken
196
+ CALLDATA_GAS_COST.AMOUNT + // srcAmount
197
+ CALLDATA_GAS_COST.AMOUNT + // destAmount
198
+ CALLDATA_GAS_COST.BOOL // useIous
199
+ );
200
+ }
201
+ /**
202
+ * Fetch vaults with tokens, decimals and TVL for getTopPoolsForToken
203
+ * This method is called by PoolTracker service which doesn't call initializePricing
204
+ */
205
+ async updatePoolState() {
206
+ const blockNumber = await this.dexHelper.provider.getBlockNumber();
207
+ const vaults = await this.factory.getStateOrGenerate(blockNumber);
208
+ if (vaults.length === 0) {
209
+ return this.logger.info(`${this.dexKey}: No vaults found in updatePoolState`);
210
+ }
211
+ const uniqueTokens = [...new Set(vaults.flatMap(v => v.tokens))];
212
+ const decimalCalls = uniqueTokens.map(token => ({
213
+ target: token,
214
+ callData: '0x313ce567', // decimals()
215
+ decodeFunction: (result) => BigInt((0, decoders_1.uint8ToNumber)(result)),
216
+ }));
217
+ // Build tokenAssets(tokenAddress) calls for each token in each vault
218
+ const tokenAssetsCalls = [];
219
+ const tokenAssetsMap = [];
220
+ for (let i = 0; i < vaults.length; i++) {
221
+ for (const token of vaults[i].tokens) {
222
+ tokenAssetsCalls.push({
223
+ target: vaults[i].address,
224
+ callData: this.clearVaultIface.encodeFunctionData('tokenAssets', [
225
+ token,
226
+ ]),
227
+ decodeFunction: decoders_1.uint256ToBigInt,
228
+ });
229
+ tokenAssetsMap.push({ vaultIdx: i, tokenAddress: token });
230
+ }
231
+ }
232
+ const results = await this.dexHelper.multiWrapper.tryAggregate(false, [...decimalCalls, ...tokenAssetsCalls], blockNumber, this.dexHelper.multiWrapper.defaultBatchSize, false);
233
+ const decimalsOffset = uniqueTokens.length;
234
+ const tokenDecimals = {};
235
+ for (let i = 0; i < decimalsOffset; i++) {
236
+ const result = results[i];
237
+ tokenDecimals[uniqueTokens[i]] = result.success
238
+ ? Number(result.returnData)
239
+ : 18;
240
+ }
241
+ // Group tokenAssets results by vault index
242
+ const vaultTokenAssets = vaults.map(() => ({}));
243
+ for (let i = 0; i < tokenAssetsMap.length; i++) {
244
+ const { vaultIdx, tokenAddress } = tokenAssetsMap[i];
245
+ const result = results[decimalsOffset + i];
246
+ if (result.success) {
247
+ vaultTokenAssets[vaultIdx][tokenAddress.toLowerCase()] =
248
+ result.returnData;
249
+ }
250
+ }
251
+ this.vaults = vaults.map((vault, i) => ({
252
+ address: vault.address,
253
+ tokens: vault.tokens.map(t => ({
254
+ address: t,
255
+ decimals: tokenDecimals[t.toLowerCase()] ?? 18,
256
+ })),
257
+ tokenAssets: vaultTokenAssets[i],
258
+ }));
259
+ }
260
+ async getTopPoolsForToken(tokenAddress, limit) {
261
+ const tokenAddrLower = tokenAddress.toLowerCase();
262
+ const vaultsWithToken = this.vaults.filter(vault => vault.tokens.some(t => t.address.toLowerCase() === tokenAddrLower));
263
+ if (vaultsWithToken.length === 0) {
264
+ return [];
265
+ }
266
+ // Build a flat list of [tokenAddress, assets] for all tokens across all vaults
267
+ const tokenAmountPairs = [];
268
+ const vaultTokenCounts = [];
269
+ for (const vault of vaultsWithToken) {
270
+ vaultTokenCounts.push(vault.tokens.length);
271
+ for (const t of vault.tokens) {
272
+ const addr = t.address.toLowerCase();
273
+ tokenAmountPairs.push([t.address, vault.tokenAssets[addr] ?? null]);
274
+ }
275
+ }
276
+ const usdAmounts = await this.dexHelper.getUsdTokenAmounts(tokenAmountPairs);
277
+ // Map per-token USD amounts to PoolLiquidity entries
278
+ let offset = 0;
279
+ const poolLiquidities = vaultsWithToken
280
+ .map((vault, i) => {
281
+ const count = vaultTokenCounts[i];
282
+ const tokenUsdMap = {};
283
+ for (let j = 0; j < count; j++) {
284
+ const addr = vault.tokens[j].address.toLowerCase();
285
+ tokenUsdMap[addr] = usdAmounts[offset + j];
286
+ }
287
+ offset += count;
288
+ const connectorTokens = vault.tokens
289
+ .filter(t => t.address.toLowerCase() !== tokenAddrLower)
290
+ .map(t => ({
291
+ address: t.address,
292
+ decimals: t.decimals ?? 18,
293
+ liquidityUSD: tokenUsdMap[t.address.toLowerCase()],
294
+ }));
295
+ if (connectorTokens.length === 0)
296
+ return null;
297
+ return {
298
+ exchange: this.dexKey,
299
+ address: vault.address,
300
+ connectorTokens,
301
+ liquidityUSD: tokenUsdMap[tokenAddrLower] ?? 0,
302
+ };
303
+ })
304
+ .filter((p) => p !== null);
305
+ return poolLiquidities
306
+ .sort((a, b) => b.liquidityUSD - a.liquidityUSD)
307
+ .slice(0, limit);
308
+ }
309
+ }
310
+ exports.Clear = Clear;
311
+ //# sourceMappingURL=clear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/dex/clear/clear.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import { DexParams } from './types';
2
2
  import { DexConfigMap } from '../../types';
3
- export declare const SeVlrConfig: DexConfigMap<DexParams>;
3
+ export declare const ClearConfig: DexConfigMap<DexParams>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClearConfig = void 0;
4
+ const constants_1 = require("../../constants");
5
+ exports.ClearConfig = {
6
+ Clear: {
7
+ [constants_1.Network.MAINNET]: {
8
+ factoryAddress: '0x8bF266ED803e474AE7Bf09ADB5ba2566c489223d',
9
+ swapAddress: '0xeb5AD3D93E59eFcbC6934caD2B48EB33BAf29745',
10
+ poolGasCost: 150_000,
11
+ },
12
+ },
13
+ };
14
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/clear/config.ts"],"names":[],"mappings":";;;AAEA,+CAA0C;AAE7B,QAAA,WAAW,GAA4B;IAClD,KAAK,EAAE;QACL,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,cAAc,EAAE,4CAA4C;YAC5D,WAAW,EAAE,4CAA4C;YACzD,WAAW,EAAE,OAAO;SACrB;KACF;CACF,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Address, Token } from '../../types';
2
+ export type ClearData = {
3
+ vault: Address;
4
+ };
5
+ export interface DexParams {
6
+ factoryAddress: Address;
7
+ swapAddress: Address;
8
+ poolGasCost?: number;
9
+ }
10
+ export type PoolState = {
11
+ address: Address;
12
+ tokens: Address[];
13
+ }[];
14
+ export interface ClearVault {
15
+ address: Address;
16
+ tokens: Token[];
17
+ tokenAssets: Record<string, bigint>;
18
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/se-vlr/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/clear/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export declare const enum ExtensionType {
2
+ Unknown = 0,
3
+ NoSwapCallPoints = 1,
4
+ Oracle = 2,
5
+ Twamm = 3,
6
+ MevCapture = 4,
7
+ BoostedFeesConcentrated = 5
8
+ }
9
+ export declare function extensionType(extension: bigint): ExtensionType;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExtensionType = void 0;
4
+ exports.extensionType = extensionType;
5
+ const config_1 = require("./config");
6
+ var ExtensionType;
7
+ (function (ExtensionType) {
8
+ ExtensionType[ExtensionType["Unknown"] = 0] = "Unknown";
9
+ ExtensionType[ExtensionType["NoSwapCallPoints"] = 1] = "NoSwapCallPoints";
10
+ ExtensionType[ExtensionType["Oracle"] = 2] = "Oracle";
11
+ ExtensionType[ExtensionType["Twamm"] = 3] = "Twamm";
12
+ ExtensionType[ExtensionType["MevCapture"] = 4] = "MevCapture";
13
+ ExtensionType[ExtensionType["BoostedFeesConcentrated"] = 5] = "BoostedFeesConcentrated";
14
+ })(ExtensionType || (exports.ExtensionType = ExtensionType = {}));
15
+ const KNOWN_EXTENSION_TYPES = new Map([
16
+ [BigInt(config_1.ORACLE_ADDRESS), 2 /* ExtensionType.Oracle */],
17
+ [BigInt(config_1.TWAMM_ADDRESS), 3 /* ExtensionType.Twamm */],
18
+ [BigInt(config_1.MEV_CAPTURE_ADDRESS), 4 /* ExtensionType.MevCapture */],
19
+ [
20
+ BigInt(config_1.BOOSTED_FEES_CONCENTRATED_ADDRESS),
21
+ 5 /* ExtensionType.BoostedFeesConcentrated */,
22
+ ],
23
+ ]);
24
+ function extensionType(extension) {
25
+ const known = KNOWN_EXTENSION_TYPES.get(extension);
26
+ if (typeof known !== 'undefined') {
27
+ return known;
28
+ }
29
+ // Call points are encoded in the first byte of the extension address.
30
+ const hasNoSwapCallPoints = (extension & 0x6000000000000000000000000000000000000000n) === 0n;
31
+ if (hasNoSwapCallPoints) {
32
+ return 1 /* ExtensionType.NoSwapCallPoints */;
33
+ }
34
+ return 0 /* ExtensionType.Unknown */;
35
+ }
36
+ //# sourceMappingURL=extension-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-type.js","sourceRoot":"","sources":["../../../src/dex/ekubo-v3/extension-type.ts"],"names":[],"mappings":";;;AA0BA,sCAcC;AAxCD,qCAKkB;AAElB,IAAkB,aAOjB;AAPD,WAAkB,aAAa;IAC7B,uDAAO,CAAA;IACP,yEAAgB,CAAA;IAChB,qDAAM,CAAA;IACN,mDAAK,CAAA;IACL,6DAAU,CAAA;IACV,uFAAuB,CAAA;AACzB,CAAC,EAPiB,aAAa,6BAAb,aAAa,QAO9B;AAED,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAwB;IAC3D,CAAC,MAAM,CAAC,uBAAc,CAAC,+BAAuB;IAC9C,CAAC,MAAM,CAAC,sBAAa,CAAC,8BAAsB;IAC5C,CAAC,MAAM,CAAC,4BAAmB,CAAC,mCAA2B;IACvD;QACE,MAAM,CAAC,0CAAiC,CAAC;;KAE1C;CACF,CAAC,CAAC;AAEH,SAAgB,aAAa,CAAC,SAAiB;IAC7C,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sEAAsE;IACtE,MAAM,mBAAmB,GACvB,CAAC,SAAS,GAAG,2CAA2C,CAAC,KAAK,EAAE,CAAC;IACnE,IAAI,mBAAmB,EAAE,CAAC;QACxB,8CAAsC;IACxC,CAAC;IAED,qCAA6B;AAC/B,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { Logger } from 'log4js';
2
+ import { Result } from '@ethersproject/abi';
3
+ import { DeepReadonly } from 'ts-essentials';
4
+ import { IDexHelper } from '../../../dex-helper/idex-helper';
5
+ import { BasicQuoteData, BoostedFeesQuoteData, EkuboContracts, PoolInitializationState } from '../types';
6
+ import { ConcentratedPoolBase, ConcentratedPoolState } from './concentrated';
7
+ import { Quote } from './pool';
8
+ import { ConcentratedPoolTypeConfig, PoolKey, SwappedEvent } from './utils';
9
+ import { TimedPoolState } from './timed';
10
+ import { EkuboSupportedNetwork } from '../config';
11
+ export declare class BoostedFeesPool extends ConcentratedPoolBase<BoostedFeesPoolState.Object> {
12
+ private readonly boostedFeesDataFetcher;
13
+ private readonly chainId;
14
+ constructor(parentName: string, dexHelper: IDexHelper, logger: Logger, contracts: EkuboContracts, initBlockNumber: number, key: PoolKey<ConcentratedPoolTypeConfig>);
15
+ generateState(blockNumber?: number | 'latest'): Promise<DeepReadonly<BoostedFeesPoolState.Object>>;
16
+ protected _quote(amount: bigint, isToken1: boolean, state: DeepReadonly<BoostedFeesPoolState.Object>, sqrtRatioLimit?: bigint): Quote;
17
+ protected handlePositionUpdated(args: Result, oldState: DeepReadonly<BoostedFeesPoolState.Object>): DeepReadonly<BoostedFeesPoolState.Object> | null;
18
+ protected handleSwappedEvent(ev: SwappedEvent, oldState: DeepReadonly<BoostedFeesPoolState.Object>): DeepReadonly<BoostedFeesPoolState.Object> | null;
19
+ }
20
+ export declare function quoteBoostedFees(key: PoolKey<ConcentratedPoolTypeConfig>, amount: bigint, isToken1: boolean, state: DeepReadonly<BoostedFeesPoolState.Object>, sqrtRatioLimit?: bigint, overrideTime?: bigint, chainId?: EkuboSupportedNetwork): Quote<Pick<ConcentratedPoolState.Object, 'activeTickIndex' | 'sqrtRatio' | 'liquidity'> & {
21
+ timedPoolState: TimedPoolState.Object;
22
+ }>;
23
+ export declare namespace BoostedFeesPoolState {
24
+ type DonateRateDelta = TimedPoolState.TimeRateDelta;
25
+ interface Object extends ConcentratedPoolState.Object {
26
+ timedPoolState: TimedPoolState.Object;
27
+ }
28
+ function fromPoolInitialization(state: PoolInitializationState): DeepReadonly<Object>;
29
+ function fromQuoter(quoteData: BasicQuoteData, boostedData: BoostedFeesQuoteData): DeepReadonly<Object>;
30
+ function fromSwappedEvent(oldState: DeepReadonly<Object>, ev: SwappedEvent): Object;
31
+ function fromPositionUpdatedEvent(oldState: DeepReadonly<Object>, ticks: [number, number], liquidityDelta: bigint): Object | null;
32
+ function fromFeesDonatedEvent(oldState: DeepReadonly<Object>, ev: FeesDonatedEvent, blockTimestamp: bigint): Object;
33
+ function fromPoolBoostedEvent(oldState: DeepReadonly<Object>, [startTime, endTime]: [bigint, bigint], [rate0, rate1]: [bigint, bigint]): Object | null;
34
+ }
35
+ interface FeesDonatedEvent {
36
+ donateRate0: bigint;
37
+ donateRate1: bigint;
38
+ }
39
+ export {};
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BoostedFeesPoolState = exports.BoostedFeesPool = void 0;
4
+ exports.quoteBoostedFees = quoteBoostedFees;
5
+ const utils_1 = require("ethers/lib/utils");
6
+ const ethers_1 = require("ethers");
7
+ const concentrated_1 = require("./concentrated");
8
+ const pool_1 = require("./pool");
9
+ const timed_1 = require("./timed");
10
+ const constants_1 = require("../../../constants");
11
+ const EXTRA_BASE_GAS_COST_OF_ONE_BOOSTED_FEES_SWAP = 2_743;
12
+ const GAS_COST_OF_EXECUTING_VIRTUAL_DONATIONS = 6_814;
13
+ const GAS_COST_OF_ONE_VIRTUAL_DONATE_DELTA = 4_271;
14
+ const GAS_COST_OF_BOOSTED_FEES_FEE_ACCUMULATION = 19_279;
15
+ class BoostedFeesPool extends concentrated_1.ConcentratedPoolBase {
16
+ boostedFeesDataFetcher;
17
+ chainId;
18
+ constructor(parentName, dexHelper, logger, contracts, initBlockNumber, key) {
19
+ const { contract: { address: boostedFeesAddress }, interface: boostedFeesIface, quoteDataFetcher: boostedFeesDataFetcher, } = contracts.boostedFees;
20
+ super(parentName, dexHelper, logger, contracts, initBlockNumber, key, {
21
+ [boostedFeesAddress]: new pool_1.NamedEventHandlers(boostedFeesIface, {
22
+ PoolBoosted: (args, oldState) => BoostedFeesPoolState.fromPoolBoostedEvent(oldState, [args.startTime.toBigInt(), args.endTime.toBigInt()], [args.rate0.toBigInt(), args.rate1.toBigInt()]),
23
+ }),
24
+ }, {
25
+ [boostedFeesAddress]: (data, oldState, blockHeader) => BoostedFeesPoolState.fromFeesDonatedEvent(oldState, parseFeesDonatedEvent(data), BigInt(blockHeader.timestamp)),
26
+ });
27
+ this.boostedFeesDataFetcher = boostedFeesDataFetcher;
28
+ this.chainId = dexHelper.config.data.network;
29
+ }
30
+ async generateState(blockNumber) {
31
+ const [quoteData, boostedFeesData] = await Promise.all([
32
+ this.quoteDataFetcher.getQuoteData([this.key.toAbi()], 10, {
33
+ blockTag: blockNumber,
34
+ }),
35
+ this.boostedFeesDataFetcher.getPoolState(this.key.toAbi(), {
36
+ blockTag: blockNumber,
37
+ }),
38
+ ]);
39
+ return BoostedFeesPoolState.fromQuoter(quoteData[0], boostedFeesData);
40
+ }
41
+ _quote(amount, isToken1, state, sqrtRatioLimit) {
42
+ return quoteBoostedFees(this.key, amount, isToken1, state, sqrtRatioLimit, undefined, this.chainId);
43
+ }
44
+ handlePositionUpdated(args, oldState) {
45
+ const [lower, upper] = [
46
+ ethers_1.BigNumber.from((0, utils_1.hexDataSlice)(args.positionId, 24, 28))
47
+ .fromTwos(32)
48
+ .toNumber(),
49
+ ethers_1.BigNumber.from((0, utils_1.hexDataSlice)(args.positionId, 28, 32))
50
+ .fromTwos(32)
51
+ .toNumber(),
52
+ ];
53
+ return BoostedFeesPoolState.fromPositionUpdatedEvent(oldState, [lower, upper], args.liquidityDelta.toBigInt());
54
+ }
55
+ handleSwappedEvent(ev, oldState) {
56
+ return BoostedFeesPoolState.fromSwappedEvent(oldState, ev);
57
+ }
58
+ }
59
+ exports.BoostedFeesPool = BoostedFeesPool;
60
+ function quoteBoostedFees(key, amount, isToken1, state, sqrtRatioLimit, overrideTime, chainId = constants_1.Network.MAINNET) {
61
+ const lastDonateTime = state.timedPoolState.lastTime;
62
+ const currentTime = overrideTime ?? (0, timed_1.estimatedCurrentTime)(lastDonateTime, chainId);
63
+ let donateRate0 = state.timedPoolState.token0Rate;
64
+ let donateRate1 = state.timedPoolState.token1Rate;
65
+ let feesAccumulated = false;
66
+ let virtualDonateDeltaTimesCrossed = 0;
67
+ const truncatedLastDonateTime = BigInt.asUintN(32, lastDonateTime);
68
+ const realLastDonateTime = (0, timed_1.realLastTime)(currentTime, truncatedLastDonateTime);
69
+ let time = realLastDonateTime;
70
+ for (const delta of [...state.timedPoolState.virtualDeltas, null]) {
71
+ let nextDonateTime = currentTime;
72
+ let lastDelta = true;
73
+ if (delta !== null) {
74
+ if (delta.time <= realLastDonateTime) {
75
+ continue;
76
+ }
77
+ if (delta.time < currentTime) {
78
+ lastDelta = false;
79
+ nextDonateTime = delta.time;
80
+ }
81
+ }
82
+ const timeDiff = nextDonateTime - time;
83
+ feesAccumulated ||=
84
+ (donateRate0 * timeDiff) >> 32n !== 0n ||
85
+ (donateRate1 * timeDiff) >> 32n !== 0n;
86
+ if (delta === null || lastDelta) {
87
+ break;
88
+ }
89
+ donateRate0 += delta.delta0;
90
+ donateRate1 += delta.delta1;
91
+ time = delta.time;
92
+ virtualDonateDeltaTimesCrossed++;
93
+ }
94
+ const quote = (0, concentrated_1.quoteConcentrated)(key, amount, isToken1, state, sqrtRatioLimit);
95
+ quote.gasConsumed +=
96
+ EXTRA_BASE_GAS_COST_OF_ONE_BOOSTED_FEES_SWAP +
97
+ Number(currentTime !== realLastDonateTime) *
98
+ GAS_COST_OF_EXECUTING_VIRTUAL_DONATIONS +
99
+ Number(feesAccumulated) * GAS_COST_OF_BOOSTED_FEES_FEE_ACCUMULATION +
100
+ (0, timed_1.approximateExtraDistinctTimeBitmapLookups)(realLastDonateTime, currentTime) *
101
+ concentrated_1.GAS_COST_OF_ONE_EXTRA_BITMAP_SLOAD +
102
+ virtualDonateDeltaTimesCrossed * GAS_COST_OF_ONE_VIRTUAL_DONATE_DELTA;
103
+ return {
104
+ ...quote,
105
+ stateAfter: {
106
+ ...quote.stateAfter,
107
+ timedPoolState: {
108
+ token0Rate: donateRate0,
109
+ token1Rate: donateRate1,
110
+ lastTime: currentTime,
111
+ virtualDeltas: state.timedPoolState
112
+ .virtualDeltas,
113
+ },
114
+ },
115
+ };
116
+ }
117
+ var BoostedFeesPoolState;
118
+ (function (BoostedFeesPoolState) {
119
+ function fromPoolInitialization(state) {
120
+ return {
121
+ ...concentrated_1.ConcentratedPoolState.fromPoolInitialization(state),
122
+ timedPoolState: {
123
+ token0Rate: 0n,
124
+ token1Rate: 0n,
125
+ lastTime: BigInt(state.blockHeader.timestamp),
126
+ virtualDeltas: [],
127
+ },
128
+ };
129
+ }
130
+ BoostedFeesPoolState.fromPoolInitialization = fromPoolInitialization;
131
+ function fromQuoter(quoteData, boostedData) {
132
+ return {
133
+ ...concentrated_1.ConcentratedPoolState.fromQuoter(quoteData),
134
+ timedPoolState: timed_1.TimedPoolState.fromQuoter(boostedData.donateRateToken0.toBigInt(), boostedData.donateRateToken1.toBigInt(), boostedData.lastDonateTime.toBigInt(), boostedData.donateRateDeltas.map(delta => ({
135
+ time: delta.time.toBigInt(),
136
+ delta0: delta.donateRateDelta0.toBigInt(),
137
+ delta1: delta.donateRateDelta1.toBigInt(),
138
+ }))),
139
+ };
140
+ }
141
+ BoostedFeesPoolState.fromQuoter = fromQuoter;
142
+ function fromSwappedEvent(oldState, ev) {
143
+ return {
144
+ ...concentrated_1.ConcentratedPoolState.fromSwappedEvent(oldState, ev),
145
+ timedPoolState: structuredClone(oldState.timedPoolState),
146
+ };
147
+ }
148
+ BoostedFeesPoolState.fromSwappedEvent = fromSwappedEvent;
149
+ function fromPositionUpdatedEvent(oldState, ticks, liquidityDelta) {
150
+ const concentratedState = concentrated_1.ConcentratedPoolState.fromPositionUpdatedEvent(oldState, ticks, liquidityDelta);
151
+ if (concentratedState === null) {
152
+ return null;
153
+ }
154
+ return {
155
+ ...concentratedState,
156
+ timedPoolState: structuredClone(oldState.timedPoolState),
157
+ };
158
+ }
159
+ BoostedFeesPoolState.fromPositionUpdatedEvent = fromPositionUpdatedEvent;
160
+ function fromFeesDonatedEvent(oldState, ev, blockTimestamp) {
161
+ const clonedState = structuredClone(oldState);
162
+ const timed = clonedState.timedPoolState;
163
+ timed.lastTime = blockTimestamp;
164
+ timed.token0Rate = ev.donateRate0;
165
+ timed.token1Rate = ev.donateRate1;
166
+ timed_1.TimedPoolState.pruneDeltasAtOrBefore(timed.virtualDeltas, blockTimestamp);
167
+ return clonedState;
168
+ }
169
+ BoostedFeesPoolState.fromFeesDonatedEvent = fromFeesDonatedEvent;
170
+ function fromPoolBoostedEvent(oldState, [startTime, endTime], [rate0, rate1]) {
171
+ if (rate0 === 0n && rate1 === 0n) {
172
+ return null;
173
+ }
174
+ const clonedState = structuredClone(oldState);
175
+ timed_1.TimedPoolState.applyRateDeltaBoundaries(clonedState.timedPoolState, [
176
+ [startTime, rate0, rate1],
177
+ [endTime, -rate0, -rate1],
178
+ ]);
179
+ return clonedState;
180
+ }
181
+ BoostedFeesPoolState.fromPoolBoostedEvent = fromPoolBoostedEvent;
182
+ })(BoostedFeesPoolState || (exports.BoostedFeesPoolState = BoostedFeesPoolState = {}));
183
+ function parseFeesDonatedEvent(data) {
184
+ return {
185
+ donateRate0: BigInt((0, utils_1.hexDataSlice)(data, 32, 46)),
186
+ donateRate1: BigInt((0, utils_1.hexDataSlice)(data, 46, 60)),
187
+ };
188
+ }
189
+ //# sourceMappingURL=boosted-fees.js.map