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.
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 has | The call | Before it |
|---|---|---|
| A new token to launch on Hookr, or a new Hookr pool for a token that trades | launchAndTokenize(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 NFT | tokenizeFeeb(vault, tokenId, t, l, m) | approve(tokenizer, tokenId) on the vault; anything pending claimed first |
| Uniswap v4 positions | tokenizePositions(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 rights | tokenizeStreams(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. ThentransferCreatorFeeRecipient(memecoin, door)on the Pons launch factory, which the door factory names withlaunchFactory(). The door pays the launch's quote asset, so a quote other than ETH goes inextraAssets. - Long.
create(revenueToken, launchToken)on the Long door factory,0xA863D22772efC34E5E331AbfAb9a1B126C1b5663, from the holder of the launch's Long fee right. ThenupdateBeneficiary(poolId, door)on Doppler's initializer, which the factory names withinitializer(). The door pays both of the pool's currencies, so the launch token, and the other currency when it is not ETH, go inextraAssets. - 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; andtermsHash, 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.
launchAndTokenizeadds the pools' quotes and the launched token itself, andtokenizePositionsthe positions' pool currencies;extraAssetsadds any others. FortokenizeFeebandtokenizeStreams,extraAssetsnames every currency the streams pay besides ETH, andtokenizeStreamsrefuses 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 atermsHashagain 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 largestuint64for good, or a parent-chain block at leastMIN_TERM_BLOCKS(50,400) past the current one. Count it froml1BlockNumber, never frometh_blockNumber: Two block numbers. - The term of a position door (
unlockAt): the largestuint64for good, or a time at leastMIN_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. Withopen: falsethe 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 fortokenizeStreamswhen it carries a launch, the launch's native budgets and dev buys plus the launcher'slaunchFee(), 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 withInvalidFunding.
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, andtokenizations(token)reads it back. A market addsMarketOpened, and atokenizeStreamsmint adds oneStreamAddedper 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,RulesNotAdmittedand 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.