Contracts
The addresses above are on Base: 8453. See Deployed Contracts for the addresses on BNB Chain, Monad, Robinhood Chain, X Layer, Arc and Elysium.
Each factory returns its related contracts through
hook(), dividendDeployer(), announcementRegistry(), launchValidation(), launchBuyAdapter() and tokenDeployer(). The hook returns feeEscrow(). The Dividend Deployer returns implementation().
Factory
The factory deploys each v5 token, creates its Uniswap v4 pool with the hook, and places the whole supply in the pool as single-sided liquidity. It stores the launch policy that every new launch must fit, and the creator rights of every token it launched. A v5 token is an ERC-20 with 18 decimals and a fixed supply, 1 billion tokens under the current settings. It has no owner, minter, pauser or upgrade path. Every v5 token address ends incccc. A launch is rejected when the predicted address does not, so the launch salt is chosen to give such an address.
Launch functions
LaunchParams holds the creator, up to 7 reward recipients (feeSlots), name, symbol, tokenContractURI, creatorSalt, the quote token, expectedConfigVersion, a deadline, metadataEditable, extra metadata keys and values, the taxConfiguration, the creator and integrator reward recipients, and antiSnipeEnabled.
expectedConfigVersionmust equalconfigVersion(). Any change to the launch settings increases the version, so a launch signed under older settings reverts withStaleConfig.taxConfigurationsetsbuyTaxRateandsellTaxRate, and the split of the tax after the Clanker fee:creatorAllocationShare,burnAllocationShare,dividendAllocationShareandintegratorAllocationShare, which must add up to 100%. It also setsminimumDividendHolding. All rates and shares use a scale of1e8= 100%.- The reward recipients’ weights (
relativeWeightBps) must add up to 10,000. One recipient can be marked as the creator’s slot, which follows the creator rights.
Creator functions
The current creator of a token can call:
The proposed creator completes a transfer with
acceptCreatorRightsTransfer(token). The metadata functions work only on tokens launched with metadataEditable set to true.
Read functions
Factory events
Hook
The hook is the Uniswap v4 hook of every v5 pool. Only the factory can create a pool with it.- Tax: on every swap, the hook takes the buy or sell tax. The Clanker fee, creator, dividend and integrator shares are taken in the quote currency and credited in the FeeEscrow. The burn share is taken in the launched token and credited in the FeeEscrow to the dead address
0x000000000000000000000000000000000000dEaD. - Locked liquidity: the hook places the launch liquidity itself and blocks every liquidity add and removal, so the liquidity can never be removed.
- Frozen terms: each pool keeps the tax, split and policy it launched with. Later policy changes apply only to new launches.
- Sniper fee: on a launch with the sniper fee on, the total fee starts at the policy’s starting rate and falls linearly to the normal tax over the sniper window. The extra fee goes to Clanker. Exact-output swaps revert during the window.
- No eligible holders: when a trade’s dividend share finds no eligible holder, it is credited to the Clanker fee recipient.
Hook functions
The creator’s slot is not changed through the hook. It follows the creator rights on the factory.
Integrator consent
When a launch names an integrator that is a contract, the hook asks it once throughlaunchConsent(LaunchContext). A reply of bytes4(keccak256("LAUNCH_REJECTED")) blocks the launch. Any other reply lets it go ahead, and the accepting reply (the function’s selector) emits LaunchConsented. Wallet integrators are not asked.
Hook events
FeeEscrow
The FeeEscrow holds every reward that v5 pools credit. It keeps one balance per recipient and currency, for all of that recipient’s v5 tokens, and a claim pays the whole balance. The currency is the zero address for native ETH.Credited(recipient, currency, amount) and Claimed(recipient, currency, destination, amount).
Dividend Deployer
The Dividend Deployer creates the dividend contract of a token that pays holder dividends, in the token’s launch transaction. Only the factory can call it. Each dividend contract tracks the balances of eligible holders and pays their dividends in the pair token. For a native pair, dividends are held in the wrapped native token and can be paid in the native coin. The factory owns every dividend contract.
A claim emits
DividendPaid(token, holder, receiver, amount). dividendOf(token) on the factory returns a token’s dividend contract.
Dividend Claim Helper
The Dividend Claim Helper claims the caller’s dividends from several v5 tokens in one transaction.DividendsClaimed(holder, requestedCount, paidCount).
Announcement Registry
The Announcement Registry records announcements from a token’s creator to its holders. The factory registers each token at launch. Only the token’s current creator can post, and each announcement ID can be used once per token.AnnouncementPosted(token, creator, announcementId, description, announcementURI).
Supporting contracts
These contracts are called by the factory and the hook. Integrators don’t call them directly.- Launch Validation: checks each launch against the current launch policy before the factory deploys it.
- Launch Operations: a library the factory uses for launch logic.
- Launch Buy Adapter: runs the creator buy in
createLaunchAndBuy. - Token Deployer: deploys each v5 token contract for the factory.
- Dividend Implementation: the template each token’s dividend contract is created from by the Dividend Deployer.
External contracts
v5 pools run on Uniswap v4. These are the shared Uniswap contracts and pair tokens on Base that v5 tokens use. Addresses are from the Uniswap v4 deployments list.- PoolManager: holds every v5 pool. The factory and the hook return it from
poolManager(). - Quoter and StateView: read quotes and pool state off chain.
- Universal Router and Permit2: the usual way to swap in a Uniswap v4 pool.
- WETH and USDC: the pair tokens. A v5 ETH pool pairs with native ETH (the zero address); pass WETH in the deploy API.
Launch policy
The launch policy sets the limits and fees that every new launch must fit. Read it withtaxPolicy() on the factory, or from taxPolicy in GET https://www.clanker.world/api/metadata/factories. Rates use a scale of 1e8 = 100%, so 1000000 is 1%. The current values below are the same on Base, BNB Chain, Monad, Robinhood Chain, X Layer and Arc.
The Clanker fee is
protocolTaxShare of the tax, kept between the minimum and maximum fee rate. For example, a 5% tax on a trade gives a Clanker fee of 0.5% of the trade, and a 10% tax gives 1%.
Other factory settings for new launches:
Administrative permissions
The v5 contracts are not upgradeable. Each pool’s tax, split and policy are fixed at launch, and no role can change them afterwards or remove its liquidity.Factory
Owner (two-step ownership transfer):- Sets the launch policy for new launches:
setTaxPolicy(),setTaxFeeBounds(),setProtocolFeeConfiguration(),setAntiSnipeConfiguration(),setMinimumDividendHoldingRequirement(). - Opens or pauses new launches with
setLaunchCreationEnabled(). - Adds and removes quote tokens with
registerQuote(),unregisterQuote()and their batch forms. - Sets the starting price of a quote token with
setQuoteStartTick(), and sets the price updater withsetPriceUpdater(). - Changes the supply, pool layout and launch fee of new launches:
setLaunchSupply(),setTickSpacing(),setBandTemplate(),setNativeLaunchFee(). - Sets the adapter used by
createLaunchAndBuywithsetLaunchBuyAdapter(). - Sets the default dividend exclusions of new launches with
setDefaultDividendExclusion(). - Sets the Announcement Registry once with
setAnnouncementRegistry(). - Appoints and removes the creator admin:
transferCreatorAdmin(),cancelCreatorAdminTransfer(),revokeCreatorAdmin().
- Excludes or re-includes holders with
setLaunchDividendExclusions(). - Sets the address that receives a holder’s dividends with
setLaunchDividendReceiver(). - Updates holders’ recorded balances with
refreshLaunchDividendShares(). - Withdraws assets held by the dividend contract with
emergencyWithdrawDividendAssets().
- Updates the starting price of a registered quote token for new launches with
setQuoteStartTick()andbatchSetQuoteStartTicks().
- Updates the token’s metadata, if it launched with
metadataEditableon. - Changes the creator’s reward recipient and transfers the creator rights.
- Posts announcements in the Announcement Registry.
Hook
The hook has no owner. Only the factory can register and seed pools, change the creator of a pool, run a launch buy and set the launch buy adapter. Each reward slot’s admin can change that slot’s recipient and admin.No administrative permissions
Clanker has no administrative abilities on these contracts:- v5 tokens
- FeeEscrow
- Dividend Claim Helper
- Announcement Registry
- Dividend Deployer (only the factory can use it)