Token Registration
ERC-20 specifies name(), symbol() and decimals(). It specifies no icon, no website, no description, and no way to record who deployed the contract. Every logo that has ever appeared beside a token balance came from an off-chain database keyed by chain identifier and contract address, maintained by a company with its own form, its own acceptance criteria, and its own queue.
So “registering a token” is not one action. It is six or seven submissions to organizations that do not share data with each other, three of which will reject a contract deployed this month on principle. The work splits cleanly in two: the parts you can do yourself on the day you deploy, and the parts that require somebody else to approve you.
What each surface actually reads#
| Surface | Where its icon comes from |
|---|---|
| Uniswap and most swap interfaces | a token list the user has enabled |
| MetaMask token detail and search | MetaMask’s token service, sourced from the data aggregators |
MetaMask after wallet_watchAsset |
the image URL your dapp passed in the prompt |
| Etherscan token page | the explorer’s own submission form |
| Trust Wallet | the trustwallet/assets repository |
| Dexscreener, DEXTools | their own paid profile products; the trading pair itself appears automatically |
| CoinGecko, CoinMarketCap | their listing forms, which most other trackers then copy |
The redundancy is the reason a token can carry a correct logo on Etherscan and a blank grey circle in a wallet on the same afternoon. Nothing propagates. Each row is a separate application.
The gating structure#
Three prerequisites unlock most of the rest, and they unlock in a fixed order.
|
|
CoinGecko requires the asset to be trading on a venue it already tracks, which for a new token means a decentralized exchange pool with non-trivial liquidity. Trust Wallet requires a CoinMarketCap listing plus 10,000 holders. That chain — pool, then aggregator, then wallet registry — is why the wallet-registry route is realistically months away from a launch, and why the self-service routes are worth doing first rather than last.
Assemble the packet once#
Every form below asks for the same nine things in a slightly different shape. Write them down before you open the first one, because several forms cannot be edited after submission.
- Contract address, in EIP-55 checksummed form, and the chain identifier (1 for Ethereum mainnet, 8453 for Base, and so on). EIP-55 encodes a checksum in the letter casing of the hex digits, which is why a checksummed address looks like a random mix of cases and why several registrars treat a case-only difference as a different string.
cast to-check-sum-addressproduces it. - Name, symbol, decimals, exactly as the contract returns them. A mismatch is the most common rejection.
- Logo, in the several sizes and formats the registrars demand — see making the icon.
- Description, 2–4 sentences, written flat. Etherscan rejects superlatives and comparative claims outright.
- Website, live, on your own domain, with the contract address published on it. Reviewers check that the address on your site matches the one in the form; this is the cheapest anti-impersonation test they have.
- Contact email at that domain. A Gmail address gets the submission deprioritized or dropped.
- Social links — X, Discord, Telegram, GitHub — that exist and have posts.
- Supply figures: total, circulating, and the vesting or lock schedule that explains the gap.
- Audit report and, if applicable, the liquidity lock transaction.
Order of operations#
- Deploy, then verify the source on the block explorer for every chain you deployed to. Nothing else proceeds until this is done.
- Render the icon assets and publish them at a stable URL — your own domain, IPFS, or Arweave. Every later form asks for a link, not an upload.
- Publish a token list at a URL you control, and wire
wallet_watchAsset— the wallet method that prompts a user to add a token — into your own interface. Both work immediately. - Submit the explorer token update. Free, and once per chain.
- Seed the pool, then submit to CoinGecko and CoinMarketCap. Expect two to six weeks.
- Once the holder and transaction counts qualify, submit to the wallet registries.
Consider putting the ERC-1046 tokenURI on the contract at step 1. It is one immutable string, it costs deployment gas and nothing else, and it is the only metadata that no company can revoke or lose.
The part nobody’s form fixes#
Curated lists are also the entire defence against fake tokens: a contract can claim any name and symbol it likes, so a logo beside a balance is a statement about who filled in a form, not about who deployed the contract. Getting your own token registered raises the cost of impersonating it — an impostor now has to clear the same queues — but it does not stop one from being deployed. Identity remains the address.
The same companies run the scanners, and registration does not clear those either. Token false alarms covers the other direction: what happens when an honest contract is flagged rather than merely unlabelled, and which of the queues above will hear an appeal.