Come Back Home

Guardrail

What the code enforces, what it does not, and who holds which key. Read this before you launch or trade.

The 5% cap

Hook fee + LP fee ≤ 5%, on buys and on sells, separately.

Every canonical pool pays a 1% LP fee, so the hook fee on each side is somewhere between 0% and 4%. The check lives in the hook contract and runs three times: when a policy is proposed, when it is executed, and on every swap that asks a policy module for a fee. Fees are unsigned numbers, so a negative fee cannot be expressed at all.

What never changes

  • Supply cannot rise. A launch token is minted once, in its constructor. It has no mint function, no owner and no proxy. Holders can burn their own tokens; nothing can mint them back.
  • The pairing. Every canonical pool is TOKEN / quote token. Tokens and hook are part of a Uniswap v4 pool id, so they cannot be swapped out.
  • The hook. One immutable contract for every canonical pool. Its permissions are the low bits of its address.
  • The protocol share. 30% of each launch pool's hook fee goes to the operator, fixed when the pool is registered.
  • The LP fee. 1% on every canonical pool.
  • The launch guard. On every launch pool, nobody can buy in the launch block, so a launch cannot be bundled with the creator's own buys. For the first 5 minutes a buy can take at most 1% of the supply, and each wallet can buy once per block. Selling is never limited. The market page's Launch check shows what actually happened.
  • The cap itself. Changing any number in it would mean a different hook, which existing pools can never adopt.

What can change

Each launch pool has a controller, chosen at launch. It can be a wallet, a multisig, a timelock, or nobody. The controller can change, inside the cap:

  • the buy fee and the sell fee;
  • the burned share and the treasury address;
  • the policy module, only one the operator has approved (for example the opening decay module, which starts buys at 4% and brings them down to the pool's buy fee over 30 minutes);
  • the update delay, upward only, up to 30 days;
  • who the controller is: hand over (the new address must accept) or renounce for good.

A module only proposes a number. The hook calls it read-only, with a fixed gas budget, and throws away any answer above the cap; the pool then charges its static fee.

Fees and routing

The hook fee is charged on the quote token side of each swap and paid out inside the swap itself. Nothing accumulates in the hook.

A buy of 1,000 quote with a 2% buy fee and a 50% burn share

Hook fee
20
Operator, 30%
6
Burned, 50% of the remaining 14
7
Project treasury
7
LP fee, 1%, to the vault position
about 9.8

HOME itself is not a launch: it trades on Uniswap v3 (WETH / HOME, 1% fee tier), with no hook and none of these rules. Its position was opened single-sided at a 3 ETH market cap and is held by the operator's V3LpManager, which can remove it.

When the pool cannot pay a fee share inside the swap, the hook records it as owed instead of losing it. Anyone can then push it to its owner with flush; the market page shows a button when something is waiting.

How updates work

  1. Propose. The controller submits a full policy. The hook checks it against the cap, the routing rules and the module allow-list, or refuses it.
  2. Publish. The proposal is stored on chain with its execution time: now + the pool's delay. The market page shows it with a countdown.
  3. Wait. Nothing changes during the delay. The controller can still cancel.
  4. Execute. Anyone can execute once the time has passed. The hook checks the policy again first, so a module revoked in the meantime can never go live.

With a delay of zero, a controller can propose and execute in the same block. The markets page shows each pool's delay so you can see which ones those are.

Liquidity is operator-controlled

The operator can remove any launch position, at any time, and keeps everything it removes.

At launch, the factory seeds the pool from the new token's supply and places the position in the LiquidityVault. The vault has one immutable OPERATOR. remove(poolId) takes out the whole position, both tokens, and sends it to the operator. claimFees(poolId) collects the 1% LP fees, also to the operator; anyone can trigger it. Nobody else can move a position: there is no transfer, no approval and no arbitrary call.

After a removal, the pool keeps its hook and its fees, but it may have little or no liquidity left. Selling into it may then be impossible or very costly.

This deployment differs from the whitepaper. The whitepaper describes launch liquidity held permanently, with no way to withdraw it (§2.3, §3.5 and §4.2). That does not apply here. In this deployment the liquidity is operator-controlled, as described above.

The operator

One address, fixed in the contracts at deployment: coming soon.

It can: remove launch liquidity and collect LP fees (vault); remove HOME's own Uniswap v3 liquidity and collect its fees (V3LpManager); approve or revoke policy modules (hook); receive 30% of every launch pool's hook fee; receive the flat launch fee, if any.

It cannot: change a pool's fees or controller, set a fee above the cap, mint any token, or move tokens out of anyone's wallet.

Risks

  • The liquidity can leave. The operator can remove any launch position at any moment, and it can remove HOME's own Uniswap v3 position through its V3LpManager.
  • Thin pools get sandwiched. A small pool moves a lot on each trade. Bots can trade just before and after you. Keep slippage tight and trades small relative to the pool.
  • Other pools exist. Anyone can open a pool of any token elsewhere, with other fees and no hook. Only pools in the factory registry are canonical; this site lists no others.
  • No external audit. The contracts are tested, but no independent firm has audited them.
  • Controllers are people. A controller with a short delay can move fees quickly, up to the cap.
  • Everything else. Prices can go to zero. Uniswap v4, Permit2, your wallet and this interface can all have bugs.

Addresses

Ethereum mainnet. Contract addresses appear here once the protocol is deployed; until then they read "coming soon".