@paraswap/dex-lib 4.7.13 → 4.7.14-pharaoh-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 (236) 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/pangolin-v3/PangolinV3StateMulticall.abi.json +796 -0
  8. package/build/abi/pendle/pendle-deployer.abi.json +520 -0
  9. package/build/abi/pendle/pendle-oracle.abi.json +413 -0
  10. package/build/abi/pharaoh-v3/PharaohV3Factory.abi.json +349 -0
  11. package/build/abi/pharaoh-v3/PharaohV3Pool.abi.json +802 -0
  12. package/build/abi/pharaoh-v3/PharaohV3StateMulticall.abi.json +781 -0
  13. package/build/abi/ring-v2/few-wrapped-token.json +587 -0
  14. package/build/abi/ring-v2/ring-v2-factory.json +125 -0
  15. package/build/abi/ring-v2/ring-v2-pool.json +461 -0
  16. package/build/abi/ring-v2/ring-v2-router.json +332 -0
  17. package/build/abi/stabull/stabull-curve.json +738 -0
  18. package/build/abi/stabull/stabull-router.json +76 -0
  19. package/build/abi/uniswap-v4/hooks/SpotDynamicFeeManager.json +26 -0
  20. package/build/abi/uniswap-v4/hooks/SpotHook.json +54 -0
  21. package/build/abi/uniswap-v4/hooks/SpotPolicyManager.json +45 -0
  22. package/build/abi/uniswap-v4/hooks/cabalcoin-hook.abi.json +682 -0
  23. package/build/abi/uniswap-v4/hooks/fee-hook.abi.json +1335 -0
  24. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying-factory.d.ts +29 -0
  25. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying-factory.js +153 -0
  26. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying-factory.js.map +1 -0
  27. package/build/dex/{usual-bond/usual-bond.d.ts → aave-pt-to-underlying/aave-pt-to-underlying.d.ts} +23 -18
  28. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying.js +323 -0
  29. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying.js.map +1 -0
  30. package/build/dex/aave-pt-to-underlying/config.d.ts +3 -0
  31. package/build/dex/aave-pt-to-underlying/config.js +24 -0
  32. package/build/dex/aave-pt-to-underlying/config.js.map +1 -0
  33. package/build/dex/aave-pt-to-underlying/constants.d.ts +2 -0
  34. package/build/dex/aave-pt-to-underlying/constants.js +6 -0
  35. package/build/dex/aave-pt-to-underlying/constants.js.map +1 -0
  36. package/build/dex/aave-pt-to-underlying/types.d.ts +24 -0
  37. package/build/dex/aave-pt-to-underlying/types.js.map +1 -0
  38. package/build/dex/aave-pt-to-usdc/aave-pt-to-usdc.d.ts +39 -0
  39. package/build/dex/aave-pt-to-usdc/aave-pt-to-usdc.js +244 -0
  40. package/build/dex/aave-pt-to-usdc/aave-pt-to-usdc.js.map +1 -0
  41. package/build/dex/aave-pt-to-usdc/config.d.ts +3 -0
  42. package/build/dex/aave-pt-to-usdc/config.js +47 -0
  43. package/build/dex/aave-pt-to-usdc/config.js.map +1 -0
  44. package/build/dex/aave-pt-to-usdc/constants.d.ts +2 -0
  45. package/build/dex/aave-pt-to-usdc/constants.js +6 -0
  46. package/build/dex/aave-pt-to-usdc/constants.js.map +1 -0
  47. package/build/dex/aave-pt-to-usdc/types.d.ts +22 -0
  48. package/build/dex/aave-pt-to-usdc/types.js.map +1 -0
  49. package/build/dex/apex-defi/apex-defi-factory.d.ts +26 -0
  50. package/build/dex/apex-defi/apex-defi-factory.js +53 -0
  51. package/build/dex/apex-defi/apex-defi-factory.js.map +1 -0
  52. package/build/dex/apex-defi/apex-defi-pool.d.ts +55 -0
  53. package/build/dex/apex-defi/apex-defi-pool.js +247 -0
  54. package/build/dex/apex-defi/apex-defi-pool.js.map +1 -0
  55. package/build/dex/apex-defi/apex-defi-wrapper-factory.d.ts +57 -0
  56. package/build/dex/apex-defi/apex-defi-wrapper-factory.js +250 -0
  57. package/build/dex/apex-defi/apex-defi-wrapper-factory.js.map +1 -0
  58. package/build/dex/apex-defi/apex-defi.d.ts +97 -0
  59. package/build/dex/apex-defi/apex-defi.js +1021 -0
  60. package/build/dex/apex-defi/apex-defi.js.map +1 -0
  61. package/build/dex/apex-defi/config.d.ts +4 -0
  62. package/build/dex/apex-defi/config.js +138 -0
  63. package/build/dex/apex-defi/config.js.map +1 -0
  64. package/build/dex/apex-defi/types.d.ts +32 -0
  65. package/build/dex/apex-defi/types.js +3 -0
  66. package/build/dex/{usual-bond → apex-defi}/types.js.map +1 -1
  67. package/build/dex/apex-defi/utils.d.ts +46 -0
  68. package/build/dex/apex-defi/utils.js +133 -0
  69. package/build/dex/apex-defi/utils.js.map +1 -0
  70. package/build/dex/maker-psm/maker-psm-event-pool.d.ts +43 -0
  71. package/build/dex/maker-psm/maker-psm-event-pool.js +132 -0
  72. package/build/dex/maker-psm/maker-psm-event-pool.js.map +1 -0
  73. package/build/dex/miro-migrator/miro-migrator-state.d.ts +27 -0
  74. package/build/dex/miro-migrator/miro-migrator-state.js +89 -0
  75. package/build/dex/miro-migrator/miro-migrator-state.js.map +1 -0
  76. package/build/dex/{usual-bond → stabull}/config.d.ts +1 -1
  77. package/build/dex/stabull/config.js +177 -0
  78. package/build/dex/stabull/config.js.map +1 -0
  79. package/build/dex/{se-vlr/se-vlr-pool.d.ts → stabull/stabull-pool.d.ts} +13 -6
  80. package/build/dex/stabull/stabull-pool.js +113 -0
  81. package/build/dex/stabull/stabull-pool.js.map +1 -0
  82. package/build/dex/stabull/stabull.d.ts +55 -0
  83. package/build/dex/stabull/stabull.js +286 -0
  84. package/build/dex/stabull/stabull.js.map +1 -0
  85. package/build/dex/stabull/types.d.ts +21 -0
  86. package/build/dex/stabull/types.js +3 -0
  87. package/build/dex/stabull/types.js.map +1 -0
  88. package/build/dex/uniswap-v3/config.js +33 -0
  89. package/build/dex/uniswap-v3/config.js.map +1 -1
  90. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.d.ts +4 -0
  91. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.js +56 -0
  92. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.js.map +1 -0
  93. package/build/dex/uniswap-v3/forks/pharaoh-v3/pharaoh-v3-factory.d.ts +7 -0
  94. package/build/dex/uniswap-v3/forks/pharaoh-v3/pharaoh-v3-factory.js +20 -0
  95. package/build/dex/uniswap-v3/forks/pharaoh-v3/pharaoh-v3-factory.js.map +1 -0
  96. package/build/dex/uniswap-v3/forks/pharaoh-v3/pharaoh-v3-pool.d.ts +12 -0
  97. package/build/dex/uniswap-v3/forks/pharaoh-v3/pharaoh-v3-pool.js +142 -0
  98. package/build/dex/uniswap-v3/forks/pharaoh-v3/pharaoh-v3-pool.js.map +1 -0
  99. package/build/dex/uniswap-v3/forks/pharaoh-v3/utils.d.ts +4 -0
  100. package/build/dex/uniswap-v3/forks/pharaoh-v3/utils.js +56 -0
  101. package/build/dex/uniswap-v3/forks/pharaoh-v3/utils.js.map +1 -0
  102. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-pool.d.ts +2 -2
  103. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-pool.js.map +1 -1
  104. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js +1 -0
  105. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js.map +1 -1
  106. package/build/dex/uniswap-v3/uniswap-v3-pool.d.ts +2 -1
  107. package/build/dex/uniswap-v3/uniswap-v3-pool.js +3 -1
  108. package/build/dex/uniswap-v3/uniswap-v3-pool.js.map +1 -1
  109. package/build/dex/uniswap-v3/uniswap-v3.js +1 -1
  110. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  111. package/build/dex/uniswap-v4/contract-math/Position.d.ts +6 -0
  112. package/build/dex/uniswap-v4/contract-math/Position.js +29 -0
  113. package/build/dex/uniswap-v4/contract-math/Position.js.map +1 -1
  114. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.d.ts +7 -0
  115. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.js +28 -0
  116. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.js.map +1 -0
  117. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.d.ts +0 -0
  118. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.js +2 -0
  119. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.js.map +1 -0
  120. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.d.ts +7 -0
  121. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.js +28 -0
  122. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.js.map +1 -0
  123. package/build/dex/uniswap-v4/hooks/fee-hook/types.d.ts +0 -0
  124. package/build/dex/uniswap-v4/hooks/fee-hook/types.js +2 -0
  125. package/build/dex/uniswap-v4/hooks/fee-hook/types.js.map +1 -0
  126. package/build/dex/uniswap-v4/hooks/index.d.ts +1 -0
  127. package/build/dex/uniswap-v4/hooks/index.js +9 -0
  128. package/build/dex/uniswap-v4/hooks/index.js.map +1 -0
  129. package/build/dex/uniswap-v4/hooks/spot.d.ts +15 -0
  130. package/build/dex/uniswap-v4/hooks/spot.js +109 -0
  131. package/build/dex/uniswap-v4/hooks/spot.js.map +1 -0
  132. package/build/dex/uniswap-v4/hooks/template.d.ts +150 -0
  133. package/build/dex/uniswap-v4/hooks/template.js +104 -0
  134. package/build/dex/uniswap-v4/hooks/template.js.map +1 -0
  135. package/build/dex/usdc-transmuter/usdc-transmuter-pool.d.ts +26 -0
  136. package/build/dex/usdc-transmuter/usdc-transmuter-pool.js +75 -0
  137. package/build/dex/usdc-transmuter/usdc-transmuter-pool.js.map +1 -0
  138. package/build/dex/usual/usual-usdc-usdc.d.ts +17 -0
  139. package/build/dex/usual/usual-usdc-usdc.js +59 -0
  140. package/build/dex/usual/usual-usdc-usdc.js.map +1 -0
  141. package/build/dex/{se-vlr → yo}/config.d.ts +1 -1
  142. package/build/dex/yo/config.js +21 -0
  143. package/build/dex/yo/config.js.map +1 -0
  144. package/build/dex/yo/types.d.ts +13 -0
  145. package/build/dex/yo/types.js +3 -0
  146. package/build/dex/{se-vlr → yo}/types.js.map +1 -1
  147. package/build/dex/yo/yo-pool.d.ts +13 -0
  148. package/build/dex/yo/yo-pool.js +26 -0
  149. package/build/dex/yo/yo-pool.js.map +1 -0
  150. package/build/dex/yo/yo.d.ts +39 -0
  151. package/build/dex/yo/yo.js +248 -0
  152. package/build/dex/yo/yo.js.map +1 -0
  153. package/build/implementations/api-paraswap-sdk.d.ts +25 -0
  154. package/build/implementations/api-paraswap-sdk.js +102 -0
  155. package/build/implementations/api-paraswap-sdk.js.map +1 -0
  156. package/package.json +1 -1
  157. package/build/abi/Jarvis.json +0 -1172
  158. package/build/abi/Onebit.json +0 -736
  159. package/build/abi/Shell.json +0 -1294
  160. package/build/abi/TraderJoeV2Router.json +0 -50
  161. package/build/abi/wUSDM.json +0 -757
  162. package/build/abi/zrx.v2.json +0 -1967
  163. package/build/abi/zrx.v3.json +0 -3454
  164. package/build/abi/zrx.v4.json +0 -2193
  165. package/build/dex/OneInchLp.d.ts +0 -24
  166. package/build/dex/OneInchLp.js +0 -43
  167. package/build/dex/OneInchLp.js.map +0 -1
  168. package/build/dex/bProtocol/bProtocol.d.ts +0 -15
  169. package/build/dex/bProtocol/bProtocol.js +0 -56
  170. package/build/dex/bProtocol/bProtocol.js.map +0 -1
  171. package/build/dex/bProtocol/types.d.ts +0 -11
  172. package/build/dex/bProtocol/types.js +0 -8
  173. package/build/dex/bProtocol/types.js.map +0 -1
  174. package/build/dex/jarvis.d.ts +0 -56
  175. package/build/dex/jarvis.js +0 -163
  176. package/build/dex/jarvis.js.map +0 -1
  177. package/build/dex/mStable.d.ts +0 -44
  178. package/build/dex/mStable.js +0 -75
  179. package/build/dex/mStable.js.map +0 -1
  180. package/build/dex/onebit/onebit.d.ts +0 -16
  181. package/build/dex/onebit/onebit.js +0 -61
  182. package/build/dex/onebit/onebit.js.map +0 -1
  183. package/build/dex/onebit/types.d.ts +0 -14
  184. package/build/dex/onebit/types.js +0 -8
  185. package/build/dex/onebit/types.js.map +0 -1
  186. package/build/dex/se-vlr/config.js +0 -24
  187. package/build/dex/se-vlr/config.js.map +0 -1
  188. package/build/dex/se-vlr/se-vlr-pool.js +0 -70
  189. package/build/dex/se-vlr/se-vlr-pool.js.map +0 -1
  190. package/build/dex/se-vlr/se-vlr.d.ts +0 -35
  191. package/build/dex/se-vlr/se-vlr.js +0 -131
  192. package/build/dex/se-vlr/se-vlr.js.map +0 -1
  193. package/build/dex/se-vlr/types.d.ts +0 -6
  194. package/build/dex/shell.d.ts +0 -25
  195. package/build/dex/shell.js +0 -41
  196. package/build/dex/shell.js.map +0 -1
  197. package/build/dex/trader-joe-v2.d.ts +0 -40
  198. package/build/dex/trader-joe-v2.js +0 -74
  199. package/build/dex/trader-joe-v2.js.map +0 -1
  200. package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +0 -94
  201. package/build/dex/uniswap-v3/uniswap-v3-new.js +0 -923
  202. package/build/dex/uniswap-v3/uniswap-v3-new.js.map +0 -1
  203. package/build/dex/usual-bond/config.js +0 -13
  204. package/build/dex/usual-bond/config.js.map +0 -1
  205. package/build/dex/usual-bond/types.d.ts +0 -7
  206. package/build/dex/usual-bond/usual-bond.js +0 -176
  207. package/build/dex/usual-bond/usual-bond.js.map +0 -1
  208. package/build/dex/wusdm/config.d.ts +0 -3
  209. package/build/dex/wusdm/config.js +0 -43
  210. package/build/dex/wusdm/config.js.map +0 -1
  211. package/build/dex/wusdm/constants.d.ts +0 -2
  212. package/build/dex/wusdm/constants.js +0 -6
  213. package/build/dex/wusdm/constants.js.map +0 -1
  214. package/build/dex/wusdm/types.d.ts +0 -18
  215. package/build/dex/wusdm/types.js +0 -11
  216. package/build/dex/wusdm/types.js.map +0 -1
  217. package/build/dex/wusdm/wusdm-pool.d.ts +0 -21
  218. package/build/dex/wusdm/wusdm-pool.js +0 -74
  219. package/build/dex/wusdm/wusdm-pool.js.map +0 -1
  220. package/build/dex/wusdm/wusdm.d.ts +0 -46
  221. package/build/dex/wusdm/wusdm.js +0 -243
  222. package/build/dex/wusdm/wusdm.js.map +0 -1
  223. package/build/dex/zerox/config.d.ts +0 -2
  224. package/build/dex/zerox/config.js +0 -33
  225. package/build/dex/zerox/config.js.map +0 -1
  226. package/build/dex/zerox/index.d.ts +0 -22
  227. package/build/dex/zerox/index.js +0 -225
  228. package/build/dex/zerox/index.js.map +0 -1
  229. package/build/dex/zerox/order.d.ts +0 -88
  230. package/build/dex/zerox/order.js +0 -53
  231. package/build/dex/zerox/order.js.map +0 -1
  232. package/build/dex/zerox/types.d.ts +0 -73
  233. package/build/dex/zerox/types.js +0 -21
  234. package/build/dex/zerox/types.js.map +0 -1
  235. /package/build/dex/{se-vlr → aave-pt-to-underlying}/types.js +0 -0
  236. /package/build/dex/{usual-bond → aave-pt-to-usdc}/types.js +0 -0
