Skip to content

Launch platforms and partner apps

Which tokenizer call mints which revenue token, the terms an app sets, who the creator is, and Hookr's leg.

On this page

A launch platform or a partner app can let its creators mint revenue tokens two ways: send them to hookr.fun's own flows, or send the same calls from its own app. Either way the creator signs, and the tokenizer checks everything at the mint.

Hookr's own flows

  • A new token with a revenue token: the launch floor, its Revenue step. Launch a token with a revenue token walks it.
  • A fee right a wallet holds: /tokenize, the Your wallet tab. A Pons or Long fee right has its own tab there, and New pool opens the launch floor for a new Hookr pool of a token that already trades.

Pick the call

What the creator hasThe callBefore it
A new token to launch on Hookr, or a new Hookr pool for a token that tradeslaunchAndTokenize(p, t, l, m)Every pool's royaltyTo set to predictRevenueToken(creator, p, t); ERC-20 budgets approved to the tokenizer
A pools.trade fee NFTtokenizeFeeb(vault, tokenId, t, l, m)approve(tokenizer, tokenId) on the vault; anything pending claimed first
Uniswap v4 positionstokenizePositions(p, t, l, m)setApprovalForAll(doorFactory, true) on the PositionManager, or permits in p.permits
Uniswap v3 positions, a Pons or Long fee right, another platform's door, or several fee rightstokenizeStreams(p, t, l, m)predictStreamToken(creator, t); each outside door made for that address and handed its fee right; each NFT approved, v3 positions to v3DoorFactory() or with v3 permits

The doors for outside fee rights are made before the token, for the address predictStreamToken gives:

  • Pons. create(revenueToken, memecoin) on the Pons door factory, 0xca16D264750BDd79004B80e265F9D3d0992957d2, from the launch's creator fee recipient. Then transferCreatorFeeRecipient(memecoin, door) on the Pons launch factory, which the door factory names with launchFactory(). The door pays the launch's quote asset, so a quote other than ETH goes in extraAssets.
  • Long. create(revenueToken, launchToken) on the Long door factory, 0xA863D22772efC34E5E331AbfAb9a1B126C1b5663, from the holder of the launch's Long fee right. Then updateBeneficiary(poolId, door) on Doppler's initializer, which the factory names with initializer(). The door pays both of the pool's currencies, so the launch token, and the other currency when it is not ETH, go in extraAssets.
  • Another platform. A door of its own: Doors for new platforms.

Terms your app sets

  • The token (TokenTerms): name, symbol and supply; streamSeconds, the release period, 1 to 14 days (0 gets 7); tipBps, the sync caller's tip, at most 100; extraAssets; the recipients and their amounts; and termsHash, a nonzero commitment to the terms you publish. The app sends a 1-day release period unless the creator picks longer, and a 1% tip.
  • The assets: ETH is always asset 0. launchAndTokenize adds the pools' quotes and the launched token itself, and tokenizePositions the positions' pool currencies; extraAssets adds any others. For tokenizeFeeb and tokenizeStreams, extraAssets names every currency the streams pay besides ETH, and tokenizeStreams refuses a stream that pays one it leaves out (AssetNotListed). A token has at most four assets (TooManyAssets).
  • The amounts add up to exactly the supply less the market's seed and Hookr's leg, under Fee below, or the call reverts with MintMismatch.
  • The token's address is worked out before the mint from the creator and the token's name, symbol, supply, assets, release period, tip and termsHash. The recipients, the amounts, the lock and the market do not move it, so a creator who sends a termsHash again with the same name, symbol, supply, assets, release period and tip hits its earlier token's address, and the call reverts.
  • The term of a family (LockTerms.unlockBlock, for a launch and for the market): the largest uint64 for good, or a parent-chain block at least MIN_TERM_BLOCKS (50,400) past the current one. Count it from l1BlockNumber, never from eth_blockNumber: Two block numbers.
  • The term of a position door (unlockAt): the largest uint64 for good, or a time at least MIN_TERM_SECONDS, 7 days, from now.
  • The market (MarketTerms): defaultMarket(sqrtPriceX96, seed) gives the tokenizer's own terms for a start price and a seed. With open: false the token mints with no market, and the tokenizer reads none of the other fields. A Fee Bridge slice, up to 20%, is set here and only in a direct call.
  • The value sent: for launchAndTokenize, and for tokenizeStreams when it carries a launch, the launch's native budgets and dev buys plus the launcher's launchFee(), and the fee once more when a market opens. For the other calls, the launch fee when a market opens and nothing otherwise, or the call reverts with InvalidFunding.

Who the creator is

The tokenizer takes the account that sends the call as the creator. The token's address is worked out from it, and its NFTs and budgets are the ones that move. Leftovers and dev-bought tokens go back to it, and so does a family or a position at the end of its term.

So the creator's own wallet sends the call. A platform contract that sends it for them becomes the creator itself.

After the mint

  • Tokenized(token, creator, way, ...) carries the record, and tokenizations(token) reads it back. A market adds MarketOpened, and a tokenizeStreams mint adds one StreamAdded per stream.
  • The token's page is https://hookr.fun/revenue/<address>, where anyone syncs and holders claim.
  • Simulate the call before the wallet opens, with the tokenizer's errors in your ABI as Walkthrough setup lists them. A refusal then comes back by name with its figures: TermTooShort, MintMismatch, InvalidFunding, InvalidTerms, AssetNotListed, TooManyAssets, TooManyDoors, SyncTooExpensive, SourceNotBound, SourceRevocationPending, InvalidSource, AdvisoryRecipientMismatch, VaultNotAdmitted, RulesNotAdmitted and the rest.

Fee

Hookr's leg is minted once, at the mint, to the leg collector: the supply times legBps over 10,000, rounded down. When every stream already pays Hookr through the Hookr hook, the mint gives Hookr no leg; when any stream does not, Hookr's leg is 5% of the supply. legBps in the record says which. Terms and endings has the rule stream by stream.