Skip to main content
Clanker v5 deploys tokens that charge a buy and sell tax instead of an LP fee. The tax pays the Clanker fee and the creator’s reward recipients, and the creator can also send part of it to holder dividends, a burn and an integrator. Clanker v5 launches are open on Base, BNB Chain, Monad, Robinhood Chain, X Layer, Arc and Elysium. See Token Deployments for how v5 tokens work and how to deploy one. The v5 contracts are not upgradeable.

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 in cccc. 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.
  • expectedConfigVersion must equal configVersion(). Any change to the launch settings increases the version, so a launch signed under older settings reverts with StaleConfig.
  • taxConfiguration sets buyTaxRate and sellTaxRate, and the split of the tax after the Clanker fee: creatorAllocationShare, burnAllocationShare, dividendAllocationShare and integratorAllocationShare, which must add up to 100%. It also sets minimumDividendHolding. All rates and shares use a scale of 1e8 = 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. When a launch names an integrator that is a contract, the hook asks it once through launchConsent(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.
Only the hook can credit balances. Events: 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.
It emits 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.
It emits 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 with taxPolicy() 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 with setPriceUpdater().
  • Changes the supply, pool layout and launch fee of new launches: setLaunchSupply(), setTickSpacing(), setBandTemplate(), setNativeLaunchFee().
  • Sets the adapter used by createLaunchAndBuy with setLaunchBuyAdapter().
  • 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().
Owner or creator admin, on the dividend contract of any v5 token:
  • 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().
Price updater:
  • Updates the starting price of a registered quote token for new launches with setQuoteStartTick() and batchSetQuoteStartTicks().
Current creator (per token):
  • Updates the token’s metadata, if it launched with metadataEditable on.
  • 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)