@@ -1,10 +1,39 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Position = void 0;
4
+ const utils_1 = require("../../../utils");
4
5
  class Position {
5
6
  static calculatePositionKey(owner, tickLower, tickUpper, salt) {
6
7
  return `${owner}-${tickLower.toString()}-${tickUpper.toString()}-${salt}`;
7
8
  }
9
+ static get(poolState, owner, tickLower, tickUpper, salt) {
10
+ const positionKey = Position.calculatePositionKey(owner, tickLower, tickUpper, salt);
11
+ return poolState.positions[positionKey];
12
+ }
13
+ static update(poolState, owner, tickLower, tickUpper, salt, liquidityDelta, feeGrowthInside0X128, feeGrowthInside1X128) {
14
+ const positionKey = Position.calculatePositionKey(owner, tickLower, tickUpper, salt);
15
+ let position = poolState.positions[positionKey];
16
+ (0, utils_1._require)(Boolean(position), 'Position does not exist', { position });
17
+ let { liquidity, feeGrowthInside0LastX128, feeGrowthInside1LastX128 } = position;
18
+ if (liquidityDelta === 0n) {
19
+ (0, utils_1._require)(liquidity !== 0n, 'Cannot update empty position', {
20
+ liquidityDelta,
21
+ });
22
+ }
23
+ else {
24
+ liquidity += liquidityDelta;
25
+ }
26
+ const feesOwed0 = ((feeGrowthInside0X128 - feeGrowthInside0LastX128) * liquidity) /
27
+ BigInt(1 << 128);
28
+ const feesOwed1 = ((feeGrowthInside1X128 - feeGrowthInside1LastX128) * liquidity) /
29
+ BigInt(1 << 128);
30
+ poolState.positions[positionKey] = {
31
+ liquidity,
32
+ feeGrowthInside0LastX128: feeGrowthInside0X128,
33
+ feeGrowthInside1LastX128: feeGrowthInside1X128,
34
+ };
35
+ return { feesOwed0, feesOwed1 };
36
+ }
8
37
  }
