API reference
Builder API Reference
Builders assemble type‑safe parameter objects for DopplerFactory.createStaticAuction, DopplerFactory.createDynamicAuction, and DopplerFactory.createMulticurve.
Static auctions: Uniswap V3 style, fixed price range liquidity bootstrapping
Dynamic auctions: Uniswap V4 hook, dynamic Dutch auction with epoch steps
Multicurve auctions: Uniswap V4 initializer with multiple curves
Common Concepts
Governance defaults to
noOpon supported chains (all except Ink)Fee tiers and tick spacing: 100→1, 500→10, 3000→60, 10000→200
StaticAuctionBuilder
Methods (chainable):
tokenConfig({ name, symbol, tokenURI, yearlyMintRate? })saleConfig({ initialSupply, numTokensToSell, numeraire })withMarketCapRange({ marketCap: { start, end }, numerairePrice, fee?, numPositions?, maxShareToBeSold? })marketCap.startandmarketCap.endare fully diluted market caps in USD (or whatever unit your numeraire is priced in)Requires
saleConfig()first
poolByTicks({ startTick, endTick, fee?, numPositions?, maxShareToBeSold? })withVesting({ duration?, cliffDuration?, recipients?, amounts? })withGovernance({ type: 'default' | 'custom' | 'noOp' })withMigration(MigrationConfig)withUserAddress(address)build()→CreateStaticAuctionParams
DynamicAuctionBuilder
Methods (chainable):
tokenConfig({ name, symbol, tokenURI, yearlyMintRate? })saleConfig({ initialSupply, numTokensToSell, numeraire? })poolConfig({ fee, tickSpacing })withMarketCapRange({ marketCap: { start, min }, numerairePrice, minProceeds, maxProceeds, duration?, epochLength? })marketCap.startis the starting market cap (auction begins here),marketCap.minis the floor price the auction descends toBoth values are fully diluted market caps in USD (or whatever unit your numeraire is priced in)
Requires
saleConfig()first (do NOT usepoolConfig()with this method - they are mutually exclusive)
auctionByTicks({ startTick, endTick, minProceeds, maxProceeds, duration?, epochLength?, gamma? })withVesting({ duration?, cliffDuration?, recipients?, amounts? })withGovernance({ type: 'default' | 'custom' | 'noOp' })withMigration(MigrationConfig)withUserAddress(address)withTime({ startTimeOffset?, blockTimestamp? })build()→CreateDynamicAuctionParams
MulticurveBuilder
Methods (chainable):
tokenConfig({ name, symbol, tokenURI, yearlyMintRate? })saleConfig({ initialSupply, numTokensToSell, numeraire })withCurves({ numerairePrice, curves, fee?, tickSpacing?, beneficiaries? })Requires
saleConfig()firstcurves: Array of{ marketCap: { start, end }, numPositions, shares }marketCap.startandmarketCap.endare fully diluted market caps in USD (or whatever unit your numeraire is priced in)Shares must sum to 1e18 (100%)
poolConfig({ fee, tickSpacing, curves, beneficiaries? })curves: Array of{ tickLower, tickUpper, numPositions, shares }
withRehypeDopplerHook({ hookAddress, buybackDestination, customFee, assetBuybackPercentWad, numeraireBuybackPercentWad, beneficiaryPercentWad, lpPercentWad, graduationCalldata? })hookAddress— Deployed RehypeDopplerHook (must be whitelisted)buybackDestination— Receives bought-back tokenscustomFee— Swap fee in bps (3000 = 0.3%)assetBuybackPercentWad— % for asset buyback (WAD, 1e18 = 100%)numeraireBuybackPercentWad— % for numeraire buyback (WAD)beneficiaryPercentWad— % for beneficiaries (WAD)lpPercentWad— % for LPs (WAD)graduationCalldata— Optional calldata executed on graduation
withVesting({ duration?, cliffDuration?, recipients?, amounts? })withGovernance({ type: 'default' | 'custom' | 'noOp' })withMigration(MigrationConfig)withUserAddress(address)build()→CreateMulticurveParams
Multicurve rules
First curve's
marketCap.start= the launch priceCurves must be contiguous or overlapping (no gaps)
Shares must sum to exactly 1e18 (100%)
Factory methods
Last updated