Devnet, testnet, mainnet — Solana's clusters, and how to fund a devnet wallet
What Solana's three public clusters are for, which one you should build on, and the two faucets that fund your devnet wallet: devnetfaucet.org for SOL and faucet.circle.com for USDC.
devrels.xyz/a/128short linkSolana isn't one network. It's three public clusters running the same software with different purposes, different tokens, and different rules. Deploy to the wrong one and you'll either burn real money or wonder why your "live" app has no users.
Here's the map, then the practical part: getting free devnet SOL and devnet USDC so you can actually build.
The three clusters
- Mainnet — the real network. Real SOL with real market value, real users, real consequences. Deploying a program here costs actual SOL (a few SOL for rent depending on program size). You go here last. Naming note: it launched as
mainnet-betaand the official docs have since dropped the beta — but the old identifier lives on all over the tooling (the CLI moniker, the classic RPC URL, status.solana.com), so treatmainnet-betaand "mainnet" as the same thing. - Devnet — the developer playground. Same runtime, same programs (SPL Token, Metaplex, etc. are all deployed), but the SOL is free and worthless by design. This is where you deploy, test, and break things. If you're building an app, devnet is your home for the entire dev cycle.
- Testnet — for validators and core contributors, not app developers. Solana Labs / Anza stress-test new validator releases here, which means it runs ahead of mainnet and gets reset or broken more often. Common beginner mistake: assuming "testnet" is where you test your app. On Solana it isn't — that's devnet.
Each cluster has its own public RPC endpoint:
mainnet https://api.mainnet.solana.com
(legacy https://api.mainnet-beta.solana.com still works)
devnet https://api.devnet.solana.com
testnet https://api.testnet.solana.comAccounts, balances, and programs do not carry across clusters. A wallet address is valid everywhere (it's just a keypair), but its devnet balance is invisible on mainnet and vice versa. Same for token mints — devnet USDC and mainnet USDC are completely different tokens (more on that below).
Switching clusters
With the Solana CLI:
solana config set --url devnet # or: mainnet-beta, testnet, localhost
solana config get # check where you're pointed
solana balance # balance on the current cluster(Yes, the CLI moniker is still mainnet-beta — plain --url mainnet errors as of Agave 2.2. The legacy name in action.)
In wallets it's a setting: Phantom has Settings → Developer Settings → Testnet Mode (pick Solana Devnet), Solflare has a network switcher, and Backpack lets you set the RPC per wallet. Explorers too — every Solana explorer has a cluster dropdown, and ?cluster=devnet in the URL does the same. If your transaction "doesn't exist," you're almost always looking at the wrong cluster.
There's also a fourth, unofficial option: localnet via solana-test-validator, or a mainnet fork via Surfpool when you need real mainnet state without real mainnet money. But for anything involving other people — hackathon demos, testers, shared backends — devnet is the answer.
Getting devnet SOL: devnetfaucet.org
You can't buy devnet SOL (it's worthless), so you get it airdropped. The CLI has a built-in airdrop against the public RPC:
solana airdrop 2 --url devnet…but the public RPC faucet is heavily rate-limited and fails with 429 Too Many Requests exactly when you need it (i.e. during hackathons). That's the gap devnetfaucet.org fills:
- 20 devnet SOL per airdrop — an order of magnitude more than the CLI faucet gives you, enough to deploy a mid-size program.
- Two modes: sign in with GitHub, or request anonymously. The GitHub path exists to keep drainers out without making you do captcha gymnastics.
- Public ledger — recent airdrops are listed with GitHub username and truncated wallet address, so the faucet's usage is transparent.
Flow: open the site → connect GitHub (or go anonymous) → paste your wallet address → receive 20 SOL on devnet. Verify with solana balance --url devnet or your wallet in devnet mode.
Solana Foundation's own faucet.solana.com also works (it gates higher amounts behind GitHub login), and solana airdrop is fine for topping up 1–2 SOL. Keep all three in your toolbox; faucets have bad days.
Getting devnet USDC: Circle's faucet
If you're building anything payments-shaped — checkout flows, x402, Solana Pay — you need devnet USDC, and SOL faucets can't help you. Circle (the USDC issuer) runs the canonical faucet at faucet.circle.com:
- 20 USDC every 2 hours, per address, per chain. No account, no login — pick token, pick network, paste address.
- Select USDC as the token and Solana Devnet as the network. (Circle also dispenses EURC, and supports a long list of other testnets — Ethereum Sepolia, Base Sepolia, and friends.)
- Need more than the rate limit allows? Circle handles bulk requests through their Discord.
The devnet USDC you receive is Circle's official devnet mint:
devnet USDC mint 4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU
mainnet USDC mint EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1vHardcode the right one per environment. A depressing number of "my USDC transfer fails on mainnet" bugs are apps shipping with the devnet mint address still in the config. And don't create your own fake "USDC" mint for testing when the real issuer runs a faucet — integrations against the real mint catch real bugs (associated token accounts, 6 decimals, token program ownership).
The 60-second setup
# 1. Point everything at devnet
solana config set --url devnet
# 2. Create a throwaway dev wallet (never reuse mainnet keys for dev)
solana-keygen new -o ~/.config/solana/devnet.json
solana config set --keypair ~/.config/solana/devnet.json
# 3. Fund it
# SOL: https://devnetfaucet.org (20 SOL, GitHub or anonymous)
# USDC: https://faucet.circle.com (20 USDC / 2h, pick Solana Devnet)
# 4. Confirm
solana balance
spl-token accounts # your USDC shows up under 4zMMC9s...ncDUOne habit worth forming from day one: separate keypairs per cluster. The wallet you paste into faucets and commit to test scripts should never be the wallet that later holds mainnet funds.
TL;DR
- Build on devnet, ignore testnet (it's for validators), graduate to mainnet when you're ready to spend real SOL.
- Devnet SOL: devnetfaucet.org — 20 SOL, GitHub or anonymous.
- Devnet USDC: faucet.circle.com — 20 USDC every 2 hours, straight from the issuer.
- Wrong-cluster confusion causes most "it doesn't work" moments — check your RPC URL, your wallet's network mode, and the explorer's cluster dropdown before debugging anything else.
Keep reading
Stripe Connect costs $2/active account/month plus 0.25% + $0.25 per domestic payout and $1.50 per international. Zoneless replaces it with USDC on Solana: $0.002 in gas fees, instant settlement, same API shapes. PromptBase ran both in parallel — 72% of sellers chose Zoneless. It's Apache 2.0, self-hosted, and the SDK is a near-drop-in swap.
Every API you use today requires an account, a key, a billing portal, and a rotation policy. x402 collapses that to one HTTP header. pay.sh implements it as a single binary that wraps curl — 76 providers across AI, data, compute, messaging, finance, and more. No keys to manage. No subscriptions.
Both x402 and Mastercard's AP4M answer the same question — how does an agent pay without a human in the loop — and they answer it differently. One is an open HTTP status code settled in USDC on Solana; the other is a permissioned network that uses public chains only as a credential ledger. Here's the head-to-head, dimension by dimension, and a decision guide.
Get new articles in your inbox
Technical deep-dives on Solana tooling, infrastructure, and ecosystem. No noise.