9
38
  exports.Position = Position;
10
39
  //# sourceMappingURL=Position.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Position.js","sourceRoot":"","sources":["../../../../src/dex/uniswap-v4/contract-math/Position.ts"],"names":[],"mappings":";;;AAGA,MAAa,QAAQ;IACZ,MAAM,CAAC,oBAAoB,CAChC,KAAa,EACb,SAAiB,EACjB,SAAiB,EACjB,IAAY;QAEZ,OAAO,GAAG,KAAK,IAAI,SAAS,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;IAC5E,CAAC;CAgEF;AAxED,4BAwEC"}
1
+ {"version":3,"file":"Position.js","sourceRoot":"","sources":["../../../../src/dex/uniswap-v4/contract-math/Position.ts"],"names":[],"mappings":";;;AACA,0CAA0C;AAE1C,MAAa,QAAQ;IACZ,MAAM,CAAC,oBAAoB,CAChC,KAAa,EACb,SAAiB,EACjB,SAAiB,EACjB,IAAY;QAEZ,OAAO,GAAG,KAAK,IAAI,SAAS,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;IAC5E,CAAC;IAED,MAAM,CAAC,GAAG,CACR,SAAoB,EACpB,KAAa,EACb,SAAiB,EACjB,SAAiB,EACjB,IAAY;QAEZ,MAAM,WAAW,GAAG,QAAQ,CAAC,oBAAoB,CAC/C,KAAK,EACL,SAAS,EACT,SAAS,EACT,IAAI,CACL,CAAC;QAEF,OAAO,SAAS,CAAC,SAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,MAAM,CACX,SAAoB,EACpB,KAAa,EACb,SAAiB,EACjB,SAAiB,EACjB,IAAY,EACZ,cAAsB,EACtB,oBAA4B,EAC5B,oBAA4B;QAE5B,MAAM,WAAW,GAAG,QAAQ,CAAC,oBAAoB,CAC/C,KAAK,EACL,SAAS,EACT,SAAS,EACT,IAAI,CACL,CAAC;QACF,IAAI,QAAQ,GAAG,SAAS,CAAC,SAAU,CAAC,WAAW,CAAC,CAAC;QAEjD,IAAA,gBAAQ,EAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,yBAAyB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAErE,IAAI,EAAE,SAAS,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,GACnE,QAAQ,CAAC;QAEX,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;YAC1B,IAAA,gBAAQ,EAAC,SAAS,KAAK,EAAE,EAAE,8BAA8B,EAAE;gBACzD,cAAc;aACf,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,SAAS,IAAI,cAAc,CAAC;QAC9B,CAAC;QAED,MAAM,SAAS,GACb,CAAC,CAAC,oBAAoB,GAAG,wBAAwB,CAAC,GAAG,SAAS,CAAC;YAC/D,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACnB,MAAM,SAAS,GACb,CAAC,CAAC,oBAAoB,GAAG,wBAAwB,CAAC,GAAG,SAAS,CAAC;YAC/D,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAEnB,SAAS,CAAC,SAAU,CAAC,WAAW,CAAC,GAAG;YAClC,SAAS;YACT,wBAAwB,EAAE,oBAAoB;YAC9C,wBAAwB,EAAE,oBAAoB;SAC/C,CAAC;QAEF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;IAClC,CAAC;CACF;AAzED,4BAyEC"}
@@ -0,0 +1,7 @@
1
+ import { UniswapV4Pool } from '../../uniswap-v4-pool';
2
+ import { PoolState } from '../../types';
3
+ export declare class CabalcoinHookPool extends UniswapV4Pool {
4
+ private hookInterface;
5
+ constructor(...args: ConstructorParameters<typeof UniswapV4Pool>);
6
+ handleCustomFeeChangedEvent(event: any, poolState: PoolState): Promise<PoolState>;
7
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CabalcoinHookPool = void 0;
7
+ const abi_1 = require("@ethersproject/abi");
8
+ const uniswap_v4_pool_1 = require("../../uniswap-v4-pool");
9
+ const uniswap_v4_pool_math_1 = require("../../contract-math/uniswap-v4-pool-math");
10
+ const cabalcoin_hook_abi_json_1 = __importDefault(require("../../../../abi/uniswap-v4/hooks/cabalcoin-hook.abi.json"));
11
+ class CabalcoinHookPool extends uniswap_v4_pool_1.UniswapV4Pool {
12
+ hookInterface = new abi_1.Interface(cabalcoin_hook_abi_json_1.default);
13
+ constructor(...args) {
14
+ super(...args);
15
+ this.addressesSubscribed.push(this.hooks);
16
+ this.logDecoders.push((log) => this.hookInterface.parseLog(log));
17
+ this.handlers['CustomFeeChanged'] =
18
+ this.handleCustomFeeChangedEvent.bind(this);
19
+ }
20
+ async handleCustomFeeChangedEvent(event, poolState) {
21
+ const id = event.args.id.toLowerCase();
22
+ uniswap_v4_pool_math_1.uniswapV4PoolMath.checkPoolInitialized(poolState);
23
+ poolState.fee = event.args.newFee.toString();
24
+ return poolState;
25
+ }
26
+ }
27
+ exports.CabalcoinHookPool = CabalcoinHookPool;
28
+ //# sourceMappingURL=cabalcoin-hook-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cabalcoin-hook-pool.js","sourceRoot":"","sources":["../../../../../src/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA+C;AAC/C,2DAAsD;AAEtD,mFAA6E;AAE7E,uHAAwF;AAExF,MAAa,iBAAkB,SAAQ,+BAAa;IAC1C,aAAa,GAAG,IAAI,eAAS,CAAC,iCAAgB,CAAC,CAAC;IAExD,YAAY,GAAG,IAAiD;QAC9D,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC/B,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,2BAA2B,CAAC,KAAU,EAAE,SAAoB;QAChE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACvC,wCAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAElD,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAE7C,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AArBD,8CAqBC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/dex/uniswap-v4/hooks/cabalcoin-hook/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { UniswapV4Pool } from '../../uniswap-v4-pool';
2
+ import { PoolState } from '../../types';
3
+ export declare class FeeHookPool extends UniswapV4Pool {
4
+ private hookInterface;
5
+ constructor(...args: ConstructorParameters<typeof UniswapV4Pool>);
6
+ handleCustomFeeChangedEvent(event: any, poolState: PoolState): Promise<PoolState>;
7
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FeeHookPool = void 0;
7
+ const abi_1 = require("@ethersproject/abi");
8
+ const uniswap_v4_pool_1 = require("../../uniswap-v4-pool");
9
+ const uniswap_v4_pool_math_1 = require("../../contract-math/uniswap-v4-pool-math");
10
+ const fee_hook_abi_json_1 = __importDefault(require("../../../../abi/uniswap-v4/hooks/fee-hook.abi.json"));
11
+ class FeeHookPool extends uniswap_v4_pool_1.UniswapV4Pool {
12
+ hookInterface = new abi_1.Interface(fee_hook_abi_json_1.default);
13
+ constructor(...args) {
14
+ super(...args);
15
+ this.addressesSubscribed.push(this.hooks);
16
+ this.logDecoders.push((log) => this.hookInterface.parseLog(log));
17
+ this.handlers['CustomFeeChanged'] =
18
+ this.handleCustomFeeChangedEvent.bind(this);
19
+ }
20
+ async handleCustomFeeChangedEvent(event, poolState) {
21
+ const id = event.args.id.toLowerCase();
22
+ uniswap_v4_pool_math_1.uniswapV4PoolMath.checkPoolInitialized(poolState);
23
+ poolState.fee = event.args.newFee.toString();
24
+ return poolState;
25
+ }
26
+ }
27
+ exports.FeeHookPool = FeeHookPool;
28
+ //# sourceMappingURL=fee-hook-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fee-hook-pool.js","sourceRoot":"","sources":["../../../../../src/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA+C;AAC/C,2DAAsD;AAEtD,mFAA6E;AAE7E,2GAA4E;AAE5E,MAAa,WAAY,SAAQ,+BAAa;IACpC,aAAa,GAAG,IAAI,eAAS,CAAC,2BAAU,CAAC,CAAC;IAElD,YAAY,GAAG,IAAiD;QAC9D,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC/B,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,2BAA2B,CAAC,KAAU,EAAE,SAAoB;QAChE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACvC,wCAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAElD,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAE7C,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AArBD,kCAqBC"}
File without changes
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/dex/uniswap-v4/hooks/fee-hook/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const template_1 = require("./template");
4
+ const spot_1 = require("./spot");
5
+ const SPOT_HOOK_ADDRESS = '0xa0b0d2d00fd544d8e0887f1a3cedd6e24baf10cc';
6
+ template_1.uniswapV4HookRegistry.registerFactory(SPOT_HOOK_ADDRESS, params => {
7
+ return new spot_1.SpotHook(params);
8
+ });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/dex/uniswap-v4/hooks/index.ts"],"names":[],"mappings":";;AAAA,yCAAmD;AACnD,iCAAkC;AAElC,MAAM,iBAAiB,GAAG,4CAA4C,CAAC;AAEvE,gCAAqB,CAAC,eAAe,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE;IAChE,OAAO,IAAI,eAAQ,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { BaseUniswapV4Hook, HookAfterSwapParams, HookAfterSwapResult, HookBeforeSwapParams, HookBeforeSwapResult, HookFactoryParams } from './template';
2
+ export declare class SpotHook extends BaseUniswapV4Hook {
3
+ private policyManagerAddress?;
4
+ private dynamicFeeManagerAddress?;
5
+ private policyManagerContract?;
6
+ private dynamicFeeManagerContract?;
7
+ private feeCache;
8
+ constructor(params: HookFactoryParams);
9
+ bootstrap(): Promise<void>;
10
+ beforeSwap(params: HookBeforeSwapParams): Promise<HookBeforeSwapResult | void>;
11
+ afterSwap(params: HookAfterSwapParams): Promise<HookAfterSwapResult | void>;
12
+ private calculateHookFee;
13
+ private ensureContracts;
14
+ private loadFeeState;
15
+ }
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SpotHook = void 0;
7
+ const core_1 = require("@paraswap/core");
8
+ const SpotHook_json_1 = __importDefault(require("../../../abi/uniswap-v4/hooks/SpotHook.json"));
9
+ const SpotPolicyManager_json_1 = __importDefault(require("../../../abi/uniswap-v4/hooks/SpotPolicyManager.json"));
10
+ const SpotDynamicFeeManager_json_1 = __importDefault(require("../../../abi/uniswap-v4/hooks/SpotDynamicFeeManager.json"));
11
+ const template_1 = require("./template");
12
+ class SpotHook extends template_1.BaseUniswapV4Hook {
13
+ policyManagerAddress;
14
+ dynamicFeeManagerAddress;
15
+ policyManagerContract;
16
+ dynamicFeeManagerContract;
17
+ feeCache = new Map();
18
+ constructor(params) {
19
+ super(params.hookAddress, 'Spot', params);
20
+ }
21
+ async bootstrap() {
22
+ await this.ensureContracts();
23
+ }
24
+ async beforeSwap(params) {
25
+ if (params.blockNumber === undefined)
26
+ return undefined;
27
+ const { dynamicFeePPM, protocolFeePPM } = await this.loadFeeState(params.pool.id, params.blockNumber);
28
+ const result = {
29
+ metadata: { dynamicFeePPM, protocolFeePPM },
30
+ lpFeeOverride: dynamicFeePPM,
31
+ };
32
+ if (params.side === core_1.SwapSide.SELL &&
33
+ params.amountSpecified < 0n &&
34
+ protocolFeePPM > 0n) {
35
+ const hookFee = this.calculateHookFee(-params.amountSpecified, dynamicFeePPM, protocolFeePPM);
36
+ if (hookFee > 0n) {
37
+ result.amountSpecified = params.amountSpecified + hookFee;
38
+ }
39
+ }
40
+ return result;
41
+ }
42
+ async afterSwap(params) {
43
+ const metadata = params.metadata;
44
+ if (!metadata ||
45
+ metadata.protocolFeePPM === 0n ||
46
+ params.side !== core_1.SwapSide.BUY ||
47
+ params.amountIn <= 0n) {
48
+ return undefined;
49
+ }
50
+ const hookFee = this.calculateHookFee(params.amountIn, metadata.dynamicFeePPM, metadata.protocolFeePPM);
51
+ if (hookFee === 0n) {
52
+ return undefined;
53
+ }
54
+ return {
55
+ deltaAmountIn: hookFee,
56
+ };
57
+ }
58
+ calculateHookFee(amount, dynamicFeePPM, protocolFeePPM) {
59
+ if (amount === 0n || dynamicFeePPM === 0n || protocolFeePPM === 0n) {
60
+ return 0n;
61
+ }
62
+ return (amount * dynamicFeePPM * protocolFeePPM) / 1000000000000n;
63
+ }
64
+ async ensureContracts() {
65
+ if (this.policyManagerContract && this.dynamicFeeManagerContract) {
66
+ return;
67
+ }
68
+ const spotContract = new this.dexHelper.web3Provider.eth.Contract(SpotHook_json_1.default, this.hookAddress);
69
+ const [policyManager, dynamicFeeManager] = await Promise.all([
70
+ spotContract.methods.policyManager().call(),
71
+ spotContract.methods.dynamicFeeManager().call(),
72
+ ]);
73
+ this.policyManagerAddress = policyManager.toLowerCase();
74
+ this.dynamicFeeManagerAddress = dynamicFeeManager.toLowerCase();
75
+ this.policyManagerContract = new this.dexHelper.web3Provider.eth.Contract(SpotPolicyManager_json_1.default, this.policyManagerAddress);
76
+ this.dynamicFeeManagerContract =
77
+ new this.dexHelper.web3Provider.eth.Contract(SpotDynamicFeeManager_json_1.default, this.dynamicFeeManagerAddress);
78
+ }
79
+ async loadFeeState(poolId, blockNumber) {
80
+ await this.ensureContracts();
81
+ const normalizedPoolId = poolId.toLowerCase();
82
+ const cached = this.feeCache.get(normalizedPoolId);
83
+ if (cached && cached.blockNumber === blockNumber) {
84
+ return cached;
85
+ }
86
+ const [manualFeeRaw, protocolFeeRaw, feeStateRaw] = await Promise.all([
87
+ this.policyManagerContract.methods.getManualFee(normalizedPoolId).call({}, blockNumber),
88
+ this.policyManagerContract.methods.getPoolPOLShare(normalizedPoolId).call({}, blockNumber),
89
+ this.dynamicFeeManagerContract.methods.getFeeState(normalizedPoolId).call({}, blockNumber),
90
+ ]);
91
+ const manualFeeResponse = manualFeeRaw;
92
+ const manualFee = BigInt(manualFeeResponse.manualFee ?? manualFeeResponse[0]);
93
+ const hasManualFee = Boolean(manualFeeResponse.isSet ?? manualFeeResponse[1]);
94
+ const feeStateResponse = feeStateRaw;
95
+ const baseFee = BigInt(feeStateResponse.baseFeePpm ?? feeStateResponse[0]);
96
+ const surgeFee = BigInt(feeStateResponse.surgeFeePpm ?? feeStateResponse[1]);
97
+ const protocolFeePPM = BigInt(protocolFeeRaw);
98
+ const dynamicFeePPM = hasManualFee ? manualFee : baseFee + surgeFee;
99
+ const entry = {
100
+ blockNumber,
101
+ dynamicFeePPM,
102
+ protocolFeePPM,
103
+ };
104
+ this.feeCache.set(normalizedPoolId, entry);
105
+ return entry;
106
+ }
107
+ }
108
+ exports.SpotHook = SpotHook;
109
+ //# sourceMappingURL=spot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spot.js","sourceRoot":"","sources":["../../../../src/dex/uniswap-v4/hooks/spot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ import { SwapSide } from '@paraswap/core';
2
+ import { DeepReadonly } from 'ts-essentials';
3
+ import { IDexHelper } from '../../../dex-helper';
4
+ import { Address, Log, Logger } from '../../../types';
5
+ import { Pool, PoolState, SubgraphPool } from '../types';
6
+ /**
7
+ * Hook permission bits used by the Uniswap v4 hook address encoding.
8
+ * They match https://docs.uniswap.org/contracts/v4/concepts/hooks#permissions.
9
+ * Re-using Kyber's mapping so downstream teams have a familiar API.
10
+ */
11
+ export declare enum HookPermission {
12
+ AFTER_REMOVE_LIQUIDITY_RETURNS_DELTA = 0,
13
+ AFTER_ADD_LIQUIDITY_RETURNS_DELTA = 1,
14
+ AFTER_SWAP_RETURNS_DELTA = 2,
15
+ BEFORE_SWAP_RETURNS_DELTA = 3,
16
+ AFTER_DONATE = 4,
17
+ BEFORE_DONATE = 5,
18
+ AFTER_SWAP = 6,
19
+ BEFORE_SWAP = 7,
20
+ AFTER_REMOVE_LIQUIDITY = 8,
21
+ BEFORE_REMOVE_LIQUIDITY = 9,
22
+ AFTER_ADD_LIQUIDITY = 10,
23
+ BEFORE_ADD_LIQUIDITY = 11,
24
+ AFTER_INITIALIZE = 12,
25
+ BEFORE_INITIALIZE = 13
26
+ }
27
+ export declare const hasHookPermission: (address: Address, permission: HookPermission) => boolean;
28
+ export declare const canBeforeSwap: (address: Address) => boolean;
29
+ export declare const canAfterSwap: (address: Address) => boolean;
30
+ export type HookFactoryParams = {
31
+ dexHelper: IDexHelper;
32
+ dexKey: string;
33
+ logger: Logger;
34
+ network: number;
35
+ hookAddress: Address;
36
+ };
37
+ export type HookBootstrapParams = HookFactoryParams & {
38
+ pool: SubgraphPool;
39
+ };
40
+ export type HookStateContext = HookFactoryParams & {
41
+ pool: Pool;
42
+ poolState: DeepReadonly<PoolState>;
43
+ blockNumber: number;
44
+ };
45
+ export type HookBeforeSwapParams = HookStateContext & {
46
+ amountSpecified: bigint;
47
+ zeroForOne: boolean;
48
+ side: SwapSide;
49
+ };
50
+ export type HookBeforeSwapResult = {
51
+ /**
52
+ * Optional override for the amount specified that will be forwarded to pool math.
53
+ * Useful for hooks that deduct their own fee prior to the swap.
54
+ */
55
+ amountSpecified?: bigint;
56
+ /**
57
+ * Override for lpFee if the hook is dynamically adjusting the pool fee.
58
+ */
59
+ lpFeeOverride?: bigint;
60
+ /**
61
+ * Extra calldata that needs to be appended to router.swap parameters.
62
+ */
63
+ hookData?: string;
64
+ /**
65
+ * Optional state patch that will be merged in-memory before simulation continues.
66
+ */
67
+ statePatch?: Partial<PoolState>;
68
+ /**
69
+ * Free-form metadata (e.g. diagnostics, gas estimates) propagated to afterSwap.
70
+ */
71
+ metadata?: Record<string, unknown>;
72
+ };
73
+ export type HookAfterSwapParams = HookStateContext & {
74
+ amountIn: bigint;
75
+ amountOut: bigint;
76
+ zeroForOne: boolean;
77
+ side: SwapSide;
78
+ metadata?: Record<string, unknown>;
79
+ };
80
+ export type HookAfterSwapResult = {
81
+ deltaAmountIn?: bigint;
82
+ deltaAmountOut?: bigint;
83
+ statePatch?: Partial<PoolState>;
84
+ };
85
+ export type HookEventParams = HookFactoryParams & {
86
+ pool: Pool;
87
+ poolState: PoolState;
88
+ eventName: string;
89
+ eventArgs: any;
90
+ log: Log;
91
+ blockNumber: number;
92
+ };
93
+ export interface IUniswapV4Hook {
94
+ readonly name: string;
95
+ readonly hookAddress: Address;
96
+ readonly description?: string;
97
+ /**
98
+ * Optional hook-level initialization invoked once after the pool list is fetched.
99
+ */
100
+ bootstrap?(params: HookBootstrapParams): Promise<void>;
101
+ /**
102
+ * Allows hooks to filter pools beyond address equality (e.g. min TVL, custom fee).
103
+ */
104
+ supportsPool(pool: SubgraphPool): boolean;
105
+ /**
106
+ * Gives hooks a chance to enrich pool state (e.g. fetch additional storage slots).
107
+ */
108
+ extendPoolState?(context: HookStateContext): Promise<Partial<PoolState> | void>;
109
+ /**
110
+ * Invoked before SwapMath is executed to let hooks override inputs or provide hookData.
111
+ */
112
+ beforeSwap?(params: HookBeforeSwapParams): Promise<HookBeforeSwapResult | void>;
113
+ /**
114
+ * Invoked after pool math completes so hooks can settle their internal accounting.
115
+ */
116
+ afterSwap?(params: HookAfterSwapParams): Promise<HookAfterSwapResult | void>;
117
+ /**
118
+ * Hooks may request direct access to PoolManager events for bespoke state sync.
119
+ */
120
+ handlePoolEvent?(params: HookEventParams): Promise<Partial<PoolState> | void>;
121
+ /**
122
+ * Destroy internal caches.
123
+ */
124
+ destroy?(): void;
125
+ }
126
+ export declare abstract class BaseUniswapV4Hook implements IUniswapV4Hook {
127
+ readonly hookAddress: Address;
128
+ readonly name: string;
129
+ protected readonly params: HookFactoryParams;
130
+ readonly description?: string;
131
+ protected constructor(hookAddress: Address, name: string, params: HookFactoryParams);
132
+ bootstrap(_params: HookBootstrapParams): Promise<void>;
133
+ supportsPool(pool: SubgraphPool): boolean;
134
+ extendPoolState(_context: HookStateContext): Promise<Partial<PoolState> | void>;
135
+ beforeSwap(_params: HookBeforeSwapParams): Promise<HookBeforeSwapResult | void>;
136
+ afterSwap(_params: HookAfterSwapParams): Promise<HookAfterSwapResult | void>;
137
+ handlePoolEvent(_params: HookEventParams): Promise<Partial<PoolState> | void>;
138
+ destroy(): void;
139
+ protected get logger(): Logger;
140
+ protected get dexHelper(): IDexHelper;
141
+ }
142
+ export type HookFactory = (params: HookFactoryParams) => IUniswapV4Hook;
143
+ export declare class UniswapV4HookRegistry {
144
+ private readonly factories;
145
+ registerFactory(address: Address, factory: HookFactory): this;
146
+ unregisterFactory(address: Address): boolean;
147
+ getFactory(address: Address): HookFactory | undefined;
148
+ createHook(address: Address, params: Omit<HookFactoryParams, 'hookAddress'>): IUniswapV4Hook | undefined;
149
+ }
150
+ export declare const uniswapV4HookRegistry: UniswapV4HookRegistry;
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uniswapV4HookRegistry = exports.UniswapV4HookRegistry = exports.BaseUniswapV4Hook = exports.canAfterSwap = exports.canBeforeSwap = exports.hasHookPermission = exports.HookPermission = void 0;
4
+ /**
5
+ * Hook permission bits used by the Uniswap v4 hook address encoding.
6
+ * They match https://docs.uniswap.org/contracts/v4/concepts/hooks#permissions.
7
+ * Re-using Kyber's mapping so downstream teams have a familiar API.
8
+ */
9
+ var HookPermission;
10
+ (function (HookPermission) {
11
+ HookPermission[HookPermission["AFTER_REMOVE_LIQUIDITY_RETURNS_DELTA"] = 0] = "AFTER_REMOVE_LIQUIDITY_RETURNS_DELTA";
12
+ HookPermission[HookPermission["AFTER_ADD_LIQUIDITY_RETURNS_DELTA"] = 1] = "AFTER_ADD_LIQUIDITY_RETURNS_DELTA";
13
+ HookPermission[HookPermission["AFTER_SWAP_RETURNS_DELTA"] = 2] = "AFTER_SWAP_RETURNS_DELTA";
14
+ HookPermission[HookPermission["BEFORE_SWAP_RETURNS_DELTA"] = 3] = "BEFORE_SWAP_RETURNS_DELTA";
15
+ HookPermission[HookPermission["AFTER_DONATE"] = 4] = "AFTER_DONATE";
16
+ HookPermission[HookPermission["BEFORE_DONATE"] = 5] = "BEFORE_DONATE";
17
+ HookPermission[HookPermission["AFTER_SWAP"] = 6] = "AFTER_SWAP";
18
+ HookPermission[HookPermission["BEFORE_SWAP"] = 7] = "BEFORE_SWAP";
19
+ HookPermission[HookPermission["AFTER_REMOVE_LIQUIDITY"] = 8] = "AFTER_REMOVE_LIQUIDITY";
20
+ HookPermission[HookPermission["BEFORE_REMOVE_LIQUIDITY"] = 9] = "BEFORE_REMOVE_LIQUIDITY";
21
+ HookPermission[HookPermission["AFTER_ADD_LIQUIDITY"] = 10] = "AFTER_ADD_LIQUIDITY";
22
+ HookPermission[HookPermission["BEFORE_ADD_LIQUIDITY"] = 11] = "BEFORE_ADD_LIQUIDITY";
23
+ HookPermission[HookPermission["AFTER_INITIALIZE"] = 12] = "AFTER_INITIALIZE";
24
+ HookPermission[HookPermission["BEFORE_INITIALIZE"] = 13] = "BEFORE_INITIALIZE";
25
+ })(HookPermission || (exports.HookPermission = HookPermission = {}));
26
+ const ADDRESS_HEX_PREFIX = '0x';
27
+ const normalizeAddress = (address) => address.toLowerCase().startsWith(ADDRESS_HEX_PREFIX)
28
+ ? address.toLowerCase()
29
+ : `${ADDRESS_HEX_PREFIX}${address.toLowerCase()}`;
30
+ const decodePermissionBits = (address) => {
31
+ const normalized = normalizeAddress(address).slice(2).padStart(40, '0');
32
+ const lastTwoBytes = normalized.slice(-4);
33
+ return parseInt(lastTwoBytes, 16);
34
+ };
35
+ const hasHookPermission = (address, permission) => {
36
+ const bits = decodePermissionBits(address);
37
+ return (bits & (1 << permission)) !== 0;
38
+ };
39
+ exports.hasHookPermission = hasHookPermission;
40
+ const canBeforeSwap = (address) => (0, exports.hasHookPermission)(address, HookPermission.BEFORE_SWAP);
41
+ exports.canBeforeSwap = canBeforeSwap;
42
+ const canAfterSwap = (address) => (0, exports.hasHookPermission)(address, HookPermission.AFTER_SWAP);
43
+ exports.canAfterSwap = canAfterSwap;
44
+ class BaseUniswapV4Hook {
45
+ hookAddress;
46
+ name;
47
+ params;
48
+ description;
49
+ constructor(hookAddress, name, params) {
50
+ this.hookAddress = hookAddress;
51
+ this.name = name;
52
+ this.params = params;
53
+ }
54
+ async bootstrap(_params) {
55
+ // No-op by default.
56
+ }
57
+ supportsPool(pool) {
58
+ return normalizeAddress(pool.hooks) === normalizeAddress(this.hookAddress);
59
+ }
60
+ async extendPoolState(_context) {
61
+ return undefined;
62
+ }
63
+ async beforeSwap(_params) {
64
+ return undefined;
65
+ }
66
+ async afterSwap(_params) {
67
+ return undefined;
68
+ }
69
+ async handlePoolEvent(_params) {
70
+ return undefined;
71
+ }
72
+ destroy() {
73
+ // No-op by default.
74
+ }
75
+ get logger() {
76
+ return this.params.logger;
77
+ }
78
+ get dexHelper() {
79
+ return this.params.dexHelper;
80
+ }
81
+ }
82
+ exports.BaseUniswapV4Hook = BaseUniswapV4Hook;
83
+ class UniswapV4HookRegistry {
84
+ factories = new Map();
85
+ registerFactory(address, factory) {
86
+ this.factories.set(normalizeAddress(address), factory);
87
+ return this;
88
+ }
89
+ unregisterFactory(address) {
90
+ return this.factories.delete(normalizeAddress(address));
91
+ }
92
+ getFactory(address) {
93
+ return this.factories.get(normalizeAddress(address));
94
+ }
95
+ createHook(address, params) {
96
+ const factory = this.getFactory(address);
97
+ if (!factory)
98
+ return undefined;
99
+ return factory({ ...params, hookAddress: normalizeAddress(address) });
100
+ }
101
+ }
102
+ exports.UniswapV4HookRegistry = UniswapV4HookRegistry;
103
+ exports.uniswapV4HookRegistry = new UniswapV4HookRegistry();
104
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../src/dex/uniswap-v4/hooks/template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { DeepReadonly } from 'ts-essentials';
3
+ import { Log, Logger } from '../../types';
4
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
5
+ import { IDexHelper } from '../../dex-helper/idex-helper';
6
+ import { PoolState } from './types';
7
+ import { Contract } from 'ethers';
8
+ export declare class UsdcTransmuterEventPool extends StatefulEventSubscriber<PoolState> {
9
+ readonly parentName: string;
10
+ protected network: number;
11
+ protected dexHelper: IDexHelper;
12
+ protected usdcTransmuterAddress: string;
13
+ protected usdcAddress: string;
14
+ protected usdcTransmuterIface: Interface;
15
+ protected usdcContract: Contract;
16
+ handlers: {
17
+ [event: string]: (event: any, state: DeepReadonly<PoolState>, log: Readonly<Log>) => DeepReadonly<PoolState> | null;
18
+ };
19
+ logDecoder: (log: Log) => any;
20
+ constructor(parentName: string, network: number, dexHelper: IDexHelper, logger: Logger, usdcTransmuterAddress: string, usdcAddress: string, usdcTransmuterIface?: Interface, usdcContract?: Contract);
21
+ protected processLog(state: DeepReadonly<PoolState>, log: Readonly<Log>): DeepReadonly<PoolState> | null;
22
+ generateState(blockNumber?: number | 'latest'): Promise<DeepReadonly<PoolState>>;
23
+ getOrGenerateState(blockNumber: number): Promise<PoolState>;
24
+ handleDeposit(event: any, state: DeepReadonly<PoolState>, log: Readonly<Log>): DeepReadonly<PoolState> | null;
25
+ handleWithdrawal(event: any, state: DeepReadonly<PoolState>, log: Readonly<Log>): DeepReadonly<PoolState> | null;
26
+ }