ETH$3,420
Launchpad/ownership

Token ownership

One registry, one owner, one handoff. Everything a creator controls resolves through TokenOwnerRegistry.ownerOf.

Most launchpads scatter creator control across contracts: metadata on the token, the fee recipient in the locker, the payout address in some module. Move wallets and you have three or four transactions to get right, and one you will forget. hood.dev keeps a single registry instead — every creator power on the platform resolves through TokenOwnerRegistry.ownerOf(token), so one call moves all of it.

#What the owner controls

PowerWhere it lives
Token metadatasetImage, setDescription, setSocials, setContractURI on the token — or the Edit form on My Tokens, which calls them for you
Creator fee recipientFeeLocker.updateCreatorRecipient — where your WETH share is paid
Vesting recipientVestingFeeModule.setRecipient, if you chose the vesting policy
Buy-and-burn triggerThe owner path on the buy-burn module — any time, any size
Ownership itselftransferTokenOwnership — including renouncing

Note what is not on that list: minting, unlocking liquidity, changing the fee split, changing the fee policy, altering the sniper guard, or moving anyone’s tokens. No owner has those powers, because the contracts do not implement them.

#Transferring and renouncing

solidityTokenOwnerRegistry
function ownerOf(address token) external view returns (address);

/// Moves every owner power over the token in one call.
/// newOwner == address(0) renounces — permanently.
function transferTokenOwnership(address token, address newOwner) external;
  • It is a direct transfer, not a two-step handshake. There is no “accept” call, so check the address twice — a typo sends control to a wallet nobody holds.
  • Renouncing is irreversible. Passing the zero address freezes metadata and every fee recipient exactly as they stand, forever. The registry also blocks re-registration, so a renounced token cannot be re-adopted by anyone, including us.
  • Fee flows keep working after a renounce. Collection is permissionless and the destinations are already recorded. What stops is your ability to change them.
Renouncing is a real signal here
Because the launch already locks liquidity forever and fixes supply, renouncing ownership leaves a token with genuinely no privileged party at all — no one who can edit its description, redirect its fees, or touch its market. That is a claim holders can verify in one ownerOf call.

#Reading the owner

Either TokenOwnerRegistry.ownerOf(token) or token.tokenOwner(), which forwards to the registry. Both return the zero address after a renounce. The token’s creator immutable is not the answer — it records who launched it, historically, and never changes hands.

#The registry’s own admin

The registry contract has an owner, and its only power is setLauncher — pointing at a new factory so that future launches can register. It cannot read, write, transfer or renounce anybody’s token ownership; there is no function that lets it. That is the seam the multi-venue launcher upgrade went through, with every previously-launched token’s ownership row untouched.

chain 4663·on-chain values read 2026-07-29·Blockscout