@whetstone-research/doppler-sdk 0.0.1-alpha.8 → 0.0.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.
- package/LICENSE +21 -0
- package/README.md +726 -25
- package/dist/DopplerSDK.d.mts +45 -7
- package/dist/DopplerSDK.d.ts +45 -7
- package/dist/DopplerSDK.js +35 -12
- package/dist/DopplerSDK.mjs +34 -11
- package/dist/abis/bytecodes.d.mts +3 -2
- package/dist/abis/bytecodes.d.ts +3 -2
- package/dist/abis/bytecodes.js +9 -6
- package/dist/abis/bytecodes.mjs +1 -2
- package/dist/abis/index.d.mts +1507 -129
- package/dist/abis/index.d.ts +1507 -129
- package/dist/abis/index.js +43 -20
- package/dist/abis/index.mjs +2 -3
- package/dist/addresses.d.mts +16 -3
- package/dist/addresses.d.ts +16 -3
- package/dist/addresses.js +13 -5
- package/dist/addresses.mjs +2 -2
- package/dist/builders/DynamicAuctionBuilder.d.mts +119 -0
- package/dist/builders/DynamicAuctionBuilder.d.ts +119 -0
- package/dist/builders/DynamicAuctionBuilder.js +29 -0
- package/dist/builders/DynamicAuctionBuilder.js.map +1 -0
- package/dist/builders/DynamicAuctionBuilder.mjs +20 -0
- package/dist/builders/DynamicAuctionBuilder.mjs.map +1 -0
- package/dist/builders/MulticurveBuilder.d.mts +132 -0
- package/dist/builders/MulticurveBuilder.d.ts +132 -0
- package/dist/builders/MulticurveBuilder.js +29 -0
- package/dist/builders/MulticurveBuilder.js.map +1 -0
- package/dist/builders/MulticurveBuilder.mjs +20 -0
- package/dist/builders/MulticurveBuilder.mjs.map +1 -0
- package/dist/builders/StaticAuctionBuilder.d.mts +124 -0
- package/dist/builders/StaticAuctionBuilder.d.ts +124 -0
- package/dist/builders/StaticAuctionBuilder.js +29 -0
- package/dist/builders/StaticAuctionBuilder.js.map +1 -0
- package/dist/builders/StaticAuctionBuilder.mjs +20 -0
- package/dist/builders/StaticAuctionBuilder.mjs.map +1 -0
- package/dist/builders/index.d.mts +8 -0
- package/dist/builders/index.d.ts +8 -0
- package/dist/builders/index.js +56 -0
- package/dist/builders/index.js.map +1 -0
- package/dist/builders/index.mjs +23 -0
- package/dist/builders/index.mjs.map +1 -0
- package/dist/builders/shared.d.mts +116 -0
- package/dist/builders/shared.d.ts +116 -0
- package/dist/builders/shared.js +39 -0
- package/dist/builders/shared.js.map +1 -0
- package/dist/builders/shared.mjs +18 -0
- package/dist/builders/shared.mjs.map +1 -0
- package/dist/builders.d.mts +8 -131
- package/dist/builders.d.ts +8 -131
- package/dist/builders.js +44 -5
- package/dist/builders.mjs +22 -3
- package/dist/chunk-3PNCB4W5.js +4 -0
- package/dist/{chunk-KRN3ROUE.js.map → chunk-3PNCB4W5.js.map} +1 -1
- package/dist/chunk-3RK7LRAA.js +282 -0
- package/dist/chunk-3RK7LRAA.js.map +1 -0
- package/dist/chunk-4HM3ERBU.js +13 -0
- package/dist/chunk-4HM3ERBU.js.map +1 -0
- package/dist/{chunk-7W72MFJO.mjs → chunk-4TROGENW.mjs} +5 -4
- package/dist/chunk-4TROGENW.mjs.map +1 -0
- package/dist/chunk-5TL5V6UX.mjs +3 -0
- package/dist/{chunk-AZLFJNTG.mjs.map → chunk-5TL5V6UX.mjs.map} +1 -1
- package/dist/chunk-64AWG57M.mjs +192 -0
- package/dist/chunk-64AWG57M.mjs.map +1 -0
- package/dist/chunk-6KWCHTK3.js +166 -0
- package/dist/chunk-6KWCHTK3.js.map +1 -0
- package/dist/chunk-6OOWOPCX.js +1708 -0
- package/dist/chunk-6OOWOPCX.js.map +1 -0
- package/dist/chunk-7BBRPWQJ.js +257 -0
- package/dist/chunk-7BBRPWQJ.js.map +1 -0
- package/dist/{chunk-FVTIDXYK.mjs → chunk-AKSEBAR7.mjs} +29 -19
- package/dist/chunk-AKSEBAR7.mjs.map +1 -0
- package/dist/chunk-AS64GWBX.js +204 -0
- package/dist/chunk-AS64GWBX.js.map +1 -0
- package/dist/chunk-AULFBXM5.mjs +331 -0
- package/dist/chunk-AULFBXM5.mjs.map +1 -0
- package/dist/chunk-AW3WR2D3.mjs +238 -0
- package/dist/chunk-AW3WR2D3.mjs.map +1 -0
- package/dist/chunk-BIQQ53O2.js +45 -0
- package/dist/chunk-BIQQ53O2.js.map +1 -0
- package/dist/chunk-C6MPV3CY.js +260 -0
- package/dist/chunk-C6MPV3CY.js.map +1 -0
- package/dist/{chunk-AYPP5JEQ.mjs → chunk-CLEQO6GU.mjs} +5 -5
- package/dist/chunk-CLEQO6GU.mjs.map +1 -0
- package/dist/chunk-CVHPLURA.js +147 -0
- package/dist/chunk-CVHPLURA.js.map +1 -0
- package/dist/chunk-D2RBCFNW.mjs +130 -0
- package/dist/chunk-D2RBCFNW.mjs.map +1 -0
- package/dist/chunk-ECD4FV3A.mjs +11 -0
- package/dist/chunk-ECD4FV3A.mjs.map +1 -0
- package/dist/chunk-EDJBZPMW.mjs +255 -0
- package/dist/chunk-EDJBZPMW.mjs.map +1 -0
- package/dist/chunk-FPAI4QYW.mjs +145 -0
- package/dist/chunk-FPAI4QYW.mjs.map +1 -0
- package/dist/chunk-HM25ZMO3.js +18 -0
- package/dist/chunk-HM25ZMO3.js.map +1 -0
- package/dist/chunk-IHC6UYKK.js +4 -0
- package/dist/{chunk-DRBRT57F.js.map → chunk-IHC6UYKK.js.map} +1 -1
- package/dist/{chunk-DMAHXBA5.mjs → chunk-J5BFFL3X.mjs} +87 -47
- package/dist/chunk-J5BFFL3X.mjs.map +1 -0
- package/dist/chunk-JIKAD4YL.js +4 -0
- package/dist/{chunk-KEXKKQVW.js.map → chunk-JIKAD4YL.js.map} +1 -1
- package/dist/{chunk-EFAPDN4J.js → chunk-JWEXGALU.js} +730 -33
- package/dist/chunk-JWEXGALU.js.map +1 -0
- package/dist/{chunk-4K5GBNQV.mjs → chunk-KDT76YQE.mjs} +52 -13
- package/dist/chunk-KDT76YQE.mjs.map +1 -0
- package/dist/chunk-LMQLMMEX.js +317 -0
- package/dist/chunk-LMQLMMEX.js.map +1 -0
- package/dist/{chunk-TOMVBPNZ.js → chunk-LS4TK6SX.js} +9 -4
- package/dist/chunk-LS4TK6SX.js.map +1 -0
- package/dist/chunk-M4WMHD3X.mjs +40 -0
- package/dist/chunk-M4WMHD3X.mjs.map +1 -0
- package/dist/chunk-MCOK3UFR.mjs +280 -0
- package/dist/chunk-MCOK3UFR.mjs.map +1 -0
- package/dist/chunk-MGQSQCFG.js +176 -0
- package/dist/chunk-MGQSQCFG.js.map +1 -0
- package/dist/chunk-MKE3BUL3.mjs +3 -0
- package/dist/{chunk-CYDWEPFL.mjs.map → chunk-MKE3BUL3.mjs.map} +1 -1
- package/dist/chunk-MNJ5OYPE.mjs +17 -0
- package/dist/chunk-MNJ5OYPE.mjs.map +1 -0
- package/dist/chunk-MNXD45J7.mjs +164 -0
- package/dist/chunk-MNXD45J7.mjs.map +1 -0
- package/dist/chunk-NGDPQC5E.js +333 -0
- package/dist/chunk-NGDPQC5E.js.map +1 -0
- package/dist/chunk-NNNCVFOH.mjs +16 -0
- package/dist/chunk-NNNCVFOH.mjs.map +1 -0
- package/dist/chunk-NZ4BJ2IC.mjs +315 -0
- package/dist/chunk-NZ4BJ2IC.mjs.map +1 -0
- package/dist/chunk-OKNM7ODQ.js +29 -0
- package/dist/chunk-OKNM7ODQ.js.map +1 -0
- package/dist/{chunk-DCFHANLR.mjs → chunk-OTG75GVH.mjs} +725 -34
- package/dist/chunk-OTG75GVH.mjs.map +1 -0
- package/dist/chunk-OZ6DGBRL.mjs +25 -0
- package/dist/chunk-OZ6DGBRL.mjs.map +1 -0
- package/dist/chunk-P25HBGP5.mjs +3 -0
- package/dist/chunk-P25HBGP5.mjs.map +1 -0
- package/dist/{chunk-XG7K4R56.js → chunk-P7KLEPVI.js} +52 -12
- package/dist/chunk-P7KLEPVI.js.map +1 -0
- package/dist/{chunk-OPKQMN46.mjs → chunk-PAPXGPJB.mjs} +9 -4
- package/dist/chunk-PAPXGPJB.mjs.map +1 -0
- package/dist/chunk-PCNXJAU5.js +19 -0
- package/dist/chunk-PCNXJAU5.js.map +1 -0
- package/dist/{chunk-5IT5OXQ5.js → chunk-PD6HWEMG.js} +40 -30
- package/dist/chunk-PD6HWEMG.js.map +1 -0
- package/dist/{chunk-ER42VG7H.js → chunk-PH2KXREH.js} +20 -3
- package/dist/chunk-PH2KXREH.js.map +1 -0
- package/dist/chunk-Q5ERW5ZW.mjs +107 -0
- package/dist/chunk-Q5ERW5ZW.mjs.map +1 -0
- package/dist/chunk-Q7YNBSVH.js +28 -0
- package/dist/chunk-Q7YNBSVH.js.map +1 -0
- package/dist/{chunk-T644D54P.mjs → chunk-QKO2FZGN.mjs} +16 -4
- package/dist/chunk-QKO2FZGN.mjs.map +1 -0
- package/dist/{chunk-CIRZKWLL.js → chunk-RVFSRYI5.js} +5 -3
- package/dist/chunk-RVFSRYI5.js.map +1 -0
- package/dist/{chunk-KPBCG4X2.js → chunk-RW37KJ77.js} +11 -11
- package/dist/chunk-RW37KJ77.js.map +1 -0
- package/dist/chunk-SD7BHT2F.mjs +3 -0
- package/dist/chunk-SD7BHT2F.mjs.map +1 -0
- package/dist/chunk-SP5M57BG.mjs +258 -0
- package/dist/chunk-SP5M57BG.mjs.map +1 -0
- package/dist/chunk-TKSHYEYA.mjs +1706 -0
- package/dist/chunk-TKSHYEYA.mjs.map +1 -0
- package/dist/chunk-WTS75RUC.js +4 -0
- package/dist/chunk-WTS75RUC.js.map +1 -0
- package/dist/{chunk-ZRDU6CIB.js → chunk-XRPIGMA2.js} +108 -68
- package/dist/chunk-XRPIGMA2.js.map +1 -0
- package/dist/chunk-XTKSM4QE.js +132 -0
- package/dist/chunk-XTKSM4QE.js.map +1 -0
- package/dist/chunk-XUE3CIJ5.mjs +174 -0
- package/dist/chunk-XUE3CIJ5.mjs.map +1 -0
- package/dist/chunk-YYUOLM6U.js +244 -0
- package/dist/chunk-YYUOLM6U.js.map +1 -0
- package/dist/chunk-ZH44DHVR.mjs +26 -0
- package/dist/chunk-ZH44DHVR.mjs.map +1 -0
- package/dist/chunk-ZPHOOG72.js +112 -0
- package/dist/chunk-ZPHOOG72.js.map +1 -0
- package/dist/constants.d.mts +7 -2
- package/dist/constants.d.ts +7 -2
- package/dist/constants.js +57 -38
- package/dist/constants.mjs +1 -2
- package/dist/deployments.generated.d.mts +2 -0
- package/dist/deployments.generated.d.ts +2 -0
- package/dist/deployments.generated.js +12 -0
- package/dist/deployments.generated.js.map +1 -0
- package/dist/deployments.generated.mjs +3 -0
- package/dist/deployments.generated.mjs.map +1 -0
- package/dist/entities/DopplerFactory.d.mts +139 -11
- package/dist/entities/DopplerFactory.d.ts +139 -11
- package/dist/entities/DopplerFactory.js +17 -7
- package/dist/entities/DopplerFactory.mjs +16 -6
- package/dist/entities/auction/DynamicAuction.d.mts +19 -4
- package/dist/entities/auction/DynamicAuction.d.ts +19 -4
- package/dist/entities/auction/DynamicAuction.js +6 -6
- package/dist/entities/auction/DynamicAuction.mjs +5 -5
- package/dist/entities/auction/MulticurvePool.d.mts +55 -0
- package/dist/entities/auction/MulticurvePool.d.ts +55 -0
- package/dist/entities/auction/MulticurvePool.js +18 -0
- package/dist/entities/auction/MulticurvePool.js.map +1 -0
- package/dist/entities/auction/MulticurvePool.mjs +9 -0
- package/dist/entities/auction/MulticurvePool.mjs.map +1 -0
- package/dist/entities/auction/StaticAuction.d.mts +6 -3
- package/dist/entities/auction/StaticAuction.d.ts +6 -3
- package/dist/entities/auction/StaticAuction.js +6 -6
- package/dist/entities/auction/StaticAuction.mjs +5 -5
- package/dist/entities/auction/index.d.mts +3 -0
- package/dist/entities/auction/index.d.ts +3 -0
- package/dist/entities/auction/index.js +16 -9
- package/dist/entities/auction/index.mjs +10 -7
- package/dist/entities/quoter/Quoter.d.mts +44 -2
- package/dist/entities/quoter/Quoter.d.ts +44 -2
- package/dist/entities/quoter/Quoter.js +6 -6
- package/dist/entities/quoter/Quoter.mjs +5 -5
- package/dist/entities/quoter/index.d.mts +3 -0
- package/dist/entities/quoter/index.d.ts +3 -0
- package/dist/entities/quoter/index.js +6 -6
- package/dist/entities/quoter/index.mjs +5 -5
- package/dist/entities/token/derc20/Derc20.d.mts +33 -7
- package/dist/entities/token/derc20/Derc20.d.ts +33 -7
- package/dist/entities/token/derc20/Derc20.js +4 -5
- package/dist/entities/token/derc20/Derc20.mjs +3 -4
- package/dist/entities/token/derc20/index.d.mts +3 -0
- package/dist/entities/token/derc20/index.d.ts +3 -0
- package/dist/entities/token/derc20/index.js +4 -5
- package/dist/entities/token/derc20/index.mjs +3 -4
- package/dist/entities/token/eth/Eth.d.mts +7 -3
- package/dist/entities/token/eth/Eth.d.ts +7 -3
- package/dist/entities/token/eth/Eth.js +2 -3
- package/dist/entities/token/eth/Eth.mjs +1 -2
- package/dist/entities/token/eth/index.d.mts +3 -0
- package/dist/entities/token/eth/index.d.ts +3 -0
- package/dist/entities/token/eth/index.js +2 -3
- package/dist/entities/token/eth/index.mjs +1 -2
- package/dist/entities/token/index.d.mts +3 -0
- package/dist/entities/token/index.d.ts +3 -0
- package/dist/entities/token/index.js +6 -7
- package/dist/entities/token/index.mjs +4 -5
- package/dist/index.d.mts +18 -6
- package/dist/index.d.ts +18 -6
- package/dist/index.js +305 -140
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +32 -19
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.mts +260 -22
- package/dist/types.d.ts +260 -22
- package/dist/types.js +12 -3
- package/dist/types.mjs +3 -2
- package/dist/utils/airlock.d.mts +11 -0
- package/dist/utils/airlock.d.ts +11 -0
- package/dist/utils/airlock.js +26 -0
- package/dist/utils/airlock.js.map +1 -0
- package/dist/utils/airlock.mjs +5 -0
- package/dist/utils/airlock.mjs.map +1 -0
- package/dist/utils/balanceDelta.d.mts +10 -0
- package/dist/utils/balanceDelta.d.ts +10 -0
- package/dist/utils/balanceDelta.js +12 -0
- package/dist/utils/balanceDelta.js.map +1 -0
- package/dist/utils/balanceDelta.mjs +3 -0
- package/dist/utils/balanceDelta.mjs.map +1 -0
- package/dist/utils/computeOptimalGamma.d.mts +7 -0
- package/dist/utils/computeOptimalGamma.d.ts +7 -0
- package/dist/utils/computeOptimalGamma.js +12 -0
- package/dist/utils/computeOptimalGamma.js.map +1 -0
- package/dist/utils/computeOptimalGamma.mjs +3 -0
- package/dist/utils/computeOptimalGamma.mjs.map +1 -0
- package/dist/utils/index.d.mts +11 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.js +114 -24
- package/dist/utils/index.mjs +14 -4
- package/dist/utils/isToken0Expected.d.mts +13 -0
- package/dist/utils/isToken0Expected.d.ts +13 -0
- package/dist/utils/isToken0Expected.js +12 -0
- package/dist/utils/isToken0Expected.js.map +1 -0
- package/dist/utils/isToken0Expected.mjs +3 -0
- package/dist/utils/isToken0Expected.mjs.map +1 -0
- package/dist/utils/marketCapHelpers.d.mts +309 -0
- package/dist/utils/marketCapHelpers.d.ts +309 -0
- package/dist/utils/marketCapHelpers.js +54 -0
- package/dist/utils/marketCapHelpers.js.map +1 -0
- package/dist/utils/marketCapHelpers.mjs +5 -0
- package/dist/utils/marketCapHelpers.mjs.map +1 -0
- package/dist/utils/poolKey.d.mts +17 -0
- package/dist/utils/poolKey.d.ts +17 -0
- package/dist/utils/poolKey.js +12 -0
- package/dist/utils/poolKey.js.map +1 -0
- package/dist/utils/poolKey.mjs +3 -0
- package/dist/utils/poolKey.mjs.map +1 -0
- package/dist/utils/priceHelpers.d.mts +3 -3
- package/dist/utils/priceHelpers.d.ts +3 -3
- package/dist/utils/priceHelpers.js +10 -11
- package/dist/utils/priceHelpers.mjs +2 -3
- package/dist/utils/tickMath.d.mts +8 -1
- package/dist/utils/tickMath.d.ts +8 -1
- package/dist/utils/tickMath.js +17 -14
- package/dist/utils/tickMath.mjs +1 -2
- package/dist/utils/tokenAddressMiner.d.mts +30 -0
- package/dist/utils/tokenAddressMiner.d.ts +30 -0
- package/dist/utils/tokenAddressMiner.js +14 -0
- package/dist/utils/tokenAddressMiner.js.map +1 -0
- package/dist/utils/tokenAddressMiner.mjs +5 -0
- package/dist/utils/tokenAddressMiner.mjs.map +1 -0
- package/package.json +14 -11
- package/dist/__tests__/mocks/addresses.d.mts +0 -46
- package/dist/__tests__/mocks/addresses.d.ts +0 -46
- package/dist/__tests__/mocks/addresses.js +0 -53
- package/dist/__tests__/mocks/addresses.js.map +0 -1
- package/dist/__tests__/mocks/addresses.mjs +0 -44
- package/dist/__tests__/mocks/addresses.mjs.map +0 -1
- package/dist/__tests__/mocks/clients.d.mts +0 -22
- package/dist/__tests__/mocks/clients.d.ts +0 -22
- package/dist/__tests__/mocks/clients.js +0 -17036
- package/dist/__tests__/mocks/clients.js.map +0 -1
- package/dist/__tests__/mocks/clients.mjs +0 -17032
- package/dist/__tests__/mocks/clients.mjs.map +0 -1
- package/dist/chunk-2N5JZSZ4.js +0 -14
- package/dist/chunk-2N5JZSZ4.js.map +0 -1
- package/dist/chunk-3OZRDL3O.js +0 -162
- package/dist/chunk-3OZRDL3O.js.map +0 -1
- package/dist/chunk-4K5GBNQV.mjs.map +0 -1
- package/dist/chunk-5IT5OXQ5.js.map +0 -1
- package/dist/chunk-7F5IXZLH.js +0 -308
- package/dist/chunk-7F5IXZLH.js.map +0 -1
- package/dist/chunk-7VP5VR7J.js +0 -82
- package/dist/chunk-7VP5VR7J.js.map +0 -1
- package/dist/chunk-7W72MFJO.mjs.map +0 -1
- package/dist/chunk-AYPP5JEQ.mjs.map +0 -1
- package/dist/chunk-AZLFJNTG.mjs +0 -3
- package/dist/chunk-CIRZKWLL.js.map +0 -1
- package/dist/chunk-CYDWEPFL.mjs +0 -3
- package/dist/chunk-DCFHANLR.mjs.map +0 -1
- package/dist/chunk-DMAHXBA5.mjs.map +0 -1
- package/dist/chunk-DRBRT57F.js +0 -4
- package/dist/chunk-EFAPDN4J.js.map +0 -1
- package/dist/chunk-ER42VG7H.js.map +0 -1
- package/dist/chunk-FVTIDXYK.mjs.map +0 -1
- package/dist/chunk-IHBIBFZK.mjs +0 -12
- package/dist/chunk-IHBIBFZK.mjs.map +0 -1
- package/dist/chunk-IXSKPEHB.mjs +0 -160
- package/dist/chunk-IXSKPEHB.mjs.map +0 -1
- package/dist/chunk-KEXKKQVW.js +0 -42
- package/dist/chunk-KFD6U3LQ.mjs +0 -305
- package/dist/chunk-KFD6U3LQ.mjs.map +0 -1
- package/dist/chunk-KPBCG4X2.js.map +0 -1
- package/dist/chunk-KRN3ROUE.js +0 -4
- package/dist/chunk-KT7U37XS.mjs +0 -207
- package/dist/chunk-KT7U37XS.mjs.map +0 -1
- package/dist/chunk-LOROXNH3.mjs +0 -37
- package/dist/chunk-LOROXNH3.mjs.map +0 -1
- package/dist/chunk-O6GYIJ6X.mjs +0 -80
- package/dist/chunk-O6GYIJ6X.mjs.map +0 -1
- package/dist/chunk-OPKQMN46.mjs.map +0 -1
- package/dist/chunk-RIMM47JL.mjs +0 -176
- package/dist/chunk-RIMM47JL.mjs.map +0 -1
- package/dist/chunk-SUOMK3CU.js +0 -872
- package/dist/chunk-SUOMK3CU.js.map +0 -1
- package/dist/chunk-T644D54P.mjs.map +0 -1
- package/dist/chunk-TOMVBPNZ.js.map +0 -1
- package/dist/chunk-XEMZQHTX.mjs +0 -870
- package/dist/chunk-XEMZQHTX.mjs.map +0 -1
- package/dist/chunk-XG7K4R56.js.map +0 -1
- package/dist/chunk-XQ2VMR26.js +0 -180
- package/dist/chunk-XQ2VMR26.js.map +0 -1
- package/dist/chunk-ZAIP54LX.js +0 -209
- package/dist/chunk-ZAIP54LX.js.map +0 -1
- package/dist/chunk-ZRDU6CIB.js.map +0 -1
- package/dist/magic-string.es-CBLXTCZP.js +0 -1304
- package/dist/magic-string.es-CBLXTCZP.js.map +0 -1
- package/dist/magic-string.es-QHA47FSB.mjs +0 -1298
- package/dist/magic-string.es-QHA47FSB.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/entities/DopplerFactory.ts"],"names":["resolved","airlock","initialSupply"],"mappings":"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","file":"chunk-TKSHYEYA.mjs","sourcesContent":["import {\n type Address,\n type Hex,\n type Hash,\n type PublicClient,\n type WalletClient,\n type Account,\n encodeAbiParameters,\n encodePacked,\n keccak256,\n getAddress,\n decodeEventLog,\n toHex,\n} from 'viem'\nimport type {\n CreateStaticAuctionParams,\n CreateDynamicAuctionParams,\n CreateMulticurveParams,\n MigrationConfig,\n SupportedPublicClient,\n TokenConfig,\n Doppler404TokenConfig,\n StandardTokenConfig,\n SupportedChainId,\n CreateParams,\n MulticurveBundleExactInResult,\n MulticurveBundleExactOutResult,\n V4PoolKey\n} from '../types'\nimport type { ModuleAddressOverrides } from '../types'\nimport { CHAIN_IDS, getAddresses } from '../addresses'\nimport { zeroAddress } from 'viem'\nimport {\n ZERO_ADDRESS,\n WAD,\n DEFAULT_PD_SLUGS,\n FLAG_MASK,\n DEFAULT_V3_NUM_POSITIONS,\n DEFAULT_V3_YEARLY_MINT_RATE,\n DEFAULT_V3_MAX_SHARE_TO_BE_SOLD,\n DEFAULT_V4_YEARLY_MINT_RATE,\n DEFAULT_V3_INITIAL_VOTING_DELAY,\n DEFAULT_V3_INITIAL_VOTING_PERIOD,\n DEFAULT_V3_INITIAL_PROPOSAL_THRESHOLD,\n DEFAULT_V4_INITIAL_VOTING_DELAY,\n DEFAULT_V4_INITIAL_VOTING_PERIOD,\n DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD,\n DEFAULT_CREATE_GAS_LIMIT,\n DEFAULT_V3_FEE,\n TICK_SPACINGS,\n} from '../constants'\nimport { computeOptimalGamma, MIN_TICK, MAX_TICK, isToken0Expected } from '../utils'\nimport { airlockAbi, bundlerAbi, DERC20Bytecode, DopplerBytecode, DopplerDN404Bytecode } from '../abis'\nimport { DopplerBytecodeBaseMainnet } from '@/abis/bytecodes'\n\n// Type definition for the custom migration encoder function\nexport type MigrationEncoder = (config: MigrationConfig) => Hex\n\nconst MAX_UINT128 = (1n << 128n) - 1n\n\nexport class DopplerFactory<C extends SupportedChainId = SupportedChainId> {\n private publicClient: SupportedPublicClient\n private walletClient?: WalletClient\n private chainId: C\n private customMigrationEncoder?: MigrationEncoder\n\n private multicurveBundlerSupport = new Map<Address, boolean>()\n\n constructor(publicClient: SupportedPublicClient, walletClient: WalletClient | undefined, chainId: C) {\n this.publicClient = publicClient\n this.walletClient = walletClient\n this.chainId = chainId\n }\n\n /**\n * Set a custom migration data encoder function\n * @param encoder Custom function to encode migration data\n * @returns The factory instance for method chaining\n */\n withCustomMigrationEncoder(encoder: MigrationEncoder): this {\n this.customMigrationEncoder = encoder\n return this\n }\n\n async encodeCreateStaticAuctionParams(params: CreateStaticAuctionParams<C>): Promise<CreateParams> {\n // Validate parameters\n this.validateStaticAuctionParams(params)\n\n const addresses = getAddresses(this.chainId)\n\n // Check if beneficiaries are provided - this determines which initializer to use\n const hasBeneficiaries = params.pool.beneficiaries && params.pool.beneficiaries.length > 0\n\n // 1. Encode pool initializer data\n // Standard V3 initializer expects InitData struct WITHOUT beneficiaries (5 fields)\n // Lockable V3 initializer expects InitData struct WITH beneficiaries (6 fields)\n let poolInitializerData: Hex\n \n if (hasBeneficiaries) {\n // Sort beneficiaries by address (ascending) as required by the contract\n const sortedBeneficiaries = params.pool.beneficiaries!.slice().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\n // Lockable V3 initializer encoding (6 fields including beneficiaries)\n poolInitializerData = encodeAbiParameters(\n [\n {\n type: 'tuple',\n components: [\n { type: 'uint24', name: 'fee' },\n { type: 'int24', name: 'tickLower' },\n { type: 'int24', name: 'tickUpper' },\n { type: 'uint16', name: 'numPositions' },\n { type: 'uint256', name: 'maxShareToBeSold' },\n {\n type: 'tuple[]',\n name: 'beneficiaries',\n components: [\n { type: 'address', name: 'beneficiary' },\n { type: 'uint96', name: 'shares' }\n ]\n }\n ]\n }\n ],\n [{\n fee: params.pool.fee,\n tickLower: params.pool.startTick,\n tickUpper: params.pool.endTick,\n numPositions: params.pool.numPositions ?? DEFAULT_V3_NUM_POSITIONS,\n maxShareToBeSold: params.pool.maxShareToBeSold ?? DEFAULT_V3_MAX_SHARE_TO_BE_SOLD,\n beneficiaries: sortedBeneficiaries.map(b => ({\n beneficiary: b.beneficiary,\n shares: b.shares\n }))\n }]\n )\n } else {\n // Standard V3 initializer encoding (5 fields, no beneficiaries)\n poolInitializerData = encodeAbiParameters(\n [\n {\n type: 'tuple',\n components: [\n { type: 'uint24', name: 'fee' },\n { type: 'int24', name: 'tickLower' },\n { type: 'int24', name: 'tickUpper' },\n { type: 'uint16', name: 'numPositions' },\n { type: 'uint256', name: 'maxShareToBeSold' }\n ]\n }\n ],\n [{\n fee: params.pool.fee,\n tickLower: params.pool.startTick,\n tickUpper: params.pool.endTick,\n numPositions: params.pool.numPositions ?? DEFAULT_V3_NUM_POSITIONS,\n maxShareToBeSold: params.pool.maxShareToBeSold ?? DEFAULT_V3_MAX_SHARE_TO_BE_SOLD\n }]\n )\n }\n\n // 2. Encode migration data based on MigrationConfig\n const liquidityMigratorData = this.encodeMigrationData(params.migration)\n\n // 3. Encode token parameters (standard vs Doppler404)\n let tokenFactoryData: Hex\n if (this.isDoppler404Token(params.token)) {\n const token404 = params.token\n // Doppler404 expects: name, symbol, baseURI, unit\n const baseURI = token404.baseURI\n const unit = token404.unit !== undefined ? BigInt(token404.unit) : 1000n\n tokenFactoryData = encodeAbiParameters(\n [\n { type: 'string' },\n { type: 'string' },\n { type: 'string' },\n { type: 'uint256' },\n ],\n [\n params.token.name,\n params.token.symbol,\n baseURI,\n unit,\n ]\n )\n } else {\n const tokenStd = params.token as StandardTokenConfig\n const vestingDuration = params.vesting?.duration ?? BigInt(0)\n const yearlyMintRate = tokenStd.yearlyMintRate ?? DEFAULT_V4_YEARLY_MINT_RATE\n\n // Handle vesting recipients and amounts\n let vestingRecipients: Address[] = []\n let vestingAmounts: bigint[] = []\n\n if (params.vesting) {\n if (params.vesting.recipients && params.vesting.amounts) {\n // Use provided recipients and amounts\n vestingRecipients = params.vesting.recipients\n vestingAmounts = params.vesting.amounts\n } else {\n // Default: vest all non-sold tokens to userAddress\n vestingRecipients = [params.userAddress]\n vestingAmounts = [params.sale.initialSupply - params.sale.numTokensToSell]\n }\n }\n\n tokenFactoryData = encodeAbiParameters(\n [\n { type: 'string' },\n { type: 'string' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'address[]' },\n { type: 'uint256[]' },\n { type: 'string' },\n ],\n [\n tokenStd.name,\n tokenStd.symbol,\n yearlyMintRate,\n BigInt(vestingDuration),\n vestingRecipients,\n vestingAmounts,\n tokenStd.tokenURI,\n ]\n )\n }\n\n const useNoOpGovernance = params.governance.type === 'noOp'\n\n // 4. Encode governance factory data\n const governanceFactoryData: Hex = useNoOpGovernance\n ? ('0x' as Hex)\n : encodeAbiParameters(\n [\n { type: 'string' },\n { type: 'uint48' },\n { type: 'uint32' },\n { type: 'uint256' },\n ],\n [\n params.token.name,\n params.governance.type === 'custom' ? params.governance.initialVotingDelay : DEFAULT_V3_INITIAL_VOTING_DELAY,\n params.governance.type === 'custom' ? params.governance.initialVotingPeriod : DEFAULT_V3_INITIAL_VOTING_PERIOD,\n params.governance.type === 'custom' ? params.governance.initialProposalThreshold : DEFAULT_V3_INITIAL_PROPOSAL_THRESHOLD\n ]\n )\n\n // 4.1 Choose governance factory\n\n const governanceFactoryAddress: Address = (() => {\n if (useNoOpGovernance) {\n // Prefer unified override; otherwise require chain's no-op governance factory\n const resolved = params.modules?.governanceFactory ?? (addresses.noOpGovernanceFactory ?? ZERO_ADDRESS)\n if (!resolved || resolved === ZERO_ADDRESS) {\n throw new Error('No-op governance requested, but no-op governanceFactory is not configured on this chain. Provide a governanceFactory override or use a supported chain.')\n }\n return resolved\n }\n const resolved = params.modules?.governanceFactory ?? addresses.governanceFactory\n if (!resolved || resolved === ZERO_ADDRESS) {\n throw new Error('Standard governance requested but governanceFactory is not deployed on this chain.')\n }\n return resolved\n })()\n\n // 5. Generate a unique salt\n // Resolve token factory with override priority\n const resolvedTokenFactory: Address | undefined =\n params.modules?.tokenFactory ?? (\n this.isDoppler404Token(params.token)\n ? (addresses.doppler404Factory as Address | undefined)\n : addresses.tokenFactory\n )\n\n if (!resolvedTokenFactory || resolvedTokenFactory === ZERO_ADDRESS) {\n throw new Error('Token factory address not configured. Provide an explicit address via builder.withTokenFactory(...) or ensure chain config includes a valid factory.')\n }\n\n // Build the base CreateParams for the V3-style ABI; salt will be mined below\n const baseCreateParams = {\n initialSupply: params.sale.initialSupply,\n numTokensToSell: params.sale.numTokensToSell,\n numeraire: params.sale.numeraire,\n tokenFactory: resolvedTokenFactory,\n tokenFactoryData: tokenFactoryData,\n governanceFactory: governanceFactoryAddress,\n governanceFactoryData: governanceFactoryData,\n poolInitializer: (() => {\n if (hasBeneficiaries) {\n const lockableInitializer = params.modules?.lockableV3Initializer ?? addresses.lockableV3Initializer\n if (!lockableInitializer) {\n throw new Error('Lockable V3 initializer address not configured on this chain. Required when using beneficiaries.')\n }\n return lockableInitializer\n }\n return params.modules?.v3Initializer ?? addresses.v3Initializer\n })(),\n poolInitializerData: poolInitializerData,\n liquidityMigrator: this.getMigratorAddress(params.migration, params.modules),\n liquidityMigratorData: liquidityMigratorData,\n integrator: params.integrator ?? ZERO_ADDRESS,\n }\n\n const minedCreateParams = await this.mineTokenOrder({\n params,\n baseCreateParams,\n addresses,\n })\n\n return minedCreateParams\n }\n\n /**\n * Simulate a static auction creation and return predicted addresses.\n * Useful for pre-buy flows (bundle) to know the token/pool before sending.\n */\n async simulateCreateStaticAuction(params: CreateStaticAuctionParams<C>): Promise<{\n createParams: CreateParams\n asset: Address\n pool: Address\n gasEstimate?: bigint\n /** Execute the create with the same params used in simulation (guarantees address match) */\n execute: () => Promise<{ poolAddress: Address; tokenAddress: Address; transactionHash: string }>\n }> {\n const createParams = await this.encodeCreateStaticAuctionParams(params)\n const addresses = getAddresses(this.chainId)\n\n const airlockAddress = params.modules?.airlock ?? addresses.airlock\n const { request, result } = await (this.publicClient as PublicClient).simulateContract({\n address: airlockAddress,\n abi: airlockAbi,\n functionName: 'create',\n args: [{ ...createParams }],\n account: this.walletClient?.account,\n })\n const simResult = result as readonly unknown[] | undefined\n const gasEstimate = await this.resolveCreateGasEstimate({\n request,\n address: airlockAddress,\n createParams,\n account: this.walletClient?.account ?? params.userAddress,\n })\n\n if (!simResult || !Array.isArray(simResult) || simResult.length < 2) {\n throw new Error('Failed to simulate static auction create')\n }\n\n return {\n createParams,\n asset: simResult[0] as Address,\n pool: simResult[1] as Address,\n gasEstimate,\n execute: () => this.createStaticAuction(params, { _createParams: createParams }),\n }\n }\n\n /**\n * Create a new static auction (using Uniswap V3 for initial liquidity)\n * @param params Configuration for the static auction\n * @returns The address of the created pool and token\n */\n async createStaticAuction(\n params: CreateStaticAuctionParams<C>,\n options?: { _createParams?: CreateParams }\n ): Promise<{\n poolAddress: Address\n tokenAddress: Address\n transactionHash: string\n }> {\n // Use provided createParams (from simulate) or generate new ones\n const createParams = options?._createParams ?? await this.encodeCreateStaticAuctionParams(params);\n\n const addresses = getAddresses(this.chainId)\n\n // Call the airlock contract to create the pool\n if (!this.walletClient) {\n throw new Error('Wallet client required for write operations')\n }\n \n const airlockAddress = params.modules?.airlock ?? addresses.airlock\n const { request, result } = await (this.publicClient as PublicClient).simulateContract({\n address: airlockAddress,\n abi: airlockAbi,\n functionName: 'create',\n args: [{ ...createParams }],\n account: this.walletClient.account,\n })\n const simResult = result as readonly unknown[] | undefined\n \n const gasEstimate = await this.resolveCreateGasEstimate({\n request,\n address: airlockAddress,\n createParams,\n account: this.walletClient.account,\n })\n const gasOverride = params.gas ?? gasEstimate ?? DEFAULT_CREATE_GAS_LIMIT\n const hash = await this.walletClient.writeContract({ ...request, gas: gasOverride })\n \n // Wait for transaction and get the receipt\n const receipt = await (this.publicClient as PublicClient).waitForTransactionReceipt({ hash, confirmations: 2 })\n \n // The create function returns [asset, pool, governance, timelock, migrationPool]\n // We can get these from the simulation result or parse from logs\n if (simResult && Array.isArray(simResult) && simResult.length >= 2) {\n return {\n tokenAddress: simResult[0] as Address, // asset\n poolAddress: simResult[1] as Address, // pool\n transactionHash: hash\n }\n }\n \n // Fallback: Parse the Create event from logs\n const createEvent = (receipt.logs as readonly unknown[]).find((log: unknown) => {\n try {\n const decoded = decodeEventLog({\n abi: airlockAbi,\n data: (log as { data: Hex }).data,\n topics: (log as { topics: readonly `0x${string}`[] }).topics as [`0x${string}`, ...`0x${string}`[]],\n })\n return decoded.eventName === 'Create'\n } catch {\n return false\n }\n })\n \n if (createEvent) {\n const decoded = decodeEventLog({\n abi: airlockAbi,\n data: (createEvent as { data: Hex }).data,\n topics: (createEvent as { topics: readonly `0x${string}`[] }).topics as [`0x${string}`, ...`0x${string}`[]],\n })\n \n if (decoded.eventName === 'Create') {\n return {\n poolAddress: (decoded as { args: { poolOrHook: Address } }).args.poolOrHook,\n tokenAddress: (decoded as { args: { asset: Address } }).args.asset,\n transactionHash: hash\n }\n }\n }\n \n throw new Error('Failed to get pool and token addresses from transaction')\n }\n \n /**\n * Generate a random salt based on user address\n */\n private generateRandomSalt(account: Address): Hex {\n // Use crypto.getRandomValues for secure random generation\n const array = new Uint8Array(32)\n \n // Try to use crypto API if available (Node.js or browser)\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(array)\n } else {\n // Fallback: use timestamp and account for deterministic generation\n const timestamp = Date.now()\n const timestampBytes = new Uint8Array(8)\n for (let i = 0; i < 8; i++) {\n timestampBytes[i] = (timestamp >> (i * 8)) & 0xff\n }\n \n // Fill array with timestamp and account-based entropy\n for (let i = 0; i < 32; i++) {\n if (i < 8) {\n array[i] = timestampBytes[i]\n } else {\n array[i] = i\n }\n }\n }\n \n // XOR with address bytes for additional entropy\n if (account) {\n const addressBytes = account.slice(2).padStart(40, '0')\n for (let i = 0; i < 20; i++) {\n const addressByte = parseInt(\n addressBytes.slice(i * 2, (i + 1) * 2),\n 16\n )\n array[i] ^= addressByte\n }\n }\n \n return `0x${Array.from(array)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')}` as Hex\n }\n\n /**\n * Iteratively mine a salt that ensures the newly created token sorts after the numeraire.\n * This mirrors the legacy SDK behaviour so tick configuration can assume the numeraire is token0.\n */\n private async mineTokenOrder(args: {\n params: CreateStaticAuctionParams<C>\n baseCreateParams: Omit<CreateParams, 'salt'>\n addresses: ReturnType<typeof getAddresses>\n }): Promise<CreateParams> {\n const { params, baseCreateParams, addresses } = args\n\n const airlockAddress = params.modules?.airlock ?? addresses.airlock\n if (!airlockAddress || airlockAddress === ZERO_ADDRESS) {\n throw new Error('Airlock address not configured. Provide an explicit address via modules.airlock or ensure chain config includes a valid airlock.')\n }\n\n const accountForSimulation = this.walletClient?.account ?? params.userAddress\n const numeraireBigInt = BigInt(params.sale.numeraire)\n\n let attempt = 0n\n const maxAttempts = 256n\n let salt = this.generateRandomSalt(params.userAddress)\n\n while (attempt < maxAttempts) {\n const createParams = { ...baseCreateParams, salt } as CreateParams\n\n const { result } = await (this.publicClient as PublicClient).simulateContract({\n address: airlockAddress,\n abi: airlockAbi,\n functionName: 'create',\n args: [{ ...createParams }],\n account: accountForSimulation,\n })\n\n const simResult = result as readonly unknown[] | undefined\n if (!simResult || !Array.isArray(simResult) || simResult.length < 2) {\n throw new Error('Failed to simulate static auction create while mining token ordering')\n }\n\n const tokenAddress = simResult[0] as Address\n if (BigInt(tokenAddress) > numeraireBigInt) {\n return createParams\n }\n\n attempt += 1n\n const incrementedAccount = toHex(BigInt(params.userAddress) + attempt) as Address\n salt = this.generateRandomSalt(incrementedAccount)\n }\n\n throw new Error('Token mining exceeded iteration limit while trying to force token order. Try again or provide a different user address.')\n }\n\n async encodeCreateDynamicAuctionParams(params: CreateDynamicAuctionParams<C>): Promise<{\n createParams: CreateParams,\n hookAddress: Address,\n tokenAddress: Address\n }> {\n // Validate parameters\n this.validateDynamicAuctionParams(params)\n\n const addresses = getAddresses(this.chainId)\n\n // 1. Calculate gamma if not provided\n const gamma = params.auction.gamma ?? computeOptimalGamma(\n params.auction.startTick,\n params.auction.endTick,\n params.auction.duration,\n params.auction.epochLength,\n params.pool.tickSpacing\n )\n\n // 2. Prepare time parameters\n // Use provided block timestamp or fetch the latest\n let blockTimestamp: number\n if (params.blockTimestamp !== undefined) {\n blockTimestamp = params.blockTimestamp\n } else {\n const latestBlock = await (this.publicClient as PublicClient).getBlock({ blockTag: 'latest' })\n blockTimestamp = Number((latestBlock as { timestamp: bigint | number }).timestamp)\n }\n\n // Use startTimeOffset if provided, otherwise default to 30 seconds\n const startTimeOffset = params.startTimeOffset ?? 30\n const startTime = blockTimestamp + startTimeOffset\n const endTime = blockTimestamp + params.auction.duration + startTimeOffset\n\n // 3. Prepare hook initialization data\n const dopplerData = {\n minimumProceeds: params.auction.minProceeds,\n maximumProceeds: params.auction.maxProceeds,\n startingTime: BigInt(startTime),\n endingTime: BigInt(endTime),\n startingTick: params.auction.startTick,\n endingTick: params.auction.endTick,\n epochLength: BigInt(params.auction.epochLength),\n gamma,\n isToken0: false, // Will be determined during mining\n numPDSlugs: BigInt(params.auction.numPdSlugs ?? DEFAULT_PD_SLUGS),\n fee: params.pool.fee,\n tickSpacing: params.pool.tickSpacing\n }\n\n // 4. Prepare token parameters (standard vs Doppler404)\n if (this.isDoppler404Token(params.token)) {\n if (!addresses.doppler404Factory || addresses.doppler404Factory === ZERO_ADDRESS) {\n throw new Error('Doppler404 factory address not configured for this chain')\n }\n }\n\n const vestingDuration = params.vesting?.duration ?? BigInt(0)\n const tokenFactoryData = this.isDoppler404Token(params.token)\n ? (() => {\n const t = params.token as Doppler404TokenConfig\n return {\n name: t.name,\n symbol: t.symbol,\n baseURI: t.baseURI,\n unit: t.unit !== undefined ? BigInt(t.unit) : 1000n,\n }\n })()\n : (() => {\n const t = params.token as StandardTokenConfig\n\n // Handle vesting recipients and amounts\n let vestingRecipients: Address[] = []\n let vestingAmounts: bigint[] = []\n\n if (params.vesting) {\n if (params.vesting.recipients && params.vesting.amounts) {\n // Use provided recipients and amounts\n vestingRecipients = params.vesting.recipients\n vestingAmounts = params.vesting.amounts\n } else {\n // Default: vest all non-sold tokens to userAddress\n vestingRecipients = [params.userAddress]\n vestingAmounts = [params.sale.initialSupply - params.sale.numTokensToSell]\n }\n }\n\n return {\n name: t.name,\n symbol: t.symbol,\n initialSupply: params.sale.initialSupply,\n airlock: addresses.airlock,\n yearlyMintRate: t.yearlyMintRate ?? DEFAULT_V4_YEARLY_MINT_RATE,\n vestingDuration: BigInt(vestingDuration),\n recipients: vestingRecipients,\n amounts: vestingAmounts,\n tokenURI: t.tokenURI,\n }\n })()\n\n // 5. Mine hook address with appropriate flags\n // Resolve token factory with override priority (works for both standard and doppler404 variants)\n const resolvedTokenFactoryDyn: Address | undefined =\n params.modules?.tokenFactory ?? (\n this.isDoppler404Token(params.token)\n ? (addresses.doppler404Factory as Address | undefined)\n : addresses.tokenFactory\n )\n\n if (!resolvedTokenFactoryDyn || resolvedTokenFactoryDyn === ZERO_ADDRESS) {\n throw new Error('Token factory address not configured. Provide an explicit address via builder.withTokenFactory(...) or ensure chain config includes a valid factory.')\n }\n\n const [salt, hookAddress, tokenAddress, poolInitializerData, encodedTokenFactoryData] = this.mineHookAddress({\n airlock: params.modules?.airlock ?? addresses.airlock,\n poolManager: params.modules?.poolManager ?? addresses.poolManager,\n deployer: params.modules?.dopplerDeployer ?? addresses.dopplerDeployer,\n initialSupply: params.sale.initialSupply,\n numTokensToSell: params.sale.numTokensToSell,\n numeraire: params.sale.numeraire,\n tokenFactory: resolvedTokenFactoryDyn,\n tokenFactoryData: tokenFactoryData,\n poolInitializer: params.modules?.v4Initializer ?? addresses.v4Initializer,\n poolInitializerData: dopplerData,\n tokenVariant: this.isDoppler404Token(params.token) ? 'doppler404' : 'standard'\n })\n\n // 6. Encode migration data\n const liquidityMigratorData = this.encodeMigrationData(params.migration)\n\n const useNoOpGovernance = params.governance.type === 'noOp'\n\n // 7. Encode governance factory data\n const governanceFactoryData: Hex = useNoOpGovernance\n ? ('0x' as Hex)\n : encodeAbiParameters(\n [\n { type: 'string' },\n { type: 'uint48' },\n { type: 'uint32' },\n { type: 'uint256' },\n ],\n [\n params.token.name,\n params.governance.type === 'custom' ? params.governance.initialVotingDelay : DEFAULT_V4_INITIAL_VOTING_DELAY,\n params.governance.type === 'custom' ? params.governance.initialVotingPeriod : DEFAULT_V4_INITIAL_VOTING_PERIOD,\n params.governance.type === 'custom' ? params.governance.initialProposalThreshold : DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD\n ]\n )\n\n // 7.1 Choose governance factory\n\n const governanceFactoryAddress: Address = (() => {\n if (useNoOpGovernance) {\n // Prefer unified override; otherwise require chain's no-op governance factory\n const resolved = params.modules?.governanceFactory ?? (addresses.noOpGovernanceFactory ?? ZERO_ADDRESS)\n if (!resolved || resolved === ZERO_ADDRESS) {\n throw new Error('No-op governance requested, but no-op governanceFactory is not configured on this chain. Provide a governanceFactory override or use a supported chain.')\n }\n return resolved\n }\n const resolved = params.modules?.governanceFactory ?? addresses.governanceFactory\n if (!resolved || resolved === ZERO_ADDRESS) {\n throw new Error('Standard governance requested but governanceFactory is not deployed on this chain.')\n }\n return resolved\n })()\n\n // 8. Build the complete CreateParams for the V4-style ABI\n const createParams = {\n initialSupply: params.sale.initialSupply,\n numTokensToSell: params.sale.numTokensToSell,\n numeraire: params.sale.numeraire,\n tokenFactory: resolvedTokenFactoryDyn,\n tokenFactoryData: encodedTokenFactoryData,\n governanceFactory: governanceFactoryAddress,\n governanceFactoryData: governanceFactoryData,\n poolInitializer: params.modules?.v4Initializer ?? addresses.v4Initializer,\n poolInitializerData: poolInitializerData,\n liquidityMigrator: this.getMigratorAddress(params.migration, params.modules),\n liquidityMigratorData: liquidityMigratorData,\n integrator: params.integrator ?? ZERO_ADDRESS,\n salt: salt,\n }\n\n return { createParams, hookAddress, tokenAddress }\n }\n\n /**\n * Create a new dynamic auction (using Uniswap V4 hook for gradual Dutch auction)\n * @param params Configuration for the dynamic auction\n * @returns The address of the created hook and token\n */\n async createDynamicAuction(\n params: CreateDynamicAuctionParams<C>,\n options?: { _createParams?: CreateParams }\n ): Promise<{\n hookAddress: Address\n tokenAddress: Address\n poolId: string\n transactionHash: string\n }> {\n const addresses = getAddresses(this.chainId)\n\n // Use provided createParams (from simulate) or generate new ones\n let createParams: CreateParams\n let hookAddress: Address | undefined\n let tokenAddress: Address | undefined\n \n if (options?._createParams) {\n createParams = options._createParams\n } else {\n const encoded = await this.encodeCreateDynamicAuctionParams(params)\n createParams = encoded.createParams\n hookAddress = encoded.hookAddress\n tokenAddress = encoded.tokenAddress\n }\n\n // Call the airlock contract to create the pool\n if (!this.walletClient) {\n throw new Error('Wallet client required for write operations')\n }\n \n const airlockAddress = params.modules?.airlock ?? addresses.airlock\n const { request, result } = await (this.publicClient as PublicClient).simulateContract({\n address: airlockAddress,\n abi: airlockAbi,\n functionName: 'create',\n args: [{ ...createParams }],\n account: this.walletClient.account,\n })\n const simResult = result as readonly unknown[] | undefined\n \n const gasEstimate = await this.resolveCreateGasEstimate({\n request,\n address: airlockAddress,\n createParams,\n account: this.walletClient.account,\n })\n const gasOverride = params.gas ?? gasEstimate ?? DEFAULT_CREATE_GAS_LIMIT\n const hash = await this.walletClient.writeContract({ ...request, gas: gasOverride })\n \n // Wait for transaction and get the receipt\n const receipt = await (this.publicClient as PublicClient).waitForTransactionReceipt({ hash })\n \n // Get actual addresses from the return value or event logs\n let actualHookAddress: Address = hookAddress ?? ('' as Address)\n let actualTokenAddress: Address = tokenAddress ?? ('' as Address)\n \n if (simResult && Array.isArray(simResult) && simResult.length >= 2) {\n // Tests expect [asset, poolOrHook]\n actualTokenAddress = simResult[0] as Address\n actualHookAddress = simResult[1] as Address\n } else {\n // Fallback: Parse the Create event from logs\n const createEvent = (receipt.logs as readonly unknown[]).find((log: unknown) => {\n try {\n const decoded = decodeEventLog({\n abi: airlockAbi,\n data: (log as { data: Hex }).data,\n topics: (log as { topics: readonly `0x${string}`[] }).topics as [`0x${string}`, ...`0x${string}`[]],\n })\n return decoded.eventName === 'Create'\n } catch {\n return false\n }\n })\n \n if (createEvent) {\n const decoded = decodeEventLog({\n abi: airlockAbi,\n data: (createEvent as { data: Hex }).data,\n topics: (createEvent as { topics: readonly `0x${string}`[] }).topics as [`0x${string}`, ...`0x${string}`[]],\n })\n \n if (decoded.eventName === 'Create') {\n actualHookAddress = (decoded as { args: { poolOrHook: Address } }).args.poolOrHook\n actualTokenAddress = (decoded as { args: { asset: Address } }).args.asset\n }\n }\n }\n \n // Calculate pool ID for V4 using actual addresses\n const poolId = this.computePoolId({\n currency0: actualTokenAddress < params.sale.numeraire ? actualTokenAddress : params.sale.numeraire,\n currency1: actualTokenAddress < params.sale.numeraire ? params.sale.numeraire : actualTokenAddress,\n fee: params.pool.fee,\n tickSpacing: params.pool.tickSpacing,\n hooks: actualHookAddress\n })\n \n return {\n hookAddress: actualHookAddress,\n tokenAddress: actualTokenAddress,\n poolId,\n transactionHash: hash\n }\n }\n\n /**\n * Simulate a dynamic auction creation and return predicted addresses and poolId.\n * Useful for clients that need the hook/token/poolId before submitting the tx.\n */\n async simulateCreateDynamicAuction(params: CreateDynamicAuctionParams<C>): Promise<{\n createParams: CreateParams\n hookAddress: Address\n tokenAddress: Address\n poolId: string\n gasEstimate?: bigint\n /** Execute the create with the same params used in simulation (guarantees address match) */\n execute: () => Promise<{ hookAddress: Address; tokenAddress: Address; poolId: string; transactionHash: string }>\n }> {\n const { createParams } = await this.encodeCreateDynamicAuctionParams(params)\n const addresses = getAddresses(this.chainId)\n\n const airlockAddress = params.modules?.airlock ?? addresses.airlock\n const { request, result } = await (this.publicClient as PublicClient).simulateContract({\n address: airlockAddress,\n abi: airlockAbi,\n functionName: 'create',\n args: [{ ...createParams }],\n account: this.walletClient?.account,\n })\n const simResult = result as readonly unknown[] | undefined\n const gasEstimate = await this.resolveCreateGasEstimate({\n request,\n address: airlockAddress,\n createParams,\n account: this.walletClient?.account ?? params.userAddress,\n })\n\n if (!simResult || !Array.isArray(simResult) || simResult.length < 2) {\n throw new Error('Failed to simulate dynamic auction create')\n }\n\n const tokenAddress = simResult[0] as Address\n const hookAddress = simResult[1] as Address\n\n const poolId = this.computePoolId({\n currency0: tokenAddress < params.sale.numeraire ? tokenAddress : params.sale.numeraire,\n currency1: tokenAddress < params.sale.numeraire ? params.sale.numeraire : tokenAddress,\n fee: params.pool.fee,\n tickSpacing: params.pool.tickSpacing,\n hooks: hookAddress,\n })\n\n return {\n createParams,\n hookAddress,\n tokenAddress,\n poolId,\n gasEstimate,\n execute: () => this.createDynamicAuction(params, { _createParams: createParams }),\n }\n }\n\n private async resolveCreateGasEstimate(args: {\n request?: unknown\n address: Address\n createParams: CreateParams\n account?: Address | Account\n }): Promise<bigint | undefined> {\n const { request, address, createParams, account } = args\n const gasFromRequest =\n request && typeof request === 'object' && 'gas' in (request as Record<string, unknown>)\n ? (request as { gas?: bigint }).gas\n : undefined\n\n if (gasFromRequest) {\n return gasFromRequest\n }\n\n try {\n const estimated = await (this.publicClient as PublicClient).estimateContractGas({\n address,\n abi: airlockAbi,\n functionName: 'create',\n args: [{ ...createParams }],\n account,\n })\n return estimated\n } catch {\n return undefined\n }\n }\n\n private isDoppler404Token(token: TokenConfig): token is Doppler404TokenConfig {\n return (token as Doppler404TokenConfig).type === 'doppler404'\n }\n\n /**\n * Encode migration data based on the MigrationConfig\n * This replaces the manual encoding methods from the old SDKs\n */\n private encodeMigrationData(config: MigrationConfig): Hex {\n // Use custom encoder if available\n if (this.customMigrationEncoder) {\n return this.customMigrationEncoder(config)\n }\n\n switch (config.type) {\n case 'uniswapV2':\n // V2 migrator expects empty data\n return '0x' as Hex\n\n case 'noOp':\n // NoOp migrator expects empty data\n return '0x' as Hex\n\n case 'uniswapV3':\n // Encode V3 migration data: fee and tick spacing\n const expectedSpacing = (TICK_SPACINGS as Record<number, number>)[config.fee]\n if (expectedSpacing !== undefined && config.tickSpacing === expectedSpacing) {\n // Match legacy behaviour: default configuration emits empty payload\n return '0x'\n }\n return encodeAbiParameters(\n [\n { type: 'uint24' }, // fee\n { type: 'int24' } // tickSpacing\n ],\n [config.fee, config.tickSpacing]\n )\n\n case 'uniswapV4':\n // Encode V4 migration data with optional streamable fees config\n // When streamableFees is omitted, mirror legacy SDK behaviour by emitting an empty payload\n const streamableFees = config.streamableFees\n if (!streamableFees) {\n // Default V4 migrator behaviour: no additional payload required\n return '0x'\n }\n\n // Copy beneficiaries and sort by address in ascending order (required by contract)\n const beneficiaryData = [...streamableFees.beneficiaries].sort((a, b) => {\n const addrA = a.beneficiary.toLowerCase()\n const addrB = b.beneficiary.toLowerCase()\n return addrA < addrB ? -1 : addrA > addrB ? 1 : 0\n })\n\n // Note: The contract will validate that the airlock owner gets at least 5%\n // If not present, the SDK user should add it manually\n\n return encodeAbiParameters(\n [\n { type: 'uint24' }, // fee\n { type: 'int24' }, // tickSpacing\n { type: 'uint32' }, // lockDuration (0 if no streamableFees)\n {\n type: 'tuple[]',\n components: [\n { type: 'address', name: 'beneficiary' },\n { type: 'uint96', name: 'shares' }\n ]\n }\n ],\n [\n config.fee,\n config.tickSpacing,\n streamableFees.lockDuration,\n beneficiaryData\n ]\n )\n\n\n default:\n throw new Error('Unknown migration type')\n }\n }\n\n /**\n * Encode create params for Uniswap V4 Multicurve initializer/migrator flow\n */\n encodeCreateMulticurveParams(params: CreateMulticurveParams<C>): CreateParams {\n // Basic validation\n if (!params.pool || params.pool.curves.length === 0) {\n throw new Error('Multicurve pool must include at least one curve')\n }\n\n const normalizedCurves = this.normalizeMulticurveCurves(params.pool.curves, params.pool.tickSpacing)\n\n const addresses = getAddresses(this.chainId)\n\n // Pool initializer data: (fee, tickSpacing, curves[], beneficiaries[])\n const sortedBeneficiaries = (params.pool.beneficiaries ?? []).slice().sort((a: NonNullable<typeof params.pool.beneficiaries>[number], b: NonNullable<typeof params.pool.beneficiaries>[number]) => {\n const aAddr = a.beneficiary.toLowerCase()\n const bAddr = b.beneficiary.toLowerCase()\n return aAddr < bAddr ? -1 : aAddr > bAddr ? 1 : 0\n })\n\n const useScheduledInitializer = params.schedule !== undefined\n\n let scheduleStartTime: number | undefined\n if (useScheduledInitializer) {\n scheduleStartTime = Number(params.schedule!.startTime)\n if (!Number.isFinite(scheduleStartTime) || !Number.isInteger(scheduleStartTime)) {\n throw new Error('Scheduled multicurve startTime must be an integer number of seconds since Unix epoch')\n }\n if (scheduleStartTime < 0) {\n throw new Error('Scheduled multicurve startTime cannot be negative')\n }\n const UINT32_MAX = 0xffffffff\n if (scheduleStartTime > UINT32_MAX) {\n throw new Error('Scheduled multicurve startTime must fit within uint32 (seconds since Unix epoch up to year 2106)')\n }\n }\n\n const poolInitializerTupleComponents = [\n { name: 'fee', type: 'uint24' },\n { name: 'tickSpacing', type: 'int24' },\n {\n name: 'curves',\n type: 'tuple[]',\n components: [\n { type: 'int24', name: 'tickLower' },\n { type: 'int24', name: 'tickUpper' },\n { type: 'uint16', name: 'numPositions' },\n { type: 'uint256', name: 'shares' }\n ]\n },\n {\n name: 'beneficiaries',\n type: 'tuple[]',\n components: [\n { type: 'address', name: 'beneficiary' },\n { type: 'uint96', name: 'shares' }\n ]\n }\n ]\n\n if (useScheduledInitializer) {\n poolInitializerTupleComponents.push({ name: 'startingTime', type: 'uint32' })\n }\n\n const baseInitializerParams = {\n fee: params.pool.fee,\n tickSpacing: params.pool.tickSpacing,\n curves: normalizedCurves.map((c: typeof normalizedCurves[number]) => ({\n tickLower: c.tickLower,\n tickUpper: c.tickUpper,\n numPositions: c.numPositions,\n shares: c.shares\n })),\n beneficiaries: sortedBeneficiaries.map((b: NonNullable<typeof params.pool.beneficiaries>[number]) => ({\n beneficiary: b.beneficiary,\n shares: b.shares\n }))\n }\n\n const poolInitializerValue = useScheduledInitializer\n ? { ...baseInitializerParams, startingTime: scheduleStartTime! }\n : baseInitializerParams\n\n const poolInitializerData = encodeAbiParameters(\n [{ type: 'tuple', components: poolInitializerTupleComponents }],\n [poolInitializerValue]\n )\n\n // Token factory data (standard vs 404)\n let tokenFactoryData: Hex\n if (this.isDoppler404Token(params.token)) {\n const token404 = params.token\n const unit = token404.unit !== undefined ? BigInt(token404.unit) : 1000n\n tokenFactoryData = encodeAbiParameters(\n [ { type: 'string' }, { type: 'string' }, { type: 'string' }, { type: 'uint256' } ],\n [ token404.name, token404.symbol, token404.baseURI, unit ]\n )\n } else {\n const tokenStd = params.token as StandardTokenConfig\n const vestingDuration = params.vesting?.duration ?? BigInt(0)\n const yearlyMintRate = tokenStd.yearlyMintRate ?? DEFAULT_V3_YEARLY_MINT_RATE\n\n // Handle vesting recipients and amounts\n let vestingRecipients: Address[] = []\n let vestingAmounts: bigint[] = []\n\n if (params.vesting) {\n if (params.vesting.recipients && params.vesting.amounts) {\n // Use provided recipients and amounts\n vestingRecipients = params.vesting.recipients\n vestingAmounts = params.vesting.amounts\n } else {\n // Default: vest all non-sold tokens to userAddress\n vestingRecipients = [params.userAddress]\n vestingAmounts = [params.sale.initialSupply - params.sale.numTokensToSell]\n }\n }\n\n tokenFactoryData = encodeAbiParameters(\n [ { type: 'string' }, { type: 'string' }, { type: 'uint256' }, { type: 'uint256' }, { type: 'address[]' }, { type: 'uint256[]' }, { type: 'string' } ],\n [ tokenStd.name, tokenStd.symbol, yearlyMintRate, BigInt(vestingDuration), vestingRecipients, vestingAmounts, tokenStd.tokenURI ]\n )\n }\n\n const useNoOpGovernance = params.governance.type === 'noOp'\n\n // Governance factory data\n const governanceFactoryData: Hex = useNoOpGovernance\n ? ('0x' as Hex)\n : encodeAbiParameters(\n [ { type: 'string' }, { type: 'uint48' }, { type: 'uint32' }, { type: 'uint256' } ],\n [\n params.token.name,\n params.governance.type === 'custom' ? params.governance.initialVotingDelay : DEFAULT_V4_INITIAL_VOTING_DELAY,\n params.governance.type === 'custom' ? params.governance.initialVotingPeriod : DEFAULT_V4_INITIAL_VOTING_PERIOD,\n params.governance.type === 'custom' ? params.governance.initialProposalThreshold : DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD\n ]\n )\n\n // Resolve module addresses\n const salt = this.generateRandomSalt(params.userAddress)\n const resolvedTokenFactory: Address | undefined = params.modules?.tokenFactory ?? (\n this.isDoppler404Token(params.token) ? (addresses.doppler404Factory as Address | undefined) : addresses.tokenFactory\n )\n if (!resolvedTokenFactory || resolvedTokenFactory === ZERO_ADDRESS) {\n throw new Error('Token factory address not configured. Provide an explicit address or ensure chain config includes a valid factory.')\n }\n\n const resolvedInitializer: Address | undefined = (() => {\n if (useScheduledInitializer) {\n return params.modules?.v4ScheduledMulticurveInitializer ?? addresses.v4ScheduledMulticurveInitializer\n }\n return params.modules?.v4MulticurveInitializer ?? addresses.v4MulticurveInitializer\n })()\n if (!resolvedInitializer || resolvedInitializer === ZERO_ADDRESS) {\n throw new Error(\n useScheduledInitializer\n ? 'Scheduled multicurve initializer address not configured on this chain. Override via builder or update chain config.'\n : 'Multicurve initializer address not configured on this chain. Override via builder or update chain config.'\n )\n }\n\n // When beneficiaries are provided, use NoOpMigrator with empty data\n // The beneficiaries will be handled by the multicurve initializer, not the migrator\n const hasBeneficiaries = params.pool.beneficiaries && params.pool.beneficiaries.length > 0\n\n let liquidityMigratorData: Hex\n let resolvedMigrator: Address | undefined\n\n if (hasBeneficiaries) {\n // Use NoOpMigrator with empty data when beneficiaries are provided\n liquidityMigratorData = '0x' as Hex\n resolvedMigrator = params.modules?.noOpMigrator ?? addresses.noOpMigrator\n if (!resolvedMigrator || resolvedMigrator === ZERO_ADDRESS) {\n throw new Error('NoOpMigrator address not configured on this chain. Override via modules.noOpMigrator or update chain config.')\n }\n } else {\n // Use standard migration flow when no beneficiaries\n liquidityMigratorData = this.encodeMigrationData(params.migration)\n resolvedMigrator = this.getMigratorAddress(params.migration, params.modules)\n if (!resolvedMigrator || resolvedMigrator === ZERO_ADDRESS) {\n throw new Error('Migrator address not configured on this chain. Override via builder or update chain config.')\n }\n }\n\n const governanceFactoryAddress: Address = (() => {\n if (useNoOpGovernance) {\n const resolved = params.modules?.governanceFactory ?? (addresses.noOpGovernanceFactory ?? ZERO_ADDRESS)\n if (!resolved || resolved === ZERO_ADDRESS) {\n throw new Error('No-op governance requested, but no-op governanceFactory is not configured on this chain.')\n }\n return resolved\n }\n const resolved = params.modules?.governanceFactory ?? addresses.governanceFactory\n if (!resolved || resolved === ZERO_ADDRESS) {\n throw new Error('Standard governance requested but governanceFactory is not deployed on this chain.')\n }\n return resolved\n })()\n\n const createParams: CreateParams = {\n initialSupply: params.sale.initialSupply,\n numTokensToSell: params.sale.numTokensToSell,\n numeraire: params.sale.numeraire,\n tokenFactory: resolvedTokenFactory,\n tokenFactoryData,\n governanceFactory: governanceFactoryAddress,\n governanceFactoryData,\n poolInitializer: resolvedInitializer,\n poolInitializerData,\n liquidityMigrator: resolvedMigrator,\n liquidityMigratorData,\n integrator: params.integrator ?? ZERO_ADDRESS,\n salt,\n }\n\n return createParams\n }\n\n async simulateCreateMulticurve(params: CreateMulticurveParams<C>): Promise<{\n createParams: CreateParams\n asset: Address\n pool: Address\n gasEstimate?: bigint\n /** Execute the create with the same params used in simulation (guarantees address match) */\n execute: () => Promise<{ poolAddress: Address; tokenAddress: Address; transactionHash: string }>\n }> {\n const createParams = this.encodeCreateMulticurveParams(params)\n const addresses = getAddresses(this.chainId)\n const airlockAddress = params.modules?.airlock ?? addresses.airlock\n const { request, result } = await (this.publicClient as PublicClient).simulateContract({\n address: airlockAddress,\n abi: airlockAbi,\n functionName: 'create',\n args: [{ ...createParams }],\n account: this.walletClient?.account,\n })\n const simResult = result as readonly unknown[] | undefined\n const gasEstimate = await this.resolveCreateGasEstimate({\n request,\n address: airlockAddress,\n createParams,\n account: this.walletClient?.account ?? params.userAddress,\n })\n if (!simResult || !Array.isArray(simResult) || simResult.length < 2) {\n throw new Error('Failed to simulate multicurve create')\n }\n return {\n createParams,\n asset: simResult[0] as Address,\n pool: simResult[1] as Address,\n gasEstimate,\n execute: () => this.createMulticurve(params, { _createParams: createParams }),\n }\n }\n\n async createMulticurve(\n params: CreateMulticurveParams<C>,\n options?: { _createParams?: CreateParams }\n ): Promise<{ poolAddress: Address; tokenAddress: Address; transactionHash: string }> {\n // Use provided createParams (from simulate) or generate new ones\n const createParams = options?._createParams ?? this.encodeCreateMulticurveParams(params)\n const addresses = getAddresses(this.chainId)\n if (!this.walletClient) throw new Error('Wallet client required for write operations')\n const airlockAddress = params.modules?.airlock ?? addresses.airlock\n const { request, result } = await (this.publicClient as PublicClient).simulateContract({\n address: airlockAddress,\n abi: airlockAbi,\n functionName: 'create',\n args: [{ ...createParams }],\n account: this.walletClient.account,\n })\n const simResult = result as readonly unknown[] | undefined\n const gasEstimate = await this.resolveCreateGasEstimate({\n request,\n address: airlockAddress,\n createParams,\n account: this.walletClient.account,\n })\n const gas = params.gas ?? gasEstimate ?? DEFAULT_CREATE_GAS_LIMIT\n const hash = await this.walletClient.writeContract({ ...request, gas })\n await (this.publicClient as PublicClient).waitForTransactionReceipt({ hash, confirmations: 2 })\n if (simResult && Array.isArray(simResult) && simResult.length >= 2) {\n return { tokenAddress: simResult[0] as Address, poolAddress: simResult[1] as Address, transactionHash: hash }\n }\n throw new Error('Failed to get pool/token addresses from multicurve create')\n }\n\n /**\n * Normalize user-provided multicurve positions and ensure they satisfy SDK constraints\n */\n private normalizeMulticurveCurves(\n curves: CreateMulticurveParams['pool']['curves'],\n tickSpacing: number\n ): CreateMulticurveParams['pool']['curves'] {\n if (tickSpacing <= 0) {\n throw new Error('Tick spacing must be positive')\n }\n if (!curves.length) {\n throw new Error('Multicurve pool must include at least one curve')\n }\n\n let totalShares = 0n\n let mostPositiveTickUpper: number | undefined\n\n const sanitizedCurves = curves.map(curve => {\n const sanitized = { ...curve }\n\n if (!Number.isFinite(sanitized.tickLower) || !Number.isFinite(sanitized.tickUpper)) {\n throw new Error('Multicurve ticks must be finite numbers')\n }\n if (sanitized.tickLower >= sanitized.tickUpper) {\n throw new Error('Multicurve curve tickLower must be less than tickUpper')\n }\n if (sanitized.tickLower <= 0 || sanitized.tickUpper <= 0) {\n console.warn('Warning: Using negative or zero ticks in multicurve configuration. Please verify this is intentional before proceeding.')\n }\n if (!Number.isInteger(sanitized.numPositions) || sanitized.numPositions <= 0) {\n throw new Error('Multicurve curve numPositions must be a positive integer')\n }\n if (sanitized.shares <= 0n) {\n throw new Error('Multicurve curve shares must be positive')\n }\n\n totalShares += sanitized.shares\n if (totalShares > WAD) {\n throw new Error('Total multicurve shares cannot exceed 100% (1e18)')\n }\n\n if (mostPositiveTickUpper === undefined || sanitized.tickUpper > mostPositiveTickUpper) {\n mostPositiveTickUpper = sanitized.tickUpper\n }\n\n return sanitized\n })\n\n if (totalShares === WAD) {\n return sanitizedCurves\n }\n\n const missingShare = WAD - totalShares\n if (missingShare <= 0n) {\n return sanitizedCurves\n }\n\n const fallbackTickLower = mostPositiveTickUpper\n if (fallbackTickLower === undefined) {\n throw new Error('Unable to determine fallback multicurve tick range')\n }\n\n const fallbackTickUpper = this.roundMaxTickDown(tickSpacing)\n\n const fallbackCurve = {\n // Extend from the most positive user tick out to the maximum supported tick bucket\n tickLower: fallbackTickLower,\n tickUpper: fallbackTickUpper,\n numPositions: sanitizedCurves[sanitizedCurves.length - 1]?.numPositions ?? 1,\n shares: missingShare,\n }\n\n return [...sanitizedCurves, fallbackCurve]\n }\n\n private roundMaxTickDown(tickSpacing: number): number {\n if (tickSpacing <= 0) {\n throw new Error('Tick spacing must be positive')\n }\n\n const rounded = Math.floor(MAX_TICK / tickSpacing) * tickSpacing\n return rounded\n }\n\n private validateStaticAuctionParams(params: CreateStaticAuctionParams): void {\n // Validate token parameters\n if (!params.token.name || params.token.name.trim().length === 0) {\n throw new Error('Token name is required')\n }\n if (!params.token.symbol || params.token.symbol.trim().length === 0) {\n throw new Error('Token symbol is required')\n }\n \n // Validate tick range\n if (params.pool.startTick >= params.pool.endTick) {\n throw new Error('Start tick must be less than end tick')\n }\n\n const tickSpacing = (TICK_SPACINGS as Record<number, number>)[params.pool.fee]\n if (tickSpacing === undefined) {\n throw new Error(`Unsupported fee tier ${params.pool.fee} for static auctions`)\n }\n\n if (params.pool.startTick < MIN_TICK || params.pool.endTick > MAX_TICK) {\n throw new Error(`Ticks must be within the allowed range (${MIN_TICK} to ${MAX_TICK})`)\n }\n\n const startTickAligned = params.pool.startTick % tickSpacing === 0\n const endTickAligned = params.pool.endTick % tickSpacing === 0\n if (!startTickAligned || !endTickAligned) {\n throw new Error(`Pool ticks must be multiples of tick spacing ${tickSpacing} for fee tier ${params.pool.fee}`)\n }\n \n // Validate sale config\n if (params.sale.initialSupply <= BigInt(0)) {\n throw new Error('Initial supply must be positive')\n }\n if (params.sale.numTokensToSell <= BigInt(0)) {\n throw new Error('Number of tokens to sell must be positive')\n }\n if (params.sale.numTokensToSell > params.sale.initialSupply) {\n throw new Error('Cannot sell more tokens than initial supply')\n }\n \n // Validate vesting if provided\n if (params.vesting) {\n // Validate recipients and amounts arrays match\n if (params.vesting.recipients && params.vesting.amounts) {\n if (params.vesting.recipients.length !== params.vesting.amounts.length) {\n throw new Error('Vesting recipients and amounts arrays must have the same length')\n }\n if (params.vesting.recipients.length === 0) {\n throw new Error('Vesting recipients array cannot be empty')\n }\n // Validate total vested amount doesn't exceed available tokens\n const totalVested = params.vesting.amounts.reduce((sum, amt) => sum + amt, BigInt(0))\n const availableForVesting = params.sale.initialSupply - params.sale.numTokensToSell\n if (totalVested > availableForVesting) {\n throw new Error(`Total vesting amount (${totalVested}) exceeds available tokens (${availableForVesting})`)\n }\n } else {\n // Default case: validate there are tokens available for vesting\n const vestedAmount = params.sale.initialSupply - params.sale.numTokensToSell\n if (vestedAmount <= BigInt(0)) {\n throw new Error('No tokens available for vesting')\n }\n }\n }\n \n // Validate migration config\n if (params.migration.type === 'uniswapV4' && params.migration.streamableFees) {\n const beneficiaries = params.migration.streamableFees.beneficiaries\n if (beneficiaries.length === 0) {\n throw new Error('At least one beneficiary is required for V4 migration')\n }\n\n // Check that shares sum to 100% (WAD)\n const totalShares = beneficiaries.reduce((sum, b) => sum + b.shares, 0n)\n if (totalShares !== WAD) {\n throw new Error(`Beneficiary shares must sum to ${WAD} (100%), but got ${totalShares}`)\n }\n }\n\n // Validate pool beneficiaries for V3 locked pools\n if (params.pool.beneficiaries && params.pool.beneficiaries.length > 0) {\n const beneficiaries = params.pool.beneficiaries\n\n // Check that shares sum to 100% (WAD)\n const totalShares = beneficiaries.reduce((sum, b) => sum + b.shares, 0n)\n if (totalShares !== WAD) {\n throw new Error(`Pool beneficiary shares must sum to ${WAD} (100%), but got ${totalShares}`)\n }\n\n // Validate each beneficiary has positive shares\n for (const b of beneficiaries) {\n if (b.shares <= 0n) {\n throw new Error('Each beneficiary must have positive shares')\n }\n }\n }\n }\n\n /**\n * Validate dynamic auction parameters\n */\n private validateDynamicAuctionParams(params: CreateDynamicAuctionParams): void {\n // Validate token parameters\n if (!params.token.name || params.token.name.trim().length === 0) {\n throw new Error('Token name is required')\n }\n if (!params.token.symbol || params.token.symbol.trim().length === 0) {\n throw new Error('Token symbol is required')\n }\n \n // Validate tick range\n const isToken0 = isToken0Expected(params.sale.numeraire)\n if (isToken0 && params.auction.startTick <= params.auction.endTick) {\n throw new Error('Start tick must be greater than end tick if base token is currency0')\n }\n if (!isToken0 && params.auction.startTick >= params.auction.endTick) {\n throw new Error('Start tick must be less than end tick if base token is currency1')\n }\n\n // Validate sale config\n if (params.sale.initialSupply <= BigInt(0)) {\n throw new Error('Initial supply must be positive')\n }\n if (params.sale.numTokensToSell <= BigInt(0)) {\n throw new Error('Number of tokens to sell must be positive')\n }\n if (params.sale.numTokensToSell > params.sale.initialSupply) {\n throw new Error('Cannot sell more tokens than initial supply')\n }\n \n // Validate auction parameters\n if (params.auction.duration <= 0) {\n throw new Error('Auction duration must be positive')\n }\n if (params.auction.epochLength <= 0) {\n throw new Error('Epoch length must be positive')\n }\n if (params.pool.tickSpacing <= 0) {\n throw new Error('Tick spacing must be positive')\n }\n \n // Validate that total duration is divisible by epoch length\n if (params.auction.duration % params.auction.epochLength !== 0) {\n throw new Error('Epoch length must divide total duration evenly')\n }\n \n // Validate gamma if provided\n if (params.auction.gamma !== undefined) {\n if (params.auction.gamma % params.pool.tickSpacing !== 0) {\n throw new Error('Gamma must be divisible by tick spacing')\n }\n }\n \n // Validate migration config\n if (params.migration.type === 'uniswapV4' && params.migration.streamableFees) {\n const beneficiaries = params.migration.streamableFees.beneficiaries\n if (beneficiaries.length === 0) {\n throw new Error('At least one beneficiary is required for V4 migration')\n }\n \n // Check that shares sum to 100% (WAD)\n const totalShares = beneficiaries.reduce((sum, b) => sum + b.shares, 0n)\n if (totalShares !== WAD) {\n throw new Error(`Beneficiary shares must sum to ${WAD} (100%), but got ${totalShares}`)\n }\n }\n }\n\n /**\n * Get the airlock contract address for the current chain\n */\n private getAirlockAddress(): Address {\n const addresses = getAddresses(this.chainId)\n return addresses.airlock\n }\n\n /**\n * Get the appropriate initializer address based on auction type\n */\n private getInitializerAddress(isStatic: boolean): Address {\n const addresses = getAddresses(this.chainId)\n return isStatic ? addresses.v3Initializer : addresses.v4Initializer\n }\n\n /**\n * Get the Bundler contract address for the current chain\n * Used to perform atomic create + swap (\"bundle\") flows for static auctions\n */\n private getBundlerAddress(): Address {\n const addresses = getAddresses(this.chainId)\n const addr = addresses.bundler\n if (!addr || addr === zeroAddress) {\n throw new Error('Bundler address not configured for this chain')\n }\n return addr\n }\n\n /**\n * Get the appropriate migrator address based on migration config\n * Allows override via ModuleAddressOverrides when provided in params.\n */\n private getMigratorAddress(config: MigrationConfig, overrides?: ModuleAddressOverrides): Address {\n const addresses = getAddresses(this.chainId)\n\n switch (config.type) {\n case 'uniswapV2':\n return overrides?.v2Migrator ?? addresses.v2Migrator\n case 'uniswapV3':\n return overrides?.v3Migrator ?? addresses.v3Migrator\n case 'uniswapV4':\n return overrides?.v4Migrator ?? addresses.v4Migrator\n case 'noOp': {\n const noOpAddress = overrides?.noOpMigrator ?? addresses.noOpMigrator\n if (!noOpAddress) {\n throw new Error('NoOpMigrator not configured on this chain. Provide override via modules.noOpMigrator or update chain config.')\n }\n return noOpAddress\n }\n\n default:\n throw new Error('Unknown migration type')\n }\n }\n\n // computeTicks moved to builders. No longer needed here.\n // computeOptimalGamma moved to utils.\n\n // -----------------------------\n // Bundler helpers (Static/V3)\n // -----------------------------\n\n /**\n * Simulate a bundle with exact input on Uniswap V3 as part of create\n * Returns the expected output amount for the provided exact input.\n */\n async simulateBundleExactInput(createParams: CreateParams, params: {\n tokenIn: Address\n tokenOut: Address\n amountIn: bigint\n fee: number\n sqrtPriceLimitX96: bigint\n }): Promise<bigint> {\n const bundler = this.getBundlerAddress()\n const { result } = await (this.publicClient as PublicClient).simulateContract({\n address: bundler,\n abi: bundlerAbi,\n functionName: 'simulateBundleExactIn',\n args: [\n { ...createParams },\n {\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n fee: params.fee,\n sqrtPriceLimitX96: params.sqrtPriceLimitX96,\n },\n ],\n })\n return result as unknown as bigint\n }\n\n /**\n * Simulate a bundle with exact output on Uniswap V3 as part of create\n * Returns the required input amount for the provided exact output.\n */\n async simulateBundleExactOutput(createParams: CreateParams, params: {\n tokenIn: Address\n tokenOut: Address\n amount: bigint\n fee: number\n sqrtPriceLimitX96: bigint\n }): Promise<bigint> {\n const bundler = this.getBundlerAddress()\n const { result } = await (this.publicClient as PublicClient).simulateContract({\n address: bundler,\n abi: bundlerAbi,\n functionName: 'simulateBundleExactOut',\n args: [\n { ...createParams },\n {\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amount: params.amount,\n fee: params.fee,\n sqrtPriceLimitX96: params.sqrtPriceLimitX96,\n },\n ],\n })\n return result as unknown as bigint\n }\n\n // Bundler helpers (Multicurve/V4)\n async simulateMulticurveBundleExactOut(\n createParams: CreateParams,\n params?: {\n exactAmountOut?: bigint\n }\n ): Promise<MulticurveBundleExactOutResult> {\n const bundler = this.getBundlerAddress()\n await this.ensureMulticurveBundlerSupport(bundler)\n const exactAmountOut = params?.exactAmountOut ?? 0n\n this.ensureUint128(exactAmountOut, 'exactAmountOut', { allowZero: true })\n const hookData = '0x' as Hex\n\n const { result } = await (this.publicClient as PublicClient).simulateContract({\n address: bundler,\n abi: bundlerAbi,\n functionName: 'simulateMulticurveBundleExactOut',\n args: [\n { ...createParams },\n exactAmountOut,\n hookData,\n ],\n })\n\n const { asset, poolKey, amount, gasEstimate } = this.parseMulticurveBundleResult(result)\n\n return {\n asset,\n poolKey,\n amountIn: amount,\n gasEstimate,\n }\n }\n\n async simulateMulticurveBundleExactIn(\n createParams: CreateParams,\n params: {\n exactAmountIn: bigint\n }\n ): Promise<MulticurveBundleExactInResult> {\n const bundler = this.getBundlerAddress()\n await this.ensureMulticurveBundlerSupport(bundler)\n if (params.exactAmountIn === undefined) {\n throw new Error('exactAmountIn is required for multicurve bundle simulations')\n }\n const exactAmountIn = params.exactAmountIn\n this.ensureUint128(exactAmountIn, 'exactAmountIn')\n const hookData = '0x' as Hex\n\n const { result } = await (this.publicClient as PublicClient).simulateContract({\n address: bundler,\n abi: bundlerAbi,\n functionName: 'simulateMulticurveBundleExactIn',\n args: [\n { ...createParams },\n exactAmountIn,\n hookData,\n ],\n })\n\n const { asset, poolKey, amount, gasEstimate } = this.parseMulticurveBundleResult(result)\n\n return {\n asset,\n poolKey,\n amountOut: amount,\n gasEstimate,\n }\n }\n\n /**\n * Execute an atomic create + swap bundle through the Bundler\n * commands/inputs are Universal Router encoded values (e.g., from doppler-router)\n */\n async bundle(createParams: CreateParams, commands: Hex, inputs: Hex[], options?: { gas?: bigint; value?: bigint }): Promise<Hash> {\n if (!this.walletClient) {\n throw new Error('Wallet client required for write operations')\n }\n\n const bundler = this.getBundlerAddress()\n const { request } = await (this.publicClient as PublicClient).simulateContract({\n address: bundler,\n abi: bundlerAbi,\n functionName: 'bundle',\n args: [\n { ...createParams },\n commands,\n inputs,\n ],\n account: this.walletClient.account,\n value: options?.value ?? 0n,\n })\n const gas = options?.gas ?? undefined\n const tx = await this.walletClient.writeContract(gas ? { ...request, gas } : request)\n return tx\n }\n\n\n private ensureUint128(value: bigint, paramName: string, options: { allowZero?: boolean } = {}): void {\n const { allowZero = false } = options\n if (value < 0n) {\n throw new Error(`${paramName} cannot be negative`)\n }\n if (!allowZero && value === 0n) {\n throw new Error(`${paramName} must be greater than zero`)\n }\n if (value > MAX_UINT128) {\n throw new Error(`${paramName} exceeds uint128 range`)\n }\n }\n\n private parseMulticurveBundleResult(result: unknown): { asset: Address; poolKey: V4PoolKey; amount: bigint; gasEstimate: bigint } {\n let asset: Address | undefined\n let poolKeyRaw: unknown\n let amount: bigint | undefined\n let gasEstimate: bigint | undefined\n\n if (Array.isArray(result)) {\n if (result.length < 4) {\n throw new Error('Unexpected multicurve bundle simulation result shape')\n }\n asset = result[0] as Address\n poolKeyRaw = result[1]\n amount = result[2] as bigint\n gasEstimate = result[3] as bigint\n } else if (result && typeof result === 'object') {\n const obj = result as Record<string, unknown>\n asset = obj.asset as Address | undefined\n poolKeyRaw = obj.poolKey\n amount = (obj.amountIn ?? obj.amountOut ?? obj.amount) as bigint | undefined\n gasEstimate = obj.gasEstimate as bigint | undefined\n } else {\n throw new Error('Unexpected multicurve bundle simulation result format')\n }\n\n if (asset === undefined || poolKeyRaw === undefined || amount === undefined || gasEstimate === undefined) {\n throw new Error('Incomplete multicurve bundle simulation result')\n }\n\n return {\n asset,\n poolKey: this.normalizePoolKey(poolKeyRaw),\n amount,\n gasEstimate,\n }\n }\n\n private normalizePoolKey(value: any): V4PoolKey {\n if (Array.isArray(value)) {\n const [currency0, currency1, feeRaw, tickSpacingRaw, hooks] = value as [Address, Address, number | bigint, number | bigint, Address]\n const feeValue = Number(feeRaw)\n const tickSpacingValue = Number(tickSpacingRaw)\n if (!Number.isFinite(feeValue) || !Number.isFinite(tickSpacingValue)) {\n throw new Error('Invalid pool key numeric fields in multicurve bundle simulation result')\n }\n return {\n currency0: currency0 as Address,\n currency1: currency1 as Address,\n fee: feeValue,\n tickSpacing: tickSpacingValue,\n hooks: hooks as Address,\n }\n }\n if (value && typeof value === 'object') {\n const { currency0, currency1, fee, tickSpacing, hooks } = value as Record<string, unknown>\n const feeValue = Number(fee)\n const tickSpacingValue = Number(tickSpacing)\n if (!Number.isFinite(feeValue) || !Number.isFinite(tickSpacingValue)) {\n throw new Error('Invalid pool key numeric fields in multicurve bundle simulation result')\n }\n return {\n currency0: currency0 as Address,\n currency1: currency1 as Address,\n fee: feeValue,\n tickSpacing: tickSpacingValue,\n hooks: hooks as Address,\n }\n }\n throw new Error('Unable to normalize PoolKey from multicurve bundle simulation result')\n }\n /**\n * Mines a salt and hook address with the appropriate flags\n * \n * This method iterates through possible salt values to find a combination that:\n * - Produces a hook address with required Doppler flags\n * - Maintains proper token ordering relative to numeraire\n * - Ensures deterministic deployment addresses\n * \n * @param params - Parameters for hook address mining\n * @returns Tuple of [salt, hook address, token address, pool data, token data]\n * @throws {Error} If no valid salt can be found within the search limit\n * @private\n */\n private mineHookAddress(params: {\n airlock: Address\n poolManager: Address\n deployer: Address\n initialSupply: bigint\n numTokensToSell: bigint\n numeraire: Address\n tokenFactory: Address\n tokenFactoryData:\n | {\n name: string\n symbol: string\n baseURI: string\n unit?: bigint\n }\n | {\n name: string\n symbol: string\n initialSupply: bigint\n airlock: Address\n yearlyMintRate: bigint\n vestingDuration: bigint\n recipients: Address[]\n amounts: bigint[]\n tokenURI: string\n }\n poolInitializer: Address\n poolInitializerData: {\n minimumProceeds: bigint\n maximumProceeds: bigint\n startingTime: bigint\n endingTime: bigint\n startingTick: number\n endingTick: number\n epochLength: bigint\n gamma: number\n numPDSlugs: bigint\n fee: number\n tickSpacing: number\n }\n customDerc20Bytecode?: `0x${string}`\n tokenVariant?: 'standard' | 'doppler404'\n }): [Hash, Address, Address, Hex, Hex] {\n const addresses = getAddresses(this.chainId)\n\n const isToken0 = isToken0Expected(params.numeraire)\n\n const {\n minimumProceeds,\n maximumProceeds,\n startingTime,\n endingTime,\n startingTick,\n endingTick,\n epochLength,\n gamma,\n numPDSlugs,\n fee,\n tickSpacing,\n } = params.poolInitializerData\n\n const poolInitializerData = encodeAbiParameters(\n [\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'int24' },\n { type: 'int24' },\n { type: 'uint256' },\n { type: 'int24' },\n { type: 'bool' },\n { type: 'uint256' },\n { type: 'uint24' },\n { type: 'int24' },\n ],\n [\n minimumProceeds,\n maximumProceeds,\n startingTime,\n endingTime,\n startingTick,\n endingTick,\n epochLength,\n gamma,\n isToken0,\n numPDSlugs,\n fee,\n tickSpacing,\n ]\n )\n\n const isBase = this.chainId === CHAIN_IDS.BASE\n\n const { poolManager, numTokensToSell, poolInitializer } = params\n\n const hookInitHashData = encodeAbiParameters(\n [\n { type: 'address' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'int24' },\n { type: 'int24' },\n { type: 'uint256' },\n { type: 'int24' },\n { type: 'bool' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'uint24' },\n ],\n [\n poolManager,\n numTokensToSell,\n minimumProceeds,\n maximumProceeds,\n startingTime,\n endingTime,\n startingTick,\n endingTick,\n epochLength,\n gamma,\n isToken0,\n numPDSlugs,\n poolInitializer,\n fee,\n ]\n )\n\n const hookInitHash = keccak256(\n encodePacked(\n ['bytes', 'bytes'],\n [isBase ? (DopplerBytecodeBaseMainnet as Hex) : (DopplerBytecode as Hex), hookInitHashData]\n )\n )\n\n const tokenFactoryData = (params.tokenVariant === 'doppler404')\n ? (() => {\n const t = params.tokenFactoryData as {\n name: string\n symbol: string\n baseURI: string\n unit?: bigint\n }\n return encodeAbiParameters(\n [\n { type: 'string' },\n { type: 'string' },\n { type: 'string' },\n { type: 'uint256' },\n ],\n [t.name, t.symbol, t.baseURI, t.unit ?? 1000n]\n )\n })()\n : (() => {\n const {\n name,\n symbol,\n yearlyMintRate,\n vestingDuration,\n recipients,\n amounts,\n tokenURI,\n } = params.tokenFactoryData as {\n name: string\n symbol: string\n initialSupply: bigint\n airlock: Address\n yearlyMintRate: bigint\n vestingDuration: bigint\n recipients: Address[]\n amounts: bigint[]\n tokenURI: string\n }\n return encodeAbiParameters(\n [\n { type: 'string' },\n { type: 'string' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'address[]' },\n { type: 'uint256[]' },\n { type: 'string' },\n ],\n [\n name,\n symbol,\n yearlyMintRate,\n vestingDuration,\n recipients,\n amounts,\n tokenURI,\n ]\n )\n })()\n\n const { airlock, initialSupply } = params\n\n // Compute token init hash; use DN404 bytecode if tokenVariant is doppler404\n let tokenInitHash: Hash | undefined\n if (params.tokenVariant === 'doppler404') {\n const { name, symbol, baseURI } = params.tokenFactoryData as {\n name: string\n symbol: string\n baseURI: string\n unit?: bigint\n }\n const { airlock, initialSupply } = params\n // DN404 constructor: (name, symbol, initialSupply, recipient, owner, baseURI)\n const initHashData = encodeAbiParameters(\n [\n { type: 'string' },\n { type: 'string' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'address' },\n { type: 'string' },\n ],\n [\n name,\n symbol,\n initialSupply,\n airlock,\n airlock,\n baseURI,\n ]\n )\n tokenInitHash = keccak256(\n encodePacked(['bytes', 'bytes'], [DopplerDN404Bytecode as Hex, initHashData])\n )\n } else {\n const { name, symbol, yearlyMintRate, vestingDuration, recipients, amounts, tokenURI } =\n params.tokenFactoryData as {\n name: string\n symbol: string\n initialSupply: bigint\n airlock: Address\n yearlyMintRate: bigint\n vestingDuration: bigint\n recipients: Address[]\n amounts: bigint[]\n tokenURI: string\n }\n const { airlock, initialSupply } = params\n const initHashData = encodeAbiParameters(\n [\n { type: 'string' },\n { type: 'string' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'address' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'address[]' },\n { type: 'uint256[]' },\n { type: 'string' },\n ],\n [\n name,\n symbol,\n initialSupply,\n airlock,\n airlock,\n yearlyMintRate,\n vestingDuration,\n recipients,\n amounts,\n tokenURI,\n ]\n )\n tokenInitHash = keccak256(\n encodePacked(['bytes', 'bytes'], [params.customDerc20Bytecode as Hex ?? DERC20Bytecode as Hex, initHashData])\n )\n }\n\n // Use the exact flags from V4 SDK\n const flags = BigInt(\n (1 << 13) | // BEFORE_INITIALIZE_FLAG\n (1 << 12) | // AFTER_INITIALIZE_FLAG\n (1 << 11) | // BEFORE_ADD_LIQUIDITY_FLAG\n (1 << 7) | // BEFORE_SWAP_FLAG\n (1 << 6) | // AFTER_SWAP_FLAG\n (1 << 5) // BEFORE_DONATE_FLAG\n )\n\n for (let salt = BigInt(0); salt < BigInt(1_000_000); salt++) {\n const saltBytes = `0x${salt.toString(16).padStart(64, '0')}` as Hash\n const hook = this.computeCreate2Address(\n saltBytes,\n hookInitHash,\n params.deployer\n )\n const hookBigInt = BigInt(hook)\n if (tokenInitHash) {\n const token = this.computeCreate2Address(\n saltBytes,\n tokenInitHash,\n params.tokenFactory\n )\n const tokenBigInt = BigInt(token)\n const numeraireBigInt = BigInt(params.numeraire)\n if (\n (hookBigInt & FLAG_MASK) === flags &&\n ((isToken0 && tokenBigInt < numeraireBigInt) ||\n (!isToken0 && tokenBigInt > numeraireBigInt))\n ) {\n return [saltBytes, hook, token, poolInitializerData, tokenFactoryData]\n }\n }\n }\n\n throw new Error('AirlockMiner: could not find salt')\n }\n\n /**\n * Computes the CREATE2 address for a contract deployment\n * @param salt - The salt used for deployment\n * @param initCodeHash - Hash of the initialization code\n * @param deployer - Address of the deploying contract\n * @returns The computed contract address\n * @private\n */\n private computeCreate2Address(\n salt: Hash,\n initCodeHash: Hash,\n deployer: Address\n ): Address {\n const encoded = encodePacked(\n ['bytes1', 'address', 'bytes32', 'bytes32'],\n ['0xff', deployer, salt, initCodeHash]\n )\n return getAddress(`0x${keccak256(encoded).slice(-40)}`)\n }\n\n /**\n * Compute V4 pool ID from pool key components\n */\n private computePoolId(poolKey: {\n currency0: Address\n currency1: Address \n fee: number\n tickSpacing: number\n hooks: Address\n }): string {\n // V4 pools are identified by the hash of their PoolKey\n const encoded = encodeAbiParameters(\n [\n { type: 'address' },\n { type: 'address' },\n { type: 'uint24' },\n { type: 'int24' },\n { type: 'address' }\n ],\n [\n poolKey.currency0,\n poolKey.currency1,\n poolKey.fee,\n poolKey.tickSpacing,\n poolKey.hooks\n ]\n )\n return keccak256(encoded)\n }\n\n private async ensureMulticurveBundlerSupport(bundler: Address): Promise<void> {\n if (this.multicurveBundlerSupport.get(bundler)) {\n return\n }\n\n const client = this.publicClient as PublicClient\n if (!client || typeof client.getBytecode !== 'function') {\n // If we cannot check support, optimistically assume true.\n this.multicurveBundlerSupport.set(bundler, true)\n return\n }\n\n const bytecode = await client.getBytecode({ address: bundler })\n const supports = Boolean(bytecode && MULTICURVE_BUNDLER_SELECTORS.every(selector => bytecode.includes(selector.slice(2))))\n\n if (!supports) {\n throw new Error(\n `Bundler at ${bundler} does not support multicurve bundling. Ensure the Doppler Bundler has been upgraded and update chain addresses.`\n )\n }\n\n this.multicurveBundlerSupport.set(bundler, true)\n }\n}\n\nconst MULTICURVE_BUNDLER_SELECTORS = ['0xe2e9faa1', '0x07087b06'] as const\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-WTS75RUC.js"}
|