@whetstone-research/doppler-sdk 0.0.17 → 0.0.19
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/README.md +66 -1
- package/dist/DopplerSDK.js +19 -19
- package/dist/DopplerSDK.mjs +18 -18
- package/dist/abis/index.d.mts +32 -1
- package/dist/abis/index.d.ts +32 -1
- package/dist/abis/index.js +26 -22
- package/dist/abis/index.mjs +1 -1
- package/dist/addresses.d.mts +1 -0
- package/dist/addresses.d.ts +1 -0
- package/dist/addresses.js +7 -7
- package/dist/addresses.mjs +2 -2
- package/dist/builders/DynamicAuctionBuilder.js +10 -10
- package/dist/builders/DynamicAuctionBuilder.mjs +9 -9
- package/dist/builders/MulticurveBuilder.d.mts +16 -0
- package/dist/builders/MulticurveBuilder.d.ts +16 -0
- package/dist/builders/MulticurveBuilder.js +10 -10
- package/dist/builders/MulticurveBuilder.mjs +9 -9
- package/dist/builders/StaticAuctionBuilder.js +10 -10
- package/dist/builders/StaticAuctionBuilder.mjs +9 -9
- package/dist/builders/index.js +18 -18
- package/dist/builders/index.mjs +11 -11
- package/dist/builders/shared.js +11 -11
- package/dist/builders/shared.mjs +7 -7
- package/dist/{chunk-LOVD3NCN.js → chunk-3MVW6UIW.js} +18 -2
- package/dist/chunk-3MVW6UIW.js.map +1 -0
- package/dist/{chunk-DVAQB7TB.mjs → chunk-3NFSMMBF.mjs} +3 -3
- package/dist/{chunk-DVAQB7TB.mjs.map → chunk-3NFSMMBF.mjs.map} +1 -1
- package/dist/{chunk-PBWOCVDZ.mjs → chunk-4TAAZ6W3.mjs} +248 -51
- package/dist/chunk-4TAAZ6W3.mjs.map +1 -0
- package/dist/{chunk-4DUE547M.js → chunk-6BQY5EPB.js} +4 -2
- package/dist/chunk-6BQY5EPB.js.map +1 -0
- package/dist/{chunk-HVM7KZJM.mjs → chunk-6HFZ6XMV.mjs} +4 -4
- package/dist/{chunk-HVM7KZJM.mjs.map → chunk-6HFZ6XMV.mjs.map} +1 -1
- package/dist/{chunk-EG6O2TUX.js → chunk-7Z2UGWE7.js} +26 -26
- package/dist/{chunk-EG6O2TUX.js.map → chunk-7Z2UGWE7.js.map} +1 -1
- package/dist/{chunk-O2DZH23A.mjs → chunk-CYY5IATT.mjs} +9 -5
- package/dist/chunk-CYY5IATT.mjs.map +1 -0
- package/dist/{chunk-BZKX3J3R.mjs → chunk-E2NF4AQB.mjs} +18 -3
- package/dist/chunk-E2NF4AQB.mjs.map +1 -0
- package/dist/{chunk-B4B7BXLI.js → chunk-E6ACC5S6.js} +24 -24
- package/dist/{chunk-B4B7BXLI.js.map → chunk-E6ACC5S6.js.map} +1 -1
- package/dist/{chunk-K5CV3MIH.mjs → chunk-FQ3PVXZU.mjs} +5 -5
- package/dist/{chunk-K5CV3MIH.mjs.map → chunk-FQ3PVXZU.mjs.map} +1 -1
- package/dist/{chunk-WQKBQRBS.mjs → chunk-GCT3IZ3E.mjs} +12 -12
- package/dist/{chunk-WQKBQRBS.mjs.map → chunk-GCT3IZ3E.mjs.map} +1 -1
- package/dist/{chunk-LDZCTC5Q.mjs → chunk-H5SUGQ2C.mjs} +45 -7
- package/dist/chunk-H5SUGQ2C.mjs.map +1 -0
- package/dist/{chunk-PE47QUJV.mjs → chunk-HH7HQ4HC.mjs} +3 -3
- package/dist/{chunk-PE47QUJV.mjs.map → chunk-HH7HQ4HC.mjs.map} +1 -1
- package/dist/{chunk-LXUF7RNX.mjs → chunk-IWJOPXYN.mjs} +4 -3
- package/dist/chunk-IWJOPXYN.mjs.map +1 -0
- package/dist/{chunk-MBOKYN2Y.js → chunk-K3TEDYUG.js} +20 -20
- package/dist/{chunk-MBOKYN2Y.js.map → chunk-K3TEDYUG.js.map} +1 -1
- package/dist/{chunk-NVVEUALG.mjs → chunk-MH74WYVZ.mjs} +5 -5
- package/dist/{chunk-NVVEUALG.mjs.map → chunk-MH74WYVZ.mjs.map} +1 -1
- package/dist/{chunk-ZVH7VBH5.mjs → chunk-N74ICDSX.mjs} +118 -20
- package/dist/chunk-N74ICDSX.mjs.map +1 -0
- package/dist/{chunk-C7GN6GPG.js → chunk-OROTK4OT.js} +51 -27
- package/dist/chunk-OROTK4OT.js.map +1 -0
- package/dist/{chunk-Z7ZGPSQF.js → chunk-P4BT5GDO.js} +76 -72
- package/dist/chunk-P4BT5GDO.js.map +1 -0
- package/dist/{chunk-YBDWQTUH.mjs → chunk-QFQXHDC7.mjs} +76 -9
- package/dist/chunk-QFQXHDC7.mjs.map +1 -0
- package/dist/{chunk-RKJ2466C.mjs → chunk-QOGBOT2M.mjs} +3 -3
- package/dist/{chunk-RKJ2466C.mjs.map → chunk-QOGBOT2M.mjs.map} +1 -1
- package/dist/{chunk-3ALNQHGL.js → chunk-RLUMYHPI.js} +76 -9
- package/dist/chunk-RLUMYHPI.js.map +1 -0
- package/dist/{chunk-5FJCRKQ6.js → chunk-RXUJ4DUB.js} +28 -28
- package/dist/{chunk-5FJCRKQ6.js.map → chunk-RXUJ4DUB.js.map} +1 -1
- package/dist/{chunk-MGLI4N4B.js → chunk-SAX7P3MH.js} +22 -22
- package/dist/{chunk-MGLI4N4B.js.map → chunk-SAX7P3MH.js.map} +1 -1
- package/dist/{chunk-3ORKVXQL.js → chunk-TJCMFITE.js} +27 -27
- package/dist/{chunk-3ORKVXQL.js.map → chunk-TJCMFITE.js.map} +1 -1
- package/dist/{chunk-TL7U67CX.js → chunk-UIPSHVT4.js} +11 -11
- package/dist/{chunk-TL7U67CX.js.map → chunk-UIPSHVT4.js.map} +1 -1
- package/dist/{chunk-5ZPBKSNS.mjs → chunk-UY4TVYEU.mjs} +3 -3
- package/dist/{chunk-5ZPBKSNS.mjs.map → chunk-UY4TVYEU.mjs.map} +1 -1
- package/dist/{chunk-PQUS2LCD.js → chunk-UZTVXZP3.js} +16 -16
- package/dist/{chunk-PQUS2LCD.js.map → chunk-UZTVXZP3.js.map} +1 -1
- package/dist/{chunk-HMZEYBFO.mjs → chunk-V32Q2S3U.mjs} +4 -4
- package/dist/{chunk-HMZEYBFO.mjs.map → chunk-V32Q2S3U.mjs.map} +1 -1
- package/dist/{chunk-7F4O7NPS.js → chunk-V5GPJ6S2.js} +26 -26
- package/dist/{chunk-7F4O7NPS.js.map → chunk-V5GPJ6S2.js.map} +1 -1
- package/dist/{chunk-DOWDXOTK.mjs → chunk-VGCXJRUV.mjs} +51 -27
- package/dist/chunk-VGCXJRUV.mjs.map +1 -0
- package/dist/{chunk-J32XSN44.js → chunk-WYRM5BAI.js} +344 -147
- package/dist/chunk-WYRM5BAI.js.map +1 -0
- package/dist/{chunk-OUUFER2X.mjs → chunk-X7FRTHUL.mjs} +4 -4
- package/dist/{chunk-OUUFER2X.mjs.map → chunk-X7FRTHUL.mjs.map} +1 -1
- package/dist/{chunk-E54BP2GN.js → chunk-Y6VZD4C6.js} +53 -15
- package/dist/chunk-Y6VZD4C6.js.map +1 -0
- package/dist/{chunk-5MP6AMPB.js → chunk-YFJUIO2A.js} +132 -34
- package/dist/chunk-YFJUIO2A.js.map +1 -0
- package/dist/{chunk-WHQHXYPB.js → chunk-YKRDFXU3.js} +5 -5
- package/dist/{chunk-WHQHXYPB.js.map → chunk-YKRDFXU3.js.map} +1 -1
- package/dist/constants.d.mts +7 -1
- package/dist/constants.d.ts +7 -1
- package/dist/constants.js +51 -47
- package/dist/constants.mjs +1 -1
- package/dist/deployments.generated.d.mts +72 -5
- package/dist/deployments.generated.d.ts +72 -5
- package/dist/deployments.generated.js +2 -2
- package/dist/deployments.generated.mjs +1 -1
- package/dist/entities/DopplerFactory.d.mts +2 -0
- package/dist/entities/DopplerFactory.d.ts +2 -0
- package/dist/entities/DopplerFactory.js +8 -8
- package/dist/entities/DopplerFactory.mjs +7 -7
- package/dist/entities/auction/DynamicAuction.js +5 -5
- package/dist/entities/auction/DynamicAuction.mjs +4 -4
- package/dist/entities/auction/MulticurvePool.d.mts +9 -3
- package/dist/entities/auction/MulticurvePool.d.ts +9 -3
- package/dist/entities/auction/MulticurvePool.js +7 -6
- package/dist/entities/auction/MulticurvePool.mjs +6 -5
- package/dist/entities/auction/StaticAuction.js +5 -5
- package/dist/entities/auction/StaticAuction.mjs +4 -4
- package/dist/entities/auction/index.js +11 -10
- package/dist/entities/auction/index.mjs +8 -7
- package/dist/entities/quoter/Quoter.js +5 -5
- package/dist/entities/quoter/Quoter.mjs +4 -4
- package/dist/entities/quoter/index.js +5 -5
- package/dist/entities/quoter/index.mjs +4 -4
- package/dist/entities/token/derc20/Derc20.js +3 -3
- package/dist/entities/token/derc20/Derc20.mjs +2 -2
- package/dist/entities/token/derc20/index.js +3 -3
- package/dist/entities/token/derc20/index.mjs +2 -2
- package/dist/entities/token/index.js +3 -3
- package/dist/entities/token/index.mjs +2 -2
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +110 -102
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +18 -18
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.mts +32 -1
- package/dist/types.d.ts +32 -1
- package/dist/types.js +8 -8
- package/dist/types.mjs +3 -3
- package/dist/utils/airlock.js +7 -7
- package/dist/utils/airlock.mjs +3 -3
- package/dist/utils/index.js +10 -10
- package/dist/utils/index.mjs +5 -5
- package/dist/utils/tokenAddressMiner.d.mts +7 -0
- package/dist/utils/tokenAddressMiner.d.ts +7 -0
- package/dist/utils/tokenAddressMiner.js +3 -3
- package/dist/utils/tokenAddressMiner.mjs +2 -2
- package/package.json +1 -1
- package/dist/chunk-3ALNQHGL.js.map +0 -1
- package/dist/chunk-4DUE547M.js.map +0 -1
- package/dist/chunk-5MP6AMPB.js.map +0 -1
- package/dist/chunk-BZKX3J3R.mjs.map +0 -1
- package/dist/chunk-C7GN6GPG.js.map +0 -1
- package/dist/chunk-DOWDXOTK.mjs.map +0 -1
- package/dist/chunk-E54BP2GN.js.map +0 -1
- package/dist/chunk-J32XSN44.js.map +0 -1
- package/dist/chunk-LDZCTC5Q.mjs.map +0 -1
- package/dist/chunk-LOVD3NCN.js.map +0 -1
- package/dist/chunk-LXUF7RNX.mjs.map +0 -1
- package/dist/chunk-O2DZH23A.mjs.map +0 -1
- package/dist/chunk-PBWOCVDZ.mjs.map +0 -1
- package/dist/chunk-YBDWQTUH.mjs.map +0 -1
- package/dist/chunk-Z7ZGPSQF.js.map +0 -1
- package/dist/chunk-ZVH7VBH5.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getAddresses } from './chunk-
|
|
2
|
-
import { uniswapV3PoolAbi, airlockAbi } from './chunk-
|
|
1
|
+
import { getAddresses } from './chunk-CYY5IATT.mjs';
|
|
2
|
+
import { uniswapV3PoolAbi, airlockAbi } from './chunk-E2NF4AQB.mjs';
|
|
3
3
|
import { zeroAddress } from 'viem';
|
|
4
4
|
|
|
5
5
|
var StaticAuction = class {
|
|
@@ -137,5 +137,5 @@ var StaticAuction = class {
|
|
|
137
137
|
};
|
|
138
138
|
|
|
139
139
|
export { StaticAuction };
|
|
140
|
-
//# sourceMappingURL=chunk-
|
|
141
|
-
//# sourceMappingURL=chunk-
|
|
140
|
+
//# sourceMappingURL=chunk-V32Q2S3U.mjs.map
|
|
141
|
+
//# sourceMappingURL=chunk-V32Q2S3U.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/entities/auction/StaticAuction.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/entities/auction/StaticAuction.ts"],"names":[],"mappings":";;;;AAWO,IAAM,gBAAN,MAAoB;AAAA,EAGzB,IAAY,GAAA,GAAoB;AAC9B,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EAEA,WAAA,CAAY,QAA+B,WAAA,EAAsB;AAC/D,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAsB;AACpB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,GAAiC;AAErC,IAAA,MAAM,CAAC,OAAO,SAAA,EAAW,MAAA,EAAQ,QAAQ,GAAG,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAA,CAAI;AAAA,MAChE,IAAA,CAAK,IAAI,YAAA,CAAa;AAAA,QACpB,SAAS,IAAA,CAAK,WAAA;AAAA,QACd,GAAA,EAAK,gBAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,IAAI,YAAA,CAAa;AAAA,QACpB,SAAS,IAAA,CAAK,WAAA;AAAA,QACd,GAAA,EAAK,gBAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,IAAI,YAAA,CAAa;AAAA,QACpB,SAAS,IAAA,CAAK,WAAA;AAAA,QACd,GAAA,EAAK,gBAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,IAAI,YAAA,CAAa;AAAA,QACpB,SAAS,IAAA,CAAK,WAAA;AAAA,QACd,GAAA,EAAK,gBAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,IAAI,YAAA,CAAa;AAAA,QACpB,SAAS,IAAA,CAAK,WAAA;AAAA,QACd,GAAA,EAAK,gBAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf;AAAA,KACF,CAAA;AAID,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,EAAW;AAC1C,IAAA,MAAM,SAAA,GAAY,aAAa,OAAO,CAAA;AAEtC,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa;AAAA,MAC5C,SAAS,SAAA,CAAU,OAAA;AAAA,MACnB,GAAA,EAAK,UAAA;AAAA,MACL,YAAA,EAAc,cAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAM;AAAA,KACd,CAAA;AAKD,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC5B,MAAA,WAAA,GAAc,UAAU,CAAC,CAAA;AAAA,IAC3B,CAAA,MAAA,IAAW,SAAA,IAAa,OAAO,SAAA,KAAc,QAAA,EAAU;AACrD,MAAA,WAAA,GAAe,SAAA,CAAkB,cAAe,SAAA,CAAkB,IAAA;AAAA,IACpE;AACA,IAAA,MAAM,oBAAA,GAAuB,eAAe,WAAA,KAAgB,WAAA;AAE5D,IAAA,OAAO;AAAA,MACL,SAAS,IAAA,CAAK,WAAA;AAAA,MACd,YAAA,EAAc,uBAAuB,MAAA,GAAS,MAAA;AAAA,MAC9C,gBAAA,EAAkB,uBAAuB,MAAA,GAAS,MAAA;AAAA,MAClD,GAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA,EAAc,MAAM,CAAC;AAAA;AAAA,KACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAA,GAAoC;AACxC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,EAAY;AACxC,IAAA,OAAO,QAAA,CAAS,YAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,GAAiC;AACrC,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,eAAA,EAAgB;AAChD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,EAAW;AAC1C,IAAA,MAAM,SAAA,GAAY,aAAa,OAAO,CAAA;AAEtC,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa;AAAA,MAC5C,SAAS,SAAA,CAAU,OAAA;AAAA,MACnB,GAAA,EAAK,UAAA;AAAA,MACL,YAAA,EAAc,cAAA;AAAA,MACd,IAAA,EAAM,CAAC,YAAY;AAAA,KACpB,CAAA;AAED,IAAA,MAAM,iBAAA,GAAoB,MAAM,OAAA,CAAQ,SAAS,IAC5C,SAAA,CAAkB,CAAC,IACnB,SAAA,EAAmB,iBAAA;AACxB,IAAA,OAAO,iBAAA,KAAsB,WAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAA,GAAmC;AACvC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,EAAY;AAGxC,IAAA,MAAM,CAAC,MAAM,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MACjC,IAAA,CAAK,IAAI,YAAA,CAAa;AAAA,QACpB,SAAS,IAAA,CAAK,WAAA;AAAA,QACd,GAAA,EAAK,gBAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,IAAI,YAAA,CAAa;AAAA,QACpB,SAAS,IAAA,CAAK,WAAA;AAAA,QACd,GAAA,EAAK,gBAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf;AAAA,KACF,CAAA;AAKD,IAAA,MAAM,eAAe,QAAA,CAAS,YAAA;AAC9B,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,CAAC,CAAA,IAAK,OAAO,EAAE,CAAA;AAGlC,IAAA,MAAM,sBAAsB,YAAA,GAAe,YAAA;AAC3C,IAAA,MAAM,aAAa,GAAA,GAAM,GAAA;AACzB,IAAA,MAAM,SAAS,mBAAA,GAAsB,UAAA;AAGrC,IAAA,IAAI,QAAA,CAAS,iBAAiB,MAAA,EAAQ;AAEpC,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,MAAO;AAGL,MAAA,OAAO,UAAA,GAAa,MAAA;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,GAAqC;AACzC,IAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa;AAAA,MACjC,SAAS,IAAA,CAAK,WAAA;AAAA,MACd,GAAA,EAAK,gBAAA;AAAA,MACL,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH;AACF","file":"chunk-V32Q2S3U.mjs","sourcesContent":["import { type Address, zeroAddress, type PublicClient } from 'viem';\nimport type { PoolInfo, SupportedPublicClient } from '../../types';\nimport { uniswapV3PoolAbi, airlockAbi } from '../../abis';\nimport { getAddresses } from '../../addresses';\n\n/**\n * StaticAuction class for interacting with static auctions (Uniswap V3 based)\n *\n * Static auctions use a fixed price range on Uniswap V3 for initial liquidity bootstrapping.\n * This is ideal for simple, predictable price discovery events.\n */\nexport class StaticAuction {\n private client: SupportedPublicClient;\n private poolAddress: Address;\n private get rpc(): PublicClient {\n return this.client as PublicClient;\n }\n\n constructor(client: SupportedPublicClient, poolAddress: Address) {\n this.client = client;\n this.poolAddress = poolAddress;\n }\n\n /**\n * Get the pool address\n */\n getAddress(): Address {\n return this.poolAddress;\n }\n\n /**\n * Get current pool information\n */\n async getPoolInfo(): Promise<PoolInfo> {\n // Fetch all pool data in parallel\n const [slot0, liquidity, token0, token1, fee] = await Promise.all([\n this.rpc.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'slot0',\n }),\n this.rpc.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'liquidity',\n }),\n this.rpc.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'token0',\n }),\n this.rpc.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'token1',\n }),\n this.rpc.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'fee',\n }),\n ]);\n\n // Determine which token is the auction token and which is numeraire\n // This requires checking with the Airlock contract\n const chainId = await this.rpc.getChainId();\n const addresses = getAddresses(chainId);\n\n const assetData = await this.rpc.readContract({\n address: addresses.airlock,\n abi: airlockAbi,\n functionName: 'getAssetData',\n args: [token0],\n });\n // Determine whether token0 is the auction token.\n // Handle both tuple and object return shapes from getAssetData.\n // Tuple (legacy): [numeraire, timelock, governance, liquidityMigrator, poolInitializer, pool, ...]\n // Object (unified): { poolOrHook, liquidityMigrator, numeraire, ... }\n let poolOrHook0: any;\n if (Array.isArray(assetData)) {\n poolOrHook0 = assetData[5];\n } else if (assetData && typeof assetData === 'object') {\n poolOrHook0 = (assetData as any).poolOrHook ?? (assetData as any).pool;\n }\n const isToken0AuctionToken = poolOrHook0 && poolOrHook0 !== zeroAddress;\n\n return {\n address: this.poolAddress,\n tokenAddress: isToken0AuctionToken ? token0 : token1,\n numeraireAddress: isToken0AuctionToken ? token1 : token0,\n fee,\n liquidity,\n sqrtPriceX96: slot0[0], // First element is sqrtPriceX96\n };\n }\n\n /**\n * Get the token address for this auction\n */\n async getTokenAddress(): Promise<Address> {\n const poolInfo = await this.getPoolInfo();\n return poolInfo.tokenAddress;\n }\n\n /**\n * Check if the auction has graduated (ready for migration)\n */\n async hasGraduated(): Promise<boolean> {\n const tokenAddress = await this.getTokenAddress();\n const chainId = await this.rpc.getChainId();\n const addresses = getAddresses(chainId);\n\n const assetData = await this.rpc.readContract({\n address: addresses.airlock,\n abi: airlockAbi,\n functionName: 'getAssetData',\n args: [tokenAddress],\n });\n // Check if the asset is graduated (liquidityMigrator is zero)\n const liquidityMigrator = Array.isArray(assetData)\n ? (assetData as any)[3]\n : (assetData as any)?.liquidityMigrator;\n return liquidityMigrator === zeroAddress;\n }\n\n /**\n * Get the current price in the pool\n * Returns the price of token in terms of numeraire (token/numeraire)\n */\n async getCurrentPrice(): Promise<bigint> {\n const poolInfo = await this.getPoolInfo();\n\n // Get token ordering\n const [token0] = await Promise.all([\n this.rpc.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'token0',\n }),\n this.rpc.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'token1',\n }),\n ]);\n\n // Calculate price from sqrtPriceX96\n // sqrtPriceX96 = sqrt(price) * 2^96\n // price = (sqrtPriceX96 / 2^96)^2\n const sqrtPriceX96 = poolInfo.sqrtPriceX96;\n const Q96 = BigInt(2) ** BigInt(96);\n\n // price0 = amount of token1 per token0\n const sqrtPriceX96Squared = sqrtPriceX96 * sqrtPriceX96;\n const Q96Squared = Q96 * Q96;\n const price0 = sqrtPriceX96Squared / Q96Squared;\n\n // Return price based on which token is the auction token\n if (poolInfo.tokenAddress === token0) {\n // Auction token is token0, return price in terms of token1 (numeraire)\n return price0;\n } else {\n // Auction token is token1, return reciprocal price\n // price1 = 1 / price0 (with precision handling)\n return Q96Squared / price0;\n }\n }\n\n /**\n * Get total liquidity in the pool\n */\n async getTotalLiquidity(): Promise<bigint> {\n return await this.rpc.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'liquidity',\n });\n }\n}\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
3
|
+
var chunkK3TEDYUG_js = require('./chunk-K3TEDYUG.js');
|
|
4
|
+
var chunkRXUJ4DUB_js = require('./chunk-RXUJ4DUB.js');
|
|
5
|
+
var chunk7Z2UGWE7_js = require('./chunk-7Z2UGWE7.js');
|
|
6
|
+
var chunkY6VZD4C6_js = require('./chunk-Y6VZD4C6.js');
|
|
7
|
+
var chunkUZTVXZP3_js = require('./chunk-UZTVXZP3.js');
|
|
8
|
+
var chunkE6ACC5S6_js = require('./chunk-E6ACC5S6.js');
|
|
9
|
+
var chunkYFJUIO2A_js = require('./chunk-YFJUIO2A.js');
|
|
10
|
+
var chunkTJCMFITE_js = require('./chunk-TJCMFITE.js');
|
|
11
|
+
var chunkWYRM5BAI_js = require('./chunk-WYRM5BAI.js');
|
|
12
|
+
var chunkYKRDFXU3_js = require('./chunk-YKRDFXU3.js');
|
|
13
13
|
|
|
14
14
|
// src/DopplerSDK.ts
|
|
15
15
|
var DopplerSDK = class {
|
|
@@ -23,7 +23,7 @@ var DopplerSDK = class {
|
|
|
23
23
|
*/
|
|
24
24
|
get factory() {
|
|
25
25
|
if (!this._factory) {
|
|
26
|
-
this._factory = new
|
|
26
|
+
this._factory = new chunkWYRM5BAI_js.DopplerFactory(
|
|
27
27
|
this.publicClient,
|
|
28
28
|
this.walletClient,
|
|
29
29
|
this.chainId
|
|
@@ -36,7 +36,7 @@ var DopplerSDK = class {
|
|
|
36
36
|
*/
|
|
37
37
|
get quoter() {
|
|
38
38
|
if (!this._quoter) {
|
|
39
|
-
this._quoter = new
|
|
39
|
+
this._quoter = new chunkK3TEDYUG_js.Quoter(this.publicClient, this.chainId);
|
|
40
40
|
}
|
|
41
41
|
return this._quoter;
|
|
42
42
|
}
|
|
@@ -45,21 +45,21 @@ var DopplerSDK = class {
|
|
|
45
45
|
* @param poolAddress The address of the Uniswap V3 pool
|
|
46
46
|
*/
|
|
47
47
|
async getStaticAuction(poolAddress) {
|
|
48
|
-
return new
|
|
48
|
+
return new chunkUZTVXZP3_js.StaticAuction(this.publicClient, poolAddress);
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
51
|
* Get a DynamicAuction instance for interacting with a dynamic auction hook
|
|
52
52
|
* @param hookAddress The address of the Uniswap V4 hook
|
|
53
53
|
*/
|
|
54
54
|
async getDynamicAuction(hookAddress) {
|
|
55
|
-
return new
|
|
55
|
+
return new chunk7Z2UGWE7_js.DynamicAuction(this.publicClient, hookAddress);
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
58
58
|
* Get a MulticurvePool instance for interacting with a V4 multicurve pool
|
|
59
59
|
* @param tokenAddress The address of the token created by the auction (called "asset" in contracts; V4 pools don't have addresses, so the token is used as the lookup key)
|
|
60
60
|
*/
|
|
61
61
|
async getMulticurvePool(tokenAddress) {
|
|
62
|
-
return new
|
|
62
|
+
return new chunkY6VZD4C6_js.MulticurvePool(
|
|
63
63
|
this.publicClient,
|
|
64
64
|
this.walletClient,
|
|
65
65
|
tokenAddress
|
|
@@ -70,14 +70,14 @@ var DopplerSDK = class {
|
|
|
70
70
|
* @param tokenAddress The address of the DERC20 token
|
|
71
71
|
*/
|
|
72
72
|
getDerc20(tokenAddress) {
|
|
73
|
-
return new
|
|
73
|
+
return new chunkRXUJ4DUB_js.Derc20(this.publicClient, this.walletClient, tokenAddress);
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
76
|
* Get information about a static auction pool
|
|
77
77
|
* @param poolAddress The address of the pool
|
|
78
78
|
*/
|
|
79
79
|
async getPoolInfo(poolAddress) {
|
|
80
|
-
const auction = new
|
|
80
|
+
const auction = new chunkUZTVXZP3_js.StaticAuction(this.publicClient, poolAddress);
|
|
81
81
|
return auction.getPoolInfo();
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
@@ -85,26 +85,26 @@ var DopplerSDK = class {
|
|
|
85
85
|
* @param hookAddress The address of the hook
|
|
86
86
|
*/
|
|
87
87
|
async getHookInfo(hookAddress) {
|
|
88
|
-
const auction = new
|
|
88
|
+
const auction = new chunk7Z2UGWE7_js.DynamicAuction(this.publicClient, hookAddress);
|
|
89
89
|
return auction.getHookInfo();
|
|
90
90
|
}
|
|
91
91
|
/**
|
|
92
92
|
* Create a new static auction builder
|
|
93
93
|
*/
|
|
94
94
|
buildStaticAuction() {
|
|
95
|
-
return new
|
|
95
|
+
return new chunkTJCMFITE_js.StaticAuctionBuilder(this.chainId);
|
|
96
96
|
}
|
|
97
97
|
/**
|
|
98
98
|
* Create a new dynamic auction builder
|
|
99
99
|
*/
|
|
100
100
|
buildDynamicAuction() {
|
|
101
|
-
return new
|
|
101
|
+
return new chunkE6ACC5S6_js.DynamicAuctionBuilder(this.chainId);
|
|
102
102
|
}
|
|
103
103
|
/**
|
|
104
104
|
* Create a new multicurve (V4 initializer) auction builder
|
|
105
105
|
*/
|
|
106
106
|
buildMulticurveAuction() {
|
|
107
|
-
return new
|
|
107
|
+
return new chunkYFJUIO2A_js.MulticurveBuilder(this.chainId);
|
|
108
108
|
}
|
|
109
109
|
/**
|
|
110
110
|
* Get the current chain ID
|
|
@@ -125,16 +125,16 @@ var DopplerSDK = class {
|
|
|
125
125
|
* Get the airlock owner address for the configured chain
|
|
126
126
|
*/
|
|
127
127
|
async getAirlockOwner() {
|
|
128
|
-
return
|
|
128
|
+
return chunkYKRDFXU3_js.getAirlockOwner(this.publicClient);
|
|
129
129
|
}
|
|
130
130
|
/**
|
|
131
131
|
* Convenience helper for building the airlock beneficiary entry with the default 5% (0.05e18 WAD shares)
|
|
132
132
|
*/
|
|
133
|
-
async getAirlockBeneficiary(shares =
|
|
134
|
-
return
|
|
133
|
+
async getAirlockBeneficiary(shares = chunkYKRDFXU3_js.DEFAULT_AIRLOCK_BENEFICIARY_SHARES) {
|
|
134
|
+
return chunkYKRDFXU3_js.getAirlockBeneficiary(this.publicClient, shares);
|
|
135
135
|
}
|
|
136
136
|
};
|
|
137
137
|
|
|
138
138
|
exports.DopplerSDK = DopplerSDK;
|
|
139
|
-
//# sourceMappingURL=chunk-
|
|
140
|
-
//# sourceMappingURL=chunk-
|
|
139
|
+
//# sourceMappingURL=chunk-V5GPJ6S2.js.map
|
|
140
|
+
//# sourceMappingURL=chunk-V5GPJ6S2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/DopplerSDK.ts"],"names":["DopplerFactory","Quoter","StaticAuction","DynamicAuction","MulticurvePool","Derc20","StaticAuctionBuilder","DynamicAuctionBuilder","MulticurveBuilder","getAirlockOwner","DEFAULT_AIRLOCK_BENEFICIARY_SHARES","getAirlockBeneficiary"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/DopplerSDK.ts"],"names":["DopplerFactory","Quoter","StaticAuction","DynamicAuction","MulticurvePool","Derc20","StaticAuctionBuilder","DynamicAuctionBuilder","MulticurveBuilder","getAirlockOwner","DEFAULT_AIRLOCK_BENEFICIARY_SHARES","getAirlockBeneficiary"],"mappings":"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","file":"chunk-V5GPJ6S2.js","sourcesContent":["import type { Address, WalletClient } from 'viem';\nimport type {\n BeneficiaryData,\n DopplerSDKConfig,\n HookInfo,\n PoolInfo,\n SupportedPublicClient,\n} from './types';\nimport type { SupportedChainId } from './addresses';\nimport { DopplerFactory } from './entities/DopplerFactory';\nimport {\n StaticAuction,\n DynamicAuction,\n MulticurvePool,\n} from './entities/auction';\nimport { Quoter } from './entities/quoter';\nimport { Derc20 } from './entities/token';\nimport {\n StaticAuctionBuilder,\n DynamicAuctionBuilder,\n MulticurveBuilder,\n} from './builders';\nimport {\n DEFAULT_AIRLOCK_BENEFICIARY_SHARES,\n getAirlockBeneficiary,\n getAirlockOwner as fetchAirlockOwner,\n} from './utils/airlock';\n\nexport class DopplerSDK<C extends SupportedChainId = SupportedChainId> {\n private publicClient: SupportedPublicClient;\n private walletClient?: WalletClient;\n public chainId: C;\n private _factory?: DopplerFactory<C>;\n private _quoter?: Quoter;\n\n constructor(config: DopplerSDKConfig) {\n this.publicClient = config.publicClient;\n this.walletClient = config.walletClient;\n this.chainId = config.chainId as unknown as C;\n }\n\n /**\n * Get the factory instance for creating auctions\n */\n get factory(): DopplerFactory<C> {\n if (!this._factory) {\n this._factory = new DopplerFactory(\n this.publicClient,\n this.walletClient,\n this.chainId,\n );\n }\n return this._factory;\n }\n\n /**\n * Get the quoter instance for price queries\n */\n get quoter(): Quoter {\n if (!this._quoter) {\n this._quoter = new Quoter(this.publicClient, this.chainId);\n }\n return this._quoter;\n }\n\n /**\n * Get a StaticAuction instance for interacting with a static auction pool\n * @param poolAddress The address of the Uniswap V3 pool\n */\n async getStaticAuction(poolAddress: Address): Promise<StaticAuction> {\n return new StaticAuction(this.publicClient, poolAddress);\n }\n\n /**\n * Get a DynamicAuction instance for interacting with a dynamic auction hook\n * @param hookAddress The address of the Uniswap V4 hook\n */\n async getDynamicAuction(hookAddress: Address): Promise<DynamicAuction> {\n return new DynamicAuction(this.publicClient, hookAddress);\n }\n\n /**\n * Get a MulticurvePool instance for interacting with a V4 multicurve pool\n * @param tokenAddress The address of the token created by the auction (called \"asset\" in contracts; V4 pools don't have addresses, so the token is used as the lookup key)\n */\n async getMulticurvePool(tokenAddress: Address): Promise<MulticurvePool> {\n return new MulticurvePool(\n this.publicClient,\n this.walletClient,\n tokenAddress,\n );\n }\n\n /**\n * Get a DERC20 token instance for interacting with a token\n * @param tokenAddress The address of the DERC20 token\n */\n getDerc20(tokenAddress: Address): Derc20 {\n return new Derc20(this.publicClient, this.walletClient, tokenAddress);\n }\n\n /**\n * Get information about a static auction pool\n * @param poolAddress The address of the pool\n */\n async getPoolInfo(poolAddress: Address): Promise<PoolInfo> {\n const auction = new StaticAuction(this.publicClient, poolAddress);\n return auction.getPoolInfo();\n }\n\n /**\n * Get information about a dynamic auction hook\n * @param hookAddress The address of the hook\n */\n async getHookInfo(hookAddress: Address): Promise<HookInfo> {\n const auction = new DynamicAuction(this.publicClient, hookAddress);\n return auction.getHookInfo();\n }\n\n /**\n * Create a new static auction builder\n */\n buildStaticAuction(): StaticAuctionBuilder<C> {\n return new StaticAuctionBuilder(this.chainId);\n }\n\n /**\n * Create a new dynamic auction builder\n */\n buildDynamicAuction(): DynamicAuctionBuilder<C> {\n return new DynamicAuctionBuilder(this.chainId);\n }\n\n /**\n * Create a new multicurve (V4 initializer) auction builder\n */\n buildMulticurveAuction(): MulticurveBuilder<C> {\n return new MulticurveBuilder(this.chainId);\n }\n\n /**\n * Get the current chain ID\n */\n getChainId(): C {\n return this.chainId;\n }\n\n /**\n * Get the underlying clients\n */\n getClients(): {\n publicClient: SupportedPublicClient;\n walletClient?: WalletClient;\n } {\n return {\n publicClient: this.publicClient,\n walletClient: this.walletClient,\n };\n }\n\n /**\n * Get the airlock owner address for the configured chain\n */\n async getAirlockOwner(): Promise<Address> {\n return fetchAirlockOwner(this.publicClient);\n }\n\n /**\n * Convenience helper for building the airlock beneficiary entry with the default 5% (0.05e18 WAD shares)\n */\n async getAirlockBeneficiary(\n shares: bigint = DEFAULT_AIRLOCK_BENEFICIARY_SHARES,\n ): Promise<BeneficiaryData> {\n return getAirlockBeneficiary(this.publicClient, shares);\n }\n}\n"]}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { derc20_default } from './chunk-64ZQRKG3.mjs';
|
|
2
|
+
import { derc2080_default } from './chunk-LPA32BIK.mjs';
|
|
2
3
|
import { dopplerDN404_default } from './chunk-WDSV4O6T.mjs';
|
|
3
4
|
import { getAddress, decodeAbiParameters, encodeAbiParameters, keccak256, encodePacked } from 'viem';
|
|
4
5
|
|
|
5
6
|
var DEFAULT_MAX_ITERATIONS = 1e6;
|
|
7
|
+
var TOKEN_FACTORY_80_ADDRESS = "0xf0B5141dD9096254B2ca624dff26024f46087229";
|
|
8
|
+
function isTokenFactory80(tokenFactory) {
|
|
9
|
+
return tokenFactory.toLowerCase() === TOKEN_FACTORY_80_ADDRESS.toLowerCase();
|
|
10
|
+
}
|
|
6
11
|
var STANDARD_TOKEN_DATA_ABI = [
|
|
7
12
|
{ type: "string" },
|
|
8
13
|
{ type: "string" },
|
|
@@ -18,20 +23,22 @@ var DOPPLER404_TOKEN_DATA_ABI = [
|
|
|
18
23
|
{ type: "string" },
|
|
19
24
|
{ type: "uint256" }
|
|
20
25
|
];
|
|
21
|
-
function
|
|
22
|
-
const normalized =
|
|
26
|
+
function normalizeHexFragment(value, label) {
|
|
27
|
+
const normalized = value.trim().toLowerCase().replace(/^0x/, "");
|
|
23
28
|
if (normalized.length === 0) {
|
|
24
29
|
throw new Error(
|
|
25
|
-
|
|
30
|
+
`TokenAddressMiner: ${label} must contain at least one hex character`
|
|
26
31
|
);
|
|
27
32
|
}
|
|
28
33
|
if (normalized.length > 40) {
|
|
29
34
|
throw new Error(
|
|
30
|
-
|
|
35
|
+
`TokenAddressMiner: ${label} cannot exceed 40 hex characters`
|
|
31
36
|
);
|
|
32
37
|
}
|
|
33
38
|
if (!/^[0-9a-f]+$/i.test(normalized)) {
|
|
34
|
-
throw new Error(
|
|
39
|
+
throw new Error(
|
|
40
|
+
`TokenAddressMiner: ${label} must be a hexadecimal string`
|
|
41
|
+
);
|
|
35
42
|
}
|
|
36
43
|
return normalized;
|
|
37
44
|
}
|
|
@@ -72,6 +79,7 @@ function computeCreate2AddressFast(buffer) {
|
|
|
72
79
|
function buildTokenInitHash(params) {
|
|
73
80
|
const {
|
|
74
81
|
variant,
|
|
82
|
+
tokenFactory,
|
|
75
83
|
tokenData,
|
|
76
84
|
initialSupply,
|
|
77
85
|
recipient,
|
|
@@ -136,16 +144,18 @@ function buildTokenInitHash(params) {
|
|
|
136
144
|
tokenURI
|
|
137
145
|
]
|
|
138
146
|
);
|
|
147
|
+
const defaultBytecode = isTokenFactory80(tokenFactory) ? derc2080_default : derc20_default;
|
|
139
148
|
return keccak256(
|
|
140
149
|
encodePacked(
|
|
141
150
|
["bytes", "bytes"],
|
|
142
|
-
[customBytecode ??
|
|
151
|
+
[customBytecode ?? defaultBytecode, initHashData]
|
|
143
152
|
)
|
|
144
153
|
);
|
|
145
154
|
}
|
|
146
155
|
function mineTokenAddress(params) {
|
|
147
156
|
const {
|
|
148
157
|
prefix,
|
|
158
|
+
suffix,
|
|
149
159
|
tokenFactory,
|
|
150
160
|
initialSupply,
|
|
151
161
|
recipient,
|
|
@@ -165,9 +175,16 @@ function mineTokenAddress(params) {
|
|
|
165
175
|
if (startSalt < 0n) {
|
|
166
176
|
throw new Error("TokenAddressMiner: startSalt cannot be negative");
|
|
167
177
|
}
|
|
168
|
-
const
|
|
178
|
+
const prefixTrimmed = prefix.trim();
|
|
179
|
+
const suffixTrimmed = suffix?.trim();
|
|
180
|
+
const normalizedPrefix = prefixTrimmed.length === 0 ? void 0 : normalizeHexFragment(prefixTrimmed, "prefix");
|
|
181
|
+
const normalizedSuffix = !suffixTrimmed || suffixTrimmed.length === 0 ? void 0 : normalizeHexFragment(suffixTrimmed, "suffix");
|
|
182
|
+
if (!normalizedPrefix && !normalizedSuffix) {
|
|
183
|
+
throw new Error("TokenAddressMiner: must provide prefix and/or suffix");
|
|
184
|
+
}
|
|
169
185
|
const tokenInitHash = buildTokenInitHash({
|
|
170
186
|
variant: tokenVariant,
|
|
187
|
+
tokenFactory,
|
|
171
188
|
tokenData,
|
|
172
189
|
initialSupply,
|
|
173
190
|
recipient,
|
|
@@ -177,7 +194,8 @@ function mineTokenAddress(params) {
|
|
|
177
194
|
const hookConfig = hook ? {
|
|
178
195
|
deployer: hook.deployer,
|
|
179
196
|
initCodeHash: hook.initCodeHash,
|
|
180
|
-
prefix: hook.prefix ?
|
|
197
|
+
prefix: hook.prefix && hook.prefix.trim().length > 0 ? normalizeHexFragment(hook.prefix, "prefix") : void 0,
|
|
198
|
+
suffix: hook.suffix && hook.suffix.trim().length > 0 ? normalizeHexFragment(hook.suffix, "suffix") : void 0
|
|
181
199
|
} : void 0;
|
|
182
200
|
const maxSalt = startSalt + BigInt(maxIterations);
|
|
183
201
|
let iterations = 0;
|
|
@@ -186,30 +204,36 @@ function mineTokenAddress(params) {
|
|
|
186
204
|
for (let salt = startSalt; salt < maxSalt; salt++) {
|
|
187
205
|
updateSaltInBuffer(tokenBuffer, salt);
|
|
188
206
|
const candidateRaw = computeCreate2AddressFast(tokenBuffer);
|
|
207
|
+
const candidateHex = candidateRaw.slice(2);
|
|
189
208
|
iterations++;
|
|
190
|
-
if (
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
const saltHex = `0x${salt.toString(16).padStart(64, "0")}`;
|
|
200
|
-
return {
|
|
201
|
-
salt: saltHex,
|
|
202
|
-
tokenAddress: getAddress(candidateRaw),
|
|
203
|
-
iterations,
|
|
204
|
-
hookAddress: hookAddressRaw ? getAddress(hookAddressRaw) : void 0
|
|
205
|
-
};
|
|
209
|
+
if (normalizedPrefix && !candidateHex.startsWith(normalizedPrefix)) continue;
|
|
210
|
+
if (normalizedSuffix && !candidateHex.endsWith(normalizedSuffix)) continue;
|
|
211
|
+
let hookAddressRaw;
|
|
212
|
+
if (hookBuffer) {
|
|
213
|
+
updateSaltInBuffer(hookBuffer, salt);
|
|
214
|
+
hookAddressRaw = computeCreate2AddressFast(hookBuffer);
|
|
215
|
+
const hookHex = hookAddressRaw.slice(2);
|
|
216
|
+
if (hookConfig?.prefix && !hookHex.startsWith(hookConfig.prefix)) continue;
|
|
217
|
+
if (hookConfig?.suffix && !hookHex.endsWith(hookConfig.suffix)) continue;
|
|
206
218
|
}
|
|
219
|
+
const saltHex = `0x${salt.toString(16).padStart(64, "0")}`;
|
|
220
|
+
return {
|
|
221
|
+
salt: saltHex,
|
|
222
|
+
tokenAddress: getAddress(candidateRaw),
|
|
223
|
+
iterations,
|
|
224
|
+
hookAddress: hookAddressRaw ? getAddress(hookAddressRaw) : void 0
|
|
225
|
+
};
|
|
207
226
|
}
|
|
227
|
+
const constraints = [];
|
|
228
|
+
if (normalizedPrefix) constraints.push(`prefix ${prefixTrimmed}`);
|
|
229
|
+
if (normalizedSuffix) constraints.push(`suffix ${suffixTrimmed}`);
|
|
208
230
|
throw new Error(
|
|
209
|
-
`TokenAddressMiner: could not find salt matching
|
|
231
|
+
`TokenAddressMiner: could not find salt matching ${constraints.join(
|
|
232
|
+
" and "
|
|
233
|
+
)} within ${maxIterations} iterations`
|
|
210
234
|
);
|
|
211
235
|
}
|
|
212
236
|
|
|
213
237
|
export { mineTokenAddress };
|
|
214
|
-
//# sourceMappingURL=chunk-
|
|
215
|
-
//# sourceMappingURL=chunk-
|
|
238
|
+
//# sourceMappingURL=chunk-VGCXJRUV.mjs.map
|
|
239
|
+
//# sourceMappingURL=chunk-VGCXJRUV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/tokenAddressMiner.ts"],"names":["name","symbol","initHashData"],"mappings":"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","file":"chunk-VGCXJRUV.mjs","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, DERC2080Bytecode, DopplerDN404Bytecode } from '../abis';\n\nconst DEFAULT_MAX_ITERATIONS = 1_000_000;\n\nexport type TokenVariant = 'standard' | 'doppler404';\n\n// TokenFactory80 has the same deterministic CREATE2 address across all chains where it is deployed.\nconst TOKEN_FACTORY_80_ADDRESS =\n '0xf0B5141dD9096254B2ca624dff26024f46087229' as const;\n\nfunction isTokenFactory80(tokenFactory: Address): boolean {\n return tokenFactory.toLowerCase() === TOKEN_FACTORY_80_ADDRESS.toLowerCase();\n}\n\nexport interface TokenAddressHookConfig {\n deployer: Address;\n initCodeHash: Hash;\n prefix?: string;\n suffix?: string;\n}\n\nexport interface TokenAddressMiningParams {\n /**\n * Vanity prefix (hex). Keep as `''` (empty string) if you only want to mine a suffix.\n * Note: this is required for backwards compatibility with older SDK versions.\n */\n prefix: string;\n /** Vanity suffix (hex), useful as an identifier at the end of the address. */\n suffix?: 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 normalizeHexFragment(value: string, label: 'prefix' | 'suffix'): string {\n const normalized = value.trim().toLowerCase().replace(/^0x/, '');\n if (normalized.length === 0) {\n throw new Error(\n `TokenAddressMiner: ${label} must contain at least one hex character`,\n );\n }\n if (normalized.length > 40) {\n throw new Error(\n `TokenAddressMiner: ${label} cannot exceed 40 hex characters`,\n );\n }\n if (!/^[0-9a-f]+$/i.test(normalized)) {\n throw new Error(\n `TokenAddressMiner: ${label} must be a hexadecimal string`,\n );\n }\n return normalized;\n}\n\nfunction 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 * Helper to convert hex string to Uint8Array\n */\nfunction hexToBytes(hex: string): Uint8Array {\n const cleanHex = hex.startsWith('0x') ? hex.slice(2) : hex;\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(cleanHex.substr(i * 2, 2), 16);\n }\n return bytes;\n}\n\n/**\n * Helper to convert Uint8Array to hex string\n */\nfunction bytesToHex(bytes: Uint8Array): string {\n return (\n '0x' +\n Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n );\n}\n\n/**\n * Pre-compute CREATE2 buffer with constant prefix for fast mining\n * Buffer layout: 0xff (1 byte) + deployer (20 bytes) + salt (32 bytes) + initCodeHash (32 bytes) = 85 bytes\n */\nfunction prepareCreate2Buffer(deployer: Address, initCodeHash: Hash): Uint8Array {\n const buffer = new Uint8Array(85);\n buffer[0] = 0xff;\n const deployerBytes = hexToBytes(deployer);\n buffer.set(deployerBytes, 1);\n const initCodeHashBytes = hexToBytes(initCodeHash);\n buffer.set(initCodeHashBytes, 53); // 1 + 20 + 32 = 53\n return buffer;\n}\n\n/**\n * Update salt in pre-computed CREATE2 buffer (bytes 21-52)\n * Uses direct byte manipulation instead of string conversion\n */\nfunction updateSaltInBuffer(buffer: Uint8Array, salt: bigint): void {\n // Salt is 32 bytes, positioned at offset 21 (after 0xff + 20-byte deployer)\n // Clear salt region first\n for (let i = 21; i < 53; i++) {\n buffer[i] = 0;\n }\n // Write salt bytes from right to left (big-endian)\n let remaining = salt;\n for (let i = 52; remaining > 0n && i >= 21; i--) {\n buffer[i] = Number(remaining & 0xffn);\n remaining >>= 8n;\n }\n}\n\n/**\n * Compute CREATE2 address from pre-computed buffer (fast version for mining)\n * Returns raw lowercase address without checksum for comparison\n */\nfunction computeCreate2AddressFast(buffer: Uint8Array): string {\n const hash = keccak256(bytesToHex(buffer) as Hex);\n // Return last 40 hex chars (20 bytes) as lowercase address\n return '0x' + hash.slice(-40).toLowerCase();\n}\n\nfunction buildTokenInitHash(params: {\n variant: TokenVariant;\n tokenFactory: Address;\n tokenData: Hex;\n initialSupply: bigint;\n recipient: Address;\n owner: Address;\n customBytecode?: Hex;\n}): Hash {\n const {\n variant,\n tokenFactory,\n tokenData,\n initialSupply,\n recipient,\n owner,\n customBytecode,\n } = 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 const defaultBytecode = isTokenFactory80(tokenFactory)\n ? (DERC2080Bytecode as Hex)\n : (DERC20Bytecode as Hex);\n\n return keccak256(\n encodePacked(\n ['bytes', 'bytes'],\n [customBytecode ?? defaultBytecode, initHashData],\n ),\n ) as Hash;\n}\n\nexport function mineTokenAddress(\n params: TokenAddressMiningParams,\n): TokenAddressMiningResult {\n const {\n prefix,\n suffix,\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(\n 'TokenAddressMiner: maxIterations must be a positive finite number',\n );\n }\n if (startSalt < 0n) {\n throw new Error('TokenAddressMiner: startSalt cannot be negative');\n }\n\n const prefixTrimmed = prefix.trim();\n const suffixTrimmed = suffix?.trim();\n\n const normalizedPrefix =\n prefixTrimmed.length === 0\n ? undefined\n : normalizeHexFragment(prefixTrimmed, 'prefix');\n const normalizedSuffix =\n !suffixTrimmed || suffixTrimmed.length === 0\n ? undefined\n : normalizeHexFragment(suffixTrimmed, 'suffix');\n\n if (!normalizedPrefix && !normalizedSuffix) {\n throw new Error('TokenAddressMiner: must provide prefix and/or suffix');\n }\n\n const tokenInitHash = buildTokenInitHash({\n variant: tokenVariant,\n tokenFactory,\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:\n hook.prefix && hook.prefix.trim().length > 0\n ? normalizeHexFragment(hook.prefix, 'prefix')\n : undefined,\n suffix:\n hook.suffix && hook.suffix.trim().length > 0\n ? normalizeHexFragment(hook.suffix, 'suffix')\n : undefined,\n }\n : undefined;\n\n const maxSalt = startSalt + BigInt(maxIterations);\n let iterations = 0;\n\n // Pre-allocate CREATE2 buffer with constant parts (optimization)\n const tokenBuffer = prepareCreate2Buffer(tokenFactory, tokenInitHash);\n const hookBuffer = hookConfig\n ? prepareCreate2Buffer(hookConfig.deployer, hookConfig.initCodeHash)\n : null;\n\n for (let salt = startSalt; salt < maxSalt; salt++) {\n // Update salt in pre-computed buffer (avoids string formatting)\n updateSaltInBuffer(tokenBuffer, salt);\n\n // Compute token address using fast method (no checksum)\n const candidateRaw = computeCreate2AddressFast(tokenBuffer);\n const candidateHex = candidateRaw.slice(2);\n iterations++;\n\n if (normalizedPrefix && !candidateHex.startsWith(normalizedPrefix)) continue;\n if (normalizedSuffix && !candidateHex.endsWith(normalizedSuffix)) continue;\n\n let hookAddressRaw: string | undefined;\n if (hookBuffer) {\n updateSaltInBuffer(hookBuffer, salt);\n hookAddressRaw = computeCreate2AddressFast(hookBuffer);\n const hookHex = hookAddressRaw.slice(2);\n if (hookConfig?.prefix && !hookHex.startsWith(hookConfig.prefix)) continue;\n if (hookConfig?.suffix && !hookHex.endsWith(hookConfig.suffix)) continue;\n }\n\n // Found a match! Convert to proper format for return\n const saltHex = `0x${salt.toString(16).padStart(64, '0')}` as Hash;\n return {\n salt: saltHex,\n tokenAddress: getAddress(candidateRaw) as Address,\n iterations,\n hookAddress: hookAddressRaw\n ? (getAddress(hookAddressRaw) as Address)\n : undefined,\n };\n }\n\n const constraints: string[] = [];\n if (normalizedPrefix) constraints.push(`prefix ${prefixTrimmed}`);\n if (normalizedSuffix) constraints.push(`suffix ${suffixTrimmed}`);\n\n throw new Error(\n `TokenAddressMiner: could not find salt matching ${constraints.join(\n ' and ',\n )} within ${maxIterations} iterations`,\n );\n}\n"]}
|