Day 3 — Auditing everything on chain
After building, I read everything back using spl-token display:
spl-token display nftChe7XoDvsFDkQmavkhQhPv1T9n3pfxKm2A48E9dt
spl-token display 2MEg3Vqbaiy1gNRciiy8f33eqVrenLXj26NDjHPbr7kB
The output shows every extension as a separate block — metadata, group, member — all parsed from raw account bytes. No off-chain index required.
I also confirmed the parent reference. The Group address field on each member mint matched the collection mint address byte-for-byte. That is what "verifiable provenance" means — two byte arrays comparing equal.
Day 4 — Mutating metadata live on devnet
Since I held the update authority, I renamed the NFT, added a custom field, then removed it:
spl-token update-metadata nftChe7XoDvsFDkQmavkhQhPv1T9n3pfxKm2A48E9dt name "Field Notes"
spl-token update-metadata nftChe7XoDvsFDkQmavkhQhPv1T9n3pfxKm2A48E9dt rarity legendary
spl-token update-metadata nftChe7XoDvsFDkQmavkhQhPv1T9n3pfxKm2A48E9dt rarity --remove
Mutated metadata
Each command is a single transaction. The name and URI move instantly on-chain. The image those bytes point at (off-chain) is cached aggressively by wallets — a good lesson in the asymmetry between the two layers.
What surprised me
Extensions are permanent. Every extension you want must be declared at mint creation. There is no ALTER TABLE on Solana. If you forget --enable-metadata, you start over with a new mint. This feels restrictive coming from Web2, but it guarantees that any wallet can trust the account layout without additional verification.
Rent scales with extensions. A simple frozen mint is 171 bytes (~0.002 SOL rent). My multi-extension mint with metadata + group + member was 599 bytes (~0.005 SOL). Features cost bytes, and bytes cost SOL.
The update authority is powerful. Whoever holds the metadata update authority can rename, re-URI, and rewrite any field at any time. On mainnet, this should be a multisig or a revoked key for immutable NFTs.
Where to go deeper
The official documentation covers every extension I used:
If you are coming from Web2 and learning Solana, start by minting a single NFT with metadata. Then add a collection. Then mutate something. Each step builds the mental model that an NFT is not magic — it is just a mint with supply 1, decimals 0, and the right extensions.