Reference: An SPL Token Launch
Token launches combine SPL Token program mechanics, Metaplex metadata, and operational security around mint authority. This reference covers a fixed-supply utility token - not a securities legal guide - with engineering checkpoints auditors expect.
Recipe
Quick-reference recipe card - copy-paste ready.
# Solana CLI 3.0.10 + spl-token CLI flow (simplified)
spl-token create-token --decimals 9
spl-token create-account <MINT>
spl-token mint <MINT> <AMOUNT> -- <RECIPIENT_ATA>
# After distribution: spl-token authorize <MINT> mint --disableWhen to reach for this:
- Launching governance or utility token
- Teaching token ops to backend engineer
- Pre-launch checklist with legal/comms
- Contrasting Token-2022 extensions path
Working Example
import { createSolanaRpc } from "@solana/kit";
import {
getCreateAccountInstruction,
getInitializeMintInstruction,
} from "@solana-program/token";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const DECIMALS = 9;
const SUPPLY = 1_000_000_000n * 10n ** BigInt(DECIMALS);
// 1. Create mint account (rent-exempt)
// 2. Initialize mint with mint authority = deployer
// 3. Create metadata via Metaplex Token Metadata program
// 4. Mint full supply to treasury ATA
// 5. Airdrop/distribute per allocation spreadsheet
// 6. Revoke mint authority on-chain; verify in explorer## Launch checklist (excerpt)
- [ ] Mint decimals = 9 (documented in spec)
- [ ] Metadata URI resolves (IPFS/Arweave hash pinned)
- [ ] Treasury multisig holds undistributed supply
- [ ] Mint authority revoked tx: <signature>
- [ ] Freeze authority policy documented (revoked or retained)
- [ ] Comms post includes mint address + clusterWhat this demonstrates:
- Integer
bigintsupply math - Metadata before announcement
- Authority revocation as visible on-chain proof
Deep Dive
Allocation Table
| Bucket | % | Wallet |
|---|---|---|
| Treasury | 40 | Squads multisig |
| Community | 30 | Distribution script |
| Team vesting | 20 | Streamflow / custom program |
| Liquidity | 10 | CEX/AMM ops wallet |
Metadata
- Name, symbol, URI on Metaplex Token Metadata
- Image hosted on durable storage (Arweave preferred for permanence)
Gotchas
- Float supply math - Off-by-one billion errors. Fix:
bigintonly. - Mint authority left enabled - Infinite mint rug vector. Fix: Revoke tx in launch checklist.
- Wrong cluster announcement - Users import fake mint. Fix: Explorer link with
?cluster=mainnet-beta. - Metadata URI 404 - Wallets show blank. Fix: HEAD request CI on URI before mint.
- Freeze authority surprise - Community trust issue. Fix: ADR on freeze policy pre-launch.
Alternatives
| Alternative | Use When | Don't Use When |
|---|---|---|
| Token-2022 | Transfer hooks, tax | Simple utility token |
| Metaplex Core | NFT-first asset | Fungible SPL standard needed |
| Fair launch bonding curve | Meme launch mechanics | Fixed supply utility |
FAQs
Token-2022 for this reference?
SPL classic assumed; see Token-2022 section for extensions path.
Who holds mint authority during distribution?
Ops wallet or script; revoke immediately after final mint.
Vesting on-chain?
Separate program or Streamflow; document in allocation table.
Devnet rehearsal?
Full script on devnet with separate mint; never reuse mainnet keys.
Legal review?
Outside engineering scope; gate in stakeholder checklist.
Raydium pool creation?
Post-launch ops step; liquidity wallet funded separately.
Block explorer verify?
Mint, supply, authorities tab screenshot in launch ticket.
Metadata update?
Update authority policy pre-declared; immutability preferred for trust.
Multisig treasury?
Squads 2-of-3 minimum for undistributed supply.
Indexer?
Helius or custom for holder snapshots; not required for mint tx itself.
Related
- SPL Token Basics - program fundamentals
- Reference: DeFi Program + dApp - pool share token
- Stakeholder Communication - launch comms
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.