@whetstone-research/doppler-sdk 0.0.1-alpha.8 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +726 -25
- package/dist/DopplerSDK.d.mts +45 -7
- package/dist/DopplerSDK.d.ts +45 -7
- package/dist/DopplerSDK.js +35 -12
- package/dist/DopplerSDK.mjs +34 -11
- package/dist/abis/bytecodes.d.mts +3 -2
- package/dist/abis/bytecodes.d.ts +3 -2
- package/dist/abis/bytecodes.js +9 -6
- package/dist/abis/bytecodes.mjs +1 -2
- package/dist/abis/index.d.mts +1507 -129
- package/dist/abis/index.d.ts +1507 -129
- package/dist/abis/index.js +43 -20
- package/dist/abis/index.mjs +2 -3
- package/dist/addresses.d.mts +16 -3
- package/dist/addresses.d.ts +16 -3
- package/dist/addresses.js +13 -5
- package/dist/addresses.mjs +2 -2
- package/dist/builders/DynamicAuctionBuilder.d.mts +119 -0
- package/dist/builders/DynamicAuctionBuilder.d.ts +119 -0
- package/dist/builders/DynamicAuctionBuilder.js +29 -0
- package/dist/builders/DynamicAuctionBuilder.js.map +1 -0
- package/dist/builders/DynamicAuctionBuilder.mjs +20 -0
- package/dist/builders/DynamicAuctionBuilder.mjs.map +1 -0
- package/dist/builders/MulticurveBuilder.d.mts +132 -0
- package/dist/builders/MulticurveBuilder.d.ts +132 -0
- package/dist/builders/MulticurveBuilder.js +29 -0
- package/dist/builders/MulticurveBuilder.js.map +1 -0
- package/dist/builders/MulticurveBuilder.mjs +20 -0
- package/dist/builders/MulticurveBuilder.mjs.map +1 -0
- package/dist/builders/StaticAuctionBuilder.d.mts +124 -0
- package/dist/builders/StaticAuctionBuilder.d.ts +124 -0
- package/dist/builders/StaticAuctionBuilder.js +29 -0
- package/dist/builders/StaticAuctionBuilder.js.map +1 -0
- package/dist/builders/StaticAuctionBuilder.mjs +20 -0
- package/dist/builders/StaticAuctionBuilder.mjs.map +1 -0
- package/dist/builders/index.d.mts +8 -0
- package/dist/builders/index.d.ts +8 -0
- package/dist/builders/index.js +56 -0
- package/dist/builders/index.js.map +1 -0
- package/dist/builders/index.mjs +23 -0
- package/dist/builders/index.mjs.map +1 -0
- package/dist/builders/shared.d.mts +116 -0
- package/dist/builders/shared.d.ts +116 -0
- package/dist/builders/shared.js +39 -0
- package/dist/builders/shared.js.map +1 -0
- package/dist/builders/shared.mjs +18 -0
- package/dist/builders/shared.mjs.map +1 -0
- package/dist/builders.d.mts +8 -131
- package/dist/builders.d.ts +8 -131
- package/dist/builders.js +44 -5
- package/dist/builders.mjs +22 -3
- package/dist/chunk-3PNCB4W5.js +4 -0
- package/dist/{chunk-KRN3ROUE.js.map → chunk-3PNCB4W5.js.map} +1 -1
- package/dist/chunk-3RK7LRAA.js +282 -0
- package/dist/chunk-3RK7LRAA.js.map +1 -0
- package/dist/chunk-4HM3ERBU.js +13 -0
- package/dist/chunk-4HM3ERBU.js.map +1 -0
- package/dist/{chunk-7W72MFJO.mjs → chunk-4TROGENW.mjs} +5 -4
- package/dist/chunk-4TROGENW.mjs.map +1 -0
- package/dist/chunk-5TL5V6UX.mjs +3 -0
- package/dist/{chunk-AZLFJNTG.mjs.map → chunk-5TL5V6UX.mjs.map} +1 -1
- package/dist/chunk-64AWG57M.mjs +192 -0
- package/dist/chunk-64AWG57M.mjs.map +1 -0
- package/dist/chunk-6KWCHTK3.js +166 -0
- package/dist/chunk-6KWCHTK3.js.map +1 -0
- package/dist/chunk-6OOWOPCX.js +1708 -0
- package/dist/chunk-6OOWOPCX.js.map +1 -0
- package/dist/chunk-7BBRPWQJ.js +257 -0
- package/dist/chunk-7BBRPWQJ.js.map +1 -0
- package/dist/{chunk-FVTIDXYK.mjs → chunk-AKSEBAR7.mjs} +29 -19
- package/dist/chunk-AKSEBAR7.mjs.map +1 -0
- package/dist/chunk-AS64GWBX.js +204 -0
- package/dist/chunk-AS64GWBX.js.map +1 -0
- package/dist/chunk-AULFBXM5.mjs +331 -0
- package/dist/chunk-AULFBXM5.mjs.map +1 -0
- package/dist/chunk-AW3WR2D3.mjs +238 -0
- package/dist/chunk-AW3WR2D3.mjs.map +1 -0
- package/dist/chunk-BIQQ53O2.js +45 -0
- package/dist/chunk-BIQQ53O2.js.map +1 -0
- package/dist/chunk-C6MPV3CY.js +260 -0
- package/dist/chunk-C6MPV3CY.js.map +1 -0
- package/dist/{chunk-AYPP5JEQ.mjs → chunk-CLEQO6GU.mjs} +5 -5
- package/dist/chunk-CLEQO6GU.mjs.map +1 -0
- package/dist/chunk-CVHPLURA.js +147 -0
- package/dist/chunk-CVHPLURA.js.map +1 -0
- package/dist/chunk-D2RBCFNW.mjs +130 -0
- package/dist/chunk-D2RBCFNW.mjs.map +1 -0
- package/dist/chunk-ECD4FV3A.mjs +11 -0
- package/dist/chunk-ECD4FV3A.mjs.map +1 -0
- package/dist/chunk-EDJBZPMW.mjs +255 -0
- package/dist/chunk-EDJBZPMW.mjs.map +1 -0
- package/dist/chunk-FPAI4QYW.mjs +145 -0
- package/dist/chunk-FPAI4QYW.mjs.map +1 -0
- package/dist/chunk-HM25ZMO3.js +18 -0
- package/dist/chunk-HM25ZMO3.js.map +1 -0
- package/dist/chunk-IHC6UYKK.js +4 -0
- package/dist/{chunk-DRBRT57F.js.map → chunk-IHC6UYKK.js.map} +1 -1
- package/dist/{chunk-DMAHXBA5.mjs → chunk-J5BFFL3X.mjs} +87 -47
- package/dist/chunk-J5BFFL3X.mjs.map +1 -0
- package/dist/chunk-JIKAD4YL.js +4 -0
- package/dist/{chunk-KEXKKQVW.js.map → chunk-JIKAD4YL.js.map} +1 -1
- package/dist/{chunk-EFAPDN4J.js → chunk-JWEXGALU.js} +730 -33
- package/dist/chunk-JWEXGALU.js.map +1 -0
- package/dist/{chunk-4K5GBNQV.mjs → chunk-KDT76YQE.mjs} +52 -13
- package/dist/chunk-KDT76YQE.mjs.map +1 -0
- package/dist/chunk-LMQLMMEX.js +317 -0
- package/dist/chunk-LMQLMMEX.js.map +1 -0
- package/dist/{chunk-TOMVBPNZ.js → chunk-LS4TK6SX.js} +9 -4
- package/dist/chunk-LS4TK6SX.js.map +1 -0
- package/dist/chunk-M4WMHD3X.mjs +40 -0
- package/dist/chunk-M4WMHD3X.mjs.map +1 -0
- package/dist/chunk-MCOK3UFR.mjs +280 -0
- package/dist/chunk-MCOK3UFR.mjs.map +1 -0
- package/dist/chunk-MGQSQCFG.js +176 -0
- package/dist/chunk-MGQSQCFG.js.map +1 -0
- package/dist/chunk-MKE3BUL3.mjs +3 -0
- package/dist/{chunk-CYDWEPFL.mjs.map → chunk-MKE3BUL3.mjs.map} +1 -1
- package/dist/chunk-MNJ5OYPE.mjs +17 -0
- package/dist/chunk-MNJ5OYPE.mjs.map +1 -0
- package/dist/chunk-MNXD45J7.mjs +164 -0
- package/dist/chunk-MNXD45J7.mjs.map +1 -0
- package/dist/chunk-NGDPQC5E.js +333 -0
- package/dist/chunk-NGDPQC5E.js.map +1 -0
- package/dist/chunk-NNNCVFOH.mjs +16 -0
- package/dist/chunk-NNNCVFOH.mjs.map +1 -0
- package/dist/chunk-NZ4BJ2IC.mjs +315 -0
- package/dist/chunk-NZ4BJ2IC.mjs.map +1 -0
- package/dist/chunk-OKNM7ODQ.js +29 -0
- package/dist/chunk-OKNM7ODQ.js.map +1 -0
- package/dist/{chunk-DCFHANLR.mjs → chunk-OTG75GVH.mjs} +725 -34
- package/dist/chunk-OTG75GVH.mjs.map +1 -0
- package/dist/chunk-OZ6DGBRL.mjs +25 -0
- package/dist/chunk-OZ6DGBRL.mjs.map +1 -0
- package/dist/chunk-P25HBGP5.mjs +3 -0
- package/dist/chunk-P25HBGP5.mjs.map +1 -0
- package/dist/{chunk-XG7K4R56.js → chunk-P7KLEPVI.js} +52 -12
- package/dist/chunk-P7KLEPVI.js.map +1 -0
- package/dist/{chunk-OPKQMN46.mjs → chunk-PAPXGPJB.mjs} +9 -4
- package/dist/chunk-PAPXGPJB.mjs.map +1 -0
- package/dist/chunk-PCNXJAU5.js +19 -0
- package/dist/chunk-PCNXJAU5.js.map +1 -0
- package/dist/{chunk-5IT5OXQ5.js → chunk-PD6HWEMG.js} +40 -30
- package/dist/chunk-PD6HWEMG.js.map +1 -0
- package/dist/{chunk-ER42VG7H.js → chunk-PH2KXREH.js} +20 -3
- package/dist/chunk-PH2KXREH.js.map +1 -0
- package/dist/chunk-Q5ERW5ZW.mjs +107 -0
- package/dist/chunk-Q5ERW5ZW.mjs.map +1 -0
- package/dist/chunk-Q7YNBSVH.js +28 -0
- package/dist/chunk-Q7YNBSVH.js.map +1 -0
- package/dist/{chunk-T644D54P.mjs → chunk-QKO2FZGN.mjs} +16 -4
- package/dist/chunk-QKO2FZGN.mjs.map +1 -0
- package/dist/{chunk-CIRZKWLL.js → chunk-RVFSRYI5.js} +5 -3
- package/dist/chunk-RVFSRYI5.js.map +1 -0
- package/dist/{chunk-KPBCG4X2.js → chunk-RW37KJ77.js} +11 -11
- package/dist/chunk-RW37KJ77.js.map +1 -0
- package/dist/chunk-SD7BHT2F.mjs +3 -0
- package/dist/chunk-SD7BHT2F.mjs.map +1 -0
- package/dist/chunk-SP5M57BG.mjs +258 -0
- package/dist/chunk-SP5M57BG.mjs.map +1 -0
- package/dist/chunk-TKSHYEYA.mjs +1706 -0
- package/dist/chunk-TKSHYEYA.mjs.map +1 -0
- package/dist/chunk-WTS75RUC.js +4 -0
- package/dist/chunk-WTS75RUC.js.map +1 -0
- package/dist/{chunk-ZRDU6CIB.js → chunk-XRPIGMA2.js} +108 -68
- package/dist/chunk-XRPIGMA2.js.map +1 -0
- package/dist/chunk-XTKSM4QE.js +132 -0
- package/dist/chunk-XTKSM4QE.js.map +1 -0
- package/dist/chunk-XUE3CIJ5.mjs +174 -0
- package/dist/chunk-XUE3CIJ5.mjs.map +1 -0
- package/dist/chunk-YYUOLM6U.js +244 -0
- package/dist/chunk-YYUOLM6U.js.map +1 -0
- package/dist/chunk-ZH44DHVR.mjs +26 -0
- package/dist/chunk-ZH44DHVR.mjs.map +1 -0
- package/dist/chunk-ZPHOOG72.js +112 -0
- package/dist/chunk-ZPHOOG72.js.map +1 -0
- package/dist/constants.d.mts +7 -2
- package/dist/constants.d.ts +7 -2
- package/dist/constants.js +57 -38
- package/dist/constants.mjs +1 -2
- package/dist/deployments.generated.d.mts +2 -0
- package/dist/deployments.generated.d.ts +2 -0
- package/dist/deployments.generated.js +12 -0
- package/dist/deployments.generated.js.map +1 -0
- package/dist/deployments.generated.mjs +3 -0
- package/dist/deployments.generated.mjs.map +1 -0
- package/dist/entities/DopplerFactory.d.mts +139 -11
- package/dist/entities/DopplerFactory.d.ts +139 -11
- package/dist/entities/DopplerFactory.js +17 -7
- package/dist/entities/DopplerFactory.mjs +16 -6
- package/dist/entities/auction/DynamicAuction.d.mts +19 -4
- package/dist/entities/auction/DynamicAuction.d.ts +19 -4
- package/dist/entities/auction/DynamicAuction.js +6 -6
- package/dist/entities/auction/DynamicAuction.mjs +5 -5
- package/dist/entities/auction/MulticurvePool.d.mts +55 -0
- package/dist/entities/auction/MulticurvePool.d.ts +55 -0
- package/dist/entities/auction/MulticurvePool.js +18 -0
- package/dist/entities/auction/MulticurvePool.js.map +1 -0
- package/dist/entities/auction/MulticurvePool.mjs +9 -0
- package/dist/entities/auction/MulticurvePool.mjs.map +1 -0
- package/dist/entities/auction/StaticAuction.d.mts +6 -3
- package/dist/entities/auction/StaticAuction.d.ts +6 -3
- package/dist/entities/auction/StaticAuction.js +6 -6
- package/dist/entities/auction/StaticAuction.mjs +5 -5
- package/dist/entities/auction/index.d.mts +3 -0
- package/dist/entities/auction/index.d.ts +3 -0
- package/dist/entities/auction/index.js +16 -9
- package/dist/entities/auction/index.mjs +10 -7
- package/dist/entities/quoter/Quoter.d.mts +44 -2
- package/dist/entities/quoter/Quoter.d.ts +44 -2
- package/dist/entities/quoter/Quoter.js +6 -6
- package/dist/entities/quoter/Quoter.mjs +5 -5
- package/dist/entities/quoter/index.d.mts +3 -0
- package/dist/entities/quoter/index.d.ts +3 -0
- package/dist/entities/quoter/index.js +6 -6
- package/dist/entities/quoter/index.mjs +5 -5
- package/dist/entities/token/derc20/Derc20.d.mts +33 -7
- package/dist/entities/token/derc20/Derc20.d.ts +33 -7
- package/dist/entities/token/derc20/Derc20.js +4 -5
- package/dist/entities/token/derc20/Derc20.mjs +3 -4
- package/dist/entities/token/derc20/index.d.mts +3 -0
- package/dist/entities/token/derc20/index.d.ts +3 -0
- package/dist/entities/token/derc20/index.js +4 -5
- package/dist/entities/token/derc20/index.mjs +3 -4
- package/dist/entities/token/eth/Eth.d.mts +7 -3
- package/dist/entities/token/eth/Eth.d.ts +7 -3
- package/dist/entities/token/eth/Eth.js +2 -3
- package/dist/entities/token/eth/Eth.mjs +1 -2
- package/dist/entities/token/eth/index.d.mts +3 -0
- package/dist/entities/token/eth/index.d.ts +3 -0
- package/dist/entities/token/eth/index.js +2 -3
- package/dist/entities/token/eth/index.mjs +1 -2
- package/dist/entities/token/index.d.mts +3 -0
- package/dist/entities/token/index.d.ts +3 -0
- package/dist/entities/token/index.js +6 -7
- package/dist/entities/token/index.mjs +4 -5
- package/dist/index.d.mts +18 -6
- package/dist/index.d.ts +18 -6
- package/dist/index.js +305 -140
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +32 -19
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.mts +260 -22
- package/dist/types.d.ts +260 -22
- package/dist/types.js +12 -3
- package/dist/types.mjs +3 -2
- package/dist/utils/airlock.d.mts +11 -0
- package/dist/utils/airlock.d.ts +11 -0
- package/dist/utils/airlock.js +26 -0
- package/dist/utils/airlock.js.map +1 -0
- package/dist/utils/airlock.mjs +5 -0
- package/dist/utils/airlock.mjs.map +1 -0
- package/dist/utils/balanceDelta.d.mts +10 -0
- package/dist/utils/balanceDelta.d.ts +10 -0
- package/dist/utils/balanceDelta.js +12 -0
- package/dist/utils/balanceDelta.js.map +1 -0
- package/dist/utils/balanceDelta.mjs +3 -0
- package/dist/utils/balanceDelta.mjs.map +1 -0
- package/dist/utils/computeOptimalGamma.d.mts +7 -0
- package/dist/utils/computeOptimalGamma.d.ts +7 -0
- package/dist/utils/computeOptimalGamma.js +12 -0
- package/dist/utils/computeOptimalGamma.js.map +1 -0
- package/dist/utils/computeOptimalGamma.mjs +3 -0
- package/dist/utils/computeOptimalGamma.mjs.map +1 -0
- package/dist/utils/index.d.mts +11 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.js +114 -24
- package/dist/utils/index.mjs +14 -4
- package/dist/utils/isToken0Expected.d.mts +13 -0
- package/dist/utils/isToken0Expected.d.ts +13 -0
- package/dist/utils/isToken0Expected.js +12 -0
- package/dist/utils/isToken0Expected.js.map +1 -0
- package/dist/utils/isToken0Expected.mjs +3 -0
- package/dist/utils/isToken0Expected.mjs.map +1 -0
- package/dist/utils/marketCapHelpers.d.mts +309 -0
- package/dist/utils/marketCapHelpers.d.ts +309 -0
- package/dist/utils/marketCapHelpers.js +54 -0
- package/dist/utils/marketCapHelpers.js.map +1 -0
- package/dist/utils/marketCapHelpers.mjs +5 -0
- package/dist/utils/marketCapHelpers.mjs.map +1 -0
- package/dist/utils/poolKey.d.mts +17 -0
- package/dist/utils/poolKey.d.ts +17 -0
- package/dist/utils/poolKey.js +12 -0
- package/dist/utils/poolKey.js.map +1 -0
- package/dist/utils/poolKey.mjs +3 -0
- package/dist/utils/poolKey.mjs.map +1 -0
- package/dist/utils/priceHelpers.d.mts +3 -3
- package/dist/utils/priceHelpers.d.ts +3 -3
- package/dist/utils/priceHelpers.js +10 -11
- package/dist/utils/priceHelpers.mjs +2 -3
- package/dist/utils/tickMath.d.mts +8 -1
- package/dist/utils/tickMath.d.ts +8 -1
- package/dist/utils/tickMath.js +17 -14
- package/dist/utils/tickMath.mjs +1 -2
- package/dist/utils/tokenAddressMiner.d.mts +30 -0
- package/dist/utils/tokenAddressMiner.d.ts +30 -0
- package/dist/utils/tokenAddressMiner.js +14 -0
- package/dist/utils/tokenAddressMiner.js.map +1 -0
- package/dist/utils/tokenAddressMiner.mjs +5 -0
- package/dist/utils/tokenAddressMiner.mjs.map +1 -0
- package/package.json +14 -11
- package/dist/__tests__/mocks/addresses.d.mts +0 -46
- package/dist/__tests__/mocks/addresses.d.ts +0 -46
- package/dist/__tests__/mocks/addresses.js +0 -53
- package/dist/__tests__/mocks/addresses.js.map +0 -1
- package/dist/__tests__/mocks/addresses.mjs +0 -44
- package/dist/__tests__/mocks/addresses.mjs.map +0 -1
- package/dist/__tests__/mocks/clients.d.mts +0 -22
- package/dist/__tests__/mocks/clients.d.ts +0 -22
- package/dist/__tests__/mocks/clients.js +0 -17036
- package/dist/__tests__/mocks/clients.js.map +0 -1
- package/dist/__tests__/mocks/clients.mjs +0 -17032
- package/dist/__tests__/mocks/clients.mjs.map +0 -1
- package/dist/chunk-2N5JZSZ4.js +0 -14
- package/dist/chunk-2N5JZSZ4.js.map +0 -1
- package/dist/chunk-3OZRDL3O.js +0 -162
- package/dist/chunk-3OZRDL3O.js.map +0 -1
- package/dist/chunk-4K5GBNQV.mjs.map +0 -1
- package/dist/chunk-5IT5OXQ5.js.map +0 -1
- package/dist/chunk-7F5IXZLH.js +0 -308
- package/dist/chunk-7F5IXZLH.js.map +0 -1
- package/dist/chunk-7VP5VR7J.js +0 -82
- package/dist/chunk-7VP5VR7J.js.map +0 -1
- package/dist/chunk-7W72MFJO.mjs.map +0 -1
- package/dist/chunk-AYPP5JEQ.mjs.map +0 -1
- package/dist/chunk-AZLFJNTG.mjs +0 -3
- package/dist/chunk-CIRZKWLL.js.map +0 -1
- package/dist/chunk-CYDWEPFL.mjs +0 -3
- package/dist/chunk-DCFHANLR.mjs.map +0 -1
- package/dist/chunk-DMAHXBA5.mjs.map +0 -1
- package/dist/chunk-DRBRT57F.js +0 -4
- package/dist/chunk-EFAPDN4J.js.map +0 -1
- package/dist/chunk-ER42VG7H.js.map +0 -1
- package/dist/chunk-FVTIDXYK.mjs.map +0 -1
- package/dist/chunk-IHBIBFZK.mjs +0 -12
- package/dist/chunk-IHBIBFZK.mjs.map +0 -1
- package/dist/chunk-IXSKPEHB.mjs +0 -160
- package/dist/chunk-IXSKPEHB.mjs.map +0 -1
- package/dist/chunk-KEXKKQVW.js +0 -42
- package/dist/chunk-KFD6U3LQ.mjs +0 -305
- package/dist/chunk-KFD6U3LQ.mjs.map +0 -1
- package/dist/chunk-KPBCG4X2.js.map +0 -1
- package/dist/chunk-KRN3ROUE.js +0 -4
- package/dist/chunk-KT7U37XS.mjs +0 -207
- package/dist/chunk-KT7U37XS.mjs.map +0 -1
- package/dist/chunk-LOROXNH3.mjs +0 -37
- package/dist/chunk-LOROXNH3.mjs.map +0 -1
- package/dist/chunk-O6GYIJ6X.mjs +0 -80
- package/dist/chunk-O6GYIJ6X.mjs.map +0 -1
- package/dist/chunk-OPKQMN46.mjs.map +0 -1
- package/dist/chunk-RIMM47JL.mjs +0 -176
- package/dist/chunk-RIMM47JL.mjs.map +0 -1
- package/dist/chunk-SUOMK3CU.js +0 -872
- package/dist/chunk-SUOMK3CU.js.map +0 -1
- package/dist/chunk-T644D54P.mjs.map +0 -1
- package/dist/chunk-TOMVBPNZ.js.map +0 -1
- package/dist/chunk-XEMZQHTX.mjs +0 -870
- package/dist/chunk-XEMZQHTX.mjs.map +0 -1
- package/dist/chunk-XG7K4R56.js.map +0 -1
- package/dist/chunk-XQ2VMR26.js +0 -180
- package/dist/chunk-XQ2VMR26.js.map +0 -1
- package/dist/chunk-ZAIP54LX.js +0 -209
- package/dist/chunk-ZAIP54LX.js.map +0 -1
- package/dist/chunk-ZRDU6CIB.js.map +0 -1
- package/dist/magic-string.es-CBLXTCZP.js +0 -1304
- package/dist/magic-string.es-CBLXTCZP.js.map +0 -1
- package/dist/magic-string.es-QHA47FSB.mjs +0 -1298
- package/dist/magic-string.es-QHA47FSB.mjs.map +0 -1
package/dist/chunk-2N5JZSZ4.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
// src/types.ts
|
|
4
|
-
var LockablePoolStatus = /* @__PURE__ */ ((LockablePoolStatus2) => {
|
|
5
|
-
LockablePoolStatus2[LockablePoolStatus2["Uninitialized"] = 0] = "Uninitialized";
|
|
6
|
-
LockablePoolStatus2[LockablePoolStatus2["Initialized"] = 1] = "Initialized";
|
|
7
|
-
LockablePoolStatus2[LockablePoolStatus2["Locked"] = 2] = "Locked";
|
|
8
|
-
LockablePoolStatus2[LockablePoolStatus2["Exited"] = 3] = "Exited";
|
|
9
|
-
return LockablePoolStatus2;
|
|
10
|
-
})(LockablePoolStatus || {});
|
|
11
|
-
|
|
12
|
-
exports.LockablePoolStatus = LockablePoolStatus;
|
|
13
|
-
//# sourceMappingURL=chunk-2N5JZSZ4.js.map
|
|
14
|
-
//# sourceMappingURL=chunk-2N5JZSZ4.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"names":["LockablePoolStatus"],"mappings":";;;AAqFY,IAAA,kBAAA,qBAAAA,mBAAL,KAAA;AACL,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,mBAAgB,CAAhB,CAAA,GAAA,eAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,iBAAc,CAAd,CAAA,GAAA,aAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,YAAS,CAAT,CAAA,GAAA,QAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,YAAS,CAAT,CAAA,GAAA,QAAA;AAJU,EAAAA,OAAAA,mBAAAA;AAAA,CAAA,EAAA,kBAAA,IAAA,EAAA","file":"chunk-2N5JZSZ4.js","sourcesContent":["import type { Address, PublicClient, WalletClient } from 'viem'\n\n// Core configuration types\n// Token configuration (discriminated union)\nexport interface StandardTokenConfig {\n type?: 'standard' // default behavior (backwards compatible)\n name: string\n symbol: string\n tokenURI: string\n yearlyMintRate?: bigint // Optional yearly mint rate (in WAD, default: 2% = 0.02e18)\n}\n\nexport interface Doppler404TokenConfig {\n type: 'doppler404'\n name: string\n symbol: string\n baseURI: string\n // Optional unit for DN404 factory (uint256). Defaults to 1000 when omitted.\n unit?: bigint\n}\n\nexport type TokenConfig = StandardTokenConfig | Doppler404TokenConfig\n\nexport interface SaleConfig {\n initialSupply: bigint\n numTokensToSell: bigint\n numeraire: Address // e.g., WETH address\n}\n\n// Static Auction Pool configuration\nexport interface StaticPoolConfig {\n startTick: number\n endTick: number\n fee: number // e.g., 3000 for 0.3%\n // Optional parameters for lockable initializer\n numPositions?: number // Number of liquidity positions (default: based on tick range)\n maxShareToBeSold?: bigint // Maximum share of tokens to sell (in WAD, default: 1e18 = 100%)\n lockableBeneficiaries?: LockableBeneficiaryData[] // Optional beneficiaries for fee streaming\n}\n\n// Dynamic Auction configuration\nexport interface DynamicAuctionConfig {\n duration: number // in days\n epochLength: number // in seconds\n startTick: number\n endTick: number\n gamma?: number // Optional, can be auto-calculated\n minProceeds: bigint\n maxProceeds: bigint\n numPdSlugs?: number // Price discovery slugs (optional)\n}\n\n// Vesting configuration\nexport interface VestingConfig {\n duration: number // in seconds\n cliffDuration: number // in seconds\n}\n\n// Governance configuration\nexport interface GovernanceConfig {\n initialVotingDelay?: number // in seconds (default: depends on version)\n initialVotingPeriod?: number // in seconds (default: depends on version)\n initialProposalThreshold?: bigint // in tokens (default: 0)\n}\n\n// Explicit selector to use no-op governance. Must be set explicitly.\nexport interface NoOpGovernance {\n noOp: true\n}\n\nexport type GovernanceOption = GovernanceConfig | NoOpGovernance\n\n// Beneficiary data for streamable fees\nexport interface BeneficiaryData {\n address: Address\n percentage: number // basis points (e.g., 5000 = 50%)\n}\n\n// Lockable initializer beneficiary data (uses shares instead of percentage)\nexport interface LockableBeneficiaryData {\n beneficiary: Address\n shares: bigint // shares in WAD (1e18 = 100%)\n}\n\n// Pool status for lockable initializer\nexport enum LockablePoolStatus {\n Uninitialized = 0,\n Initialized = 1,\n Locked = 2,\n Exited = 3\n}\n\n// Lockable pool state\nexport interface LockablePoolState {\n asset: Address\n numeraire: Address\n tickLower: number\n tickUpper: number\n maxShareToBeSold: bigint\n totalTokensOnBondingCurve: bigint\n status: LockablePoolStatus\n}\n\n// Migration configuration (discriminated union)\nexport type MigrationConfig =\n | { type: 'uniswapV2' } // Basic migration to a new Uniswap v2 pool\n | {\n type: 'uniswapV3'\n fee: number\n tickSpacing: number\n }\n | {\n type: 'uniswapV4'\n fee: number\n tickSpacing: number\n // Configuration for fee streaming via StreamableFeesLocker\n streamableFees: {\n lockDuration: number // in seconds\n beneficiaries: BeneficiaryData[]\n }\n }\n\n// Create Static Auction parameters\nexport interface CreateStaticAuctionParams {\n // Token configuration\n token: TokenConfig\n\n // Sale configuration\n sale: SaleConfig\n\n // Static Auction (Uniswap v3) Pool configuration\n pool: StaticPoolConfig\n\n // Vesting configuration (optional)\n vesting?: VestingConfig\n\n // Governance configuration (required). Use `{ noOp: true }` for no‑op,\n // `{ useDefaults: true }` via builders for standard defaults, or pass\n // a full GovernanceConfig to customize.\n governance: GovernanceOption\n\n // Explicit Migration Configuration\n migration: MigrationConfig\n\n // Integrator details\n integrator?: Address\n userAddress: Address\n}\n\n// Create Dynamic Auction parameters\nexport interface CreateDynamicAuctionParams {\n // Token configuration\n token: TokenConfig\n\n // Sale configuration\n sale: SaleConfig\n\n // Dynamic Auction (Uniswap v4 Hook) configuration\n auction: DynamicAuctionConfig\n \n // Pool configuration\n pool: {\n fee: number // e.g., 3000 for 0.3%\n tickSpacing: number\n }\n\n // Vesting configuration (optional)\n vesting?: VestingConfig\n\n // Governance configuration (required). Use `{ noOp: true }` for no‑op,\n // `{ useDefaults: true }` via builders for standard defaults, or pass\n // a full GovernanceConfig to customize.\n governance: GovernanceOption\n\n // Explicit Migration Configuration\n migration: MigrationConfig\n\n // Integrator details\n integrator?: Address\n userAddress: Address\n \n // Time configuration (internal use)\n startTimeOffset?: number\n blockTimestamp?: number // Optional: use this block timestamp instead of fetching latest\n}\n\n// Price range configuration for automatic tick calculation\nexport interface PriceRange {\n startPrice: number\n endPrice: number\n}\n\n// Tick range configuration\nexport interface TickRange {\n startTick: number\n endTick: number\n}\n\n// Build configuration for static auctions (V3-style)\nexport interface StaticAuctionBuildConfig {\n // Token details\n name: string\n symbol: string\n totalSupply?: bigint // default: 1 billion\n numTokensToSell?: bigint // default: 900 million\n tokenURI: string\n\n // Time parameters\n startTimeOffset?: number // Optional - seconds to add to current block timestamp (default: 30)\n\n // Price parameters - must provide either priceRange or tickRange\n numeraire: Address // Required for V3\n tickRange?: TickRange\n priceRange?: PriceRange\n fee?: number // default: 10000 (1%)\n \n // Pool parameters (V3 specific)\n numPositions?: number // default: 15\n maxShareToBeSold?: bigint // default: 35% in WAD\n\n // Vesting parameters\n yearlyMintRate?: bigint // default: 2%\n vestingDuration?: bigint // default: 1 year\n recipients?: Address[] // defaults to [userAddress]\n amounts?: bigint[] // defaults based on pre-mint calculation\n\n // Migration configuration\n migration: MigrationConfig\n\n // Other parameters\n integrator?: Address\n useGovernance?: boolean // default: true\n}\n\n// Build configuration for dynamic auctions (V4-style)\nexport interface DynamicAuctionBuildConfig {\n // Token details\n name: string\n symbol: string\n totalSupply: bigint\n numTokensToSell: bigint\n tokenURI: string\n\n // Time parameters\n startTimeOffset?: number // Optional - seconds to add to block timestamp (default: 30)\n blockTimestamp?: number // Optional - specific block timestamp to use (default: fetch latest)\n duration?: number // in days (default: 7)\n epochLength?: number // in seconds (default: 3600)\n\n // Price parameters - must provide either priceRange or tickRange\n numeraire?: Address // defaults to zero address\n tickRange?: TickRange\n priceRange?: PriceRange\n tickSpacing: number\n gamma?: number // auto-calculated if not provided\n fee: number // In basis points\n\n // Sale parameters\n minProceeds: bigint\n maxProceeds: bigint\n numPdSlugs?: number // default: 5\n\n // Vesting parameters\n yearlyMintRate?: bigint // default: 2%\n vestingDuration: bigint\n recipients: Address[]\n amounts: bigint[]\n\n // Migration configuration\n migration: MigrationConfig\n\n // Other parameters\n integrator?: Address\n useGovernance?: boolean // default: true\n}\n\n// SDK initialization configuration\nexport interface DopplerSDKConfig {\n publicClient: PublicClient\n walletClient?: WalletClient\n chainId: number\n}\n\n// Pool information types\nexport interface PoolInfo {\n address: Address\n tokenAddress: Address\n numeraireAddress: Address\n fee: number\n liquidity: bigint\n sqrtPriceX96: bigint\n}\n\nexport interface HookInfo {\n hookAddress: Address\n tokenAddress: Address\n numeraireAddress: Address\n poolId: string\n currentEpoch: number\n totalProceeds: bigint\n totalTokensSold: bigint\n earlyExit: boolean\n insufficientProceeds: boolean\n startingTime: bigint\n endingTime: bigint\n epochLength: bigint\n minimumProceeds: bigint\n maximumProceeds: bigint\n}\n\n\n// Quote result type\nexport interface QuoteResult {\n amountOut: bigint\n priceImpact: number\n fee: bigint\n route: string[]\n}\n\n// Lockable Uniswap V3 Initializer encode params\nexport interface LockableV3InitializerParams {\n fee: number\n tickLower: number\n tickUpper: number\n numPositions: number\n maxShareToBeSold: bigint\n beneficiaries: LockableBeneficiaryData[]\n}\n"]}
|
package/dist/chunk-3OZRDL3O.js
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkXQ2VMR26_js = require('./chunk-XQ2VMR26.js');
|
|
4
|
-
var chunkEFAPDN4J_js = require('./chunk-EFAPDN4J.js');
|
|
5
|
-
|
|
6
|
-
// src/entities/quoter/Quoter.ts
|
|
7
|
-
var Quoter = class {
|
|
8
|
-
constructor(publicClient, chainId) {
|
|
9
|
-
this.publicClient = publicClient;
|
|
10
|
-
this.chainId = chainId;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Get a price quote for swapping an exact amount of input tokens on Uniswap V3
|
|
14
|
-
* @param params Parameters for the quote
|
|
15
|
-
* @returns Quote result including output amount and price impact
|
|
16
|
-
*/
|
|
17
|
-
async quoteExactInputV3(params) {
|
|
18
|
-
const addresses = chunkXQ2VMR26_js.getAddresses(this.chainId);
|
|
19
|
-
const { result } = await this.publicClient.simulateContract({
|
|
20
|
-
address: addresses.v3Quoter,
|
|
21
|
-
abi: chunkEFAPDN4J_js.quoterV2Abi,
|
|
22
|
-
functionName: "quoteExactInputSingle",
|
|
23
|
-
args: [{
|
|
24
|
-
tokenIn: params.tokenIn,
|
|
25
|
-
tokenOut: params.tokenOut,
|
|
26
|
-
amountIn: params.amountIn,
|
|
27
|
-
fee: params.fee,
|
|
28
|
-
sqrtPriceLimitX96: params.sqrtPriceLimitX96 ?? BigInt(0)
|
|
29
|
-
}]
|
|
30
|
-
});
|
|
31
|
-
return {
|
|
32
|
-
amountOut: result[0],
|
|
33
|
-
sqrtPriceX96After: result[1],
|
|
34
|
-
initializedTicksCrossed: result[2],
|
|
35
|
-
gasEstimate: result[3]
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Get a price quote for receiving an exact amount of output tokens on Uniswap V3
|
|
40
|
-
* @param params Parameters for the quote
|
|
41
|
-
* @returns Quote result including required input amount
|
|
42
|
-
*/
|
|
43
|
-
async quoteExactOutputV3(params) {
|
|
44
|
-
const addresses = chunkXQ2VMR26_js.getAddresses(this.chainId);
|
|
45
|
-
const { result } = await this.publicClient.simulateContract({
|
|
46
|
-
address: addresses.v3Quoter,
|
|
47
|
-
abi: chunkEFAPDN4J_js.quoterV2Abi,
|
|
48
|
-
functionName: "quoteExactOutputSingle",
|
|
49
|
-
args: [{
|
|
50
|
-
tokenIn: params.tokenIn,
|
|
51
|
-
tokenOut: params.tokenOut,
|
|
52
|
-
fee: params.fee,
|
|
53
|
-
amountOut: params.amountOut,
|
|
54
|
-
sqrtPriceLimitX96: params.sqrtPriceLimitX96 ?? BigInt(0)
|
|
55
|
-
}]
|
|
56
|
-
});
|
|
57
|
-
return {
|
|
58
|
-
amountIn: result[0],
|
|
59
|
-
sqrtPriceX96After: result[1],
|
|
60
|
-
initializedTicksCrossed: result[2],
|
|
61
|
-
gasEstimate: result[3]
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Get a price quote for swapping an exact amount of input tokens on Uniswap V2
|
|
66
|
-
* @param params Parameters for the quote
|
|
67
|
-
* @returns Array of amounts for each step in the path
|
|
68
|
-
*/
|
|
69
|
-
async quoteExactInputV2(params) {
|
|
70
|
-
const addresses = chunkXQ2VMR26_js.getAddresses(this.chainId);
|
|
71
|
-
if (!addresses.univ2Router02) {
|
|
72
|
-
throw new Error("Uniswap V2 Router not available on this chain");
|
|
73
|
-
}
|
|
74
|
-
const result = await this.publicClient.readContract({
|
|
75
|
-
address: addresses.univ2Router02,
|
|
76
|
-
abi: chunkEFAPDN4J_js.uniswapV2Router02Abi,
|
|
77
|
-
functionName: "getAmountsOut",
|
|
78
|
-
args: [params.amountIn, params.path]
|
|
79
|
-
});
|
|
80
|
-
return [...result];
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Get a price quote for receiving an exact amount of output tokens on Uniswap V2
|
|
84
|
-
* @param params Parameters for the quote
|
|
85
|
-
* @returns Array of amounts for each step in the path
|
|
86
|
-
*/
|
|
87
|
-
async quoteExactOutputV2(params) {
|
|
88
|
-
const addresses = chunkXQ2VMR26_js.getAddresses(this.chainId);
|
|
89
|
-
if (!addresses.univ2Router02) {
|
|
90
|
-
throw new Error("Uniswap V2 Router not available on this chain");
|
|
91
|
-
}
|
|
92
|
-
const result = await this.publicClient.readContract({
|
|
93
|
-
address: addresses.univ2Router02,
|
|
94
|
-
abi: chunkEFAPDN4J_js.uniswapV2Router02Abi,
|
|
95
|
-
functionName: "getAmountsIn",
|
|
96
|
-
args: [params.amountOut, params.path]
|
|
97
|
-
});
|
|
98
|
-
return [...result];
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Get a price quote for swapping an exact amount of input tokens on Uniswap V4
|
|
102
|
-
* @param params Parameters for the quote
|
|
103
|
-
* @returns Quote result for V4 pools
|
|
104
|
-
*/
|
|
105
|
-
async quoteExactInputV4(params) {
|
|
106
|
-
const addresses = chunkXQ2VMR26_js.getAddresses(this.chainId);
|
|
107
|
-
const quoterAddress = addresses.dopplerLens;
|
|
108
|
-
if (!quoterAddress) {
|
|
109
|
-
throw new Error("No V4 quoter available on this chain");
|
|
110
|
-
}
|
|
111
|
-
try {
|
|
112
|
-
const { result } = await this.publicClient.simulateContract({
|
|
113
|
-
address: quoterAddress,
|
|
114
|
-
abi: chunkEFAPDN4J_js.v4QuoterAbi,
|
|
115
|
-
functionName: "quoteExactInputSingle",
|
|
116
|
-
args: [{
|
|
117
|
-
poolKey: params.poolKey,
|
|
118
|
-
zeroForOne: params.zeroForOne,
|
|
119
|
-
exactAmount: params.exactAmount,
|
|
120
|
-
hookData: params.hookData ?? "0x"
|
|
121
|
-
}]
|
|
122
|
-
});
|
|
123
|
-
return {
|
|
124
|
-
amountOut: result[0],
|
|
125
|
-
gasEstimate: result[1]
|
|
126
|
-
};
|
|
127
|
-
} catch (simulateError) {
|
|
128
|
-
throw simulateError;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Get a price quote for receiving an exact amount of output tokens on Uniswap V4
|
|
133
|
-
* @param params Parameters for the quote
|
|
134
|
-
* @returns Quote result for V4 pools
|
|
135
|
-
*/
|
|
136
|
-
async quoteExactOutputV4(params) {
|
|
137
|
-
const addresses = chunkXQ2VMR26_js.getAddresses(this.chainId);
|
|
138
|
-
const quoterAddress = addresses.dopplerLens;
|
|
139
|
-
if (!quoterAddress) {
|
|
140
|
-
throw new Error("No V4 quoter available on this chain");
|
|
141
|
-
}
|
|
142
|
-
const { result } = await this.publicClient.simulateContract({
|
|
143
|
-
address: quoterAddress,
|
|
144
|
-
abi: chunkEFAPDN4J_js.v4QuoterAbi,
|
|
145
|
-
functionName: "quoteExactOutputSingle",
|
|
146
|
-
args: [{
|
|
147
|
-
poolKey: params.poolKey,
|
|
148
|
-
zeroForOne: params.zeroForOne,
|
|
149
|
-
exactAmount: params.exactAmount,
|
|
150
|
-
hookData: params.hookData ?? "0x"
|
|
151
|
-
}]
|
|
152
|
-
});
|
|
153
|
-
return {
|
|
154
|
-
amountIn: result[0],
|
|
155
|
-
gasEstimate: result[1]
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
exports.Quoter = Quoter;
|
|
161
|
-
//# sourceMappingURL=chunk-3OZRDL3O.js.map
|
|
162
|
-
//# sourceMappingURL=chunk-3OZRDL3O.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/entities/quoter/Quoter.ts"],"names":["getAddresses","quoterV2Abi","uniswapV2Router02Abi","v4QuoterAbi"],"mappings":"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","file":"chunk-3OZRDL3O.js","sourcesContent":["import { type Address, type PublicClient } from 'viem'\nimport { quoterV2Abi, uniswapV2Router02Abi, v4QuoterAbi } from '../../abis'\nimport { getAddresses } from '../../addresses'\n\n/**\n * Unified Quoter for getting price quotes across Uniswap V2, V3, and V4\n * \n * This class provides a unified interface for price discovery across all\n * supported Uniswap versions, abstracting away the differences between\n * V2 router, V3 quoter, and V4 quoter contracts.\n */\nexport class Quoter {\n private publicClient: PublicClient\n private chainId: number\n \n constructor(publicClient: PublicClient, chainId: number) {\n this.publicClient = publicClient\n this.chainId = chainId\n }\n \n /**\n * Get a price quote for swapping an exact amount of input tokens on Uniswap V3\n * @param params Parameters for the quote\n * @returns Quote result including output amount and price impact\n */\n async quoteExactInputV3(params: {\n tokenIn: Address\n tokenOut: Address\n amountIn: bigint\n fee: number\n sqrtPriceLimitX96?: bigint\n }): Promise<{\n amountOut: bigint\n sqrtPriceX96After: bigint\n initializedTicksCrossed: number\n gasEstimate: bigint\n }> {\n const addresses = getAddresses(this.chainId)\n \n const { result } = await this.publicClient.simulateContract({\n address: addresses.v3Quoter,\n abi: quoterV2Abi,\n functionName: 'quoteExactInputSingle',\n args: [{\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n fee: params.fee,\n sqrtPriceLimitX96: params.sqrtPriceLimitX96 ?? BigInt(0),\n }],\n })\n \n return {\n amountOut: result[0],\n sqrtPriceX96After: result[1],\n initializedTicksCrossed: result[2],\n gasEstimate: result[3],\n }\n }\n \n /**\n * Get a price quote for receiving an exact amount of output tokens on Uniswap V3\n * @param params Parameters for the quote\n * @returns Quote result including required input amount\n */\n async quoteExactOutputV3(params: {\n tokenIn: Address\n tokenOut: Address\n amountOut: bigint\n fee: number\n sqrtPriceLimitX96?: bigint\n }): Promise<{\n amountIn: bigint\n sqrtPriceX96After: bigint\n initializedTicksCrossed: number\n gasEstimate: bigint\n }> {\n const addresses = getAddresses(this.chainId)\n \n const { result } = await this.publicClient.simulateContract({\n address: addresses.v3Quoter,\n abi: quoterV2Abi,\n functionName: 'quoteExactOutputSingle',\n args: [{\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n fee: params.fee,\n amountOut: params.amountOut,\n sqrtPriceLimitX96: params.sqrtPriceLimitX96 ?? BigInt(0),\n }],\n })\n \n return {\n amountIn: result[0],\n sqrtPriceX96After: result[1],\n initializedTicksCrossed: result[2],\n gasEstimate: result[3],\n }\n }\n \n /**\n * Get a price quote for swapping an exact amount of input tokens on Uniswap V2\n * @param params Parameters for the quote\n * @returns Array of amounts for each step in the path\n */\n async quoteExactInputV2(params: {\n amountIn: bigint\n path: Address[]\n }): Promise<bigint[]> {\n const addresses = getAddresses(this.chainId)\n \n if (!addresses.univ2Router02) {\n throw new Error('Uniswap V2 Router not available on this chain')\n }\n \n const result = await this.publicClient.readContract({\n address: addresses.univ2Router02,\n abi: uniswapV2Router02Abi,\n functionName: 'getAmountsOut',\n args: [params.amountIn, params.path],\n })\n \n return [...result] // Convert readonly array to mutable array\n }\n \n /**\n * Get a price quote for receiving an exact amount of output tokens on Uniswap V2\n * @param params Parameters for the quote\n * @returns Array of amounts for each step in the path\n */\n async quoteExactOutputV2(params: {\n amountOut: bigint\n path: Address[]\n }): Promise<bigint[]> {\n const addresses = getAddresses(this.chainId)\n \n if (!addresses.univ2Router02) {\n throw new Error('Uniswap V2 Router not available on this chain')\n }\n \n const result = await this.publicClient.readContract({\n address: addresses.univ2Router02,\n abi: uniswapV2Router02Abi,\n functionName: 'getAmountsIn',\n args: [params.amountOut, params.path],\n })\n \n return [...result] // Convert readonly array to mutable array\n }\n \n /**\n * Get a price quote for swapping an exact amount of input tokens on Uniswap V4\n * @param params Parameters for the quote\n * @returns Quote result for V4 pools\n */\n async quoteExactInputV4(params: {\n poolKey: {\n currency0: Address\n currency1: Address\n fee: number\n tickSpacing: number\n hooks: Address\n }\n zeroForOne: boolean\n exactAmount: bigint\n hookData?: string\n }): Promise<{\n amountOut: bigint\n gasEstimate: bigint\n }> {\n const addresses = getAddresses(this.chainId)\n \n // Use v4Quoter if available, otherwise use dopplerLens (they're the same contract)\n const quoterAddress = addresses.dopplerLens\n \n if (!quoterAddress) {\n throw new Error('No V4 quoter available on this chain')\n }\n \n try {\n // First try simulateContract for better gas estimation\n const { result } = await this.publicClient.simulateContract({\n address: quoterAddress,\n abi: v4QuoterAbi,\n functionName: 'quoteExactInputSingle',\n args: [{\n poolKey: params.poolKey,\n zeroForOne: params.zeroForOne,\n exactAmount: params.exactAmount,\n hookData: (params.hookData ?? '0x') as `0x${string}`,\n }],\n })\n \n return {\n amountOut: result[0],\n gasEstimate: result[1],\n }\n } catch (simulateError) {\n // If simulation fails, throw the error\n // Most V4 quoters need simulation, not direct reads\n throw simulateError\n }\n }\n\n /**\n * Get a price quote for receiving an exact amount of output tokens on Uniswap V4\n * @param params Parameters for the quote\n * @returns Quote result for V4 pools\n */\n async quoteExactOutputV4(params: {\n poolKey: {\n currency0: Address\n currency1: Address\n fee: number\n tickSpacing: number\n hooks: Address\n }\n zeroForOne: boolean\n exactAmount: bigint\n hookData?: string\n }): Promise<{\n amountIn: bigint\n gasEstimate: bigint\n }> {\n const addresses = getAddresses(this.chainId)\n \n // Use v4Quoter if available, otherwise use dopplerLens (they're the same contract)\n const quoterAddress = addresses.dopplerLens\n \n if (!quoterAddress) {\n throw new Error('No V4 quoter available on this chain')\n }\n \n const { result } = await this.publicClient.simulateContract({\n address: quoterAddress,\n abi: v4QuoterAbi,\n functionName: 'quoteExactOutputSingle',\n args: [{\n poolKey: params.poolKey,\n zeroForOne: params.zeroForOne,\n exactAmount: params.exactAmount,\n hookData: (params.hookData ?? '0x') as `0x${string}`,\n }],\n })\n \n return {\n amountIn: result[0],\n gasEstimate: result[1],\n }\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/tickMath.ts"],"names":[],"mappings":";AAOO,IAAM,QAAW,GAAA;AACjB,IAAM,QAAW,GAAA;AACjB,IAAM,cAAiB,GAAA;AACvB,IAAM,cAAiB,GAAA;AACvB,IAAM,MAAM,EAAM,IAAA;AAOlB,SAAS,mBAAmB,IAAsB,EAAA;AACvD,EAAI,IAAA,IAAA,GAAO,QAAY,IAAA,IAAA,GAAO,QAAU,EAAA;AACtC,IAAM,MAAA,IAAI,MAAM,oBAAoB,CAAA;AAAA;AAGtC,EAAA,MAAM,OAAU,GAAA,IAAA,GAAO,CAAI,GAAA,CAAC,IAAO,GAAA,IAAA;AAEnC,EAAA,IAAI,KAAS,GAAA,CAAA,OAAA,GAAU,CAAS,MAAA,CAAA,GAC5B,mCACA,GAAA,oCAAA;AAEJ,EAAA,IAAA,CAAK,OAAU,GAAA,CAAA,MAAS,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACpF,EAAA,IAAA,CAAK,OAAU,GAAA,CAAA,MAAS,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACpF,EAAA,IAAA,CAAK,OAAU,GAAA,CAAA,MAAS,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACpF,EAAA,IAAA,CAAK,OAAU,GAAA,EAAA,MAAU,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACrF,EAAA,IAAA,CAAK,OAAU,GAAA,EAAA,MAAU,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACrF,EAAA,IAAA,CAAK,OAAU,GAAA,EAAA,MAAU,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACrF,EAAA,IAAA,CAAK,OAAU,GAAA,GAAA,MAAU,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACrF,EAAA,IAAA,CAAK,OAAU,GAAA,GAAA,MAAW,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACtF,EAAA,IAAA,CAAK,OAAU,GAAA,GAAA,MAAW,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACtF,EAAA,IAAA,CAAK,OAAU,GAAA,IAAA,MAAW,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACtF,EAAA,IAAA,CAAK,OAAU,GAAA,IAAA,MAAW,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACtF,EAAA,IAAA,CAAK,OAAU,GAAA,IAAA,MAAY,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACvF,EAAA,IAAA,CAAK,OAAU,GAAA,IAAA,MAAY,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACvF,EAAA,IAAA,CAAK,OAAU,GAAA,KAAA,MAAY,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACvF,EAAA,IAAA,CAAK,OAAU,GAAA,KAAA,MAAY,CAAG,EAAA,KAAA,GAAS,QAAQ,mCAAwC,IAAA,IAAA;AACvF,EAAA,IAAA,CAAK,OAAU,GAAA,KAAA,MAAa,CAAG,EAAA,KAAA,GAAS,QAAQ,kCAAuC,IAAA,IAAA;AACvF,EAAA,IAAA,CAAK,OAAU,GAAA,MAAA,MAAa,CAAG,EAAA,KAAA,GAAS,QAAQ,iCAAsC,IAAA,IAAA;AACtF,EAAA,IAAA,CAAK,OAAU,GAAA,MAAA,MAAa,CAAG,EAAA,KAAA,GAAS,QAAQ,+BAAoC,IAAA,IAAA;AACpF,EAAA,IAAA,CAAK,OAAU,GAAA,MAAA,MAAa,CAAG,EAAA,KAAA,GAAS,QAAQ,0BAA+B,IAAA,IAAA;AAE/E,EAAA,IAAI,IAAO,GAAA,CAAA,EAAY,KAAA,GAAA,CAAA,EAAA,IAAM,OAAO,EAAM,IAAA,KAAA;AAG1C,EAAA,OAAO,KAAS,IAAA,GAAA;AAClB;AAOO,SAAS,mBAAmB,YAA8B,EAAA;AAC/D,EAAI,IAAA,YAAA,GAAe,cAAkB,IAAA,YAAA,IAAgB,cAAgB,EAAA;AACnE,IAAM,MAAA,IAAI,MAAM,0BAA0B,CAAA;AAAA;AAG5C,EAAA,MAAM,QAAQ,YAAgB,IAAA,GAAA;AAE9B,EAAA,IAAI,CAAI,GAAA,KAAA;AACR,EAAA,IAAI,GAAM,GAAA,EAAA;AAEV,EAAI,IAAA,CAAA,GAAI,CAAI,GAAA,mCAAA,GAAsC,EAAK,GAAA,EAAA;AACvD,EAAA,GAAA,GAAM,MAAO,CAAK,IAAA,EAAA;AAClB,EAAA,CAAA,GAAI,KAAM,CAAI,GAAA,IAAA;AAEd,EAAI,CAAA,GAAA,CAAA,GAAI,sBAAsB,EAAK,GAAA,EAAA;AACnC,EAAA,GAAA,GAAM,MAAO,CAAK,IAAA,EAAA;AAClB,EAAA,CAAA,GAAI,KAAM,CAAI,GAAA,GAAA;AAEd,EAAI,CAAA,GAAA,CAAA,GAAI,cAAc,EAAK,GAAA,EAAA;AAC3B,EAAA,GAAA,GAAM,MAAO,CAAK,IAAA,EAAA;AAClB,EAAA,CAAA,GAAI,KAAM,CAAI,GAAA,GAAA;AAEd,EAAI,CAAA,GAAA,CAAA,GAAI,UAAU,EAAK,GAAA,EAAA;AACvB,EAAA,GAAA,GAAM,MAAO,CAAK,IAAA,EAAA;AAClB,EAAA,CAAA,GAAI,KAAM,CAAI,GAAA,GAAA;AAEd,EAAI,CAAA,GAAA,CAAA,GAAI,QAAQ,EAAK,GAAA,EAAA;AACrB,EAAA,GAAA,GAAM,MAAO,CAAK,IAAA,EAAA;AAClB,EAAA,CAAA,GAAI,KAAM,CAAI,GAAA,EAAA;AAEd,EAAI,CAAA,GAAA,CAAA,GAAI,OAAO,EAAK,GAAA,EAAA;AACpB,EAAA,GAAA,GAAM,MAAO,CAAK,IAAA,EAAA;AAClB,EAAA,CAAA,GAAI,KAAM,CAAI,GAAA,EAAA;AAEd,EAAI,CAAA,GAAA,CAAA,GAAI,OAAO,EAAK,GAAA,EAAA;AACpB,EAAA,GAAA,GAAM,MAAO,CAAK,IAAA,EAAA;AAClB,EAAA,CAAA,GAAI,KAAM,CAAI,GAAA,EAAA;AAEd,EAAI,CAAA,GAAA,CAAA,GAAI,OAAO,EAAK,GAAA,EAAA;AACpB,EAAA,GAAA,GAAM,GAAM,GAAA,CAAA;AAEZ,EAAI,IAAA,IAAA,GAAQ,MAAM,IAAS,IAAA,GAAA;AAE3B,EAAA,CAAA,GAAI,KAAS,IAAA,GAAA;AACb,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AACpB,EAAA,CAAA,GAAI,CAAK,IAAA,CAAA;AAET,EAAA,CAAA,GAAK,IAAI,CAAM,IAAA,IAAA;AACf,EAAA,CAAA,GAAI,CAAK,IAAA,IAAA;AACT,EAAA,IAAA,GAAO,OAAQ,CAAK,IAAA,GAAA;AAEpB,EAAA,MAAM,gBAAgB,IAAO,GAAA,yBAAA;AAE7B,EAAA,MAAM,OAAU,GAAA,MAAA,CAAQ,aAAgB,GAAA,sCAAA,IAA2C,IAAI,CAAA;AACvF,EAAA,MAAM,QAAW,GAAA,MAAA,CAAQ,aAAgB,GAAA,wCAAA,IAA6C,IAAI,CAAA;AAE1F,EAAA,OAAO,YAAY,QAAW,GAAA,OAAA,GAAU,mBAAmB,QAAQ,CAAA,IAAK,eAAe,QAAW,GAAA,OAAA;AACpG;AAUO,SAAS,mBACd,CAAA,YAAA,EACA,SACA,EAAA,SAAA,EACA,eAAe,IACP,EAAA;AACR,EAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,YAAY,CAAA,GAAI,OAAO,GAAG,CAAA;AAC/C,EAAA,MAAM,eAAe,KAAQ,GAAA,KAAA;AAG7B,EAAM,MAAA,iBAAA,GAAoB,OAAO,SAAY,GAAA,SAAA,CAAA;AAC7C,EAAA,MAAM,gBAAgB,YAAe,GAAA,iBAAA;AAErC,EAAO,OAAA,YAAA,GAAe,gBAAgB,CAAI,GAAA,aAAA;AAC5C;AASO,SAAS,mBAAA,CACd,KACA,EAAA,SAAA,EACA,SACQ,EAAA;AAER,EAAM,MAAA,iBAAA,GAAoB,OAAO,SAAY,GAAA,SAAA,CAAA;AAC7C,EAAA,MAAM,gBAAgB,KAAQ,GAAA,iBAAA;AAG9B,EAAM,MAAA,SAAA,GAAY,IAAK,CAAA,IAAA,CAAK,aAAa,CAAA;AACzC,EAAA,OAAO,OAAO,IAAK,CAAA,KAAA,CAAM,YAAY,MAAO,CAAA,GAAG,CAAC,CAAC,CAAA;AACnD;AAUO,SAAS,WACd,CAAA,IAAA,EACA,SACA,EAAA,SAAA,EACA,eAAe,IACP,EAAA;AACR,EAAM,MAAA,YAAA,GAAe,mBAAmB,IAAI,CAAA;AAC5C,EAAA,OAAO,mBAAoB,CAAA,YAAA,EAAc,SAAW,EAAA,SAAA,EAAW,YAAY,CAAA;AAC7E;AASO,SAAS,WAAA,CACd,KACA,EAAA,SAAA,EACA,SACQ,EAAA;AACR,EAAA,MAAM,YAAe,GAAA,mBAAA,CAAoB,KAAO,EAAA,SAAA,EAAW,SAAS,CAAA;AACpE,EAAA,OAAO,mBAAmB,YAAY,CAAA;AACxC;AAQO,SAAS,oBAAA,CACd,MACA,WACQ,EAAA;AACR,EAAA,MAAM,OAAU,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,GAAO,WAAW,CAAI,GAAA,WAAA;AACjD,EAAI,IAAA,OAAA,GAAU,UAAiB,OAAA,QAAA;AAC/B,EAAI,IAAA,OAAA,GAAU,UAAiB,OAAA,QAAA;AAC/B,EAAO,OAAA,OAAA;AACT","file":"chunk-4K5GBNQV.mjs","sourcesContent":["/**\n * Tick math utilities for Uniswap V3/V4 price calculations\n * \n * These utilities help convert between ticks, sqrtPriceX96 values, and human-readable prices\n */\n\n// Constants\nexport const MIN_TICK = -887272\nexport const MAX_TICK = 887272\nexport const MIN_SQRT_RATIO = 4295128739n\nexport const MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342n\nexport const Q96 = 2n ** 96n\n\n/**\n * Get the sqrt ratio at a given tick\n * @param tick The tick value\n * @returns The sqrt price as a Q64.96 fixed point number\n */\nexport function getSqrtRatioAtTick(tick: number): bigint {\n if (tick < MIN_TICK || tick > MAX_TICK) {\n throw new Error('Tick out of bounds')\n }\n\n const absTick = tick < 0 ? -tick : tick\n\n let ratio = (absTick & 0x1) !== 0\n ? 0xfffcb933bd6fad37aa2d162d1a594001n\n : 0x100000000000000000000000000000000n\n\n if ((absTick & 0x2) !== 0) ratio = (ratio * 0xfff97272373d413259a46990580e213an) >> 128n\n if ((absTick & 0x4) !== 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdccn) >> 128n\n if ((absTick & 0x8) !== 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0n) >> 128n\n if ((absTick & 0x10) !== 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644n) >> 128n\n if ((absTick & 0x20) !== 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0n) >> 128n\n if ((absTick & 0x40) !== 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861n) >> 128n\n if ((absTick & 0x80) !== 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053n) >> 128n\n if ((absTick & 0x100) !== 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4n) >> 128n\n if ((absTick & 0x200) !== 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54n) >> 128n\n if ((absTick & 0x400) !== 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3n) >> 128n\n if ((absTick & 0x800) !== 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9n) >> 128n\n if ((absTick & 0x1000) !== 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825n) >> 128n\n if ((absTick & 0x2000) !== 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5n) >> 128n\n if ((absTick & 0x4000) !== 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7n) >> 128n\n if ((absTick & 0x8000) !== 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6n) >> 128n\n if ((absTick & 0x10000) !== 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9n) >> 128n\n if ((absTick & 0x20000) !== 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604n) >> 128n\n if ((absTick & 0x40000) !== 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98n) >> 128n\n if ((absTick & 0x80000) !== 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2n) >> 128n\n\n if (tick > 0) ratio = (2n ** 256n - 1n) / ratio\n\n // Shift to get Q64.96\n return ratio >> 32n\n}\n\n/**\n * Get the tick at a given sqrt ratio\n * @param sqrtRatioX96 The sqrt price as a Q64.96 fixed point number\n * @returns The tick value\n */\nexport function getTickAtSqrtRatio(sqrtRatioX96: bigint): number {\n if (sqrtRatioX96 < MIN_SQRT_RATIO || sqrtRatioX96 >= MAX_SQRT_RATIO) {\n throw new Error('sqrt ratio out of bounds')\n }\n\n const ratio = sqrtRatioX96 << 32n\n\n let r = ratio\n let msb = 0n\n\n let f = r > 0xffffffffffffffffffffffffffffffffn ? 1n : 0n\n msb = msb | (f << 7n)\n r = r >> (f * 128n)\n\n f = r > 0xffffffffffffffffn ? 1n : 0n\n msb = msb | (f << 6n)\n r = r >> (f * 64n)\n\n f = r > 0xffffffffn ? 1n : 0n\n msb = msb | (f << 5n)\n r = r >> (f * 32n)\n\n f = r > 0xffffn ? 1n : 0n\n msb = msb | (f << 4n)\n r = r >> (f * 16n)\n\n f = r > 0xffn ? 1n : 0n\n msb = msb | (f << 3n)\n r = r >> (f * 8n)\n\n f = r > 0xfn ? 1n : 0n\n msb = msb | (f << 2n)\n r = r >> (f * 4n)\n\n f = r > 0x3n ? 1n : 0n\n msb = msb | (f << 1n)\n r = r >> (f * 2n)\n\n f = r > 0x1n ? 1n : 0n\n msb = msb | f\n\n let log2 = (msb - 128n) << 64n\n \n r = ratio >> msb\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 63n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 62n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 61n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 60n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 59n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 58n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 57n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 56n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 55n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 54n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 53n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 52n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 51n)\n r = r >> f\n\n r = (r * r) >> 127n\n f = r >> 128n\n log2 = log2 | (f << 50n)\n\n const log_sqrt10001 = log2 * 255738958999603826347141n\n\n const tickLow = Number((log_sqrt10001 - 3402992956809132418596140100660247210n) >> 128n)\n const tickHigh = Number((log_sqrt10001 + 291339464771989622907027621153398088495n) >> 128n)\n\n return tickLow === tickHigh ? tickLow : getSqrtRatioAtTick(tickHigh) <= sqrtRatioX96 ? tickHigh : tickLow\n}\n\n/**\n * Convert sqrtPriceX96 to a human-readable price\n * @param sqrtPriceX96 The sqrt price as a Q64.96 fixed point number\n * @param decimals0 Decimals of token0\n * @param decimals1 Decimals of token1\n * @param token0IsBase Whether to return price in terms of token0 (true) or token1 (false)\n * @returns The price as a number\n */\nexport function sqrtPriceX96ToPrice(\n sqrtPriceX96: bigint,\n decimals0: number,\n decimals1: number,\n token0IsBase = true\n): number {\n const price = Number(sqrtPriceX96) / Number(Q96)\n const priceSquared = price * price\n \n // Adjust for decimals\n const decimalAdjustment = 10 ** (decimals1 - decimals0)\n const adjustedPrice = priceSquared * decimalAdjustment\n \n return token0IsBase ? adjustedPrice : 1 / adjustedPrice\n}\n\n/**\n * Convert a human-readable price to sqrtPriceX96\n * @param price The price (token1/token0)\n * @param decimals0 Decimals of token0\n * @param decimals1 Decimals of token1\n * @returns The sqrt price as a Q64.96 fixed point number\n */\nexport function priceToSqrtPriceX96(\n price: number,\n decimals0: number,\n decimals1: number\n): bigint {\n // Adjust for decimals\n const decimalAdjustment = 10 ** (decimals1 - decimals0)\n const adjustedPrice = price / decimalAdjustment\n \n // Calculate sqrt and convert to X96\n const sqrtPrice = Math.sqrt(adjustedPrice)\n return BigInt(Math.floor(sqrtPrice * Number(Q96)))\n}\n\n/**\n * Convert a tick to a human-readable price\n * @param tick The tick value\n * @param decimals0 Decimals of token0\n * @param decimals1 Decimals of token1\n * @param token0IsBase Whether to return price in terms of token0 (true) or token1 (false)\n * @returns The price as a number\n */\nexport function tickToPrice(\n tick: number,\n decimals0: number,\n decimals1: number,\n token0IsBase = true\n): number {\n const sqrtPriceX96 = getSqrtRatioAtTick(tick)\n return sqrtPriceX96ToPrice(sqrtPriceX96, decimals0, decimals1, token0IsBase)\n}\n\n/**\n * Convert a human-readable price to a tick\n * @param price The price (token1/token0)\n * @param decimals0 Decimals of token0\n * @param decimals1 Decimals of token1\n * @returns The tick value\n */\nexport function priceToTick(\n price: number,\n decimals0: number,\n decimals1: number\n): number {\n const sqrtPriceX96 = priceToSqrtPriceX96(price, decimals0, decimals1)\n return getTickAtSqrtRatio(sqrtPriceX96)\n}\n\n/**\n * Get the nearest usable tick for a given tick spacing\n * @param tick The desired tick\n * @param tickSpacing The tick spacing of the pool\n * @returns The nearest valid tick\n */\nexport function getNearestUsableTick(\n tick: number,\n tickSpacing: number\n): number {\n const rounded = Math.round(tick / tickSpacing) * tickSpacing\n if (rounded < MIN_TICK) return MIN_TICK\n if (rounded > MAX_TICK) return MAX_TICK\n return rounded\n}"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/entities/auction/StaticAuction.ts"],"names":["uniswapV3PoolAbi","getAddresses","airlockAbi","getAddress"],"mappings":"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","file":"chunk-5IT5OXQ5.js","sourcesContent":["import { type Address, type PublicClient, getAddress } from 'viem'\nimport type { PoolInfo } 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: PublicClient\n private poolAddress: Address\n \n constructor(client: PublicClient, 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.client.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'slot0',\n }),\n this.client.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'liquidity',\n }),\n this.client.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'token0',\n }),\n this.client.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'token1',\n }),\n this.client.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.client.getChainId()\n const addresses = getAddresses(chainId)\n \n const assetData = await this.client.readContract({\n address: addresses.airlock,\n abi: airlockAbi,\n functionName: 'getAssetData',\n args: [token0],\n })\n \n // The getAssetData returns: [numeraire, timelock, governance, liquidityMigrator, poolInitializer, pool, migrationPool, numTokensToSell, totalSupply, integrator]\n // If token0 has asset data in Airlock (pool is not zero), it's the auction token\n const isToken0AuctionToken = assetData[5] !== getAddress('0x0000000000000000000000000000000000000000')\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.client.getChainId()\n const addresses = getAddresses(chainId)\n \n const assetData = await this.client.readContract({\n address: addresses.airlock,\n abi: airlockAbi,\n functionName: 'getAssetData',\n args: [tokenAddress],\n })\n \n // The getAssetData returns: [numeraire, timelock, governance, liquidityMigrator, poolInitializer, pool, migrationPool, numTokensToSell, totalSupply, integrator]\n // Check if the asset is graduated (liquidityMigrator is set to address(0))\n return assetData[3] === getAddress('0x0000000000000000000000000000000000000000')\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, token1] = await Promise.all([\n this.client.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'token0',\n }),\n this.client.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.client.readContract({\n address: this.poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'liquidity',\n })\n }\n}"]}
|
package/dist/chunk-7F5IXZLH.js
DELETED
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkER42VG7H_js = require('./chunk-ER42VG7H.js');
|
|
4
|
-
|
|
5
|
-
// src/builders.ts
|
|
6
|
-
function computeTicks(priceRange, tickSpacing) {
|
|
7
|
-
const startTick = Math.floor(Math.log(priceRange.startPrice) / Math.log(1.0001) / tickSpacing) * tickSpacing;
|
|
8
|
-
const endTick = Math.ceil(Math.log(priceRange.endPrice) / Math.log(1.0001) / tickSpacing) * tickSpacing;
|
|
9
|
-
return { startTick, endTick };
|
|
10
|
-
}
|
|
11
|
-
function computeOptimalGamma(startTick, endTick, durationDays, epochLength, tickSpacing) {
|
|
12
|
-
const totalEpochs = durationDays * chunkER42VG7H_js.DAY_SECONDS / epochLength;
|
|
13
|
-
const tickDelta = Math.abs(endTick - startTick);
|
|
14
|
-
let gamma = Math.ceil(tickDelta / totalEpochs) * tickSpacing;
|
|
15
|
-
gamma = Math.max(tickSpacing, gamma);
|
|
16
|
-
if (gamma % tickSpacing !== 0) {
|
|
17
|
-
throw new Error("Computed gamma must be divisible by tick spacing");
|
|
18
|
-
}
|
|
19
|
-
return gamma;
|
|
20
|
-
}
|
|
21
|
-
var StaticAuctionBuilder = class {
|
|
22
|
-
tokenConfig(params) {
|
|
23
|
-
if (params.type === "doppler404") {
|
|
24
|
-
const p = params;
|
|
25
|
-
this.token = {
|
|
26
|
-
type: "doppler404",
|
|
27
|
-
name: p.name,
|
|
28
|
-
symbol: p.symbol,
|
|
29
|
-
baseURI: p.baseURI,
|
|
30
|
-
unit: p.unit
|
|
31
|
-
};
|
|
32
|
-
} else {
|
|
33
|
-
const p = params;
|
|
34
|
-
this.token = {
|
|
35
|
-
name: p.name,
|
|
36
|
-
symbol: p.symbol,
|
|
37
|
-
tokenURI: p.tokenURI,
|
|
38
|
-
yearlyMintRate: p.yearlyMintRate ?? chunkER42VG7H_js.DEFAULT_V3_YEARLY_MINT_RATE
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
return this;
|
|
42
|
-
}
|
|
43
|
-
saleConfig(params) {
|
|
44
|
-
this.sale = {
|
|
45
|
-
initialSupply: params.initialSupply,
|
|
46
|
-
numTokensToSell: params.numTokensToSell,
|
|
47
|
-
numeraire: params.numeraire
|
|
48
|
-
};
|
|
49
|
-
return this;
|
|
50
|
-
}
|
|
51
|
-
// Provide pool ticks directly
|
|
52
|
-
poolByTicks(params) {
|
|
53
|
-
const fee = params.fee ?? chunkER42VG7H_js.DEFAULT_V3_FEE;
|
|
54
|
-
const startTick = params.startTick ?? chunkER42VG7H_js.DEFAULT_V3_START_TICK;
|
|
55
|
-
const endTick = params.endTick ?? chunkER42VG7H_js.DEFAULT_V3_END_TICK;
|
|
56
|
-
this.pool = {
|
|
57
|
-
startTick,
|
|
58
|
-
endTick,
|
|
59
|
-
fee,
|
|
60
|
-
numPositions: params.numPositions ?? chunkER42VG7H_js.DEFAULT_V3_NUM_POSITIONS,
|
|
61
|
-
maxShareToBeSold: params.maxShareToBeSold ?? chunkER42VG7H_js.DEFAULT_V3_MAX_SHARE_TO_BE_SOLD
|
|
62
|
-
};
|
|
63
|
-
return this;
|
|
64
|
-
}
|
|
65
|
-
// Or compute ticks from a price range (tick spacing is inferred from fee)
|
|
66
|
-
poolByPriceRange(params) {
|
|
67
|
-
const fee = params.fee ?? chunkER42VG7H_js.DEFAULT_V3_FEE;
|
|
68
|
-
const tickSpacing = fee === 100 ? chunkER42VG7H_js.TICK_SPACINGS[100] : fee === 500 ? chunkER42VG7H_js.TICK_SPACINGS[500] : fee === 3e3 ? chunkER42VG7H_js.TICK_SPACINGS[3e3] : chunkER42VG7H_js.TICK_SPACINGS[1e4];
|
|
69
|
-
const ticks = computeTicks(params.priceRange, tickSpacing);
|
|
70
|
-
return this.poolByTicks({
|
|
71
|
-
startTick: ticks.startTick,
|
|
72
|
-
endTick: ticks.endTick,
|
|
73
|
-
fee,
|
|
74
|
-
numPositions: params.numPositions,
|
|
75
|
-
maxShareToBeSold: params.maxShareToBeSold
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
withVesting(params) {
|
|
79
|
-
if (!params) {
|
|
80
|
-
this.vesting = void 0;
|
|
81
|
-
return this;
|
|
82
|
-
}
|
|
83
|
-
this.vesting = {
|
|
84
|
-
duration: Number(params.duration ?? chunkER42VG7H_js.DEFAULT_V3_VESTING_DURATION),
|
|
85
|
-
cliffDuration: params.cliffDuration ?? 0
|
|
86
|
-
};
|
|
87
|
-
return this;
|
|
88
|
-
}
|
|
89
|
-
withGovernance(params) {
|
|
90
|
-
if (!params) {
|
|
91
|
-
this.governance = {
|
|
92
|
-
initialVotingDelay: chunkER42VG7H_js.DEFAULT_V3_INITIAL_VOTING_DELAY,
|
|
93
|
-
initialVotingPeriod: chunkER42VG7H_js.DEFAULT_V3_INITIAL_VOTING_PERIOD,
|
|
94
|
-
initialProposalThreshold: chunkER42VG7H_js.DEFAULT_V3_INITIAL_PROPOSAL_THRESHOLD
|
|
95
|
-
};
|
|
96
|
-
return this;
|
|
97
|
-
}
|
|
98
|
-
if ("useDefaults" in params) {
|
|
99
|
-
this.governance = {
|
|
100
|
-
initialVotingDelay: chunkER42VG7H_js.DEFAULT_V3_INITIAL_VOTING_DELAY,
|
|
101
|
-
initialVotingPeriod: chunkER42VG7H_js.DEFAULT_V3_INITIAL_VOTING_PERIOD,
|
|
102
|
-
initialProposalThreshold: chunkER42VG7H_js.DEFAULT_V3_INITIAL_PROPOSAL_THRESHOLD
|
|
103
|
-
};
|
|
104
|
-
return this;
|
|
105
|
-
}
|
|
106
|
-
if ("noOp" in params) {
|
|
107
|
-
this.governance = { noOp: true };
|
|
108
|
-
return this;
|
|
109
|
-
}
|
|
110
|
-
this.governance = params;
|
|
111
|
-
return this;
|
|
112
|
-
}
|
|
113
|
-
withMigration(migration) {
|
|
114
|
-
this.migration = migration;
|
|
115
|
-
return this;
|
|
116
|
-
}
|
|
117
|
-
withUserAddress(address) {
|
|
118
|
-
this.userAddress = address;
|
|
119
|
-
return this;
|
|
120
|
-
}
|
|
121
|
-
withIntegrator(address) {
|
|
122
|
-
this.integrator = address ?? chunkER42VG7H_js.ZERO_ADDRESS;
|
|
123
|
-
return this;
|
|
124
|
-
}
|
|
125
|
-
build() {
|
|
126
|
-
if (!this.token) throw new Error("tokenConfig is required");
|
|
127
|
-
if (!this.sale) throw new Error("saleConfig is required");
|
|
128
|
-
if (!this.pool) throw new Error("pool configuration is required");
|
|
129
|
-
if (!this.migration) throw new Error("migration configuration is required");
|
|
130
|
-
if (!this.userAddress) throw new Error("userAddress is required");
|
|
131
|
-
if (!this.governance) throw new Error("governance configuration is required; call withGovernance()");
|
|
132
|
-
return {
|
|
133
|
-
token: this.token,
|
|
134
|
-
sale: this.sale,
|
|
135
|
-
pool: this.pool,
|
|
136
|
-
vesting: this.vesting,
|
|
137
|
-
governance: this.governance,
|
|
138
|
-
migration: this.migration,
|
|
139
|
-
integrator: this.integrator ?? chunkER42VG7H_js.ZERO_ADDRESS,
|
|
140
|
-
userAddress: this.userAddress
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
var DynamicAuctionBuilder = class {
|
|
145
|
-
tokenConfig(params) {
|
|
146
|
-
if (params.type === "doppler404") {
|
|
147
|
-
const p = params;
|
|
148
|
-
this.token = {
|
|
149
|
-
type: "doppler404",
|
|
150
|
-
name: p.name,
|
|
151
|
-
symbol: p.symbol,
|
|
152
|
-
baseURI: p.baseURI,
|
|
153
|
-
unit: p.unit
|
|
154
|
-
};
|
|
155
|
-
} else {
|
|
156
|
-
const p = params;
|
|
157
|
-
this.token = {
|
|
158
|
-
name: p.name,
|
|
159
|
-
symbol: p.symbol,
|
|
160
|
-
tokenURI: p.tokenURI,
|
|
161
|
-
yearlyMintRate: p.yearlyMintRate ?? chunkER42VG7H_js.DEFAULT_V4_YEARLY_MINT_RATE
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
return this;
|
|
165
|
-
}
|
|
166
|
-
saleConfig(params) {
|
|
167
|
-
this.sale = {
|
|
168
|
-
initialSupply: params.initialSupply,
|
|
169
|
-
numTokensToSell: params.numTokensToSell,
|
|
170
|
-
numeraire: params.numeraire ?? chunkER42VG7H_js.ZERO_ADDRESS
|
|
171
|
-
};
|
|
172
|
-
return this;
|
|
173
|
-
}
|
|
174
|
-
poolConfig(params) {
|
|
175
|
-
this.pool = { fee: params.fee, tickSpacing: params.tickSpacing };
|
|
176
|
-
return this;
|
|
177
|
-
}
|
|
178
|
-
// Provide ticks directly
|
|
179
|
-
auctionByTicks(params) {
|
|
180
|
-
const duration = params.durationDays ?? chunkER42VG7H_js.DEFAULT_AUCTION_DURATION;
|
|
181
|
-
const epochLength = params.epochLength ?? chunkER42VG7H_js.DEFAULT_EPOCH_LENGTH;
|
|
182
|
-
const gamma = params.gamma ?? (this.pool ? computeOptimalGamma(params.startTick, params.endTick, duration, epochLength, this.pool.tickSpacing) : void 0);
|
|
183
|
-
this.auction = {
|
|
184
|
-
duration,
|
|
185
|
-
epochLength,
|
|
186
|
-
startTick: params.startTick,
|
|
187
|
-
endTick: params.endTick,
|
|
188
|
-
gamma,
|
|
189
|
-
minProceeds: params.minProceeds,
|
|
190
|
-
maxProceeds: params.maxProceeds,
|
|
191
|
-
numPdSlugs: params.numPdSlugs
|
|
192
|
-
};
|
|
193
|
-
return this;
|
|
194
|
-
}
|
|
195
|
-
// Or compute ticks from price range
|
|
196
|
-
auctionByPriceRange(params) {
|
|
197
|
-
const tickSpacing = params.tickSpacing ?? this.pool?.tickSpacing;
|
|
198
|
-
if (!tickSpacing) {
|
|
199
|
-
throw new Error("tickSpacing is required (set poolConfig first or pass tickSpacing)");
|
|
200
|
-
}
|
|
201
|
-
const ticks = computeTicks(params.priceRange, tickSpacing);
|
|
202
|
-
return this.auctionByTicks({
|
|
203
|
-
startTick: ticks.startTick,
|
|
204
|
-
endTick: ticks.endTick,
|
|
205
|
-
minProceeds: params.minProceeds,
|
|
206
|
-
maxProceeds: params.maxProceeds,
|
|
207
|
-
durationDays: params.durationDays,
|
|
208
|
-
epochLength: params.epochLength,
|
|
209
|
-
gamma: params.gamma,
|
|
210
|
-
numPdSlugs: params.numPdSlugs
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
withVesting(params) {
|
|
214
|
-
if (!params) {
|
|
215
|
-
this.vesting = void 0;
|
|
216
|
-
return this;
|
|
217
|
-
}
|
|
218
|
-
this.vesting = {
|
|
219
|
-
duration: Number(params.duration ?? 0n),
|
|
220
|
-
cliffDuration: params.cliffDuration ?? 0
|
|
221
|
-
};
|
|
222
|
-
return this;
|
|
223
|
-
}
|
|
224
|
-
withGovernance(params) {
|
|
225
|
-
if (!params) {
|
|
226
|
-
this.governance = {
|
|
227
|
-
initialVotingDelay: chunkER42VG7H_js.DEFAULT_V4_INITIAL_VOTING_DELAY,
|
|
228
|
-
initialVotingPeriod: chunkER42VG7H_js.DEFAULT_V4_INITIAL_VOTING_PERIOD,
|
|
229
|
-
initialProposalThreshold: chunkER42VG7H_js.DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD
|
|
230
|
-
};
|
|
231
|
-
return this;
|
|
232
|
-
}
|
|
233
|
-
if ("useDefaults" in params) {
|
|
234
|
-
this.governance = {
|
|
235
|
-
initialVotingDelay: chunkER42VG7H_js.DEFAULT_V4_INITIAL_VOTING_DELAY,
|
|
236
|
-
initialVotingPeriod: chunkER42VG7H_js.DEFAULT_V4_INITIAL_VOTING_PERIOD,
|
|
237
|
-
initialProposalThreshold: chunkER42VG7H_js.DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD
|
|
238
|
-
};
|
|
239
|
-
return this;
|
|
240
|
-
}
|
|
241
|
-
if ("noOp" in params) {
|
|
242
|
-
this.governance = { noOp: true };
|
|
243
|
-
return this;
|
|
244
|
-
}
|
|
245
|
-
this.governance = params;
|
|
246
|
-
return this;
|
|
247
|
-
}
|
|
248
|
-
withMigration(migration) {
|
|
249
|
-
this.migration = migration;
|
|
250
|
-
return this;
|
|
251
|
-
}
|
|
252
|
-
withUserAddress(address) {
|
|
253
|
-
this.userAddress = address;
|
|
254
|
-
return this;
|
|
255
|
-
}
|
|
256
|
-
withIntegrator(address) {
|
|
257
|
-
this.integrator = address ?? chunkER42VG7H_js.ZERO_ADDRESS;
|
|
258
|
-
return this;
|
|
259
|
-
}
|
|
260
|
-
withTime(params) {
|
|
261
|
-
if (!params) {
|
|
262
|
-
this.startTimeOffset = void 0;
|
|
263
|
-
this.blockTimestamp = void 0;
|
|
264
|
-
return this;
|
|
265
|
-
}
|
|
266
|
-
this.startTimeOffset = params.startTimeOffset;
|
|
267
|
-
this.blockTimestamp = params.blockTimestamp;
|
|
268
|
-
return this;
|
|
269
|
-
}
|
|
270
|
-
build() {
|
|
271
|
-
if (!this.token) throw new Error("tokenConfig is required");
|
|
272
|
-
if (!this.sale) throw new Error("saleConfig is required");
|
|
273
|
-
if (!this.pool) throw new Error("poolConfig is required");
|
|
274
|
-
if (!this.auction) throw new Error("auction configuration is required");
|
|
275
|
-
if (!this.migration) throw new Error("migration configuration is required");
|
|
276
|
-
if (!this.userAddress) throw new Error("userAddress is required");
|
|
277
|
-
if (!this.governance) throw new Error("governance configuration is required; call withGovernance()");
|
|
278
|
-
let { gamma } = this.auction;
|
|
279
|
-
if (gamma === void 0) {
|
|
280
|
-
gamma = computeOptimalGamma(
|
|
281
|
-
this.auction.startTick,
|
|
282
|
-
this.auction.endTick,
|
|
283
|
-
this.auction.duration,
|
|
284
|
-
this.auction.epochLength,
|
|
285
|
-
this.pool.tickSpacing
|
|
286
|
-
);
|
|
287
|
-
}
|
|
288
|
-
const auction = { ...this.auction, gamma };
|
|
289
|
-
return {
|
|
290
|
-
token: this.token,
|
|
291
|
-
sale: this.sale,
|
|
292
|
-
auction,
|
|
293
|
-
pool: this.pool,
|
|
294
|
-
vesting: this.vesting,
|
|
295
|
-
governance: this.governance,
|
|
296
|
-
migration: this.migration,
|
|
297
|
-
integrator: this.integrator ?? chunkER42VG7H_js.ZERO_ADDRESS,
|
|
298
|
-
userAddress: this.userAddress,
|
|
299
|
-
startTimeOffset: this.startTimeOffset,
|
|
300
|
-
blockTimestamp: this.blockTimestamp
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
};
|
|
304
|
-
|
|
305
|
-
exports.DynamicAuctionBuilder = DynamicAuctionBuilder;
|
|
306
|
-
exports.StaticAuctionBuilder = StaticAuctionBuilder;
|
|
307
|
-
//# sourceMappingURL=chunk-7F5IXZLH.js.map
|
|
308
|
-
//# sourceMappingURL=chunk-7F5IXZLH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/builders.ts"],"names":["DAY_SECONDS","DEFAULT_V3_YEARLY_MINT_RATE","DEFAULT_V3_FEE","DEFAULT_V3_START_TICK","DEFAULT_V3_END_TICK","DEFAULT_V3_NUM_POSITIONS","DEFAULT_V3_MAX_SHARE_TO_BE_SOLD","TICK_SPACINGS","DEFAULT_V3_VESTING_DURATION","DEFAULT_V3_INITIAL_VOTING_DELAY","DEFAULT_V3_INITIAL_VOTING_PERIOD","DEFAULT_V3_INITIAL_PROPOSAL_THRESHOLD","ZERO_ADDRESS","DEFAULT_V4_YEARLY_MINT_RATE","DEFAULT_AUCTION_DURATION","DEFAULT_EPOCH_LENGTH","DEFAULT_V4_INITIAL_VOTING_DELAY","DEFAULT_V4_INITIAL_VOTING_PERIOD","DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD"],"mappings":"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","file":"chunk-7F5IXZLH.js","sourcesContent":["import type { Address } from 'viem'\nimport {\n BASIS_POINTS,\n DEFAULT_AUCTION_DURATION,\n DEFAULT_EPOCH_LENGTH,\n DEFAULT_V3_END_TICK,\n DEFAULT_V3_FEE,\n DEFAULT_V3_INITIAL_PROPOSAL_THRESHOLD,\n DEFAULT_V3_INITIAL_VOTING_DELAY,\n DEFAULT_V3_INITIAL_VOTING_PERIOD,\n DEFAULT_V3_MAX_SHARE_TO_BE_SOLD,\n DEFAULT_V3_NUM_POSITIONS,\n DEFAULT_V3_START_TICK,\n DEFAULT_V3_VESTING_DURATION,\n DEFAULT_V3_YEARLY_MINT_RATE,\n DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD,\n DEFAULT_V4_INITIAL_VOTING_DELAY,\n DEFAULT_V4_INITIAL_VOTING_PERIOD,\n DEFAULT_V4_YEARLY_MINT_RATE,\n DAY_SECONDS,\n TICK_SPACINGS,\n ZERO_ADDRESS,\n} from './constants'\nimport type {\n CreateDynamicAuctionParams,\n CreateStaticAuctionParams,\n GovernanceConfig,\n GovernanceOption,\n MigrationConfig,\n PriceRange,\n TickRange,\n VestingConfig,\n} from './types'\n\nfunction computeTicks(priceRange: PriceRange, tickSpacing: number): TickRange {\n const startTick =\n Math.floor(Math.log(priceRange.startPrice) / Math.log(1.0001) / tickSpacing) *\n tickSpacing\n const endTick =\n Math.ceil(Math.log(priceRange.endPrice) / Math.log(1.0001) / tickSpacing) *\n tickSpacing\n return { startTick, endTick }\n}\n\nfunction computeOptimalGamma(\n startTick: number,\n endTick: number,\n durationDays: number,\n epochLength: number,\n tickSpacing: number,\n): number {\n const totalEpochs = (durationDays * DAY_SECONDS) / epochLength\n const tickDelta = Math.abs(endTick - startTick)\n let gamma = Math.ceil(tickDelta / totalEpochs) * 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}\n\n// Static Auction Builder (V3-style)\nexport class StaticAuctionBuilder {\n private token?: CreateStaticAuctionParams['token']\n private sale?: CreateStaticAuctionParams['sale']\n private pool?: CreateStaticAuctionParams['pool']\n private vesting?: VestingConfig\n private governance?: GovernanceOption\n private migration?: MigrationConfig\n private integrator?: Address\n private userAddress?: Address\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 as any).type === 'doppler404') {\n const p = params as { type: 'doppler404'; name: string; symbol: string; baseURI: string; unit?: bigint }\n this.token = {\n type: 'doppler404',\n name: p.name,\n symbol: p.symbol,\n baseURI: p.baseURI,\n unit: p.unit,\n } as any\n } else {\n const p = params as { type?: 'standard'; name: string; symbol: string; tokenURI: string; yearlyMintRate?: bigint }\n this.token = {\n name: p.name,\n symbol: p.symbol,\n tokenURI: p.tokenURI,\n yearlyMintRate: p.yearlyMintRate ?? DEFAULT_V3_YEARLY_MINT_RATE,\n } as any\n }\n return this\n }\n\n saleConfig(params: {\n initialSupply: bigint\n numTokensToSell: bigint\n numeraire: Address\n }): this {\n this.sale = {\n initialSupply: params.initialSupply,\n numTokensToSell: params.numTokensToSell,\n numeraire: params.numeraire,\n }\n return this\n }\n\n // Provide pool ticks directly\n poolByTicks(params: {\n startTick?: number\n endTick?: number\n fee?: number\n numPositions?: number\n maxShareToBeSold?: bigint\n }): this {\n const fee = params.fee ?? DEFAULT_V3_FEE\n const startTick = params.startTick ?? DEFAULT_V3_START_TICK\n const endTick = params.endTick ?? DEFAULT_V3_END_TICK\n this.pool = {\n startTick,\n endTick,\n fee,\n numPositions: params.numPositions ?? DEFAULT_V3_NUM_POSITIONS,\n maxShareToBeSold: params.maxShareToBeSold ?? DEFAULT_V3_MAX_SHARE_TO_BE_SOLD,\n }\n return this\n }\n\n // Or compute ticks from a price range (tick spacing is inferred from fee)\n poolByPriceRange(params: {\n priceRange: PriceRange\n fee?: number\n numPositions?: number\n maxShareToBeSold?: bigint\n }): this {\n const fee = params.fee ?? DEFAULT_V3_FEE\n const tickSpacing =\n fee === 100 ? TICK_SPACINGS[100] : fee === 500 ? TICK_SPACINGS[500] : fee === 3000 ? TICK_SPACINGS[3000] : TICK_SPACINGS[10000]\n const ticks = computeTicks(params.priceRange, tickSpacing)\n return this.poolByTicks({\n startTick: ticks.startTick,\n endTick: ticks.endTick,\n fee,\n numPositions: params.numPositions,\n maxShareToBeSold: params.maxShareToBeSold,\n })\n }\n\n withVesting(params?: { duration?: bigint; cliffDuration?: number }): this {\n if (!params) {\n this.vesting = undefined\n return this\n }\n this.vesting = {\n duration: Number(params.duration ?? DEFAULT_V3_VESTING_DURATION),\n cliffDuration: params.cliffDuration ?? 0,\n }\n return this\n }\n\n withGovernance(params?: GovernanceConfig | { useDefaults?: boolean } | { noOp: true }): this {\n if (!params) {\n // No args → apply standard governance defaults (explicit selection)\n this.governance = {\n initialVotingDelay: DEFAULT_V3_INITIAL_VOTING_DELAY,\n initialVotingPeriod: DEFAULT_V3_INITIAL_VOTING_PERIOD,\n initialProposalThreshold: DEFAULT_V3_INITIAL_PROPOSAL_THRESHOLD,\n }\n return this\n }\n if ('useDefaults' in params) {\n this.governance = {\n initialVotingDelay: DEFAULT_V3_INITIAL_VOTING_DELAY,\n initialVotingPeriod: DEFAULT_V3_INITIAL_VOTING_PERIOD,\n initialProposalThreshold: DEFAULT_V3_INITIAL_PROPOSAL_THRESHOLD,\n }\n return this\n }\n if ('noOp' in params) {\n this.governance = { noOp: true }\n return this\n }\n this.governance = params as GovernanceConfig\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 build(): CreateStaticAuctionParams {\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('pool 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 if (!this.governance) throw new Error('governance configuration is required; call withGovernance()')\n\n return {\n token: this.token,\n sale: this.sale,\n pool: this.pool,\n vesting: this.vesting,\n governance: this.governance,\n migration: this.migration,\n integrator: this.integrator ?? ZERO_ADDRESS,\n userAddress: this.userAddress,\n }\n }\n}\n\n// Dynamic Auction Builder (V4-style)\nexport class DynamicAuctionBuilder {\n private token?: CreateDynamicAuctionParams['token']\n private sale?: CreateDynamicAuctionParams['sale']\n private auction?: CreateDynamicAuctionParams['auction']\n private pool?: CreateDynamicAuctionParams['pool']\n private vesting?: VestingConfig\n private governance?: GovernanceOption\n private migration?: MigrationConfig\n private integrator?: Address\n private userAddress?: Address\n private startTimeOffset?: number\n private blockTimestamp?: number\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 as any).type === 'doppler404') {\n const p = params as { type: 'doppler404'; name: string; symbol: string; baseURI: string; unit?: bigint }\n this.token = {\n type: 'doppler404',\n name: p.name,\n symbol: p.symbol,\n baseURI: p.baseURI,\n unit: p.unit,\n } as any\n } else {\n const p = params as { type?: 'standard'; name: string; symbol: string; tokenURI: string; yearlyMintRate?: bigint }\n this.token = {\n name: p.name,\n symbol: p.symbol,\n tokenURI: p.tokenURI,\n yearlyMintRate: p.yearlyMintRate ?? DEFAULT_V4_YEARLY_MINT_RATE,\n } as any\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 durationDays?: number\n epochLength?: number\n gamma?: number\n numPdSlugs?: number\n }): this {\n const duration = params.durationDays ?? 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 // Or compute ticks from price range\n auctionByPriceRange(params: {\n priceRange: PriceRange\n minProceeds: bigint\n maxProceeds: bigint\n durationDays?: 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 durationDays: params.durationDays,\n epochLength: params.epochLength,\n gamma: params.gamma,\n numPdSlugs: params.numPdSlugs,\n })\n }\n\n withVesting(params?: { duration?: bigint; cliffDuration?: number }): 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 }\n return this\n }\n\n withGovernance(params?: GovernanceConfig | { useDefaults?: boolean } | { noOp: true }): this {\n if (!params) {\n // No args → apply standard governance defaults (explicit selection)\n this.governance = {\n initialVotingDelay: DEFAULT_V4_INITIAL_VOTING_DELAY,\n initialVotingPeriod: DEFAULT_V4_INITIAL_VOTING_PERIOD,\n initialProposalThreshold: DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD,\n }\n return this\n }\n if ('useDefaults' in params) {\n this.governance = {\n initialVotingDelay: DEFAULT_V4_INITIAL_VOTING_DELAY,\n initialVotingPeriod: DEFAULT_V4_INITIAL_VOTING_PERIOD,\n initialProposalThreshold: DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD,\n }\n return this\n }\n if ('noOp' in params) {\n this.governance = { noOp: true }\n return this\n }\n this.governance = params as GovernanceConfig\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 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 build(): CreateDynamicAuctionParams {\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 if (!this.governance) throw new Error('governance configuration is required; call withGovernance()')\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: this.governance,\n migration: this.migration,\n integrator: this.integrator ?? ZERO_ADDRESS,\n userAddress: this.userAddress,\n startTimeOffset: this.startTimeOffset,\n blockTimestamp: this.blockTimestamp,\n }\n }\n}\n"]}
|