@whetstone-research/doppler-sdk 0.0.1-alpha.9 → 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-AQPINKEW.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-AXA7YT2G.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-PMIJTXU6.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-EIRVZJTT.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-4K5GBNQV.mjs.map +0 -1
- package/dist/chunk-7F5IXZLH.js +0 -308
- package/dist/chunk-7F5IXZLH.js.map +0 -1
- package/dist/chunk-7W72MFJO.mjs.map +0 -1
- package/dist/chunk-AQPINKEW.mjs.map +0 -1
- package/dist/chunk-AXA7YT2G.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-CIVGL27M.mjs +0 -160
- package/dist/chunk-CIVGL27M.mjs.map +0 -1
- package/dist/chunk-CYDWEPFL.mjs +0 -3
- package/dist/chunk-DCFHANLR.mjs.map +0 -1
- package/dist/chunk-DRBRT57F.js +0 -4
- package/dist/chunk-EFAPDN4J.js.map +0 -1
- package/dist/chunk-EIRVZJTT.js.map +0 -1
- package/dist/chunk-ER42VG7H.js.map +0 -1
- package/dist/chunk-FPGJKJIR.js +0 -872
- package/dist/chunk-FPGJKJIR.js.map +0 -1
- package/dist/chunk-HRFHDSNE.js +0 -180
- package/dist/chunk-HRFHDSNE.js.map +0 -1
- package/dist/chunk-IHBIBFZK.mjs +0 -12
- package/dist/chunk-IHBIBFZK.mjs.map +0 -1
- package/dist/chunk-JIDZBQ7R.mjs +0 -870
- package/dist/chunk-JIDZBQ7R.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-LZO67TYV.mjs +0 -176
- package/dist/chunk-LZO67TYV.mjs.map +0 -1
- package/dist/chunk-MZ2UBC4M.mjs +0 -80
- package/dist/chunk-MZ2UBC4M.mjs.map +0 -1
- package/dist/chunk-OPKQMN46.mjs.map +0 -1
- package/dist/chunk-PMIJTXU6.js.map +0 -1
- package/dist/chunk-T644D54P.mjs.map +0 -1
- package/dist/chunk-TOMVBPNZ.js.map +0 -1
- package/dist/chunk-UHT4QLL7.js +0 -162
- package/dist/chunk-UHT4QLL7.js.map +0 -1
- package/dist/chunk-XG7K4R56.js.map +0 -1
- package/dist/chunk-YNP2HGJZ.js +0 -82
- package/dist/chunk-YNP2HGJZ.js.map +0 -1
- package/dist/chunk-ZAIP54LX.js +0 -209
- package/dist/chunk-ZAIP54LX.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,280 @@
|
|
|
1
|
+
import { computeTicks } from './chunk-Q5ERW5ZW.mjs';
|
|
2
|
+
import { computeOptimalGamma } from './chunk-MNJ5OYPE.mjs';
|
|
3
|
+
import { validateMarketCapParameters, marketCapRangeToTicks, transformTicksForAuction } from './chunk-64AWG57M.mjs';
|
|
4
|
+
import { DEFAULT_V4_YEARLY_MINT_RATE, ZERO_ADDRESS, DEFAULT_AUCTION_DURATION, DEFAULT_EPOCH_LENGTH } from './chunk-QKO2FZGN.mjs';
|
|
5
|
+
import { isNoOpEnabledChain } from './chunk-OZ6DGBRL.mjs';
|
|
6
|
+
|
|
7
|
+
// src/builders/DynamicAuctionBuilder.ts
|
|
8
|
+
var DynamicAuctionBuilder = class _DynamicAuctionBuilder {
|
|
9
|
+
constructor(chainId) {
|
|
10
|
+
this.chainId = chainId;
|
|
11
|
+
}
|
|
12
|
+
static forChain(chainId) {
|
|
13
|
+
return new _DynamicAuctionBuilder(chainId);
|
|
14
|
+
}
|
|
15
|
+
tokenConfig(params) {
|
|
16
|
+
if (params && "type" in params && params.type === "doppler404") {
|
|
17
|
+
this.token = {
|
|
18
|
+
type: "doppler404",
|
|
19
|
+
name: params.name,
|
|
20
|
+
symbol: params.symbol,
|
|
21
|
+
baseURI: params.baseURI,
|
|
22
|
+
unit: params.unit
|
|
23
|
+
};
|
|
24
|
+
} else {
|
|
25
|
+
this.token = {
|
|
26
|
+
type: "standard",
|
|
27
|
+
name: params.name,
|
|
28
|
+
symbol: params.symbol,
|
|
29
|
+
tokenURI: params.tokenURI,
|
|
30
|
+
yearlyMintRate: params.yearlyMintRate ?? DEFAULT_V4_YEARLY_MINT_RATE
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
saleConfig(params) {
|
|
36
|
+
this.sale = {
|
|
37
|
+
initialSupply: params.initialSupply,
|
|
38
|
+
numTokensToSell: params.numTokensToSell,
|
|
39
|
+
numeraire: params.numeraire ?? ZERO_ADDRESS
|
|
40
|
+
};
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
poolConfig(params) {
|
|
44
|
+
this.pool = { fee: params.fee, tickSpacing: params.tickSpacing };
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
// Provide ticks directly
|
|
48
|
+
auctionByTicks(params) {
|
|
49
|
+
const duration = params.duration ?? DEFAULT_AUCTION_DURATION;
|
|
50
|
+
const epochLength = params.epochLength ?? DEFAULT_EPOCH_LENGTH;
|
|
51
|
+
const gamma = params.gamma ?? (this.pool ? computeOptimalGamma(params.startTick, params.endTick, duration, epochLength, this.pool.tickSpacing) : void 0);
|
|
52
|
+
this.auction = {
|
|
53
|
+
duration,
|
|
54
|
+
epochLength,
|
|
55
|
+
startTick: params.startTick,
|
|
56
|
+
endTick: params.endTick,
|
|
57
|
+
gamma,
|
|
58
|
+
minProceeds: params.minProceeds,
|
|
59
|
+
maxProceeds: params.maxProceeds,
|
|
60
|
+
numPdSlugs: params.numPdSlugs
|
|
61
|
+
};
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @deprecated Use withMarketCapRange() instead for more intuitive market cap configuration
|
|
66
|
+
*/
|
|
67
|
+
auctionByPriceRange(params) {
|
|
68
|
+
const tickSpacing = params.tickSpacing ?? this.pool?.tickSpacing;
|
|
69
|
+
if (!tickSpacing) {
|
|
70
|
+
throw new Error("tickSpacing is required (set poolConfig first or pass tickSpacing)");
|
|
71
|
+
}
|
|
72
|
+
const ticks = computeTicks(params.priceRange, tickSpacing);
|
|
73
|
+
return this.auctionByTicks({
|
|
74
|
+
startTick: ticks.startTick,
|
|
75
|
+
endTick: ticks.endTick,
|
|
76
|
+
minProceeds: params.minProceeds,
|
|
77
|
+
maxProceeds: params.maxProceeds,
|
|
78
|
+
duration: params.duration,
|
|
79
|
+
epochLength: params.epochLength,
|
|
80
|
+
gamma: params.gamma,
|
|
81
|
+
numPdSlugs: params.numPdSlugs
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Configure auction using target market cap range.
|
|
86
|
+
* Converts market cap values (in USD) to Uniswap ticks.
|
|
87
|
+
*
|
|
88
|
+
* @param params - Market cap configuration with auction parameters
|
|
89
|
+
* @returns Builder instance for chaining
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* builder
|
|
94
|
+
* .saleConfig({ initialSupply, numTokensToSell, numeraire: WETH })
|
|
95
|
+
* .poolConfig({ fee: 3000, tickSpacing: 60 })
|
|
96
|
+
* .withMarketCapRange({
|
|
97
|
+
* marketCap: { start: 500_000, min: 50_000 }, // $500k start, $50k floor
|
|
98
|
+
* numerairePrice: 3000, // ETH = $3000
|
|
99
|
+
* minProceeds: parseEther('10'),
|
|
100
|
+
* maxProceeds: parseEther('1000'),
|
|
101
|
+
* })
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
withMarketCapRange(params) {
|
|
105
|
+
if (!this.sale?.numeraire) {
|
|
106
|
+
throw new Error("Must call saleConfig() before withMarketCapRange()");
|
|
107
|
+
}
|
|
108
|
+
const tokenSupply = params.tokenSupply ?? this.sale.initialSupply;
|
|
109
|
+
if (!tokenSupply) {
|
|
110
|
+
throw new Error(
|
|
111
|
+
"tokenSupply must be provided (either via saleConfig() or withMarketCapRange() params)"
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
const tickSpacing = this.pool?.tickSpacing;
|
|
115
|
+
if (!tickSpacing) {
|
|
116
|
+
throw new Error(
|
|
117
|
+
"tickSpacing is required (set via poolConfig() before calling withMarketCapRange())"
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
const startValidation = validateMarketCapParameters(
|
|
121
|
+
params.marketCap.start,
|
|
122
|
+
tokenSupply,
|
|
123
|
+
params.tokenDecimals
|
|
124
|
+
);
|
|
125
|
+
const minValidation = validateMarketCapParameters(
|
|
126
|
+
params.marketCap.min,
|
|
127
|
+
tokenSupply,
|
|
128
|
+
params.tokenDecimals
|
|
129
|
+
);
|
|
130
|
+
const allWarnings = [...startValidation.warnings, ...minValidation.warnings];
|
|
131
|
+
if (allWarnings.length > 0) {
|
|
132
|
+
console.warn("Market cap validation warnings:");
|
|
133
|
+
allWarnings.forEach((w) => console.warn(` - ${w}`));
|
|
134
|
+
}
|
|
135
|
+
const { startTick: rawStartTick, endTick: rawEndTick } = marketCapRangeToTicks(
|
|
136
|
+
{ start: params.marketCap.min, end: params.marketCap.start },
|
|
137
|
+
tokenSupply,
|
|
138
|
+
params.numerairePrice,
|
|
139
|
+
params.tokenDecimals ?? 18,
|
|
140
|
+
params.numeraireDecimals ?? 18,
|
|
141
|
+
tickSpacing,
|
|
142
|
+
this.sale.numeraire
|
|
143
|
+
);
|
|
144
|
+
const { startTick, endTick } = transformTicksForAuction(
|
|
145
|
+
rawStartTick,
|
|
146
|
+
rawEndTick,
|
|
147
|
+
this.sale.numeraire
|
|
148
|
+
);
|
|
149
|
+
return this.auctionByTicks({
|
|
150
|
+
startTick,
|
|
151
|
+
endTick,
|
|
152
|
+
minProceeds: params.minProceeds,
|
|
153
|
+
maxProceeds: params.maxProceeds,
|
|
154
|
+
duration: params.duration,
|
|
155
|
+
epochLength: params.epochLength,
|
|
156
|
+
gamma: params.gamma,
|
|
157
|
+
numPdSlugs: params.numPdSlugs
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
withVesting(params) {
|
|
161
|
+
if (!params) {
|
|
162
|
+
this.vesting = void 0;
|
|
163
|
+
return this;
|
|
164
|
+
}
|
|
165
|
+
this.vesting = {
|
|
166
|
+
duration: Number(params.duration ?? 0n),
|
|
167
|
+
cliffDuration: params.cliffDuration ?? 0,
|
|
168
|
+
recipients: params.recipients,
|
|
169
|
+
amounts: params.amounts
|
|
170
|
+
};
|
|
171
|
+
return this;
|
|
172
|
+
}
|
|
173
|
+
withGovernance(params) {
|
|
174
|
+
this.governance = params;
|
|
175
|
+
return this;
|
|
176
|
+
}
|
|
177
|
+
withMigration(migration) {
|
|
178
|
+
this.migration = migration;
|
|
179
|
+
return this;
|
|
180
|
+
}
|
|
181
|
+
withUserAddress(address) {
|
|
182
|
+
this.userAddress = address;
|
|
183
|
+
return this;
|
|
184
|
+
}
|
|
185
|
+
withIntegrator(address) {
|
|
186
|
+
this.integrator = address ?? ZERO_ADDRESS;
|
|
187
|
+
return this;
|
|
188
|
+
}
|
|
189
|
+
withGasLimit(gas) {
|
|
190
|
+
this.gasLimit = gas;
|
|
191
|
+
return this;
|
|
192
|
+
}
|
|
193
|
+
withTime(params) {
|
|
194
|
+
if (!params) {
|
|
195
|
+
this.startTimeOffset = void 0;
|
|
196
|
+
this.blockTimestamp = void 0;
|
|
197
|
+
return this;
|
|
198
|
+
}
|
|
199
|
+
this.startTimeOffset = params.startTimeOffset;
|
|
200
|
+
this.blockTimestamp = params.blockTimestamp;
|
|
201
|
+
return this;
|
|
202
|
+
}
|
|
203
|
+
// Address override helpers
|
|
204
|
+
overrideModule(key, address) {
|
|
205
|
+
this.moduleAddresses = {
|
|
206
|
+
...this.moduleAddresses ?? {},
|
|
207
|
+
[key]: address
|
|
208
|
+
};
|
|
209
|
+
return this;
|
|
210
|
+
}
|
|
211
|
+
withTokenFactory(address) {
|
|
212
|
+
return this.overrideModule("tokenFactory", address);
|
|
213
|
+
}
|
|
214
|
+
withAirlock(address) {
|
|
215
|
+
return this.overrideModule("airlock", address);
|
|
216
|
+
}
|
|
217
|
+
withV4Initializer(address) {
|
|
218
|
+
return this.overrideModule("v4Initializer", address);
|
|
219
|
+
}
|
|
220
|
+
withPoolManager(address) {
|
|
221
|
+
return this.overrideModule("poolManager", address);
|
|
222
|
+
}
|
|
223
|
+
withDopplerDeployer(address) {
|
|
224
|
+
return this.overrideModule("dopplerDeployer", address);
|
|
225
|
+
}
|
|
226
|
+
withGovernanceFactory(address) {
|
|
227
|
+
return this.overrideModule("governanceFactory", address);
|
|
228
|
+
}
|
|
229
|
+
withV2Migrator(address) {
|
|
230
|
+
return this.overrideModule("v2Migrator", address);
|
|
231
|
+
}
|
|
232
|
+
withV3Migrator(address) {
|
|
233
|
+
return this.overrideModule("v3Migrator", address);
|
|
234
|
+
}
|
|
235
|
+
withV4Migrator(address) {
|
|
236
|
+
return this.overrideModule("v4Migrator", address);
|
|
237
|
+
}
|
|
238
|
+
withNoOpMigrator(address) {
|
|
239
|
+
return this.overrideModule("noOpMigrator", address);
|
|
240
|
+
}
|
|
241
|
+
build() {
|
|
242
|
+
if (!this.token) throw new Error("tokenConfig is required");
|
|
243
|
+
if (!this.sale) throw new Error("saleConfig is required");
|
|
244
|
+
if (!this.pool) throw new Error("poolConfig is required");
|
|
245
|
+
if (!this.auction) throw new Error("auction configuration is required");
|
|
246
|
+
if (!this.migration) throw new Error("migration configuration is required");
|
|
247
|
+
if (!this.userAddress) throw new Error("userAddress is required");
|
|
248
|
+
const governance = this.governance ?? (isNoOpEnabledChain(this.chainId) ? { type: "noOp" } : { type: "default" });
|
|
249
|
+
let { gamma } = this.auction;
|
|
250
|
+
if (gamma === void 0) {
|
|
251
|
+
gamma = computeOptimalGamma(
|
|
252
|
+
this.auction.startTick,
|
|
253
|
+
this.auction.endTick,
|
|
254
|
+
this.auction.duration,
|
|
255
|
+
this.auction.epochLength,
|
|
256
|
+
this.pool.tickSpacing
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
const auction = { ...this.auction, gamma };
|
|
260
|
+
return {
|
|
261
|
+
token: this.token,
|
|
262
|
+
sale: this.sale,
|
|
263
|
+
auction,
|
|
264
|
+
pool: this.pool,
|
|
265
|
+
vesting: this.vesting,
|
|
266
|
+
governance,
|
|
267
|
+
migration: this.migration,
|
|
268
|
+
integrator: this.integrator ?? ZERO_ADDRESS,
|
|
269
|
+
userAddress: this.userAddress,
|
|
270
|
+
startTimeOffset: this.startTimeOffset,
|
|
271
|
+
blockTimestamp: this.blockTimestamp,
|
|
272
|
+
modules: this.moduleAddresses,
|
|
273
|
+
gas: this.gasLimit
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
export { DynamicAuctionBuilder };
|
|
279
|
+
//# sourceMappingURL=chunk-MCOK3UFR.mjs.map
|
|
280
|
+
//# sourceMappingURL=chunk-MCOK3UFR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/builders/DynamicAuctionBuilder.ts"],"names":[],"mappings":";;;;;;;AA2BO,IAAM,qBAAA,GAAN,MAAM,sBAAA,CACsB;AAAA,EAgBjC,YAAY,OAAA,EAAY;AACtB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,OAAO,SAAqC,OAAA,EAAsC;AAChF,IAAA,OAAO,IAAI,uBAAsB,OAAO,CAAA;AAAA,EAC1C;AAAA,EAEA,YACE,MAAA,EAGM;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,SAAA,EAAW,OAAO,SAAA,IAAa;AAAA,KACjC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,WAAW,MAAA,EAAoD;AAC7D,IAAA,IAAA,CAAK,OAAO,EAAE,GAAA,EAAK,OAAO,GAAA,EAAK,WAAA,EAAa,OAAO,WAAA,EAAY;AAC/D,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,eAAe,MAAA,EASN;AACP,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,wBAAA;AACpC,IAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,oBAAA;AAC1C,IAAA,MAAM,KAAA,GACJ,MAAA,CAAO,KAAA,KAAU,IAAA,CAAK,OAAO,mBAAA,CAAoB,MAAA,CAAO,SAAA,EAAW,MAAA,CAAO,SAAS,QAAA,EAAU,WAAA,EAAa,IAAA,CAAK,IAAA,CAAK,WAAW,CAAA,GAAI,MAAA,CAAA;AACrI,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,QAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,KAAA;AAAA,MACA,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,YAAY,MAAA,CAAO;AAAA,KACrB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,MAAA,EASX;AACP,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,WAAA,IAAe,IAAA,CAAK,IAAA,EAAM,WAAA;AACrD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,IACtF;AACA,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,CAAO,UAAA,EAAY,WAAW,CAAA;AACzD,IAAA,OAAO,KAAK,cAAA,CAAe;AAAA,MACzB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,YAAY,MAAA,CAAO;AAAA,KACpB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,mBAAmB,MAAA,EAA6C;AAE9D,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAM,SAAA,EAAW;AACzB,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AAGA,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,WAAA,IAAe,IAAA,CAAK,IAAA,CAAK,aAAA;AACpD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAc,KAAK,IAAA,EAAM,WAAA;AAC/B,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAGA,IAAA,MAAM,eAAA,GAAkB,2BAAA;AAAA,MACtB,OAAO,SAAA,CAAU,KAAA;AAAA,MACjB,WAAA;AAAA,MACA,MAAA,CAAO;AAAA,KACT;AACA,IAAA,MAAM,aAAA,GAAgB,2BAAA;AAAA,MACpB,OAAO,SAAA,CAAU,GAAA;AAAA,MACjB,WAAA;AAAA,MACA,MAAA,CAAO;AAAA,KACT;AAEA,IAAA,MAAM,cAAc,CAAC,GAAG,gBAAgB,QAAA,EAAU,GAAG,cAAc,QAAQ,CAAA;AAC3E,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,OAAA,CAAQ,KAAK,iCAAiC,CAAA;AAC9C,MAAA,WAAA,CAAY,QAAQ,CAAA,CAAA,KAAK,OAAA,CAAQ,KAAK,CAAA,IAAA,EAAO,CAAC,EAAE,CAAC,CAAA;AAAA,IACnD;AAKA,IAAA,MAAM,EAAE,SAAA,EAAW,YAAA,EAAc,OAAA,EAAS,YAAW,GAAI,qBAAA;AAAA,MACvD,EAAE,OAAO,MAAA,CAAO,SAAA,CAAU,KAAK,GAAA,EAAK,MAAA,CAAO,UAAU,KAAA,EAAM;AAAA,MAC3D,WAAA;AAAA,MACA,MAAA,CAAO,cAAA;AAAA,MACP,OAAO,aAAA,IAAiB,EAAA;AAAA,MACxB,OAAO,iBAAA,IAAqB,EAAA;AAAA,MAC5B,WAAA;AAAA,MACA,KAAK,IAAA,CAAK;AAAA,KACZ;AAEA,IAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,wBAAA;AAAA,MAC7B,YAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAK,IAAA,CAAK;AAAA,KACZ;AAGA,IAAA,OAAO,KAAK,cAAA,CAAe;AAAA,MACzB,SAAA;AAAA,MACA,OAAA;AAAA,MACA,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,YAAY,MAAA,CAAO;AAAA,KACpB,CAAA;AAAA,EACH;AAAA,EAEA,YAAY,MAAA,EAA0G;AACpH,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,EAAE,CAAA;AAAA,MACtC,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,EAEA,SAAS,MAAA,EAAsE;AAC7E,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AACvB,MAAA,IAAA,CAAK,cAAA,GAAiB,MAAA;AACtB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,kBAAkB,MAAA,CAAO,eAAA;AAC9B,IAAA,IAAA,CAAK,iBAAiB,MAAA,CAAO,cAAA;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGQ,cAAA,CAAuD,KAAQ,OAAA,EAAuD;AAC5H,IAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,MACrB,GAAI,IAAA,CAAK,eAAA,IAAmB,EAAC;AAAA,MAC7B,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,gBAAgB,OAAA,EAAwB;AACtC,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,aAAA,EAAe,OAAO,CAAA;AAAA,EACnD;AAAA,EAEA,oBAAoB,OAAA,EAAwB;AAC1C,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,iBAAA,EAAmB,OAAO,CAAA;AAAA,EACvD;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,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,GAAuC;AACrC,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,IAAA,EAAM,MAAM,IAAI,MAAM,wBAAwB,CAAA;AACxD,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,mCAAmC,CAAA;AACtE,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,MAAM,UAAA,GAAa,IAAA,CAAK,UAAA,KACtB,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA,GAC3B,EAAE,IAAA,EAAM,MAAA,EAAgB,GACxB,EAAE,MAAM,SAAA,EAAmB,CAAA;AAIjC,IAAA,IAAI,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,OAAA;AACrB,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,KAAA,GAAQ,mBAAA;AAAA,QACN,KAAK,OAAA,CAAQ,SAAA;AAAA,QACb,KAAK,OAAA,CAAQ,OAAA;AAAA,QACb,KAAK,OAAA,CAAQ,QAAA;AAAA,QACb,KAAK,OAAA,CAAQ,WAAA;AAAA,QACb,KAAK,IAAA,CAAK;AAAA,OACZ;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,EAAE,GAAG,IAAA,CAAK,SAAS,KAAA,EAAM;AAEzC,IAAA,OAAO;AAAA,MACL,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,OAAA;AAAA,MACA,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,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,iBAAiB,IAAA,CAAK,eAAA;AAAA,MACtB,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,SAAS,IAAA,CAAK,eAAA;AAAA,MACd,KAAK,IAAA,CAAK;AAAA,KACZ;AAAA,EACF;AACF","file":"chunk-MCOK3UFR.mjs","sourcesContent":["import type { Address } from 'viem'\nimport {\n DEFAULT_AUCTION_DURATION,\n DEFAULT_EPOCH_LENGTH,\n DEFAULT_V4_YEARLY_MINT_RATE,\n ZERO_ADDRESS,\n} from '../constants'\nimport {\n computeOptimalGamma,\n marketCapRangeToTicks,\n transformTicksForAuction,\n validateMarketCapParameters,\n} from '../utils'\nimport {\n isNoOpEnabledChain,\n type CreateDynamicAuctionParams,\n type GovernanceOption,\n type MigrationConfig,\n type PriceRange,\n type VestingConfig,\n type TokenConfig,\n type DynamicAuctionMarketCapConfig,\n type ModuleAddressOverrides,\n} from '../types'\nimport { type SupportedChainId } from '../addresses'\nimport { computeTicks, type BaseAuctionBuilder } from './shared'\n\nexport class DynamicAuctionBuilder<C extends SupportedChainId>\n implements BaseAuctionBuilder<C> {\n private token?: TokenConfig\n private sale?: CreateDynamicAuctionParams<C>['sale']\n private auction?: CreateDynamicAuctionParams<C>['auction']\n private pool?: CreateDynamicAuctionParams<C>['pool']\n private vesting?: VestingConfig\n private governance?: GovernanceOption<C>\n private migration?: MigrationConfig\n private integrator?: Address\n private userAddress?: Address\n private startTimeOffset?: number\n private blockTimestamp?: number\n private moduleAddresses?: ModuleAddressOverrides\n private gasLimit?: bigint\n public chainId: C\n\n constructor(chainId: C) {\n this.chainId = chainId\n }\n\n static forChain<C extends SupportedChainId>(chainId: C): DynamicAuctionBuilder<C> {\n return new DynamicAuctionBuilder(chainId)\n }\n\n tokenConfig(\n params:\n | { type?: 'standard'; name: string; symbol: string; tokenURI: string; yearlyMintRate?: bigint }\n | { type: 'doppler404'; name: string; symbol: string; baseURI: string; unit?: bigint }\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_V4_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 ?? ZERO_ADDRESS,\n }\n return this\n }\n\n poolConfig(params: { fee: number; tickSpacing: number }): this {\n this.pool = { fee: params.fee, tickSpacing: params.tickSpacing }\n return this\n }\n\n // Provide ticks directly\n auctionByTicks(params: {\n startTick: number\n endTick: number\n minProceeds: bigint\n maxProceeds: bigint\n duration?: number\n epochLength?: number\n gamma?: number\n numPdSlugs?: number\n }): this {\n const duration = params.duration ?? DEFAULT_AUCTION_DURATION\n const epochLength = params.epochLength ?? DEFAULT_EPOCH_LENGTH\n const gamma =\n params.gamma ?? (this.pool ? computeOptimalGamma(params.startTick, params.endTick, duration, epochLength, this.pool.tickSpacing) : undefined)\n this.auction = {\n duration,\n epochLength,\n startTick: params.startTick,\n endTick: params.endTick,\n gamma,\n minProceeds: params.minProceeds,\n maxProceeds: params.maxProceeds,\n numPdSlugs: params.numPdSlugs,\n }\n return this\n }\n\n /**\n * @deprecated Use withMarketCapRange() instead for more intuitive market cap configuration\n */\n auctionByPriceRange(params: {\n priceRange: PriceRange\n minProceeds: bigint\n maxProceeds: bigint\n duration?: number\n epochLength?: number\n gamma?: number\n tickSpacing?: number // optional; will use pool.tickSpacing if not provided\n numPdSlugs?: number\n }): this {\n const tickSpacing = params.tickSpacing ?? this.pool?.tickSpacing\n if (!tickSpacing) {\n throw new Error('tickSpacing is required (set poolConfig first or pass tickSpacing)')\n }\n const ticks = computeTicks(params.priceRange, tickSpacing)\n return this.auctionByTicks({\n startTick: ticks.startTick,\n endTick: ticks.endTick,\n minProceeds: params.minProceeds,\n maxProceeds: params.maxProceeds,\n duration: params.duration,\n epochLength: params.epochLength,\n gamma: params.gamma,\n numPdSlugs: params.numPdSlugs,\n })\n }\n\n /**\n * Configure auction using target market cap range.\n * Converts market cap values (in USD) to Uniswap ticks.\n *\n * @param params - Market cap configuration with auction parameters\n * @returns Builder instance for chaining\n *\n * @example\n * ```ts\n * builder\n * .saleConfig({ initialSupply, numTokensToSell, numeraire: WETH })\n * .poolConfig({ fee: 3000, tickSpacing: 60 })\n * .withMarketCapRange({\n * marketCap: { start: 500_000, min: 50_000 }, // $500k start, $50k floor\n * numerairePrice: 3000, // ETH = $3000\n * minProceeds: parseEther('10'),\n * maxProceeds: parseEther('1000'),\n * })\n * ```\n */\n withMarketCapRange(params: DynamicAuctionMarketCapConfig): this {\n // Validate required config\n if (!this.sale?.numeraire) {\n throw new Error('Must call saleConfig() before withMarketCapRange()')\n }\n\n // Get token supply\n const tokenSupply = params.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 // Get tick spacing\n const tickSpacing = this.pool?.tickSpacing\n if (!tickSpacing) {\n throw new Error(\n 'tickSpacing is required (set via poolConfig() before calling withMarketCapRange())'\n )\n }\n\n // Validate market cap parameters\n const startValidation = validateMarketCapParameters(\n params.marketCap.start,\n tokenSupply,\n params.tokenDecimals\n )\n const minValidation = validateMarketCapParameters(\n params.marketCap.min,\n tokenSupply,\n params.tokenDecimals\n )\n\n const allWarnings = [...startValidation.warnings, ...minValidation.warnings]\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 and transform for auction contract\n // Pass min as start, start as end (ascending order for validation)\n // Dutch auction price semantics are handled by the contract, not tick ordering\n const { startTick: rawStartTick, endTick: rawEndTick } = marketCapRangeToTicks(\n { start: params.marketCap.min, end: params.marketCap.start },\n tokenSupply,\n params.numerairePrice,\n params.tokenDecimals ?? 18,\n params.numeraireDecimals ?? 18,\n tickSpacing,\n this.sale.numeraire\n )\n\n const { startTick, endTick } = transformTicksForAuction(\n rawStartTick,\n rawEndTick,\n this.sale.numeraire\n )\n\n // Delegate to existing auctionByTicks method\n return this.auctionByTicks({\n startTick,\n endTick,\n minProceeds: params.minProceeds,\n maxProceeds: params.maxProceeds,\n duration: params.duration,\n epochLength: params.epochLength,\n gamma: params.gamma,\n numPdSlugs: params.numPdSlugs,\n })\n }\n\n withVesting(params?: { duration?: bigint; cliffDuration?: number; recipients?: Address[]; amounts?: bigint[] }): this {\n if (!params) {\n this.vesting = undefined\n return this\n }\n this.vesting = {\n duration: Number(params.duration ?? 0n),\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 withTime(params?: { startTimeOffset?: number; blockTimestamp?: number }): this {\n if (!params) {\n this.startTimeOffset = undefined\n this.blockTimestamp = undefined\n return this\n }\n this.startTimeOffset = params.startTimeOffset\n this.blockTimestamp = params.blockTimestamp\n return this\n }\n\n // Address override helpers\n private overrideModule<K extends keyof ModuleAddressOverrides>(key: K, address: NonNullable<ModuleAddressOverrides[K]>): 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 withV4Initializer(address: Address): this {\n return this.overrideModule('v4Initializer', address)\n }\n\n withPoolManager(address: Address): this {\n return this.overrideModule('poolManager', address)\n }\n\n withDopplerDeployer(address: Address): this {\n return this.overrideModule('dopplerDeployer', 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 withV3Migrator(address: Address): this {\n return this.overrideModule('v3Migrator', 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(): CreateDynamicAuctionParams<C> {\n if (!this.token) throw new Error('tokenConfig is required')\n if (!this.sale) throw new Error('saleConfig is required')\n if (!this.pool) throw new Error('poolConfig is required')\n if (!this.auction) throw new Error('auction configuration 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 // Default governance: noOp on supported chains, default on others (e.g., Ink)\n const governance = this.governance ?? (\n isNoOpEnabledChain(this.chainId)\n ? { type: 'noOp' as const }\n : { type: 'default' as const }\n )\n\n // Ensure gamma is set and valid\n let { gamma } = this.auction\n if (gamma === undefined) {\n gamma = computeOptimalGamma(\n this.auction.startTick,\n this.auction.endTick,\n this.auction.duration,\n this.auction.epochLength,\n this.pool.tickSpacing,\n )\n }\n\n const auction = { ...this.auction, gamma }\n\n return {\n token: this.token,\n sale: this.sale,\n auction,\n pool: this.pool,\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 startTimeOffset: this.startTimeOffset,\n blockTimestamp: this.blockTimestamp,\n modules: this.moduleAddresses,\n gas: this.gasLimit,\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkRVFSRYI5_js = require('./chunk-RVFSRYI5.js');
|
|
4
|
+
var viem = require('viem');
|
|
5
|
+
|
|
6
|
+
var DEFAULT_MAX_ITERATIONS = 1e6;
|
|
7
|
+
var STANDARD_TOKEN_DATA_ABI = [
|
|
8
|
+
{ type: "string" },
|
|
9
|
+
{ type: "string" },
|
|
10
|
+
{ type: "uint256" },
|
|
11
|
+
{ type: "uint256" },
|
|
12
|
+
{ type: "address[]" },
|
|
13
|
+
{ type: "uint256[]" },
|
|
14
|
+
{ type: "string" }
|
|
15
|
+
];
|
|
16
|
+
var DOPPLER404_TOKEN_DATA_ABI = [
|
|
17
|
+
{ type: "string" },
|
|
18
|
+
{ type: "string" },
|
|
19
|
+
{ type: "string" },
|
|
20
|
+
{ type: "uint256" }
|
|
21
|
+
];
|
|
22
|
+
function normalizePrefix(prefix) {
|
|
23
|
+
const normalized = prefix.trim().toLowerCase().replace(/^0x/, "");
|
|
24
|
+
if (normalized.length === 0) {
|
|
25
|
+
throw new Error("TokenAddressMiner: prefix must contain at least one hex character");
|
|
26
|
+
}
|
|
27
|
+
if (normalized.length > 40) {
|
|
28
|
+
throw new Error("TokenAddressMiner: prefix cannot exceed 40 hex characters");
|
|
29
|
+
}
|
|
30
|
+
if (!/^[0-9a-f]+$/i.test(normalized)) {
|
|
31
|
+
throw new Error("TokenAddressMiner: prefix must be a hexadecimal string");
|
|
32
|
+
}
|
|
33
|
+
return normalized;
|
|
34
|
+
}
|
|
35
|
+
function computeCreate2Address(salt, initCodeHash, deployer) {
|
|
36
|
+
const encoded = viem.encodePacked(
|
|
37
|
+
["bytes1", "address", "bytes32", "bytes32"],
|
|
38
|
+
["0xff", deployer, salt, initCodeHash]
|
|
39
|
+
);
|
|
40
|
+
return viem.getAddress(`0x${viem.keccak256(encoded).slice(-40)}`);
|
|
41
|
+
}
|
|
42
|
+
function buildTokenInitHash(params) {
|
|
43
|
+
const { variant, tokenData, initialSupply, recipient, owner, customBytecode } = params;
|
|
44
|
+
if (variant === "doppler404") {
|
|
45
|
+
const [name2, symbol2, baseURI] = viem.decodeAbiParameters(
|
|
46
|
+
DOPPLER404_TOKEN_DATA_ABI,
|
|
47
|
+
tokenData
|
|
48
|
+
);
|
|
49
|
+
const initHashData2 = viem.encodeAbiParameters(
|
|
50
|
+
[
|
|
51
|
+
{ type: "string" },
|
|
52
|
+
{ type: "string" },
|
|
53
|
+
{ type: "uint256" },
|
|
54
|
+
{ type: "address" },
|
|
55
|
+
{ type: "address" },
|
|
56
|
+
{ type: "string" }
|
|
57
|
+
],
|
|
58
|
+
[name2, symbol2, initialSupply, recipient, owner, baseURI]
|
|
59
|
+
);
|
|
60
|
+
return viem.keccak256(
|
|
61
|
+
viem.encodePacked(
|
|
62
|
+
["bytes", "bytes"],
|
|
63
|
+
[customBytecode ?? chunkRVFSRYI5_js.DopplerDN404Bytecode, initHashData2]
|
|
64
|
+
)
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
const [
|
|
68
|
+
name,
|
|
69
|
+
symbol,
|
|
70
|
+
yearlyMintRate,
|
|
71
|
+
vestingDuration,
|
|
72
|
+
vestingRecipients,
|
|
73
|
+
vestingAmounts,
|
|
74
|
+
tokenURI
|
|
75
|
+
] = viem.decodeAbiParameters(STANDARD_TOKEN_DATA_ABI, tokenData);
|
|
76
|
+
const initHashData = viem.encodeAbiParameters(
|
|
77
|
+
[
|
|
78
|
+
{ type: "string" },
|
|
79
|
+
{ type: "string" },
|
|
80
|
+
{ type: "uint256" },
|
|
81
|
+
{ type: "address" },
|
|
82
|
+
{ type: "address" },
|
|
83
|
+
{ type: "uint256" },
|
|
84
|
+
{ type: "uint256" },
|
|
85
|
+
{ type: "address[]" },
|
|
86
|
+
{ type: "uint256[]" },
|
|
87
|
+
{ type: "string" }
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
name,
|
|
91
|
+
symbol,
|
|
92
|
+
initialSupply,
|
|
93
|
+
recipient,
|
|
94
|
+
owner,
|
|
95
|
+
yearlyMintRate,
|
|
96
|
+
vestingDuration,
|
|
97
|
+
Array.from(vestingRecipients),
|
|
98
|
+
Array.from(vestingAmounts),
|
|
99
|
+
tokenURI
|
|
100
|
+
]
|
|
101
|
+
);
|
|
102
|
+
return viem.keccak256(
|
|
103
|
+
viem.encodePacked(
|
|
104
|
+
["bytes", "bytes"],
|
|
105
|
+
[customBytecode ?? chunkRVFSRYI5_js.DERC20Bytecode, initHashData]
|
|
106
|
+
)
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
function mineTokenAddress(params) {
|
|
110
|
+
const {
|
|
111
|
+
prefix,
|
|
112
|
+
tokenFactory,
|
|
113
|
+
initialSupply,
|
|
114
|
+
recipient,
|
|
115
|
+
owner,
|
|
116
|
+
tokenData,
|
|
117
|
+
tokenVariant = "standard",
|
|
118
|
+
customBytecode,
|
|
119
|
+
maxIterations = DEFAULT_MAX_ITERATIONS,
|
|
120
|
+
startSalt = 0n,
|
|
121
|
+
hook
|
|
122
|
+
} = params;
|
|
123
|
+
if (maxIterations <= 0 || !Number.isFinite(maxIterations)) {
|
|
124
|
+
throw new Error("TokenAddressMiner: maxIterations must be a positive finite number");
|
|
125
|
+
}
|
|
126
|
+
if (startSalt < 0n) {
|
|
127
|
+
throw new Error("TokenAddressMiner: startSalt cannot be negative");
|
|
128
|
+
}
|
|
129
|
+
const normalizedPrefix = normalizePrefix(prefix);
|
|
130
|
+
const tokenInitHash = buildTokenInitHash({
|
|
131
|
+
variant: tokenVariant,
|
|
132
|
+
tokenData,
|
|
133
|
+
initialSupply,
|
|
134
|
+
recipient,
|
|
135
|
+
owner,
|
|
136
|
+
customBytecode
|
|
137
|
+
});
|
|
138
|
+
const hookConfig = hook ? {
|
|
139
|
+
deployer: hook.deployer,
|
|
140
|
+
initCodeHash: hook.initCodeHash,
|
|
141
|
+
prefix: hook.prefix ? normalizePrefix(hook.prefix) : void 0
|
|
142
|
+
} : void 0;
|
|
143
|
+
const maxSalt = startSalt + BigInt(maxIterations);
|
|
144
|
+
let iterations = 0;
|
|
145
|
+
for (let salt = startSalt; salt < maxSalt; salt++) {
|
|
146
|
+
const saltHex = `0x${salt.toString(16).padStart(64, "0")}`;
|
|
147
|
+
const candidate = computeCreate2Address(saltHex, tokenInitHash, tokenFactory);
|
|
148
|
+
iterations++;
|
|
149
|
+
if (candidate.slice(2).toLowerCase().startsWith(normalizedPrefix)) {
|
|
150
|
+
let hookAddress;
|
|
151
|
+
if (hookConfig) {
|
|
152
|
+
hookAddress = computeCreate2Address(
|
|
153
|
+
saltHex,
|
|
154
|
+
hookConfig.initCodeHash,
|
|
155
|
+
hookConfig.deployer
|
|
156
|
+
);
|
|
157
|
+
if (hookConfig.prefix && !hookAddress.slice(2).toLowerCase().startsWith(hookConfig.prefix)) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
salt: saltHex,
|
|
163
|
+
tokenAddress: candidate,
|
|
164
|
+
iterations,
|
|
165
|
+
hookAddress
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
throw new Error(
|
|
170
|
+
`TokenAddressMiner: could not find salt matching prefix ${prefix} within ${maxIterations} iterations`
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
exports.mineTokenAddress = mineTokenAddress;
|
|
175
|
+
//# sourceMappingURL=chunk-MGQSQCFG.js.map
|
|
176
|
+
//# sourceMappingURL=chunk-MGQSQCFG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/tokenAddressMiner.ts"],"names":["encodePacked","getAddress","keccak256","name","symbol","decodeAbiParameters","initHashData","encodeAbiParameters","DopplerDN404Bytecode","DERC20Bytecode"],"mappings":"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","file":"chunk-MGQSQCFG.js","sourcesContent":["import {\n type Address,\n type Hash,\n type Hex,\n encodeAbiParameters,\n encodePacked,\n keccak256,\n getAddress,\n decodeAbiParameters,\n} from 'viem'\nimport { DERC20Bytecode, DopplerDN404Bytecode } from '../abis'\n\nconst DEFAULT_MAX_ITERATIONS = 1_000_000\n\nexport type TokenVariant = 'standard' | 'doppler404'\n\nexport interface TokenAddressHookConfig {\n deployer: Address\n initCodeHash: Hash\n prefix?: string\n}\n\nexport interface TokenAddressMiningParams {\n prefix: string\n tokenFactory: Address\n initialSupply: bigint\n recipient: Address\n owner: Address\n tokenData: Hex\n tokenVariant?: TokenVariant\n customBytecode?: Hex\n maxIterations?: number\n startSalt?: bigint\n hook?: TokenAddressHookConfig\n}\n\nexport interface TokenAddressMiningResult {\n salt: Hash\n tokenAddress: Address\n iterations: number\n hookAddress?: Address\n}\n\nconst STANDARD_TOKEN_DATA_ABI = [\n { type: 'string' },\n { type: 'string' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'address[]' },\n { type: 'uint256[]' },\n { type: 'string' },\n] as const\n\nconst DOPPLER404_TOKEN_DATA_ABI = [\n { type: 'string' },\n { type: 'string' },\n { type: 'string' },\n { type: 'uint256' },\n] as const\n\nfunction normalizePrefix(prefix: string): string {\n const normalized = prefix.trim().toLowerCase().replace(/^0x/, '')\n if (normalized.length === 0) {\n throw new Error('TokenAddressMiner: prefix must contain at least one hex character')\n }\n if (normalized.length > 40) {\n throw new Error('TokenAddressMiner: prefix cannot exceed 40 hex characters')\n }\n if (!/^[0-9a-f]+$/i.test(normalized)) {\n throw new Error('TokenAddressMiner: prefix must be a hexadecimal string')\n }\n return normalized\n}\n\nfunction computeCreate2Address(salt: Hash, initCodeHash: Hash, deployer: Address): 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\nfunction buildTokenInitHash(params: {\n variant: TokenVariant\n tokenData: Hex\n initialSupply: bigint\n recipient: Address\n owner: Address\n customBytecode?: Hex\n}): Hash {\n const { variant, tokenData, initialSupply, recipient, owner, customBytecode } = params\n\n if (variant === 'doppler404') {\n const [name, symbol, baseURI] = decodeAbiParameters(\n DOPPLER404_TOKEN_DATA_ABI,\n tokenData\n ) as readonly [string, string, string, bigint | undefined]\n\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 [name, symbol, initialSupply, recipient, owner, baseURI]\n )\n\n return keccak256(\n encodePacked(\n ['bytes', 'bytes'],\n [(customBytecode ?? (DopplerDN404Bytecode as Hex)), initHashData]\n )\n ) as Hash\n }\n\n const [\n name,\n symbol,\n yearlyMintRate,\n vestingDuration,\n vestingRecipients,\n vestingAmounts,\n tokenURI,\n ] = decodeAbiParameters(STANDARD_TOKEN_DATA_ABI, tokenData) as readonly [\n string,\n string,\n bigint,\n bigint,\n readonly Address[],\n readonly bigint[],\n string\n ]\n\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 recipient,\n owner,\n yearlyMintRate,\n vestingDuration,\n Array.from(vestingRecipients),\n Array.from(vestingAmounts),\n tokenURI,\n ]\n )\n\n return keccak256(\n encodePacked(\n ['bytes', 'bytes'],\n [(customBytecode ?? (DERC20Bytecode as Hex)), initHashData]\n )\n ) as Hash\n}\n\nexport function mineTokenAddress(params: TokenAddressMiningParams): TokenAddressMiningResult {\n const {\n prefix,\n tokenFactory,\n initialSupply,\n recipient,\n owner,\n tokenData,\n tokenVariant = 'standard',\n customBytecode,\n maxIterations = DEFAULT_MAX_ITERATIONS,\n startSalt = 0n,\n hook,\n } = params\n\n if (maxIterations <= 0 || !Number.isFinite(maxIterations)) {\n throw new Error('TokenAddressMiner: maxIterations must be a positive finite number')\n }\n if (startSalt < 0n) {\n throw new Error('TokenAddressMiner: startSalt cannot be negative')\n }\n\n const normalizedPrefix = normalizePrefix(prefix)\n const tokenInitHash = buildTokenInitHash({\n variant: tokenVariant,\n tokenData,\n initialSupply,\n recipient,\n owner,\n customBytecode,\n })\n\n const hookConfig = hook\n ? {\n deployer: hook.deployer,\n initCodeHash: hook.initCodeHash,\n prefix: hook.prefix ? normalizePrefix(hook.prefix) : undefined,\n }\n : undefined\n\n const maxSalt = startSalt + BigInt(maxIterations)\n let iterations = 0\n\n for (let salt = startSalt; salt < maxSalt; salt++) {\n const saltHex = `0x${salt.toString(16).padStart(64, '0')}` as Hash\n const candidate = computeCreate2Address(saltHex, tokenInitHash, tokenFactory)\n iterations++\n if (candidate.slice(2).toLowerCase().startsWith(normalizedPrefix)) {\n let hookAddress: Address | undefined\n if (hookConfig) {\n hookAddress = computeCreate2Address(\n saltHex,\n hookConfig.initCodeHash,\n hookConfig.deployer\n )\n if (\n hookConfig.prefix &&\n !hookAddress.slice(2).toLowerCase().startsWith(hookConfig.prefix)\n ) {\n continue\n }\n }\n return {\n salt: saltHex,\n tokenAddress: candidate,\n iterations,\n hookAddress,\n }\n }\n }\n\n throw new Error(\n `TokenAddressMiner: could not find salt matching prefix ${prefix} within ${maxIterations} iterations`\n )\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-MKE3BUL3.mjs"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// src/utils/computeOptimalGamma.ts
|
|
2
|
+
function computeOptimalGamma(startTick, endTick, duration, epochLength, tickSpacing) {
|
|
3
|
+
const totalEpochs = duration / epochLength;
|
|
4
|
+
const tickDelta = Math.abs(endTick - startTick);
|
|
5
|
+
let perEpochTicks = Math.ceil(tickDelta / totalEpochs);
|
|
6
|
+
const multiples = Math.ceil(perEpochTicks / tickSpacing);
|
|
7
|
+
let gamma = multiples * tickSpacing;
|
|
8
|
+
gamma = Math.max(tickSpacing, gamma);
|
|
9
|
+
if (gamma % tickSpacing !== 0) {
|
|
10
|
+
throw new Error("Computed gamma must be divisible by tick spacing");
|
|
11
|
+
}
|
|
12
|
+
return gamma;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { computeOptimalGamma };
|
|
16
|
+
//# sourceMappingURL=chunk-MNJ5OYPE.mjs.map
|
|
17
|
+
//# sourceMappingURL=chunk-MNJ5OYPE.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/computeOptimalGamma.ts"],"names":[],"mappings":";AAMO,SAAS,mBAAA,CACd,SAAA,EACA,OAAA,EACA,QAAA,EACA,aACA,WAAA,EACQ;AAER,EAAA,MAAM,cAAc,QAAA,GAAW,WAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,OAAA,GAAU,SAAS,CAAA;AAE9C,EAAA,IAAI,aAAA,GAAgB,IAAA,CAAK,IAAA,CAAK,SAAA,GAAY,WAAW,CAAA;AAErD,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,aAAA,GAAgB,WAAW,CAAA;AACvD,EAAA,IAAI,QAAQ,SAAA,GAAY,WAAA;AAExB,EAAA,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,WAAA,EAAa,KAAK,CAAA;AACnC,EAAA,IAAI,KAAA,GAAQ,gBAAgB,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACpE;AACA,EAAA,OAAO,KAAA;AACT","file":"chunk-MNJ5OYPE.mjs","sourcesContent":["import { DAY_SECONDS } from \"../constants\"\n\n/**\n * Compute optimal gamma parameter based on price range and time parameters\n * Gamma determines how much the price can move per epoch during the sale.\n */\nexport function computeOptimalGamma(\n startTick: number,\n endTick: number,\n duration: number,\n epochLength: number,\n tickSpacing: number,\n): number {\n // Calculate total number of epochs\n const totalEpochs = duration / epochLength\n const tickDelta = Math.abs(endTick - startTick)\n // Base per-epoch movement in ticks\n let perEpochTicks = Math.ceil(tickDelta / totalEpochs)\n // Quantize up to the nearest multiple of tickSpacing\n const multiples = Math.ceil(perEpochTicks / tickSpacing)\n let gamma = multiples * tickSpacing\n // Ensure minimum of one tickSpacing\n gamma = Math.max(tickSpacing, gamma)\n if (gamma % tickSpacing !== 0) {\n throw new Error('Computed gamma must be divisible by tick spacing')\n }\n return gamma\n}"]}
|