Web3 Development · 5 min read ·

Token Launch Checklist: From ERC-20 Contract to Mainnet

A practical ERC-20 token launch checklist covering contract design, audits, testing, liquidity, deployment, and post-launch operations on Ethereum mainnet.

Launching a token is less about writing an ERC-20 and more about orchestrating a production release across smart contracts, infrastructure, exchanges, and operations. Most failures aren’t “Solidity bugs” — they’re missing decisions (who can mint?), missing rehearsals (no fork test), or missing controls (no timelock).

Below is a pragmatic checklist we use to move from an ERC-20 codebase to a mainnet-grade launch.

1) Clarify token mechanics (before you code)

A clean launch starts with explicit token rules. Document these in a one-page “token spec” and treat it like a product requirements doc.

Checklist:

  • Supply model: fixed supply vs. mintable vs. emissions schedule. If emissions exist, define rate, start time, and who can change parameters.
  • Decimals: 18 is default; deviate only for strong reasons (UX, legacy constraints).
  • Transfer rules: unrestricted transfers, allowlists, blacklists, fees, or pausing. Every extra rule increases audit cost and integration friction.
  • Admin powers: who can pause, mint, upgrade, or rescue funds? Prefer minimal power and always time-delay meaningful actions.
  • Distribution plan: wallets, vesting, airdrops, liquidity allocation. Decide if any allocation requires on-chain vesting.

Opinionated take: if you don’t need transfer restrictions, don’t ship them. “Maybe we’ll need it later” is how you end up with centralized controls that scare exchanges and users.

2) Use battle-tested foundations (and know the tradeoffs)

Most ERC-20s should start from OpenZeppelin.

Checklist:

  • Base contract: OpenZeppelin ERC20 (and optional extensions like ERC20Permit).
  • EIP-2612 permit: improves UX (approvals via signatures), widely supported.
  • Access control: prefer Ownable for simplicity or AccessControl for role-based systems — but avoid role sprawl.
  • Upgradeable or not: proxies add operational complexity and user trust questions.

Rule of thumb: if your token is just a token, make it non-upgradeable and minimize privileged functions. If you must upgrade, publish a clear governance and timelock model.

3) Implement distribution safely: vesting, locks, and escrows

Token distribution is where “business logic” hides.

Checklist:

  • Vesting contracts: use audited patterns (OpenZeppelin VestingWallet, Sablier-style streaming, or vetted third-party vesting). Avoid rolling your own cliff math.
  • Treasury custody: multisig (Safe) as default; never a single EOA.
  • Liquidity allocation: separate wallet/contract for LP funds, with clear accounting.
  • Airdrops: prefer Merkle claim contracts (gas-efficient, verifiable), and set expiry + recovery path.

Practical tip: simulate distributions with real addresses on a testnet and verify balances via scripts, not eyeballing.

4) Security hardening: threats you should assume

Assume adversarial conditions from minute one: bots, MEV, phishing, and copycats.

Checklist:

  • Reentrancy and external calls: vanilla ERC-20 has none, but your extensions might.
  • Ownership transfer: use a two-step transfer pattern if possible.
  • Pausable: only if you have a credible incident response plan and constraints on when it can be used.
  • Rescue functions: be careful; “recoverERC20” can become a rug lever. If included, restrict tightly and time-delay.
  • Event coverage: emit events for admin actions (mint, pause, role changes) for monitoring.

If you plan a DEX listing at launch, assume your first block is a battleground. Prepare measures like fair launch mechanics and clear liquidity steps rather than improvised “anti-bot” gimmicks.

5) Test like you’re deploying a protocol, not a contract

Your goal is not 100% coverage; it’s confidence under real conditions.

Checklist:

  • Unit tests: minting, transfers, allowance edge cases, permit, pausing, role changes, vesting release.
  • Property/invariant tests: total supply invariants, balances never go negative, role-only functions are unreachable by others.
  • Fork tests: run on a mainnet fork to validate integrations (Uniswap pool creation, multicall reads, permit flows).
  • Gas profiling: ensure core actions aren’t unexpectedly expensive.
  • Deployment rehearsal: run the full deploy script on testnet with the same config and addresses.

Concrete example: if you’ll create a Uniswap V3 pool, test the exact sequence (create pool, initialize price, mint position, lock LP tokens if applicable) on a fork.

6) Pre-launch operations: keys, roles, and governance

Operational security is the difference between “audited” and “safe.”

Checklist:

  • Multisig (Safe): set owners, threshold, hardware wallets, and an emergency access policy.
  • Timelock: for admin actions (mint, parameter changes, upgrades). Even 24–48 hours dramatically reduces risk.
  • Role mapping: document who controls what, and which actions are time-delayed.
  • Runbooks: incident response steps, pause criteria (if pausable), communication channels.
  • Domain + docs: publish contract addresses and verified source links to reduce phishing.

Slightly opinionated: if you can’t articulate what your admin can do in 30 seconds, you’ve overcomplicated the permission model.

7) Deployment: deterministic, verifiable, and repeatable

Mainnet deployment should be boring.

Checklist:

  • Tooling: Hardhat/Foundry scripts with environment validation.
  • Determinism: consider CREATE2 only if you truly need precomputed addresses (adds complexity).
  • Nonce management: avoid manual transactions; use scripted deployments.
  • Verification: verify contracts on Etherscan immediately; publish metadata.
  • Token metadata: name, symbol, decimals, logo assets, and canonical links.
  • Sanity checks: after deploy, validate totalSupply, owner/roles, and key addresses.

Do not deploy from a personal laptop with ad-hoc commands. Use a controlled environment and a rehearsed script.

8) Liquidity and listing readiness (DEX first, CEX later)

Liquidity is part engineering, part market structure.

Checklist:

  • Initial liquidity plan: amount, pairing asset (ETH/USDC), and target price logic.
  • LP custody: multisig custody and (optionally) LP locks to signal commitment.
  • Pool configuration: Uniswap V2 vs V3 vs other DEXs; V3 adds price range management complexity.
  • MEV considerations: consider private transaction relays for initial liquidity adds.
  • Analytics readiness: ensure token is indexable (events, verified contract) and add to trackers.

If you need “anti-sniping,” prefer launch mechanics (staged liquidity, public timelines, transparent steps) over blacklists that break composability.

9) Post-launch monitoring and maintenance

Launch day is the start of operations, not the finish.

Checklist:

  • Monitoring: alerts for large transfers, role changes, mint events, and liquidity movements.
  • Dashboards: Dune/Flipside queries for supply distribution, holders, and LP health.
  • Support: a public page listing official addresses, plus a process for reporting scams.
  • Governance cadence: when proposals happen, how changes are announced, and where votes occur.
  • Tax/accounting: token treasury accounting, emissions reporting, and vesting disclosures.

A common mistake: shipping permit (EIP-2612) but never testing it end-to-end in the front end and with popular wallets. If UX fails, users fall back to approvals and you lose the benefit.

Conclusion: a token launch is a systems release

A mainnet token launch is an exercise in systems engineering: contract correctness, operational security, liquidity execution, and post-launch observability. The winning approach is disciplined and repeatable: minimize admin powers, use audited building blocks, rehearse deployment and liquidity on forks, and instrument everything you ship.

If you treat your token like production infrastructure — not a quick contract — you dramatically reduce the chance that launch day becomes incident day.