@whetstone-research/doppler-sdk 0.0.22 → 0.0.24

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 (256) hide show
  1. package/README.md +553 -221
  2. package/dist/DopplerSDK.d.mts +12 -0
  3. package/dist/DopplerSDK.d.ts +12 -0
  4. package/dist/DopplerSDK.js +29 -26
  5. package/dist/DopplerSDK.mjs +28 -25
  6. package/dist/abis/bytecodes/derc20.js +2 -2
  7. package/dist/abis/bytecodes/derc20.mjs +1 -1
  8. package/dist/abis/bytecodes/derc2080.js +2 -2
  9. package/dist/abis/bytecodes/derc2080.mjs +1 -1
  10. package/dist/abis/bytecodes/doppler.js +2 -2
  11. package/dist/abis/bytecodes/doppler.mjs +1 -1
  12. package/dist/abis/bytecodes/dopplerDN404.js +2 -2
  13. package/dist/abis/bytecodes/dopplerDN404.mjs +1 -1
  14. package/dist/abis/bytecodes/stateView.js +2 -2
  15. package/dist/abis/bytecodes/stateView.mjs +1 -1
  16. package/dist/abis/bytecodes.js +10 -10
  17. package/dist/abis/bytecodes.mjs +5 -5
  18. package/dist/abis/index.d.mts +421 -10
  19. package/dist/abis/index.d.ts +421 -10
  20. package/dist/abis/index.js +41 -33
  21. package/dist/abis/index.mjs +6 -6
  22. package/dist/addresses.d.mts +6 -0
  23. package/dist/addresses.d.ts +6 -0
  24. package/dist/addresses.js +7 -7
  25. package/dist/addresses.mjs +2 -2
  26. package/dist/builders/DynamicAuctionBuilder.d.mts +2 -0
  27. package/dist/builders/DynamicAuctionBuilder.d.ts +2 -0
  28. package/dist/builders/DynamicAuctionBuilder.js +17 -16
  29. package/dist/builders/DynamicAuctionBuilder.mjs +16 -15
  30. package/dist/builders/MulticurveBuilder.d.mts +18 -5
  31. package/dist/builders/MulticurveBuilder.d.ts +18 -5
  32. package/dist/builders/MulticurveBuilder.js +17 -16
  33. package/dist/builders/MulticurveBuilder.mjs +16 -15
  34. package/dist/builders/StaticAuctionBuilder.js +17 -16
  35. package/dist/builders/StaticAuctionBuilder.mjs +16 -15
  36. package/dist/builders/index.js +25 -24
  37. package/dist/builders/index.mjs +18 -17
  38. package/dist/builders/shared.d.mts +1 -1
  39. package/dist/builders/shared.d.ts +1 -1
  40. package/dist/builders/shared.js +19 -17
  41. package/dist/builders/shared.mjs +15 -13
  42. package/dist/{chunk-3XYDN2XB.js → chunk-2A3B3NVB.js} +170 -25
  43. package/dist/chunk-2A3B3NVB.js.map +1 -0
  44. package/dist/{chunk-AZOBEWP3.mjs → chunk-3NMGCQJ4.mjs} +2 -2
  45. package/dist/chunk-3NMGCQJ4.mjs.map +1 -0
  46. package/dist/{chunk-CUB4F546.js → chunk-44CYUEPG.js} +25 -13
  47. package/dist/chunk-44CYUEPG.js.map +1 -0
  48. package/dist/{chunk-AZH2P4JK.mjs → chunk-5GQJRNFL.mjs} +3 -3
  49. package/dist/{chunk-AZH2P4JK.mjs.map → chunk-5GQJRNFL.mjs.map} +1 -1
  50. package/dist/{chunk-ZDTJ3BPS.js → chunk-5JHXBDZD.js} +20 -20
  51. package/dist/{chunk-ZDTJ3BPS.js.map → chunk-5JHXBDZD.js.map} +1 -1
  52. package/dist/{chunk-OGYWNJGI.js → chunk-5TQOT6CW.js} +2 -2
  53. package/dist/chunk-5TQOT6CW.js.map +1 -0
  54. package/dist/{chunk-COOVGAOE.js → chunk-65CESA3J.js} +19 -13
  55. package/dist/chunk-65CESA3J.js.map +1 -0
  56. package/dist/{chunk-5VV7STYK.js → chunk-7A4DBBXA.js} +141 -101
  57. package/dist/chunk-7A4DBBXA.js.map +1 -0
  58. package/dist/chunk-7ZUV6WPX.mjs +3 -0
  59. package/dist/{chunk-5TL5V6UX.mjs.map → chunk-7ZUV6WPX.mjs.map} +1 -1
  60. package/dist/{chunk-RXUJ4DUB.js → chunk-A2CJYRRQ.js} +28 -28
  61. package/dist/{chunk-RXUJ4DUB.js.map → chunk-A2CJYRRQ.js.map} +1 -1
  62. package/dist/{chunk-QQEOKYEX.js → chunk-BK3S6SVR.js} +383 -83
  63. package/dist/chunk-BK3S6SVR.js.map +1 -0
  64. package/dist/{chunk-S4IZ5ATO.js → chunk-BQZTELUX.js} +5 -5
  65. package/dist/{chunk-S4IZ5ATO.js.map → chunk-BQZTELUX.js.map} +1 -1
  66. package/dist/{chunk-WKKOBMXR.js → chunk-CFXXUZJY.js} +57 -22
  67. package/dist/chunk-CFXXUZJY.js.map +1 -0
  68. package/dist/chunk-DCWF3EMP.js +171 -0
  69. package/dist/chunk-DCWF3EMP.js.map +1 -0
  70. package/dist/{chunk-YWK6YH6M.mjs → chunk-DQJXCZU2.mjs} +5 -5
  71. package/dist/{chunk-YWK6YH6M.mjs.map → chunk-DQJXCZU2.mjs.map} +1 -1
  72. package/dist/chunk-DSYPZETD.js +4 -0
  73. package/dist/{chunk-3PNCB4W5.js.map → chunk-DSYPZETD.js.map} +1 -1
  74. package/dist/chunk-F2BYG63D.mjs +145 -0
  75. package/dist/chunk-F2BYG63D.mjs.map +1 -0
  76. package/dist/{chunk-N33R22A2.js → chunk-FNUBKONK.js} +2 -2
  77. package/dist/{chunk-N33R22A2.js.map → chunk-FNUBKONK.js.map} +1 -1
  78. package/dist/chunk-FXTGIKQG.mjs +3 -0
  79. package/dist/{chunk-SD7BHT2F.mjs.map → chunk-FXTGIKQG.mjs.map} +1 -1
  80. package/dist/{chunk-MQNSJCAW.mjs → chunk-GSBQIVME.mjs} +2 -2
  81. package/dist/{chunk-MQNSJCAW.mjs.map → chunk-GSBQIVME.mjs.map} +1 -1
  82. package/dist/{chunk-SAX7P3MH.js → chunk-HJFVRV47.js} +2 -2
  83. package/dist/{chunk-SAX7P3MH.js.map → chunk-HJFVRV47.js.map} +1 -1
  84. package/dist/chunk-IIM2CSDQ.js +147 -0
  85. package/dist/chunk-IIM2CSDQ.js.map +1 -0
  86. package/dist/{chunk-O3RH43H3.mjs → chunk-IUTIHSLH.mjs} +4 -4
  87. package/dist/{chunk-O3RH43H3.mjs.map → chunk-IUTIHSLH.mjs.map} +1 -1
  88. package/dist/chunk-IUZ3BBQP.mjs +117 -0
  89. package/dist/chunk-IUZ3BBQP.mjs.map +1 -0
  90. package/dist/{chunk-D7PCIMWU.mjs → chunk-IX4V4UGW.mjs} +4 -4
  91. package/dist/{chunk-D7PCIMWU.mjs.map → chunk-IX4V4UGW.mjs.map} +1 -1
  92. package/dist/{chunk-2ZM4JVFC.js → chunk-J62YDWIK.js} +2 -2
  93. package/dist/chunk-J62YDWIK.js.map +1 -0
  94. package/dist/{chunk-E2NF4AQB.mjs → chunk-JLUOFAE4.mjs} +272 -12
  95. package/dist/chunk-JLUOFAE4.mjs.map +1 -0
  96. package/dist/{chunk-KITPRKQ4.mjs → chunk-LW3CYA27.mjs} +351 -51
  97. package/dist/chunk-LW3CYA27.mjs.map +1 -0
  98. package/dist/{chunk-3L4DLMOK.js → chunk-MEA2C5YX.js} +16 -16
  99. package/dist/{chunk-3L4DLMOK.js.map → chunk-MEA2C5YX.js.map} +1 -1
  100. package/dist/{chunk-3MVW6UIW.js → chunk-MU56HCUI.js} +273 -11
  101. package/dist/chunk-MU56HCUI.js.map +1 -0
  102. package/dist/chunk-OCIY7QEJ.mjs +169 -0
  103. package/dist/chunk-OCIY7QEJ.mjs.map +1 -0
  104. package/dist/{chunk-WDSV4O6T.mjs → chunk-OHA5KJ2M.mjs} +2 -2
  105. package/dist/chunk-OHA5KJ2M.mjs.map +1 -0
  106. package/dist/{chunk-MT34O3YL.js → chunk-P563HTVU.js} +50 -26
  107. package/dist/chunk-P563HTVU.js.map +1 -0
  108. package/dist/{chunk-RLUMYHPI.js → chunk-PGYTMRP3.js} +46 -18
  109. package/dist/chunk-PGYTMRP3.js.map +1 -0
  110. package/dist/{chunk-VGOEXLQ2.js → chunk-QAPQGDWK.js} +2 -2
  111. package/dist/chunk-QAPQGDWK.js.map +1 -0
  112. package/dist/{chunk-QOGBOT2M.mjs → chunk-QHBKRUBY.mjs} +3 -3
  113. package/dist/{chunk-QOGBOT2M.mjs.map → chunk-QHBKRUBY.mjs.map} +1 -1
  114. package/dist/chunk-QOYI7WCH.js +120 -0
  115. package/dist/chunk-QOYI7WCH.js.map +1 -0
  116. package/dist/{chunk-OF7BIKXV.js → chunk-QRTABC4Z.js} +2 -2
  117. package/dist/chunk-QRTABC4Z.js.map +1 -0
  118. package/dist/{chunk-CS6FVODR.mjs → chunk-QUBD6HUZ.mjs} +163 -18
  119. package/dist/chunk-QUBD6HUZ.mjs.map +1 -0
  120. package/dist/{chunk-RWVNXU7Z.mjs → chunk-RDTIXP6S.mjs} +4 -4
  121. package/dist/{chunk-RWVNXU7Z.mjs.map → chunk-RDTIXP6S.mjs.map} +1 -1
  122. package/dist/{chunk-5WYXNWNH.js → chunk-RLOZWHRR.js} +11 -11
  123. package/dist/{chunk-5WYXNWNH.js.map → chunk-RLOZWHRR.js.map} +1 -1
  124. package/dist/{chunk-VK5HAWX6.mjs → chunk-SWWLOD7Q.mjs} +2 -2
  125. package/dist/chunk-SWWLOD7Q.mjs.map +1 -0
  126. package/dist/chunk-T3UA4MJL.js +4 -0
  127. package/dist/{chunk-WTS75RUC.js.map → chunk-T3UA4MJL.js.map} +1 -1
  128. package/dist/{chunk-HJ4AS5DZ.mjs → chunk-TEWAXP5C.mjs} +36 -12
  129. package/dist/chunk-TEWAXP5C.mjs.map +1 -0
  130. package/dist/{chunk-ZRNPHFP3.mjs → chunk-THEIRDGE.mjs} +50 -15
  131. package/dist/chunk-THEIRDGE.mjs.map +1 -0
  132. package/dist/{chunk-LPA32BIK.mjs → chunk-U3GOWK6J.mjs} +2 -2
  133. package/dist/chunk-U3GOWK6J.mjs.map +1 -0
  134. package/dist/{chunk-QFQXHDC7.mjs → chunk-VKSD3KXF.mjs} +46 -18
  135. package/dist/chunk-VKSD3KXF.mjs.map +1 -0
  136. package/dist/{chunk-64ZQRKG3.mjs → chunk-VYSOAGRU.mjs} +2 -2
  137. package/dist/chunk-VYSOAGRU.mjs.map +1 -0
  138. package/dist/{chunk-ADAAU4F5.mjs → chunk-WDC53TM7.mjs} +49 -9
  139. package/dist/chunk-WDC53TM7.mjs.map +1 -0
  140. package/dist/{chunk-M2EMKIP5.mjs → chunk-WKWP42TD.mjs} +9 -4
  141. package/dist/chunk-WKWP42TD.mjs.map +1 -0
  142. package/dist/{chunk-OROTK4OT.js → chunk-WNUB3UTT.js} +12 -12
  143. package/dist/chunk-WNUB3UTT.js.map +1 -0
  144. package/dist/{chunk-FVTTG72Z.mjs → chunk-WNWK2QMU.mjs} +19 -7
  145. package/dist/chunk-WNWK2QMU.mjs.map +1 -0
  146. package/dist/{chunk-INLXNN7P.js → chunk-WZF5XNBC.js} +26 -26
  147. package/dist/{chunk-INLXNN7P.js.map → chunk-WZF5XNBC.js.map} +1 -1
  148. package/dist/{chunk-SMTHFPBA.js → chunk-XMFOZYNI.js} +2 -2
  149. package/dist/chunk-XMFOZYNI.js.map +1 -0
  150. package/dist/{chunk-VGCXJRUV.mjs → chunk-YBK6EBA5.mjs} +10 -10
  151. package/dist/chunk-YBK6EBA5.mjs.map +1 -0
  152. package/dist/{chunk-HH7HQ4HC.mjs → chunk-ZEDJUNC6.mjs} +2 -2
  153. package/dist/{chunk-HH7HQ4HC.mjs.map → chunk-ZEDJUNC6.mjs.map} +1 -1
  154. package/dist/deployments.generated.d.mts +44 -16
  155. package/dist/deployments.generated.d.ts +44 -16
  156. package/dist/deployments.generated.js +2 -2
  157. package/dist/deployments.generated.mjs +1 -1
  158. package/dist/entities/DopplerFactory.d.mts +7 -1
  159. package/dist/entities/DopplerFactory.d.ts +7 -1
  160. package/dist/entities/DopplerFactory.js +16 -14
  161. package/dist/entities/DopplerFactory.mjs +15 -13
  162. package/dist/entities/auction/DynamicAuction.js +10 -10
  163. package/dist/entities/auction/DynamicAuction.mjs +9 -9
  164. package/dist/entities/auction/MulticurvePool.d.mts +6 -2
  165. package/dist/entities/auction/MulticurvePool.d.ts +6 -2
  166. package/dist/entities/auction/MulticurvePool.js +11 -11
  167. package/dist/entities/auction/MulticurvePool.mjs +10 -10
  168. package/dist/entities/auction/RehypeDopplerHook.d.mts +57 -0
  169. package/dist/entities/auction/RehypeDopplerHook.d.ts +57 -0
  170. package/dist/entities/auction/RehypeDopplerHook.js +34 -0
  171. package/dist/entities/auction/RehypeDopplerHook.js.map +1 -0
  172. package/dist/entities/auction/RehypeDopplerHook.mjs +25 -0
  173. package/dist/entities/auction/RehypeDopplerHook.mjs.map +1 -0
  174. package/dist/entities/auction/RehypeDopplerHookMigrator.d.mts +48 -0
  175. package/dist/entities/auction/RehypeDopplerHookMigrator.d.ts +48 -0
  176. package/dist/entities/auction/RehypeDopplerHookMigrator.js +34 -0
  177. package/dist/entities/auction/RehypeDopplerHookMigrator.js.map +1 -0
  178. package/dist/entities/auction/RehypeDopplerHookMigrator.mjs +25 -0
  179. package/dist/entities/auction/RehypeDopplerHookMigrator.mjs.map +1 -0
  180. package/dist/entities/auction/StaticAuction.js +10 -10
  181. package/dist/entities/auction/StaticAuction.mjs +9 -9
  182. package/dist/entities/auction/index.d.mts +2 -0
  183. package/dist/entities/auction/index.d.ts +2 -0
  184. package/dist/entities/auction/index.js +38 -18
  185. package/dist/entities/auction/index.mjs +25 -13
  186. package/dist/entities/quoter/Quoter.js +10 -10
  187. package/dist/entities/quoter/Quoter.mjs +9 -9
  188. package/dist/entities/quoter/index.js +10 -10
  189. package/dist/entities/quoter/index.mjs +9 -9
  190. package/dist/entities/token/derc20/Derc20.js +8 -8
  191. package/dist/entities/token/derc20/Derc20.mjs +7 -7
  192. package/dist/entities/token/derc20/index.js +8 -8
  193. package/dist/entities/token/derc20/index.mjs +7 -7
  194. package/dist/entities/token/index.js +11 -11
  195. package/dist/entities/token/index.mjs +7 -7
  196. package/dist/index.d.mts +5 -2
  197. package/dist/index.d.ts +5 -2
  198. package/dist/index.js +120 -93
  199. package/dist/index.js.map +1 -1
  200. package/dist/index.mjs +28 -25
  201. package/dist/index.mjs.map +1 -1
  202. package/dist/types.d.mts +90 -7
  203. package/dist/types.d.ts +90 -7
  204. package/dist/types.js +12 -8
  205. package/dist/types.mjs +3 -3
  206. package/dist/utils/airlock.js +7 -7
  207. package/dist/utils/airlock.mjs +3 -3
  208. package/dist/utils/dopplerHookMigrator.d.mts +18 -0
  209. package/dist/utils/dopplerHookMigrator.d.ts +18 -0
  210. package/dist/utils/dopplerHookMigrator.js +20 -0
  211. package/dist/utils/dopplerHookMigrator.js.map +1 -0
  212. package/dist/utils/dopplerHookMigrator.mjs +7 -0
  213. package/dist/utils/dopplerHookMigrator.mjs.map +1 -0
  214. package/dist/utils/index.d.mts +1 -0
  215. package/dist/utils/index.d.ts +1 -0
  216. package/dist/utils/index.js +39 -32
  217. package/dist/utils/index.mjs +15 -12
  218. package/dist/utils/marketCapHelpers.js +13 -13
  219. package/dist/utils/marketCapHelpers.mjs +1 -1
  220. package/dist/utils/tokenAddressMiner.js +8 -8
  221. package/dist/utils/tokenAddressMiner.mjs +7 -7
  222. package/package.json +2 -2
  223. package/dist/chunk-2ZM4JVFC.js.map +0 -1
  224. package/dist/chunk-3MVW6UIW.js.map +0 -1
  225. package/dist/chunk-3PNCB4W5.js +0 -4
  226. package/dist/chunk-3XYDN2XB.js.map +0 -1
  227. package/dist/chunk-5TL5V6UX.mjs +0 -3
  228. package/dist/chunk-5VV7STYK.js.map +0 -1
  229. package/dist/chunk-64ZQRKG3.mjs.map +0 -1
  230. package/dist/chunk-ADAAU4F5.mjs.map +0 -1
  231. package/dist/chunk-AZOBEWP3.mjs.map +0 -1
  232. package/dist/chunk-COOVGAOE.js.map +0 -1
  233. package/dist/chunk-CS6FVODR.mjs.map +0 -1
  234. package/dist/chunk-CUB4F546.js.map +0 -1
  235. package/dist/chunk-E2NF4AQB.mjs.map +0 -1
  236. package/dist/chunk-FVTTG72Z.mjs.map +0 -1
  237. package/dist/chunk-HJ4AS5DZ.mjs.map +0 -1
  238. package/dist/chunk-KITPRKQ4.mjs.map +0 -1
  239. package/dist/chunk-LPA32BIK.mjs.map +0 -1
  240. package/dist/chunk-M2EMKIP5.mjs.map +0 -1
  241. package/dist/chunk-MT34O3YL.js.map +0 -1
  242. package/dist/chunk-OF7BIKXV.js.map +0 -1
  243. package/dist/chunk-OGYWNJGI.js.map +0 -1
  244. package/dist/chunk-OROTK4OT.js.map +0 -1
  245. package/dist/chunk-QFQXHDC7.mjs.map +0 -1
  246. package/dist/chunk-QQEOKYEX.js.map +0 -1
  247. package/dist/chunk-RLUMYHPI.js.map +0 -1
  248. package/dist/chunk-SD7BHT2F.mjs +0 -3
  249. package/dist/chunk-SMTHFPBA.js.map +0 -1
  250. package/dist/chunk-VGCXJRUV.mjs.map +0 -1
  251. package/dist/chunk-VGOEXLQ2.js.map +0 -1
  252. package/dist/chunk-VK5HAWX6.mjs.map +0 -1
  253. package/dist/chunk-WDSV4O6T.mjs.map +0 -1
  254. package/dist/chunk-WKKOBMXR.js.map +0 -1
  255. package/dist/chunk-WTS75RUC.js +0 -4
  256. package/dist/chunk-ZRNPHFP3.mjs.map +0 -1
