When you hold a crypto token, you are not holding a file. You control an address on a blockchain, and the token contract records that your address holds a certain balance. When you send tokens, a signed transaction updates that record.
For ERC-20 tokens, the standard defines shared functions, including transfer, approve, allowance, and balanceOf. These functions are why wallets, exchanges, and apps can read and move ERC-20 tokens through a predictable interface without needing custom code for every single asset.
The table below shows what each layer looks like from a user's perspective:
| Token rule | What users see |
|---|
| Balance | A wallet shows how many units an address controls. |
| Transfer | The token moves when a signed transaction updates balances. |
| Approval | A dapp receives permission to spend tokens up to an allowed amount. |
| Mint | New units can be created under contract or issuer rules. |
| Burn | Units can be removed from supply. |
| Freeze | Some token designs allow transfers to be restricted. |
| Metadata | A wallet or explorer shows a name, symbol, image, or ID. |
Approvals deserve particular attention for beginners. When you connect a self-custody wallet to a decentralized app and sign an approval, you are giving that app permission to spend a set amount of your tokens later, even after you close the tab. Your private keys stay with you, but the permission you signed stays on-chain until you revoke it. A malicious contract can use an open approval to drain your balance without asking again.
A block explorer helps you see the contract address behind any token, its holder count, transfer history, approval activity, and sometimes the contract source code itself. That is the tool that separates a verified contract from a lookalike.
The typical flow for any token: an issuer or protocol sets the rules, a contract records balances and permissions, wallets let you sign transactions, dapps request approvals, exchanges or DEXs route transfers, and block explorers show the on-chain result.