Wallets, seed and addresses
What a Monero wallet actually stores and why it has two keys
A Monero wallet stores not coins but keys. Everything starts from one random number, written down as a 25-word seed phrase. From it come two secret keys: the spend key (can spend) and the view key (can only see incoming payments). From those comes your public address.
The coins aren't in the wallet
Your coins are recorded on the blockchain — a shared ledger copied by every node. The wallet only holds the secret that lets you (a) find the outputs on the ledger that belong to you and (b) spend them. Lose the secret and you lose the money. If someone learns the secret, they can spend it.
The seed phrase: 25 words
When a wallet is created, a random 256-bit number is generated. It's awkward to write down, so the wallet turns it into 25 words from a word list: 24 words carry the number itself and the 25th is a checksum to catch typos. These words are your wallet. Any program can restore everything else from them.
Some wallets (e.g. Feather) use the newer Polyseed format — 16 words that also encode the wallet's creation date (so it doesn't have to scan the blockchain from the very beginning). The idea is the same: the words are your money. More in seed phrases and addresses.
Why two keys?
In Bitcoin one secret key does everything. In Monero the duties are split:
| Key | What it can do | Who you may give it to |
|---|---|---|
| view key | Find incoming payments and see their amounts | An accountant, an auditor, a "watch" wallet on a shop's server |
| spend key | Spend money (and, indirectly, see outgoing payments) | Nobody |
This split exists because a Monero wallet cannot simply "ask the blockchain for an address's balance" — the address isn't on the blockchain. The wallet has to scan every new transaction and check: is this for me? The view key is enough for that check. So scanning can be delegated to a server without giving it the right to spend.
With only the view key, a wallet sees incoming payments but can't reliably tell which have been spent: that requires computing the key image, which needs the spend key. So a view-only wallet shows an inflated balance until key images are imported into it. Carrot (arriving with FCMP++) adds a separate key for this.
Main address and subaddresses
The main address starts with 4 and is 95 characters long. Sharing it with everyone is not ideal, though: people you gave the same address to can tell that two payments went to the same person (for example, if two platforms compare payout addresses).
So Monero wallets can create subaddresses, which start with 8. You can create as many as you want, they all belong to one wallet, and the subaddresses themselves reveal no link between them. Good habit: a new subaddress for every payer.
Kinds of wallets
- Full node + wallet (official GUI/CLI with your own
monerod) — maximum privacy: you download and verify the blockchain yourself. - Wallet with a remote node (Feather, Cake, Monerujo, etc.) — the wallet downloads blocks from someone else's node but scans them itself. The node doesn't learn your keys but does see your IP and when you send transactions.
- Light wallet — the view key is handed to a server that scans for you. Convenient, but the server sees all incoming payments.
- Hardware (Ledger, Trezor) — the spend key never leaves the device.
Concrete recommendations are on the wallets page. Want to see how it works inside? Open the key generator — it performs every step of the diagram above in your browser.