@@ -2,8 +2,8 @@
2
2
 
3
3
  var chunk7M57PU6V_js = require('./chunk-7M57PU6V.js');
4
4
  var chunk6BQY5EPB_js = require('./chunk-6BQY5EPB.js');
5
- var chunk5VV7STYK_js = require('./chunk-5VV7STYK.js');
6
- var chunk3MVW6UIW_js = require('./chunk-3MVW6UIW.js');
5
+ var chunk7A4DBBXA_js = require('./chunk-7A4DBBXA.js');
6
+ var chunkMU56HCUI_js = require('./chunk-MU56HCUI.js');
7
7
  var viem = require('viem');
8
8
 
9
9
  var MulticurvePool = class {
@@ -26,7 +26,8 @@ var MulticurvePool = class {
26
26
  /**
27
27
  * Get current pool state from the multicurve initializer
28
28
  *
29
- * Automatically discovers which initializer (standard, scheduled, or decay) contains the pool.
29
+ * Automatically discovers which initializer (standard, scheduled, decay, or
30
+ * doppler-hook) contains the pool.
30
31
  */
31
32
  async getState() {
32
33
  const { state } = await this.findInitializerForPool();
@@ -36,17 +37,31 @@ var MulticurvePool = class {
36
37
  * Find which initializer contains this pool and return both the address and state.
37
38
  *
38
39
  * Tries v4MulticurveInitializer first (more common), then falls back to
39
- * v4ScheduledMulticurveInitializer and v4DecayMulticurveInitializer if needed.
40
+ * v4ScheduledMulticurveInitializer, v4DecayMulticurveInitializer, and
41
+ * dopplerHookInitializer if needed.
40
42
  */
41
43
  async findInitializerForPool() {
42
44
  const chainId = await this.rpc.getChainId();
43
- const addresses = chunk5VV7STYK_js.getAddresses(chainId);
45
+ const addresses = chunk7A4DBBXA_js.getAddresses(chainId);
44
46
  const initializersToTry = [
45
- addresses.v4MulticurveInitializer,
46
- addresses.v4ScheduledMulticurveInitializer,
47
- addresses.v4DecayMulticurveInitializer
47
+ {
48
+ address: addresses.v4MulticurveInitializer,
49
+ kind: "standard"
50
+ },
51
+ {
52
+ address: addresses.v4ScheduledMulticurveInitializer,
53
+ kind: "standard"
54
+ },
55
+ {
56
+ address: addresses.v4DecayMulticurveInitializer,
57
+ kind: "standard"
58
+ },
59
+ {
60
+ address: addresses.dopplerHookInitializer,
61
+ kind: "dopplerHook"
62
+ }
48
63
  ].filter(
49
- (addr) => addr !== void 0 && addr !== viem.zeroAddress
64
+ (entry) => entry.address !== void 0 && entry.address !== viem.zeroAddress
50
65
  );
51
66
  if (initializersToTry.length === 0) {
52
67
  throw new Error(
@@ -54,16 +69,17 @@ var MulticurvePool = class {
54
69
  );
55
70
  }
56
71
  const triedInitializers = [];
57
- for (const initializerAddress of initializersToTry) {
72
+ for (const initializer of initializersToTry) {
73
+ const { address: initializerAddress, kind } = initializer;
58
74
  triedInitializers.push(initializerAddress);
59
75
  const stateData = await this.rpc.readContract({
60
76
  address: initializerAddress,
61
- abi: chunk3MVW6UIW_js.v4MulticurveInitializerAbi,
77
+ abi: kind === "dopplerHook" ? chunkMU56HCUI_js.dopplerHookInitializerAbi : chunkMU56HCUI_js.v4MulticurveInitializerAbi,
62
78
  functionName: "getState",
63
79
  args: [this.tokenAddress]
64
80
  });
65
- const [numeraire, status, rawPoolKey, farTick] = stateData;
66
- const poolKey = this.parsePoolKey(rawPoolKey);
81
+ const parsedState = kind === "dopplerHook" ? this.parseDopplerHookInitializerState(stateData) : this.parseStandardInitializerState(stateData);
82
+ const { numeraire, status, poolKey, farTick } = parsedState;
67
83
  if (poolKey.hooks !== viem.zeroAddress && poolKey.tickSpacing !== 0) {
68
84
  const state = {
69
85
  asset: this.tokenAddress,
@@ -95,13 +111,14 @@ var MulticurvePool = class {
95
111
  throw new Error("Wallet client required to collect fees");
96
112
  }
97
113
  const chainId = await this.rpc.getChainId();
98
- const addresses = chunk5VV7STYK_js.getAddresses(chainId);
114
+ const addresses = chunk7A4DBBXA_js.getAddresses(chainId);
99
115
  const { initializerAddress, state } = await this.findInitializerForPool();
100
116
  if (state.status === 2 /* Locked */) {
101
117
  const poolId = chunk7M57PU6V_js.computePoolId(state.poolKey);
118
+ const collectFeesAbi = initializerAddress === addresses.dopplerHookInitializer ? chunkMU56HCUI_js.dopplerHookInitializerAbi : chunkMU56HCUI_js.v4MulticurveInitializerAbi;
102
119
  return this.collectFeesFromContract(
103
120
  initializerAddress,
104
- chunk3MVW6UIW_js.v4MulticurveInitializerAbi,
121
+ collectFeesAbi,
105
122
  poolId
106
123
  );
107
124
  }
@@ -113,7 +130,7 @@ var MulticurvePool = class {
113
130
  }
114
131
  const assetData = await this.rpc.readContract({
115
132
  address: addresses.v4Migrator,
116
- abi: chunk3MVW6UIW_js.v4MulticurveMigratorAbi,
133
+ abi: chunkMU56HCUI_js.v4MulticurveMigratorAbi,
117
134
  functionName: "getAssetData",
118
135
  args: [state.poolKey.currency0, state.poolKey.currency1]
119
136
  });
@@ -133,7 +150,7 @@ var MulticurvePool = class {
133
150
  );
134
151
  const streamData = await this.rpc.readContract({
135
152
  address: lockerAddress,
136
- abi: chunk3MVW6UIW_js.streamableFeesLockerAbi,
153
+ abi: chunkMU56HCUI_js.streamableFeesLockerAbi,
137
154
  functionName: "streams",
138
155
  args: [poolId]
139
156
  });
@@ -145,7 +162,7 @@ var MulticurvePool = class {
145
162
  }
146
163
  return this.collectFeesFromContract(
147
164
  lockerAddress,
148
- chunk3MVW6UIW_js.streamableFeesLockerAbi,
165
+ chunkMU56HCUI_js.streamableFeesLockerAbi,
149
166
  poolId
150
167
  );
151
168
  }
@@ -172,7 +189,7 @@ var MulticurvePool = class {
172
189
  try {
173
190
  const scheduleData = await this.rpc.readContract({
174
191
  address: state.poolKey.hooks,
175
- abi: chunk3MVW6UIW_js.decayMulticurveInitializerHookAbi,
192
+ abi: chunkMU56HCUI_js.decayMulticurveInitializerHookAbi,
176
193
  functionName: "getFeeScheduleOf",
177
194
  args: [poolId]
178
195
  });
@@ -204,13 +221,31 @@ var MulticurvePool = class {
204
221
  hooks: poolKeyStruct.hooks ?? poolKeyStruct[4]
205
222
  };
206
223
  }
224
+ parseStandardInitializerState(stateData) {
225
+ const state = stateData;
226
+ return {
227
+ numeraire: state.numeraire ?? state[0],
228
+ status: Number(state.status ?? state[1]),
229
+ poolKey: this.parsePoolKey(state.poolKey ?? state[2]),
230
+ farTick: Number(state.farTick ?? state[3])
231
+ };
232
+ }
233
+ parseDopplerHookInitializerState(stateData) {
234
+ const state = stateData;
235
+ return {
236
+ numeraire: state.numeraire ?? state[0],
237
+ status: Number(state.status ?? state[4]),
238
+ poolKey: this.parsePoolKey(state.poolKey ?? state[5]),
239
+ farTick: Number(state.farTick ?? state[6])
240
+ };
241
+ }
207
242
  async resolveLockerAddress(migratorAddress, configuredLocker) {
208
243
  if (configuredLocker) {
209
244
  return configuredLocker;
210
245
  }
211
246
  const lockerAddress = await this.rpc.readContract({
212
247
  address: migratorAddress,
213
- abi: chunk3MVW6UIW_js.v4MulticurveMigratorAbi,
248
+ abi: chunkMU56HCUI_js.v4MulticurveMigratorAbi,
214
249
  functionName: "locker",
215
250
  args: []
216
251
  });
@@ -236,5 +271,5 @@ var MulticurvePool = class {
236
271
  };
237
272
 
238
273
  exports.MulticurvePool = MulticurvePool;
239
- //# sourceMappingURL=chunk-WKKOBMXR.js.map
240
- //# sourceMappingURL=chunk-WKKOBMXR.js.map
274
+ //# sourceMappingURL=chunk-CFXXUZJY.js.map
275
+ //# sourceMappingURL=chunk-CFXXUZJY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/entities/auction/MulticurvePool.ts"],"names":["getAddresses","zeroAddress","dopplerHookInitializerAbi","v4MulticurveInitializerAbi","computePoolId","v4MulticurveMigratorAbi","streamableFeesLockerAbi","DYNAMIC_FEE_FLAG","decayMulticurveInitializerHookAbi"],"mappings":"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","file":"chunk-CFXXUZJY.js","sourcesContent":["import {\n type Address,\n type PublicClient,\n type WalletClient,\n type Hash,\n type Hex,\n zeroAddress,\n} from 'viem';\nimport {\n LockablePoolStatus,\n type MulticurveDecayFeeSchedule,\n type MulticurvePoolState,\n type SupportedPublicClient,\n type V4PoolKey,\n} from '../../types';\nimport {\n decayMulticurveInitializerHookAbi,\n dopplerHookInitializerAbi,\n v4MulticurveInitializerAbi,\n v4MulticurveMigratorAbi,\n streamableFeesLockerAbi,\n} from '../../abis';\nimport { getAddresses } from '../../addresses';\nimport type { SupportedChainId } from '../../addresses';\nimport { DYNAMIC_FEE_FLAG } from '../../constants';\nimport { computePoolId } from '../../utils/poolKey';\n\n/** Result from finding which initializer contains the pool */\ninterface InitializerDiscoveryResult {\n initializerAddress: Address;\n state: MulticurvePoolState;\n}\n\ninterface ParsedInitializerState {\n numeraire: Address;\n status: number;\n poolKey: V4PoolKey;\n farTick: number;\n}\n\n/**\n * MulticurvePool class for interacting with V4 multicurve pools\n *\n * Multicurve pools use the V4 multicurve initializer which supports:\n * - Multiple bonding curves with different price ranges\n * - Fee collection for configured beneficiaries\n * - No-migration lockable liquidity\n *\n * Note: V4 pools don't have their own contract addresses. The token address\n * is used as the lookup key to retrieve pool state from the initializer contract.\n *\n * Terminology: The contracts call the created token \"asset\" (paired against \"numeraire\", e.g., WETH).\n * We use \"tokenAddress\" in the SDK for consistency.\n */\nexport class MulticurvePool {\n private client: SupportedPublicClient;\n private walletClient?: WalletClient;\n private tokenAddress: Address;\n private get rpc(): PublicClient {\n return this.client as PublicClient;\n }\n\n constructor(\n client: SupportedPublicClient,\n walletClient: WalletClient | undefined,\n tokenAddress: Address,\n ) {\n this.client = client;\n this.walletClient = walletClient;\n this.tokenAddress = tokenAddress;\n }\n\n /**\n * Get the token address for this pool\n * This is also the lookup key used to retrieve pool state from the initializer\n * (Called \"asset\" in the contracts, but we use \"tokenAddress\" for SDK consistency)\n */\n getTokenAddress(): Address {\n return this.tokenAddress;\n }\n\n /**\n * Get current pool state from the multicurve initializer\n *\n * Automatically discovers which initializer (standard, scheduled, decay, or\n * doppler-hook) contains the pool.\n */\n async getState(): Promise<MulticurvePoolState> {\n const { state } = await this.findInitializerForPool();\n return state;\n }\n\n /**\n * Find which initializer contains this pool and return both the address and state.\n *\n * Tries v4MulticurveInitializer first (more common), then falls back to\n * v4ScheduledMulticurveInitializer, v4DecayMulticurveInitializer, and\n * dopplerHookInitializer if needed.\n */\n private async findInitializerForPool(): Promise<InitializerDiscoveryResult> {\n const chainId = await this.rpc.getChainId();\n const addresses = getAddresses(chainId as SupportedChainId);\n\n const initializersToTry = [\n {\n address: addresses.v4MulticurveInitializer,\n kind: 'standard' as const,\n },\n {\n address: addresses.v4ScheduledMulticurveInitializer,\n kind: 'standard' as const,\n },\n {\n address: addresses.v4DecayMulticurveInitializer,\n kind: 'standard' as const,\n },\n {\n address: addresses.dopplerHookInitializer,\n kind: 'dopplerHook' as const,\n },\n ].filter(\n (\n entry,\n ): entry is { address: Address; kind: 'standard' | 'dopplerHook' } =>\n entry.address !== undefined && entry.address !== zeroAddress,\n );\n\n if (initializersToTry.length === 0) {\n throw new Error(\n 'No V4 multicurve initializer addresses configured for this chain',\n );\n }\n\n const triedInitializers: Address[] = [];\n\n for (const initializer of initializersToTry) {\n const { address: initializerAddress, kind } = initializer;\n triedInitializers.push(initializerAddress);\n\n const stateData = await this.rpc.readContract({\n address: initializerAddress,\n abi:\n kind === 'dopplerHook'\n ? dopplerHookInitializerAbi\n : v4MulticurveInitializerAbi,\n functionName: 'getState',\n args: [this.tokenAddress],\n });\n\n const parsedState =\n kind === 'dopplerHook'\n ? this.parseDopplerHookInitializerState(stateData)\n : this.parseStandardInitializerState(stateData);\n const { numeraire, status, poolKey, farTick } = parsedState;\n\n // Check if pool exists in this initializer\n // A non-existent pool will have zeroed hooks and tickSpacing\n if (poolKey.hooks !== zeroAddress && poolKey.tickSpacing !== 0) {\n const state: MulticurvePoolState = {\n asset: this.tokenAddress,\n numeraire,\n fee: poolKey.fee,\n tickSpacing: poolKey.tickSpacing,\n status,\n poolKey,\n farTick: Number(farTick),\n };\n return { initializerAddress, state };\n }\n }\n\n // Pool not found in any initializer\n throw new Error(\n `Pool not found for token ${this.tokenAddress}. ` +\n `Tried initializers: ${triedInitializers.join(', ')}`,\n );\n }\n\n /**\n * Collect fees from the pool and distribute to beneficiaries\n *\n * This function can be called by any beneficiary to trigger fee collection\n * and distribution. Fees are automatically distributed according to the\n * configured beneficiary shares.\n *\n * @returns Object containing the amounts of fees0 and fees1 distributed, and the transaction hash\n */\n async collectFees(): Promise<{\n fees0: bigint;\n fees1: bigint;\n transactionHash: Hash;\n }> {\n if (!this.walletClient) {\n throw new Error('Wallet client required to collect fees');\n }\n\n const chainId = await this.rpc.getChainId();\n const addresses = getAddresses(chainId as SupportedChainId);\n\n // Discover which initializer has this pool and get state in one call\n const { initializerAddress, state } = await this.findInitializerForPool();\n\n if (state.status === LockablePoolStatus.Locked) {\n const poolId = computePoolId(state.poolKey);\n const collectFeesAbi =\n initializerAddress === addresses.dopplerHookInitializer\n ? dopplerHookInitializerAbi\n : v4MulticurveInitializerAbi;\n return this.collectFeesFromContract(\n initializerAddress,\n collectFeesAbi,\n poolId,\n );\n }\n\n if (state.status === LockablePoolStatus.Exited) {\n if (!addresses.v4Migrator) {\n throw new Error(\n 'V4 multicurve migrator address not configured for this chain',\n );\n }\n\n const assetData = await this.rpc.readContract({\n address: addresses.v4Migrator,\n abi: v4MulticurveMigratorAbi,\n functionName: 'getAssetData',\n args: [state.poolKey.currency0, state.poolKey.currency1],\n });\n\n const migratorPoolKey = this.parsePoolKey(\n (assetData as any).poolKey ?? (assetData as any)[1],\n );\n const poolId = computePoolId(migratorPoolKey);\n\n const beneficiaries =\n (assetData as any).beneficiaries ?? (assetData as any)[4] ?? [];\n if (!Array.isArray(beneficiaries) || beneficiaries.length === 0) {\n throw new Error(\n 'Migrated multicurve pool has no beneficiaries configured',\n );\n }\n\n const lockerAddress = await this.resolveLockerAddress(\n addresses.v4Migrator,\n addresses.streamableFeesLocker,\n );\n\n const streamData = await this.rpc.readContract({\n address: lockerAddress,\n abi: streamableFeesLockerAbi,\n functionName: 'streams',\n args: [poolId],\n });\n\n const startDate = Number(\n (streamData as any).startDate ?? (streamData as any)[2] ?? 0,\n );\n if (startDate === 0) {\n throw new Error('Migrated multicurve stream not initialized');\n }\n\n return this.collectFeesFromContract(\n lockerAddress,\n streamableFeesLockerAbi,\n poolId,\n );\n }\n\n throw new Error('Multicurve pool is not locked or migrated');\n }\n\n /**\n * Get the numeraire address for this pool\n */\n async getNumeraireAddress(): Promise<Address> {\n const state = await this.getState();\n return state.numeraire;\n }\n\n /**\n * Get the decay fee schedule for dynamic-fee multicurve pools.\n *\n * Returns `null` when the pool is not using dynamic fees.\n */\n async getFeeSchedule(): Promise<MulticurveDecayFeeSchedule | null> {\n const { state } = await this.findInitializerForPool();\n if (state.poolKey.fee !== DYNAMIC_FEE_FLAG) {\n return null;\n }\n\n const poolId = computePoolId(state.poolKey);\n try {\n const scheduleData = await this.rpc.readContract({\n address: state.poolKey.hooks,\n abi: decayMulticurveInitializerHookAbi,\n functionName: 'getFeeScheduleOf',\n args: [poolId],\n });\n\n const scheduleStruct = scheduleData as any;\n return {\n startingTime: Number(\n scheduleStruct.startingTime ?? scheduleStruct[0] ?? 0,\n ),\n startFee: Number(scheduleStruct.startFee ?? scheduleStruct[1] ?? 0),\n endFee: Number(scheduleStruct.endFee ?? scheduleStruct[2] ?? 0),\n lastFee: Number(scheduleStruct.lastFee ?? scheduleStruct[3] ?? 0),\n durationSeconds: Number(\n scheduleStruct.durationSeconds ?? scheduleStruct[4] ?? 0,\n ),\n };\n } catch {\n throw new Error(\n `Dynamic multicurve hook at ${state.poolKey.hooks} does not expose getFeeScheduleOf(poolId)`,\n );\n }\n }\n\n private parsePoolKey(rawPoolKey: unknown): V4PoolKey {\n const poolKeyStruct = rawPoolKey as any;\n return {\n currency0: (poolKeyStruct.currency0 ?? poolKeyStruct[0]) as Address,\n currency1: (poolKeyStruct.currency1 ?? poolKeyStruct[1]) as Address,\n fee: Number(poolKeyStruct.fee ?? poolKeyStruct[2]),\n tickSpacing: Number(poolKeyStruct.tickSpacing ?? poolKeyStruct[3]),\n hooks: (poolKeyStruct.hooks ?? poolKeyStruct[4]) as Address,\n };\n }\n\n private parseStandardInitializerState(stateData: unknown): ParsedInitializerState {\n const state = stateData as any;\n return {\n numeraire: (state.numeraire ?? state[0]) as Address,\n status: Number(state.status ?? state[1]),\n poolKey: this.parsePoolKey(state.poolKey ?? state[2]),\n farTick: Number(state.farTick ?? state[3]),\n };\n }\n\n private parseDopplerHookInitializerState(\n stateData: unknown,\n ): ParsedInitializerState {\n const state = stateData as any;\n return {\n numeraire: (state.numeraire ?? state[0]) as Address,\n status: Number(state.status ?? state[4]),\n poolKey: this.parsePoolKey(state.poolKey ?? state[5]),\n farTick: Number(state.farTick ?? state[6]),\n };\n }\n\n private async resolveLockerAddress(\n migratorAddress: Address,\n configuredLocker?: Address,\n ): Promise<Address> {\n if (configuredLocker) {\n return configuredLocker;\n }\n\n const lockerAddress = await this.rpc.readContract({\n address: migratorAddress,\n abi: v4MulticurveMigratorAbi,\n functionName: 'locker',\n args: [],\n });\n\n return lockerAddress as Address;\n }\n\n private async collectFeesFromContract(\n contractAddress: Address,\n abi:\n | typeof dopplerHookInitializerAbi\n | typeof v4MulticurveInitializerAbi\n | typeof streamableFeesLockerAbi,\n poolId: Hex,\n ): Promise<{ fees0: bigint; fees1: bigint; transactionHash: Hash }> {\n const { request, result } = await this.rpc.simulateContract({\n address: contractAddress,\n abi,\n functionName: 'collectFees',\n args: [poolId],\n account: this.walletClient!.account,\n });\n\n const hash = await this.walletClient!.writeContract(request);\n\n await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });\n\n const [fees0, fees1] = result as readonly [bigint, bigint];\n\n return {\n fees0,\n fees1,\n transactionHash: hash,\n };\n }\n}\n"]}
@@ -0,0 +1,171 @@
1
+ 'use strict';
2
+
3
+ var chunkXSJTASPK_js = require('./chunk-XSJTASPK.js');
4
+ var chunkMU56HCUI_js = require('./chunk-MU56HCUI.js');
5
+
6
+ // src/entities/auction/RehypeDopplerHookMigrator.ts
7
+ var RehypeDopplerHookMigrator = class {
8
+ get rpc() {
9
+ return this.client;
10
+ }
11
+ constructor(client, walletClient, hookAddress) {
12
+ this.client = client;
13
+ this.walletClient = walletClient;
14
+ this.hookAddress = hookAddress;
15
+ }
16
+ getAddress() {
17
+ return this.hookAddress;
18
+ }
19
+ async collectFees(asset) {
20
+ if (!this.walletClient) {
21
+ throw new Error("Wallet client required to collect rehype fees");
22
+ }
23
+ const { request, result } = await this.rpc.simulateContract({
24
+ address: this.hookAddress,
25
+ abi: chunkMU56HCUI_js.rehypeDopplerHookMigratorAbi,
26
+ functionName: "collectFees",
27
+ args: [asset],
28
+ account: this.walletClient.account
29
+ });
30
+ const hash = await this.walletClient.writeContract(request);
31
+ await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });
32
+ const decoded = chunkXSJTASPK_js.decodeBalanceDelta(result);
33
+ return {
34
+ amount0: decoded.amount0,
35
+ amount1: decoded.amount1,
36
+ transactionHash: hash
37
+ };
38
+ }
39
+ async claimAirlockOwnerFees(asset) {
40
+ if (!this.walletClient) {
41
+ throw new Error("Wallet client required to claim rehype owner fees");
42
+ }
43
+ const { request, result } = await this.rpc.simulateContract({
44
+ address: this.hookAddress,
45
+ abi: chunkMU56HCUI_js.rehypeDopplerHookMigratorAbi,
46
+ functionName: "claimAirlockOwnerFees",
47
+ args: [asset],
48
+ account: this.walletClient.account
49
+ });
50
+ const hash = await this.walletClient.writeContract(request);
51
+ await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });
52
+ const [fees0, fees1] = result;
53
+ return { fees0, fees1, transactionHash: hash };
54
+ }
55
+ async setFeeDistribution(poolId, feeDistributionInfo) {
56
+ if (!this.walletClient) {
57
+ throw new Error("Wallet client required to set rehype fee distribution");
58
+ }
59
+ const { request } = await this.rpc.simulateContract({
60
+ address: this.hookAddress,
61
+ abi: chunkMU56HCUI_js.rehypeDopplerHookMigratorAbi,
62
+ functionName: "setFeeDistribution",
63
+ args: [
64
+ poolId,
65
+ feeDistributionInfo.assetFeesToAssetBuybackWad,
66
+ feeDistributionInfo.assetFeesToNumeraireBuybackWad,
67
+ feeDistributionInfo.assetFeesToBeneficiaryWad,
68
+ feeDistributionInfo.assetFeesToLpWad,
69
+ feeDistributionInfo.numeraireFeesToAssetBuybackWad,
70
+ feeDistributionInfo.numeraireFeesToNumeraireBuybackWad,
71
+ feeDistributionInfo.numeraireFeesToBeneficiaryWad,
72
+ feeDistributionInfo.numeraireFeesToLpWad
73
+ ],
74
+ account: this.walletClient.account
75
+ });
76
+ const hash = await this.walletClient.writeContract(request);
77
+ await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });
78
+ return hash;
79
+ }
80
+ async getFeeDistributionInfo(poolId) {
81
+ const result = await this.rpc.readContract({
82
+ address: this.hookAddress,
83
+ abi: chunkMU56HCUI_js.rehypeDopplerHookMigratorAbi,
84
+ functionName: "getFeeDistributionInfo",
85
+ args: [poolId]
86
+ });
87
+ const info = result;
88
+ return {
89
+ assetFeesToAssetBuybackWad: BigInt(
90
+ info.assetFeesToAssetBuybackWad ?? info[0]
91
+ ),
92
+ assetFeesToNumeraireBuybackWad: BigInt(
93
+ info.assetFeesToNumeraireBuybackWad ?? info[1]
94
+ ),
95
+ assetFeesToBeneficiaryWad: BigInt(
96
+ info.assetFeesToBeneficiaryWad ?? info[2]
97
+ ),
98
+ assetFeesToLpWad: BigInt(info.assetFeesToLpWad ?? info[3]),
99
+ numeraireFeesToAssetBuybackWad: BigInt(
100
+ info.numeraireFeesToAssetBuybackWad ?? info[4]
101
+ ),
102
+ numeraireFeesToNumeraireBuybackWad: BigInt(
103
+ info.numeraireFeesToNumeraireBuybackWad ?? info[5]
104
+ ),
105
+ numeraireFeesToBeneficiaryWad: BigInt(
106
+ info.numeraireFeesToBeneficiaryWad ?? info[6]
107
+ ),
108
+ numeraireFeesToLpWad: BigInt(info.numeraireFeesToLpWad ?? info[7])
109
+ };
110
+ }
111
+ async getFeeRoutingMode(poolId) {
112
+ const mode = await this.rpc.readContract({
113
+ address: this.hookAddress,
114
+ abi: chunkMU56HCUI_js.rehypeDopplerHookMigratorAbi,
115
+ functionName: "getFeeRoutingMode",
116
+ args: [poolId]
117
+ });
118
+ return Number(mode);
119
+ }
120
+ async getHookFees(poolId) {
121
+ const result = await this.rpc.readContract({
122
+ address: this.hookAddress,
123
+ abi: chunkMU56HCUI_js.rehypeDopplerHookMigratorAbi,
124
+ functionName: "getHookFees",
125
+ args: [poolId]
126
+ });
127
+ const fees = result;
128
+ return {
129
+ fees0: BigInt(fees.fees0 ?? fees[0] ?? 0),
130
+ fees1: BigInt(fees.fees1 ?? fees[1] ?? 0),
131
+ beneficiaryFees0: BigInt(fees.beneficiaryFees0 ?? fees[2] ?? 0),
132
+ beneficiaryFees1: BigInt(fees.beneficiaryFees1 ?? fees[3] ?? 0),
133
+ airlockOwnerFees0: BigInt(fees.airlockOwnerFees0 ?? fees[4] ?? 0),
134
+ airlockOwnerFees1: BigInt(fees.airlockOwnerFees1 ?? fees[5] ?? 0),
135
+ customFee: Number(fees.customFee ?? fees[6] ?? 0)
136
+ };
137
+ }
138
+ async getPoolInfo(poolId) {
139
+ const result = await this.rpc.readContract({
140
+ address: this.hookAddress,
141
+ abi: chunkMU56HCUI_js.rehypeDopplerHookMigratorAbi,
142
+ functionName: "getPoolInfo",
143
+ args: [poolId]
144
+ });
145
+ const info = result;
146
+ return {
147
+ asset: info.asset ?? info[0],
148
+ numeraire: info.numeraire ?? info[1],
149
+ buybackDst: info.buybackDst ?? info[2]
150
+ };
151
+ }
152
+ async getPosition(poolId) {
153
+ const result = await this.rpc.readContract({
154
+ address: this.hookAddress,
155
+ abi: chunkMU56HCUI_js.rehypeDopplerHookMigratorAbi,
156
+ functionName: "getPosition",
157
+ args: [poolId]
158
+ });
159
+ const position = result;
160
+ return {
161
+ tickLower: Number(position.tickLower ?? position[0] ?? 0),
162
+ tickUpper: Number(position.tickUpper ?? position[1] ?? 0),
163
+ liquidity: BigInt(position.liquidity ?? position[2] ?? 0),
164
+ salt: position.salt ?? position[3]
165
+ };
166
+ }
167
+ };
168
+
169
+ exports.RehypeDopplerHookMigrator = RehypeDopplerHookMigrator;
170
+ //# sourceMappingURL=chunk-DCWF3EMP.js.map
171
+ //# sourceMappingURL=chunk-DCWF3EMP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/entities/auction/RehypeDopplerHookMigrator.ts"],"names":["rehypeDopplerHookMigratorAbi","decodeBalanceDelta"],"mappings":"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","file":"chunk-DCWF3EMP.js","sourcesContent":["import type { Address, Hash, Hex, PublicClient, WalletClient } from 'viem';\nimport type {\n RehypeFeeDistributionInfo,\n SupportedPublicClient,\n} from '../../types';\nimport { rehypeDopplerHookMigratorAbi } from '../../abis';\nimport { decodeBalanceDelta } from '../../utils';\n\nexport class RehypeDopplerHookMigrator {\n private client: SupportedPublicClient;\n private walletClient?: WalletClient;\n private hookAddress: Address;\n private get rpc(): PublicClient {\n return this.client as PublicClient;\n }\n\n constructor(\n client: SupportedPublicClient,\n walletClient: WalletClient | undefined,\n hookAddress: Address,\n ) {\n this.client = client;\n this.walletClient = walletClient;\n this.hookAddress = hookAddress;\n }\n\n getAddress(): Address {\n return this.hookAddress;\n }\n\n async collectFees(asset: Address): Promise<{\n amount0: bigint;\n amount1: bigint;\n transactionHash: Hash;\n }> {\n if (!this.walletClient) {\n throw new Error('Wallet client required to collect rehype fees');\n }\n\n const { request, result } = await this.rpc.simulateContract({\n address: this.hookAddress,\n abi: rehypeDopplerHookMigratorAbi,\n functionName: 'collectFees',\n args: [asset],\n account: this.walletClient.account,\n });\n\n const hash = await this.walletClient.writeContract(request);\n await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });\n\n const decoded = decodeBalanceDelta(result as bigint);\n return {\n amount0: decoded.amount0,\n amount1: decoded.amount1,\n transactionHash: hash,\n };\n }\n\n async claimAirlockOwnerFees(asset: Address): Promise<{\n fees0: bigint;\n fees1: bigint;\n transactionHash: Hash;\n }> {\n if (!this.walletClient) {\n throw new Error('Wallet client required to claim rehype owner fees');\n }\n\n const { request, result } = await this.rpc.simulateContract({\n address: this.hookAddress,\n abi: rehypeDopplerHookMigratorAbi,\n functionName: 'claimAirlockOwnerFees',\n args: [asset],\n account: this.walletClient.account,\n });\n\n const hash = await this.walletClient.writeContract(request);\n await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });\n\n const [fees0, fees1] = result as readonly [bigint, bigint];\n return { fees0, fees1, transactionHash: hash };\n }\n\n async setFeeDistribution(\n poolId: Hex,\n feeDistributionInfo: RehypeFeeDistributionInfo,\n ): Promise<Hash> {\n if (!this.walletClient) {\n throw new Error('Wallet client required to set rehype fee distribution');\n }\n\n const { request } = await this.rpc.simulateContract({\n address: this.hookAddress,\n abi: rehypeDopplerHookMigratorAbi,\n functionName: 'setFeeDistribution',\n args: [\n poolId,\n feeDistributionInfo.assetFeesToAssetBuybackWad,\n feeDistributionInfo.assetFeesToNumeraireBuybackWad,\n feeDistributionInfo.assetFeesToBeneficiaryWad,\n feeDistributionInfo.assetFeesToLpWad,\n feeDistributionInfo.numeraireFeesToAssetBuybackWad,\n feeDistributionInfo.numeraireFeesToNumeraireBuybackWad,\n feeDistributionInfo.numeraireFeesToBeneficiaryWad,\n feeDistributionInfo.numeraireFeesToLpWad,\n ],\n account: this.walletClient.account,\n });\n\n const hash = await this.walletClient.writeContract(request);\n await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });\n return hash;\n }\n\n async getFeeDistributionInfo(\n poolId: Hex,\n ): Promise<RehypeFeeDistributionInfo> {\n const result = await this.rpc.readContract({\n address: this.hookAddress,\n abi: rehypeDopplerHookMigratorAbi,\n functionName: 'getFeeDistributionInfo',\n args: [poolId],\n });\n\n const info = result as any;\n return {\n assetFeesToAssetBuybackWad: BigInt(\n info.assetFeesToAssetBuybackWad ?? info[0],\n ),\n assetFeesToNumeraireBuybackWad: BigInt(\n info.assetFeesToNumeraireBuybackWad ?? info[1],\n ),\n assetFeesToBeneficiaryWad: BigInt(\n info.assetFeesToBeneficiaryWad ?? info[2],\n ),\n assetFeesToLpWad: BigInt(info.assetFeesToLpWad ?? info[3]),\n numeraireFeesToAssetBuybackWad: BigInt(\n info.numeraireFeesToAssetBuybackWad ?? info[4],\n ),\n numeraireFeesToNumeraireBuybackWad: BigInt(\n info.numeraireFeesToNumeraireBuybackWad ?? info[5],\n ),\n numeraireFeesToBeneficiaryWad: BigInt(\n info.numeraireFeesToBeneficiaryWad ?? info[6],\n ),\n numeraireFeesToLpWad: BigInt(info.numeraireFeesToLpWad ?? info[7]),\n };\n }\n\n async getFeeRoutingMode(poolId: Hex): Promise<number> {\n const mode = await this.rpc.readContract({\n address: this.hookAddress,\n abi: rehypeDopplerHookMigratorAbi,\n functionName: 'getFeeRoutingMode',\n args: [poolId],\n });\n return Number(mode);\n }\n\n async getHookFees(poolId: Hex): Promise<{\n fees0: bigint;\n fees1: bigint;\n beneficiaryFees0: bigint;\n beneficiaryFees1: bigint;\n airlockOwnerFees0: bigint;\n airlockOwnerFees1: bigint;\n customFee: number;\n }> {\n const result = await this.rpc.readContract({\n address: this.hookAddress,\n abi: rehypeDopplerHookMigratorAbi,\n functionName: 'getHookFees',\n args: [poolId],\n });\n\n const fees = result as any;\n return {\n fees0: BigInt(fees.fees0 ?? fees[0] ?? 0),\n fees1: BigInt(fees.fees1 ?? fees[1] ?? 0),\n beneficiaryFees0: BigInt(fees.beneficiaryFees0 ?? fees[2] ?? 0),\n beneficiaryFees1: BigInt(fees.beneficiaryFees1 ?? fees[3] ?? 0),\n airlockOwnerFees0: BigInt(fees.airlockOwnerFees0 ?? fees[4] ?? 0),\n airlockOwnerFees1: BigInt(fees.airlockOwnerFees1 ?? fees[5] ?? 0),\n customFee: Number(fees.customFee ?? fees[6] ?? 0),\n };\n }\n\n async getPoolInfo(poolId: Hex): Promise<{\n asset: Address;\n numeraire: Address;\n buybackDst: Address;\n }> {\n const result = await this.rpc.readContract({\n address: this.hookAddress,\n abi: rehypeDopplerHookMigratorAbi,\n functionName: 'getPoolInfo',\n args: [poolId],\n });\n\n const info = result as any;\n return {\n asset: (info.asset ?? info[0]) as Address,\n numeraire: (info.numeraire ?? info[1]) as Address,\n buybackDst: (info.buybackDst ?? info[2]) as Address,\n };\n }\n\n async getPosition(poolId: Hex): Promise<{\n tickLower: number;\n tickUpper: number;\n liquidity: bigint;\n salt: Hex;\n }> {\n const result = await this.rpc.readContract({\n address: this.hookAddress,\n abi: rehypeDopplerHookMigratorAbi,\n functionName: 'getPosition',\n args: [poolId],\n });\n\n const position = result as any;\n return {\n tickLower: Number(position.tickLower ?? position[0] ?? 0),\n tickUpper: Number(position.tickUpper ?? position[1] ?? 0),\n liquidity: BigInt(position.liquidity ?? position[2] ?? 0),\n salt: (position.salt ?? position[3]) as Hex,\n };\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
- import { computeTicks } from './chunk-HH7HQ4HC.mjs';
2
- import { validateMarketCapParameters, marketCapToTicksForStaticAuction } from './chunk-MQNSJCAW.mjs';
1
+ import { computeTicks } from './chunk-ZEDJUNC6.mjs';
2
+ import { validateMarketCapParameters, marketCapToTicksForStaticAuction } from './chunk-GSBQIVME.mjs';
3
3
  import { DEFAULT_V3_YEARLY_MINT_RATE, DEFAULT_V3_FEE, V3_FEE_TIERS, DEFAULT_V3_START_TICK, DEFAULT_V3_END_TICK, DEFAULT_V3_MAX_SHARE_TO_BE_SOLD, DEFAULT_V3_NUM_POSITIONS, TICK_SPACINGS, DEFAULT_V3_VESTING_DURATION, ZERO_ADDRESS } from './chunk-IWJOPXYN.mjs';
4
- import { isNoOpEnabledChain, isLaunchpadEnabledChain } from './chunk-M2EMKIP5.mjs';
4
+ import { isNoOpEnabledChain, isLaunchpadEnabledChain } from './chunk-WKWP42TD.mjs';
5
5
 
6
6
  // src/builders/StaticAuctionBuilder.ts
7
7
  var StaticAuctionBuilder = class _StaticAuctionBuilder {
@@ -314,5 +314,5 @@ var StaticAuctionBuilder = class _StaticAuctionBuilder {
314
314
  };
315
315
 
316
316
  export { StaticAuctionBuilder };
317
- //# sourceMappingURL=chunk-YWK6YH6M.mjs.map
318
- //# sourceMappingURL=chunk-YWK6YH6M.mjs.map
317
+ //# sourceMappingURL=chunk-DQJXCZU2.mjs.map
318
+ //# sourceMappingURL=chunk-DQJXCZU2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/builders/StaticAuctionBuilder.ts"],"names":[],"mappings":";;;;;;AAgCO,IAAM,oBAAA,GAAN,MAAM,qBAAA,CAEsB;AAAA,EAyBjC,YAAY,OAAA,EAAY;AACtB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,OAAO,SACL,OAAA,EACyB;AACzB,IAAA,OAAO,IAAI,sBAAqB,OAAO,CAAA;AAAA,EACzC;AAAA,EAEA,YACE,MAAA,EAeM;AACN,IAAA,IAAI,MAAA,IAAU,MAAA,IAAU,MAAA,IAAU,MAAA,CAAO,SAAS,YAAA,EAAc;AAC9D,MAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,QACX,IAAA,EAAM,YAAA;AAAA,QACN,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,MAAM,MAAA,CAAO;AAAA,OACf;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,QACX,IAAA,EAAM,UAAA;AAAA,QACN,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,cAAA,EAAgB,OAAO,cAAA,IAAkB;AAAA,OAC3C;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,WAAW,MAAA,EAIF;AACP,IAAA,IAAA,CAAK,IAAA,GAAO;AAAA,MACV,eAAe,MAAA,CAAO,aAAA;AAAA,MACtB,iBAAiB,MAAA,CAAO,eAAA;AAAA,MACxB,WAAW,MAAA,CAAO;AAAA,KACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,MAAA,EAMH;AAEP,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OAGF;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAM,OAAO,GAAA,IAAO,cAAA;AAG1B,IAAA,IAAI,CAAE,YAAA,CAAmC,QAAA,CAAS,GAAG,CAAA,EAAG;AACtD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,4DAA4D,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,UACzE,GAAG,CAAA,mEAAA;AAAA,OACf;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,OAAO,SAAA,IAAa,qBAAA;AACtC,IAAA,MAAM,OAAA,GAAU,OAAO,OAAA,IAAW,mBAAA;AAClC,IAAA,IAAA,CAAK,IAAA,GAAO;AAAA,MACV,SAAA;AAAA,MACA,OAAA;AAAA,MACA,GAAA;AAAA,MACA,YAAA,EAAc,OAAO,YAAA,IAAgB,wBAAA;AAAA,MACrC,gBAAA,EACE,OAAO,gBAAA,IAAoB;AAAA,KAC/B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,MAAA,EAKR;AAEP,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OAGF;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAM,OAAO,GAAA,IAAO,cAAA;AAC1B,IAAA,MAAM,cACJ,GAAA,KAAQ,GAAA,GACJ,aAAA,CAAc,GAAG,IACjB,GAAA,KAAQ,GAAA,GACN,aAAA,CAAc,GAAG,IACjB,GAAA,KAAQ,GAAA,GACN,cAAc,GAAI,CAAA,GAClB,cAAc,GAAK,CAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,CAAO,UAAA,EAAY,WAAW,CAAA;AACzD,IAAA,OAAO,KAAK,WAAA,CAAY;AAAA,MACtB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,GAAA;AAAA,MACA,cAAc,MAAA,CAAO,YAAA;AAAA,MACrB,kBAAkB,MAAA,CAAO;AAAA,KAC1B,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,mBAAmB,MAAA,EAA4C;AAE7D,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OAGF;AAAA,IACF;AAGA,IAAA,IAAI,MAAA,CAAO,kBAAkB,CAAA,EAAG;AAC9B,MAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,IACzD;AACA,IAAA,IAAI,OAAO,SAAA,CAAU,KAAA,IAAS,KAAK,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,EAAG;AAC5D,MAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,IAC3D;AACA,IAAA,IAAI,MAAA,CAAO,SAAA,CAAU,KAAA,IAAS,MAAA,CAAO,UAAU,GAAA,EAAK;AAClD,MAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,IACnE;AAGA,IAAA,IAAI,MAAA,CAAO,QAAQ,MAAA,EAAW;AAC5B,MAAA,IAAI,CAAE,YAAA,CAAmC,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA,EAAG;AAC7D,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,4DAA4D,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,OAAA,EACzE,OAAO,GAAG,CAAA,mEAAA;AAAA,SACtB;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,MACrB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,gBAAgB,MAAA,CAAO,cAAA;AAAA,MACvB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,eAAe,MAAA,CAAO,aAAA;AAAA,MACtB,mBAAmB,MAAA,CAAO,iBAAA;AAAA,MAC1B,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,cAAc,MAAA,CAAO,YAAA;AAAA,MACrB,kBAAkB,MAAA,CAAO;AAAA,KAC3B;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBA,kBACE,aAAA,EACM;AAEN,IAAA,IAAA,CAAK,aAAA,GAAgB,CAAC,GAAG,aAAa,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACrD,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,WAAA,CAAY,WAAA,EAAY;AACxC,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,WAAA,CAAY,WAAA,EAAY;AACxC,MAAA,OAAO,KAAA,GAAQ,KAAA,GAAQ,EAAA,GAAK,KAAA,GAAQ,QAAQ,CAAA,GAAI,CAAA;AAAA,IAClD,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAY,MAAA,EAKH;AACP,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,QAAA,IAAY,2BAA2B,CAAA;AAAA,MAC/D,aAAA,EAAe,OAAO,aAAA,IAAiB,CAAA;AAAA,MACvC,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,SAAS,MAAA,CAAO;AAAA,KAClB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,eAAe,MAAA,EAAmC;AAChD,IAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,cAAc,SAAA,EAAkC;AAC9C,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,gBAAgB,OAAA,EAAwB;AACtC,IAAA,IAAA,CAAK,WAAA,GAAc,OAAA;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,eAAe,OAAA,EAAyB;AACtC,IAAA,IAAA,CAAK,aAAa,OAAA,IAAW,YAAA;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,aAAa,GAAA,EAAoB;AAC/B,IAAA,IAAA,CAAK,QAAA,GAAW,GAAA;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGQ,cAAA,CACN,KACA,OAAA,EACM;AACN,IAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,MACrB,GAAG,IAAA,CAAK,eAAA;AAAA,MACR,CAAC,GAAG,GAAG;AAAA,KACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,iBAAiB,OAAA,EAAwB;AACvC,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,cAAA,EAAgB,OAAO,CAAA;AAAA,EACpD;AAAA,EAEA,YAAY,OAAA,EAAwB;AAClC,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,SAAA,EAAW,OAAO,CAAA;AAAA,EAC/C;AAAA,EAEA,kBAAkB,OAAA,EAAwB;AACxC,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,eAAA,EAAiB,OAAO,CAAA;AAAA,EACrD;AAAA,EAEA,sBAAsB,OAAA,EAAwB;AAC5C,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,mBAAA,EAAqB,OAAO,CAAA;AAAA,EACzD;AAAA,EAEA,eAAe,OAAA,EAAwB;AACrC,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,YAAA,EAAc,OAAO,CAAA;AAAA,EAClD;AAAA,EAEA,eAAe,OAAA,EAAwB;AACrC,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,YAAA,EAAc,OAAO,CAAA;AAAA,EAClD;AAAA,EAEA,iBAAiB,OAAA,EAAwB;AACvC,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,cAAA,EAAgB,OAAO,CAAA;AAAA,EACpD;AAAA,EAEA,KAAA,GAAsC;AACpC,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAC1D,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAM,MAAM,IAAI,MAAM,wBAAwB,CAAA;AACxD,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAC1E,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,EAAa,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAGhE,IAAA,IAAI,IAAA,CAAK,eAAA,IAAmB,CAAC,IAAA,CAAK,IAAA,EAAM;AACtC,MAAA,MAAM,SAAS,IAAA,CAAK,eAAA;AAGpB,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,WAAA,IAAe,IAAA,CAAK,IAAA,CAAK,aAAA;AACpD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAGA,MAAA,MAAM,GAAA,GAAM,OAAO,GAAA,IAAO,cAAA;AAC1B,MAAA,MAAM,cACJ,GAAA,KAAQ,GAAA,GACJ,aAAA,CAAc,GAAG,IACjB,GAAA,KAAQ,GAAA,GACN,aAAA,CAAc,GAAG,IACjB,GAAA,KAAQ,GAAA,GACN,cAAc,GAAI,CAAA,GAClB,cAAc,GAAK,CAAA;AAG7B,MAAA,MAAM,eAAA,GAAkB,2BAAA;AAAA,QACtB,OAAO,SAAA,CAAU,KAAA;AAAA,QACjB,WAAA;AAAA,QACA,MAAA,CAAO;AAAA,OACT;AACA,MAAA,MAAM,aAAA,GAAgB,2BAAA;AAAA,QACpB,OAAO,SAAA,CAAU,GAAA;AAAA,QACjB,WAAA;AAAA,QACA,MAAA,CAAO;AAAA,OACT;AAGA,MAAA,MAAM,WAAA,GAAc;AAAA,QAClB,GAAG,eAAA,CAAgB,QAAA;AAAA,QACnB,GAAG,aAAA,CAAc;AAAA,OACnB;AACA,MAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,QAAA,OAAA,CAAQ,KAAK,iCAAiC,CAAA;AAC9C,QAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAA,KAAM,OAAA,CAAQ,KAAK,CAAA,IAAA,EAAO,CAAC,EAAE,CAAC,CAAA;AAAA,MACrD;AAGA,MAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,gCAAA,CAAiC;AAAA,QAC9D,gBAAgB,MAAA,CAAO,SAAA;AAAA,QACvB,WAAA;AAAA,QACA,mBAAmB,MAAA,CAAO,cAAA;AAAA,QAC1B,WAAA;AAAA,QACA,aAAA,EAAe,OAAO,aAAA,IAAiB,EAAA;AAAA,QACvC,iBAAA,EAAmB,OAAO,iBAAA,IAAqB;AAAA,OAChD,CAAA;AAGD,MAAA,IAAA,CAAK,IAAA,GAAO;AAAA,QACV,SAAA;AAAA,QACA,OAAA;AAAA,QACA,GAAA;AAAA,QACA,YAAA,EAAc,OAAO,YAAA,IAAgB,wBAAA;AAAA,QACrC,gBAAA,EACE,OAAO,gBAAA,IAAoB;AAAA,OAC/B;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAM,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAGhE,IAAA,MAAM,UAAA,GACJ,IAAA,CAAK,UAAA,KACJ,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA,GAC5B,EAAE,IAAA,EAAM,MAAA,EAAgB,GACxB,EAAE,MAAM,SAAA,EAAmB,CAAA;AAEjC,IAAA,IACE,WAAW,IAAA,KAAS,WAAA,IACpB,CAAC,uBAAA,CAAwB,IAAA,CAAK,OAAO,CAAA,EACrC;AACA,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,+CAAA,EAAkD,KAAK,OAAO,CAAA,uDAAA;AAAA,OAChE;AAAA,IACF;AAGA,IAAA,MAAM,qBAAA,GAAwB,IAAA,CAAK,aAAA,GAC/B,EAAE,GAAG,IAAA,CAAK,IAAA,EAAM,aAAA,EAAe,IAAA,CAAK,aAAA,EAAc,GAClD,IAAA,CAAK,IAAA;AAOT,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,KAAS,MAAA,EAAQ;AAClC,MAAA,MAAM,gBAAA,GACJ,qBAAA,CAAsB,aAAA,IACtB,qBAAA,CAAsB,cAAc,MAAA,GAAS,CAAA;AAC/C,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SAGF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,IAAA,EAAM,qBAAA;AAAA,MACN,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,UAAA;AAAA,MACA,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,UAAA,EAAY,KAAK,UAAA,IAAc,YAAA;AAAA,MAC/B,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,SAAS,IAAA,CAAK,eAAA;AAAA,MACd,KAAK,IAAA,CAAK;AAAA,KACZ;AAAA,EACF;AACF","file":"chunk-YWK6YH6M.mjs","sourcesContent":["import type { Address } from 'viem';\nimport {\n DEFAULT_V3_END_TICK,\n DEFAULT_V3_FEE,\n DEFAULT_V3_MAX_SHARE_TO_BE_SOLD,\n DEFAULT_V3_NUM_POSITIONS,\n DEFAULT_V3_START_TICK,\n DEFAULT_V3_VESTING_DURATION,\n DEFAULT_V3_YEARLY_MINT_RATE,\n TICK_SPACINGS,\n V3_FEE_TIERS,\n ZERO_ADDRESS,\n} from '../constants';\nimport {\n marketCapToTicksForStaticAuction,\n validateMarketCapParameters,\n} from '../utils';\nimport {\n isNoOpEnabledChain,\n isLaunchpadEnabledChain,\n type CreateStaticAuctionParams,\n type GovernanceOption,\n type MigrationConfig,\n type PriceRange,\n type VestingConfig,\n type TokenConfig,\n type StaticAuctionMarketCapConfig,\n type ModuleAddressOverrides,\n} from '../types';\nimport { type SupportedChainId } from '../addresses';\nimport { computeTicks, type BaseAuctionBuilder } from './shared';\n\nexport class StaticAuctionBuilder<\n C extends SupportedChainId,\n> implements BaseAuctionBuilder<C> {\n private token?: TokenConfig;\n private sale?: CreateStaticAuctionParams<C>['sale'];\n private pool?: CreateStaticAuctionParams<C>['pool'];\n private beneficiaries?: { beneficiary: Address; shares: bigint }[];\n private vesting?: VestingConfig;\n private governance?: GovernanceOption<C>;\n private migration?: MigrationConfig;\n private integrator?: Address;\n private userAddress?: Address;\n private moduleAddresses?: ModuleAddressOverrides;\n private gasLimit?: bigint;\n // Deferred market cap config - converted to pool in build()\n private marketCapConfig?: {\n marketCap: { start: number; end: number };\n numerairePrice: number;\n tokenSupply?: bigint;\n tokenDecimals?: number;\n numeraireDecimals?: number;\n fee?: number;\n numPositions?: number;\n maxShareToBeSold?: bigint;\n };\n public chainId: C;\n\n constructor(chainId: C) {\n this.chainId = chainId;\n }\n\n static forChain<C extends SupportedChainId>(\n chainId: C,\n ): StaticAuctionBuilder<C> {\n return new StaticAuctionBuilder(chainId);\n }\n\n tokenConfig(\n params:\n | {\n type?: 'standard';\n name: string;\n symbol: string;\n tokenURI: string;\n yearlyMintRate?: bigint;\n }\n | {\n type: 'doppler404';\n name: string;\n symbol: string;\n baseURI: string;\n unit?: bigint;\n },\n ): this {\n if (params && 'type' in params && params.type === 'doppler404') {\n this.token = {\n type: 'doppler404',\n name: params.name,\n symbol: params.symbol,\n baseURI: params.baseURI,\n unit: params.unit,\n };\n } else {\n this.token = {\n type: 'standard',\n name: params.name,\n symbol: params.symbol,\n tokenURI: params.tokenURI,\n yearlyMintRate: params.yearlyMintRate ?? DEFAULT_V3_YEARLY_MINT_RATE,\n };\n }\n return this;\n }\n\n saleConfig(params: {\n initialSupply: bigint;\n numTokensToSell: bigint;\n numeraire: Address;\n }): this {\n this.sale = {\n initialSupply: params.initialSupply,\n numTokensToSell: params.numTokensToSell,\n numeraire: params.numeraire,\n };\n return this;\n }\n\n /**\n * Provide pool ticks directly.\n *\n * Note: Static Auctions use Uniswap V3, which only supports 4 fee tiers:\n * 100 (0.01%), 500 (0.05%), 3000 (0.3%), 10000 (1%).\n * For custom fees, use Dynamic or Multicurve auctions (V4).\n */\n poolByTicks(params: {\n startTick?: number;\n endTick?: number;\n fee?: number;\n numPositions?: number;\n maxShareToBeSold?: bigint;\n }): this {\n // Mutual exclusion: cannot use poolByTicks() after withMarketCapRange()\n if (this.marketCapConfig) {\n throw new Error(\n 'Cannot use poolByTicks() after withMarketCapRange(). ' +\n 'Use withMarketCapRange() for market cap-based configuration, ' +\n 'or poolByTicks()/poolByPriceRange() for manual tick configuration.',\n );\n }\n\n const fee = params.fee ?? DEFAULT_V3_FEE;\n\n // Validate fee is a V3-supported tier\n if (!(V3_FEE_TIERS as readonly number[]).includes(fee)) {\n throw new Error(\n `Static auctions (Uniswap V3) require standard fee tiers: ${V3_FEE_TIERS.join(', ')}. ` +\n `Got: ${fee}. For custom fees, use Dynamic or Multicurve auctions (Uniswap V4).`,\n );\n }\n\n const startTick = params.startTick ?? DEFAULT_V3_START_TICK;\n const endTick = params.endTick ?? DEFAULT_V3_END_TICK;\n this.pool = {\n startTick,\n endTick,\n fee,\n numPositions: params.numPositions ?? DEFAULT_V3_NUM_POSITIONS,\n maxShareToBeSold:\n params.maxShareToBeSold ?? DEFAULT_V3_MAX_SHARE_TO_BE_SOLD,\n };\n return this;\n }\n\n /**\n * @deprecated Use withMarketCapRange() instead for more intuitive market cap configuration\n */\n poolByPriceRange(params: {\n priceRange: PriceRange;\n fee?: number;\n numPositions?: number;\n maxShareToBeSold?: bigint;\n }): this {\n // Mutual exclusion: cannot use poolByPriceRange() after withMarketCapRange()\n if (this.marketCapConfig) {\n throw new Error(\n 'Cannot use poolByPriceRange() after withMarketCapRange(). ' +\n 'Use withMarketCapRange() for market cap-based configuration, ' +\n 'or poolByTicks()/poolByPriceRange() for manual tick configuration.',\n );\n }\n\n const fee = params.fee ?? DEFAULT_V3_FEE;\n const tickSpacing =\n fee === 100\n ? TICK_SPACINGS[100]\n : fee === 500\n ? TICK_SPACINGS[500]\n : fee === 3000\n ? TICK_SPACINGS[3000]\n : TICK_SPACINGS[10000];\n const ticks = computeTicks(params.priceRange, tickSpacing);\n return this.poolByTicks({\n startTick: ticks.startTick,\n endTick: ticks.endTick,\n fee,\n numPositions: params.numPositions,\n maxShareToBeSold: params.maxShareToBeSold,\n });\n }\n\n /**\n * Configure pool using target market cap range.\n * Converts market cap values (in USD) to Uniswap ticks.\n *\n * @param params - Market cap configuration\n * @returns Builder instance for chaining\n *\n * @example\n * ```ts\n * builder\n * .saleConfig({ initialSupply, numTokensToSell, numeraire: WETH })\n * .withMarketCapRange({\n * marketCap: { start: 100_000, end: 10_000_000 }, // $100k to $10M\n * numerairePrice: 3000, // ETH = $3000\n * })\n * ```\n */\n withMarketCapRange(params: StaticAuctionMarketCapConfig): this {\n // Mutual exclusion: cannot use withMarketCapRange() after poolByTicks()/poolByPriceRange()\n if (this.pool) {\n throw new Error(\n 'Cannot use withMarketCapRange() after poolByTicks()/poolByPriceRange(). ' +\n 'Use withMarketCapRange() for market cap-based configuration, ' +\n 'or poolByTicks()/poolByPriceRange() for manual tick configuration.',\n );\n }\n\n // Basic validation that doesn't require saleConfig\n if (params.numerairePrice <= 0) {\n throw new Error('numerairePrice must be greater than 0');\n }\n if (params.marketCap.start <= 0 || params.marketCap.end <= 0) {\n throw new Error('marketCap values must be greater than 0');\n }\n if (params.marketCap.start >= params.marketCap.end) {\n throw new Error('marketCap.start must be less than marketCap.end');\n }\n\n // Validate fee is a V3-supported tier (if provided)\n if (params.fee !== undefined) {\n if (!(V3_FEE_TIERS as readonly number[]).includes(params.fee)) {\n throw new Error(\n `Static auctions (Uniswap V3) require standard fee tiers: ${V3_FEE_TIERS.join(', ')}. ` +\n `Got: ${params.fee}. For custom fees, use Dynamic or Multicurve auctions (Uniswap V4).`,\n );\n }\n }\n\n // Store config for deferred conversion in build()\n this.marketCapConfig = {\n marketCap: params.marketCap,\n numerairePrice: params.numerairePrice,\n tokenSupply: params.tokenSupply,\n tokenDecimals: params.tokenDecimals,\n numeraireDecimals: params.numeraireDecimals,\n fee: params.fee,\n numPositions: params.numPositions,\n maxShareToBeSold: params.maxShareToBeSold,\n };\n\n return this;\n }\n\n /**\n * Configure beneficiaries for fee streaming on locked V3 pools.\n *\n * When beneficiaries are provided, the pool enters a \"Locked\" state where:\n * - Fees are collected and distributed to beneficiaries according to their shares\n * - Liquidity cannot be exited/migrated (pool stays locked permanently)\n * - Anyone can call collectFees() to distribute accumulated fees\n *\n * IMPORTANT:\n * - Shares must sum to exactly WAD (1e18 = 100%)\n * - Protocol owner (Airlock.owner()) must be included with at least 5% shares\n * - Beneficiaries will be automatically sorted by address (ascending)\n * - Use withMigration({ type: 'noOp' }) when using beneficiaries\n *\n * @example\n * ```typescript\n * builder.withBeneficiaries([\n * { beneficiary: protocolOwner, shares: parseEther('0.05') }, // 5% (minimum required)\n * { beneficiary: teamWallet, shares: parseEther('0.45') }, // 45%\n * { beneficiary: daoTreasury, shares: parseEther('0.50') }, // 50%\n * ])\n * ```\n */\n withBeneficiaries(\n beneficiaries: { beneficiary: Address; shares: bigint }[],\n ): this {\n // Sort beneficiaries by address (ascending) as required by the contract\n this.beneficiaries = [...beneficiaries].sort((a, b) => {\n const aAddr = a.beneficiary.toLowerCase();\n const bAddr = b.beneficiary.toLowerCase();\n return aAddr < bAddr ? -1 : aAddr > bAddr ? 1 : 0;\n });\n return this;\n }\n\n withVesting(params?: {\n duration?: bigint;\n cliffDuration?: number;\n recipients?: Address[];\n amounts?: bigint[];\n }): this {\n if (!params) {\n this.vesting = undefined;\n return this;\n }\n this.vesting = {\n duration: Number(params.duration ?? DEFAULT_V3_VESTING_DURATION),\n cliffDuration: params.cliffDuration ?? 0,\n recipients: params.recipients,\n amounts: params.amounts,\n };\n return this;\n }\n\n withGovernance(params: GovernanceOption<C>): this {\n this.governance = params;\n return this;\n }\n\n withMigration(migration: MigrationConfig): this {\n this.migration = migration;\n return this;\n }\n\n withUserAddress(address: Address): this {\n this.userAddress = address;\n return this;\n }\n\n withIntegrator(address?: Address): this {\n this.integrator = address ?? ZERO_ADDRESS;\n return this;\n }\n\n withGasLimit(gas?: bigint): this {\n this.gasLimit = gas;\n return this;\n }\n\n // Address override helpers\n private overrideModule<K extends keyof ModuleAddressOverrides>(\n key: K,\n address: NonNullable<ModuleAddressOverrides[K]>,\n ): this {\n this.moduleAddresses = {\n ...this.moduleAddresses,\n [key]: address,\n } as ModuleAddressOverrides;\n return this;\n }\n\n withTokenFactory(address: Address): this {\n return this.overrideModule('tokenFactory', address);\n }\n\n withAirlock(address: Address): this {\n return this.overrideModule('airlock', address);\n }\n\n withV3Initializer(address: Address): this {\n return this.overrideModule('v3Initializer', address);\n }\n\n withGovernanceFactory(address: Address): this {\n return this.overrideModule('governanceFactory', address);\n }\n\n withV2Migrator(address: Address): this {\n return this.overrideModule('v2Migrator', address);\n }\n\n withV4Migrator(address: Address): this {\n return this.overrideModule('v4Migrator', address);\n }\n\n withNoOpMigrator(address: Address): this {\n return this.overrideModule('noOpMigrator', address);\n }\n\n build(): CreateStaticAuctionParams<C> {\n if (!this.token) throw new Error('tokenConfig is required');\n if (!this.sale) throw new Error('saleConfig is required');\n if (!this.migration) throw new Error('migration configuration is required');\n if (!this.userAddress) throw new Error('userAddress is required');\n\n // Convert deferred market cap config to pool if set\n if (this.marketCapConfig && !this.pool) {\n const config = this.marketCapConfig;\n\n // Get token supply from config or saleConfig\n const tokenSupply = config.tokenSupply ?? this.sale.initialSupply;\n if (!tokenSupply) {\n throw new Error(\n 'tokenSupply must be provided (either via saleConfig() or withMarketCapRange() params)',\n );\n }\n\n // Determine fee and tick spacing\n const fee = config.fee ?? DEFAULT_V3_FEE;\n const tickSpacing =\n fee === 100\n ? TICK_SPACINGS[100]\n : fee === 500\n ? TICK_SPACINGS[500]\n : fee === 3000\n ? TICK_SPACINGS[3000]\n : TICK_SPACINGS[10000];\n\n // Validate market cap parameters\n const startValidation = validateMarketCapParameters(\n config.marketCap.start,\n tokenSupply,\n config.tokenDecimals,\n );\n const endValidation = validateMarketCapParameters(\n config.marketCap.end,\n tokenSupply,\n config.tokenDecimals,\n );\n\n // Log warnings if any\n const allWarnings = [\n ...startValidation.warnings,\n ...endValidation.warnings,\n ];\n if (allWarnings.length > 0) {\n console.warn('Market cap validation warnings:');\n allWarnings.forEach((w) => console.warn(` - ${w}`));\n }\n\n // Convert market cap range to ticks for V3 Static auction\n const { startTick, endTick } = marketCapToTicksForStaticAuction({\n marketCapRange: config.marketCap,\n tokenSupply,\n numerairePriceUSD: config.numerairePrice,\n tickSpacing,\n tokenDecimals: config.tokenDecimals ?? 18,\n numeraireDecimals: config.numeraireDecimals ?? 18,\n });\n\n // Set pool config\n this.pool = {\n startTick,\n endTick,\n fee,\n numPositions: config.numPositions ?? DEFAULT_V3_NUM_POSITIONS,\n maxShareToBeSold:\n config.maxShareToBeSold ?? DEFAULT_V3_MAX_SHARE_TO_BE_SOLD,\n };\n }\n\n if (!this.pool) throw new Error('pool configuration is required');\n\n // Default governance: noOp on supported chains, default on others (e.g., Ink)\n const governance =\n this.governance ??\n (isNoOpEnabledChain(this.chainId)\n ? { type: 'noOp' as const }\n : { type: 'default' as const });\n\n if (\n governance.type === 'launchpad' &&\n !isLaunchpadEnabledChain(this.chainId)\n ) {\n throw new Error(\n `Launchpad governance is not supported on chain ${this.chainId}. Use a supported chain or a different governance type.`,\n );\n }\n\n // Merge beneficiaries into pool config if provided\n const poolWithBeneficiaries = this.beneficiaries\n ? { ...this.pool, beneficiaries: this.beneficiaries }\n : this.pool;\n\n // Validate noOp migration requires beneficiaries\n // NoOpMigrator is designed for locked pools with beneficiaries. Without beneficiaries,\n // the pool status is \"Initialized\" (not \"Locked\"), meaning exitLiquidity() can be called.\n // But NoOpMigrator.migrate() always reverts, so the entire graduation transaction fails\n // and liquidity becomes trapped.\n if (this.migration.type === 'noOp') {\n const hasBeneficiaries =\n poolWithBeneficiaries.beneficiaries &&\n poolWithBeneficiaries.beneficiaries.length > 0;\n if (!hasBeneficiaries) {\n throw new Error(\n 'noOp migration requires beneficiaries. Without beneficiaries, the pool would be stuck after reaching ' +\n 'graduation - exitLiquidity() succeeds but NoOpMigrator.migrate() always reverts, causing the entire ' +\n 'transaction to fail. Either add beneficiaries via withBeneficiaries() or use a different migration type (uniswapV2, uniswapV4).',\n );\n }\n }\n\n return {\n token: this.token,\n sale: this.sale,\n pool: poolWithBeneficiaries,\n vesting: this.vesting,\n governance: governance as GovernanceOption<C>,\n migration: this.migration,\n integrator: this.integrator ?? ZERO_ADDRESS,\n userAddress: this.userAddress,\n modules: this.moduleAddresses,\n gas: this.gasLimit,\n };\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/builders/StaticAuctionBuilder.ts"],"names":[],"mappings":"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","file":"chunk-DQJXCZU2.mjs","sourcesContent":["import type { Address } from 'viem';\nimport {\n DEFAULT_V3_END_TICK,\n DEFAULT_V3_FEE,\n DEFAULT_V3_MAX_SHARE_TO_BE_SOLD,\n DEFAULT_V3_NUM_POSITIONS,\n DEFAULT_V3_START_TICK,\n DEFAULT_V3_VESTING_DURATION,\n DEFAULT_V3_YEARLY_MINT_RATE,\n TICK_SPACINGS,\n V3_FEE_TIERS,\n ZERO_ADDRESS,\n} from '../constants';\nimport {\n marketCapToTicksForStaticAuction,\n validateMarketCapParameters,\n} from '../utils';\nimport {\n isNoOpEnabledChain,\n isLaunchpadEnabledChain,\n type CreateStaticAuctionParams,\n type GovernanceOption,\n type MigrationConfig,\n type PriceRange,\n type VestingConfig,\n type TokenConfig,\n type StaticAuctionMarketCapConfig,\n type ModuleAddressOverrides,\n} from '../types';\nimport { type SupportedChainId } from '../addresses';\nimport { computeTicks, type BaseAuctionBuilder } from './shared';\n\nexport class StaticAuctionBuilder<\n C extends SupportedChainId,\n> implements BaseAuctionBuilder<C> {\n private token?: TokenConfig;\n private sale?: CreateStaticAuctionParams<C>['sale'];\n private pool?: CreateStaticAuctionParams<C>['pool'];\n private beneficiaries?: { beneficiary: Address; shares: bigint }[];\n private vesting?: VestingConfig;\n private governance?: GovernanceOption<C>;\n private migration?: MigrationConfig;\n private integrator?: Address;\n private userAddress?: Address;\n private moduleAddresses?: ModuleAddressOverrides;\n private gasLimit?: bigint;\n // Deferred market cap config - converted to pool in build()\n private marketCapConfig?: {\n marketCap: { start: number; end: number };\n numerairePrice: number;\n tokenSupply?: bigint;\n tokenDecimals?: number;\n numeraireDecimals?: number;\n fee?: number;\n numPositions?: number;\n maxShareToBeSold?: bigint;\n };\n public chainId: C;\n\n constructor(chainId: C) {\n this.chainId = chainId;\n }\n\n static forChain<C extends SupportedChainId>(\n chainId: C,\n ): StaticAuctionBuilder<C> {\n return new StaticAuctionBuilder(chainId);\n }\n\n tokenConfig(\n params:\n | {\n type?: 'standard';\n name: string;\n symbol: string;\n tokenURI: string;\n yearlyMintRate?: bigint;\n }\n | {\n type: 'doppler404';\n name: string;\n symbol: string;\n baseURI: string;\n unit?: bigint;\n },\n ): this {\n if (params && 'type' in params && params.type === 'doppler404') {\n this.token = {\n type: 'doppler404',\n name: params.name,\n symbol: params.symbol,\n baseURI: params.baseURI,\n unit: params.unit,\n };\n } else {\n this.token = {\n type: 'standard',\n name: params.name,\n symbol: params.symbol,\n tokenURI: params.tokenURI,\n yearlyMintRate: params.yearlyMintRate ?? DEFAULT_V3_YEARLY_MINT_RATE,\n };\n }\n return this;\n }\n\n saleConfig(params: {\n initialSupply: bigint;\n numTokensToSell: bigint;\n numeraire: Address;\n }): this {\n this.sale = {\n initialSupply: params.initialSupply,\n numTokensToSell: params.numTokensToSell,\n numeraire: params.numeraire,\n };\n return this;\n }\n\n /**\n * Provide pool ticks directly.\n *\n * Note: Static Auctions use Uniswap V3, which only supports 4 fee tiers:\n * 100 (0.01%), 500 (0.05%), 3000 (0.3%), 10000 (1%).\n * For custom fees, use Dynamic or Multicurve auctions (V4).\n */\n poolByTicks(params: {\n startTick?: number;\n endTick?: number;\n fee?: number;\n numPositions?: number;\n maxShareToBeSold?: bigint;\n }): this {\n // Mutual exclusion: cannot use poolByTicks() after withMarketCapRange()\n if (this.marketCapConfig) {\n throw new Error(\n 'Cannot use poolByTicks() after withMarketCapRange(). ' +\n 'Use withMarketCapRange() for market cap-based configuration, ' +\n 'or poolByTicks()/poolByPriceRange() for manual tick configuration.',\n );\n }\n\n const fee = params.fee ?? DEFAULT_V3_FEE;\n\n // Validate fee is a V3-supported tier\n if (!(V3_FEE_TIERS as readonly number[]).includes(fee)) {\n throw new Error(\n `Static auctions (Uniswap V3) require standard fee tiers: ${V3_FEE_TIERS.join(', ')}. ` +\n `Got: ${fee}. For custom fees, use Dynamic or Multicurve auctions (Uniswap V4).`,\n );\n }\n\n const startTick = params.startTick ?? DEFAULT_V3_START_TICK;\n const endTick = params.endTick ?? DEFAULT_V3_END_TICK;\n this.pool = {\n startTick,\n endTick,\n fee,\n numPositions: params.numPositions ?? DEFAULT_V3_NUM_POSITIONS,\n maxShareToBeSold:\n params.maxShareToBeSold ?? DEFAULT_V3_MAX_SHARE_TO_BE_SOLD,\n };\n return this;\n }\n\n /**\n * @deprecated Use withMarketCapRange() instead for more intuitive market cap configuration\n */\n poolByPriceRange(params: {\n priceRange: PriceRange;\n fee?: number;\n numPositions?: number;\n maxShareToBeSold?: bigint;\n }): this {\n // Mutual exclusion: cannot use poolByPriceRange() after withMarketCapRange()\n if (this.marketCapConfig) {\n throw new Error(\n 'Cannot use poolByPriceRange() after withMarketCapRange(). ' +\n 'Use withMarketCapRange() for market cap-based configuration, ' +\n 'or poolByTicks()/poolByPriceRange() for manual tick configuration.',\n );\n }\n\n const fee = params.fee ?? DEFAULT_V3_FEE;\n const tickSpacing =\n fee === 100\n ? TICK_SPACINGS[100]\n : fee === 500\n ? TICK_SPACINGS[500]\n : fee === 3000\n ? TICK_SPACINGS[3000]\n : TICK_SPACINGS[10000];\n const ticks = computeTicks(params.priceRange, tickSpacing);\n return this.poolByTicks({\n startTick: ticks.startTick,\n endTick: ticks.endTick,\n fee,\n numPositions: params.numPositions,\n maxShareToBeSold: params.maxShareToBeSold,\n });\n }\n\n /**\n * Configure pool using target market cap range.\n * Converts market cap values (in USD) to Uniswap ticks.\n *\n * @param params - Market cap configuration\n * @returns Builder instance for chaining\n *\n * @example\n * ```ts\n * builder\n * .saleConfig({ initialSupply, numTokensToSell, numeraire: WETH })\n * .withMarketCapRange({\n * marketCap: { start: 100_000, end: 10_000_000 }, // $100k to $10M\n * numerairePrice: 3000, // ETH = $3000\n * })\n * ```\n */\n withMarketCapRange(params: StaticAuctionMarketCapConfig): this {\n // Mutual exclusion: cannot use withMarketCapRange() after poolByTicks()/poolByPriceRange()\n if (this.pool) {\n throw new Error(\n 'Cannot use withMarketCapRange() after poolByTicks()/poolByPriceRange(). ' +\n 'Use withMarketCapRange() for market cap-based configuration, ' +\n 'or poolByTicks()/poolByPriceRange() for manual tick configuration.',\n );\n }\n\n // Basic validation that doesn't require saleConfig\n if (params.numerairePrice <= 0) {\n throw new Error('numerairePrice must be greater than 0');\n }\n if (params.marketCap.start <= 0 || params.marketCap.end <= 0) {\n throw new Error('marketCap values must be greater than 0');\n }\n if (params.marketCap.start >= params.marketCap.end) {\n throw new Error('marketCap.start must be less than marketCap.end');\n }\n\n // Validate fee is a V3-supported tier (if provided)\n if (params.fee !== undefined) {\n if (!(V3_FEE_TIERS as readonly number[]).includes(params.fee)) {\n throw new Error(\n `Static auctions (Uniswap V3) require standard fee tiers: ${V3_FEE_TIERS.join(', ')}. ` +\n `Got: ${params.fee}. For custom fees, use Dynamic or Multicurve auctions (Uniswap V4).`,\n );\n }\n }\n\n // Store config for deferred conversion in build()\n this.marketCapConfig = {\n marketCap: params.marketCap,\n numerairePrice: params.numerairePrice,\n tokenSupply: params.tokenSupply,\n tokenDecimals: params.tokenDecimals,\n numeraireDecimals: params.numeraireDecimals,\n fee: params.fee,\n numPositions: params.numPositions,\n maxShareToBeSold: params.maxShareToBeSold,\n };\n\n return this;\n }\n\n /**\n * Configure beneficiaries for fee streaming on locked V3 pools.\n *\n * When beneficiaries are provided, the pool enters a \"Locked\" state where:\n * - Fees are collected and distributed to beneficiaries according to their shares\n * - Liquidity cannot be exited/migrated (pool stays locked permanently)\n * - Anyone can call collectFees() to distribute accumulated fees\n *\n * IMPORTANT:\n * - Shares must sum to exactly WAD (1e18 = 100%)\n * - Protocol owner (Airlock.owner()) must be included with at least 5% shares\n * - Beneficiaries will be automatically sorted by address (ascending)\n * - Use withMigration({ type: 'noOp' }) when using beneficiaries\n *\n * @example\n * ```typescript\n * builder.withBeneficiaries([\n * { beneficiary: protocolOwner, shares: parseEther('0.05') }, // 5% (minimum required)\n * { beneficiary: teamWallet, shares: parseEther('0.45') }, // 45%\n * { beneficiary: daoTreasury, shares: parseEther('0.50') }, // 50%\n * ])\n * ```\n */\n withBeneficiaries(\n beneficiaries: { beneficiary: Address; shares: bigint }[],\n ): this {\n // Sort beneficiaries by address (ascending) as required by the contract\n this.beneficiaries = [...beneficiaries].sort((a, b) => {\n const aAddr = a.beneficiary.toLowerCase();\n const bAddr = b.beneficiary.toLowerCase();\n return aAddr < bAddr ? -1 : aAddr > bAddr ? 1 : 0;\n });\n return this;\n }\n\n withVesting(params?: {\n duration?: bigint;\n cliffDuration?: number;\n recipients?: Address[];\n amounts?: bigint[];\n }): this {\n if (!params) {\n this.vesting = undefined;\n return this;\n }\n this.vesting = {\n duration: Number(params.duration ?? DEFAULT_V3_VESTING_DURATION),\n cliffDuration: params.cliffDuration ?? 0,\n recipients: params.recipients,\n amounts: params.amounts,\n };\n return this;\n }\n\n withGovernance(params: GovernanceOption<C>): this {\n this.governance = params;\n return this;\n }\n\n withMigration(migration: MigrationConfig): this {\n this.migration = migration;\n return this;\n }\n\n withUserAddress(address: Address): this {\n this.userAddress = address;\n return this;\n }\n\n withIntegrator(address?: Address): this {\n this.integrator = address ?? ZERO_ADDRESS;\n return this;\n }\n\n withGasLimit(gas?: bigint): this {\n this.gasLimit = gas;\n return this;\n }\n\n // Address override helpers\n private overrideModule<K extends keyof ModuleAddressOverrides>(\n key: K,\n address: NonNullable<ModuleAddressOverrides[K]>,\n ): this {\n this.moduleAddresses = {\n ...this.moduleAddresses,\n [key]: address,\n } as ModuleAddressOverrides;\n return this;\n }\n\n withTokenFactory(address: Address): this {\n return this.overrideModule('tokenFactory', address);\n }\n\n withAirlock(address: Address): this {\n return this.overrideModule('airlock', address);\n }\n\n withV3Initializer(address: Address): this {\n return this.overrideModule('v3Initializer', address);\n }\n\n withGovernanceFactory(address: Address): this {\n return this.overrideModule('governanceFactory', address);\n }\n\n withV2Migrator(address: Address): this {\n return this.overrideModule('v2Migrator', address);\n }\n\n withV4Migrator(address: Address): this {\n return this.overrideModule('v4Migrator', address);\n }\n\n withNoOpMigrator(address: Address): this {\n return this.overrideModule('noOpMigrator', address);\n }\n\n build(): CreateStaticAuctionParams<C> {\n if (!this.token) throw new Error('tokenConfig is required');\n if (!this.sale) throw new Error('saleConfig is required');\n if (!this.migration) throw new Error('migration configuration is required');\n if (!this.userAddress) throw new Error('userAddress is required');\n\n // Convert deferred market cap config to pool if set\n if (this.marketCapConfig && !this.pool) {\n const config = this.marketCapConfig;\n\n // Get token supply from config or saleConfig\n const tokenSupply = config.tokenSupply ?? this.sale.initialSupply;\n if (!tokenSupply) {\n throw new Error(\n 'tokenSupply must be provided (either via saleConfig() or withMarketCapRange() params)',\n );\n }\n\n // Determine fee and tick spacing\n const fee = config.fee ?? DEFAULT_V3_FEE;\n const tickSpacing =\n fee === 100\n ? TICK_SPACINGS[100]\n : fee === 500\n ? TICK_SPACINGS[500]\n : fee === 3000\n ? TICK_SPACINGS[3000]\n : TICK_SPACINGS[10000];\n\n // Validate market cap parameters\n const startValidation = validateMarketCapParameters(\n config.marketCap.start,\n tokenSupply,\n config.tokenDecimals,\n );\n const endValidation = validateMarketCapParameters(\n config.marketCap.end,\n tokenSupply,\n config.tokenDecimals,\n );\n\n // Log warnings if any\n const allWarnings = [\n ...startValidation.warnings,\n ...endValidation.warnings,\n ];\n if (allWarnings.length > 0) {\n console.warn('Market cap validation warnings:');\n allWarnings.forEach((w) => console.warn(` - ${w}`));\n }\n\n // Convert market cap range to ticks for V3 Static auction\n const { startTick, endTick } = marketCapToTicksForStaticAuction({\n marketCapRange: config.marketCap,\n tokenSupply,\n numerairePriceUSD: config.numerairePrice,\n tickSpacing,\n tokenDecimals: config.tokenDecimals ?? 18,\n numeraireDecimals: config.numeraireDecimals ?? 18,\n });\n\n // Set pool config\n this.pool = {\n startTick,\n endTick,\n fee,\n numPositions: config.numPositions ?? DEFAULT_V3_NUM_POSITIONS,\n maxShareToBeSold:\n config.maxShareToBeSold ?? DEFAULT_V3_MAX_SHARE_TO_BE_SOLD,\n };\n }\n\n if (!this.pool) throw new Error('pool configuration is required');\n\n // Default governance: noOp on supported chains, default on others (e.g., Ink)\n const governance =\n this.governance ??\n (isNoOpEnabledChain(this.chainId)\n ? { type: 'noOp' as const }\n : { type: 'default' as const });\n\n if (\n governance.type === 'launchpad' &&\n !isLaunchpadEnabledChain(this.chainId)\n ) {\n throw new Error(\n `Launchpad governance is not supported on chain ${this.chainId}. Use a supported chain or a different governance type.`,\n );\n }\n\n // Merge beneficiaries into pool config if provided\n const poolWithBeneficiaries = this.beneficiaries\n ? { ...this.pool, beneficiaries: this.beneficiaries }\n : this.pool;\n\n // Validate noOp migration requires beneficiaries\n // NoOpMigrator is designed for locked pools with beneficiaries. Without beneficiaries,\n // the pool status is \"Initialized\" (not \"Locked\"), meaning exitLiquidity() can be called.\n // But NoOpMigrator.migrate() always reverts, so the entire graduation transaction fails\n // and liquidity becomes trapped.\n if (this.migration.type === 'noOp') {\n const hasBeneficiaries =\n poolWithBeneficiaries.beneficiaries &&\n poolWithBeneficiaries.beneficiaries.length > 0;\n if (!hasBeneficiaries) {\n throw new Error(\n 'noOp migration requires beneficiaries. Without beneficiaries, the pool would be stuck after reaching ' +\n 'graduation - exitLiquidity() succeeds but NoOpMigrator.migrate() always reverts, causing the entire ' +\n 'transaction to fail. Either add beneficiaries via withBeneficiaries() or use a different migration type (uniswapV2, uniswapV4).',\n );\n }\n }\n\n return {\n token: this.token,\n sale: this.sale,\n pool: poolWithBeneficiaries,\n vesting: this.vesting,\n governance: governance as GovernanceOption<C>,\n migration: this.migration,\n integrator: this.integrator ?? ZERO_ADDRESS,\n userAddress: this.userAddress,\n modules: this.moduleAddresses,\n gas: this.gasLimit,\n };\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ //# sourceMappingURL=chunk-DSYPZETD.js.map
4
+ //# sourceMappingURL=chunk-DSYPZETD.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-3PNCB4W5.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-DSYPZETD.js"}