ERC-20 total supply vs wallet balance: which number is yours?
A token's supply and an account's balance answer different questions. Choose the right read-only field before comparing the numbers.
For an ERC-20 token, balanceOf(account) reports the balance recorded for one account. totalSupply() reports the token contract’s total supply. A large supply on a token page is not a large holding in your account.
If you opened an explorer to check what you hold, choose the account balance. To check how many units the contract reports in total, choose supply. Neither number alone tells you a dollar value, proves control of an address or establishes that a token is safe.
One contract, two different questions
The ERC-20 specification defines these as separate read-only methods. totalSupply() has no account input. balanceOf requires the address whose balance you want to inspect. The token contract you call determines which asset you are asking about.
| Read | Input beyond the token contract | Question answered |
|---|---|---|
totalSupply() |
None | What supply does this contract report? |
balanceOf(account) |
Public account address | What balance does it record for this account? |
For example, imagine a token with a supply of 1,000 units, of which Account A holds 25. The correct results are 1,000 for supply and 25 for Account A. Their difference is expected. There is no missing 975-unit holding to recover.
These are invented quantities for explanation, not readings from a live token. If you are unsure which address identifies the account and which identifies the asset, use the wallet address versus token contract guide before reading either field.
What changes a balance, and what changes supply?
Consider a simple hypothetical token using ordinary transfers with no fee or custom accounting. Start with 25 tokens in Account A and 975 in Account B:
| Event | Account A | Account B | Total supply |
|---|---|---|---|
| Starting snapshot | 25 | 975 | 1,000 |
| A transfers 5 to B | 20 | 980 | 1,000 |
| 100 new tokens are minted to B | 20 | 1,080 | 1,100 |
| B burns 10 through a burn function | 20 | 1,070 | 1,090 |
The transfer changes who holds the units. Minting creates units, and burning through the illustrated mechanism removes units. OpenZeppelin’s ERC20 reference documents its mint and burn accounting, including the supply reduction on a burn.
This table describes that simple model. A token may customize transfers or use other accounting rules. Do not treat sending tokens to an address described as “dead” as proof that totalSupply() fell: establish whether the contract actually reduces supply. A label on an address does not execute a burn function.
Likewise, your balance can stay unchanged while supply changes elsewhere. OpenZeppelin’s supply guide explains that ERC-20 leaves the supply mechanism to implementations. A current supply reading does not establish that future minting is impossible.
Read both figures without moving tokens
Read both figures from the same token contract on the same network. The following procedure is a proposed check, not a report of a wallet test performed for this article. Primary documentation was checked on 23 October 2026.
- Record the network and full token contract address. Check the contract address against the issuer’s official deployment information. Matching symbols on different networks are insufficient for a like-for-like comparison.
- Record the public account you mean to inspect. Obtain it from that account’s details. Keep it separate from the token contract. Public tracking also works for accounts you do not control, so a successful lookup cannot prove ownership.
- Open a trusted explorer or contract reader for that network. Select its read-only interface for the verified token contract. Read
totalSupply()and thenbalanceOfwith the account address as its input. Interface labels vary; use the function names to identify the questions. - Keep the snapshot with the results. Record the block number where available. Prefer both calls at the same block. Separate “latest” readings may observe different states if a transfer, mint or burn occurs between them.
- Record units before comparing. Preserve raw responses and note whether the interface has already formatted them. A failed call is unavailable data, not a zero balance.
The Ethereum ERC-20 documentation illustrates separate calls for supply and an account balance. You do not need to reproduce its developer setup to understand which result you need. An explorer offering the public read methods can provide the same categories of information.
Reading public state requires no transfer or token approval. If a page asks for a recovery phrase or a signature to reveal these values, stop using that flow. Neither is an input to this comparison.
Apply the same units to both numbers
Supply and account balances use the same token’s accounting scale. OpenZeppelin’s decimals explanation explicitly covers formatting both. For a hypothetical token with 6 verified decimals, raw supply 1000000000 represents 1,000 tokens and raw balance 25000000 represents 25 tokens.
Do not compare raw supply with a formatted balance. Do not divide a figure that an interface already converted. The ERC-20 decimals guide covers establishing that scale, missing metadata and rounding. Here, scaling is only a prerequisite for comparing two different measures; it does not make them equal.
What a supply figure cannot settle
ERC-20’s totalSupply() is not a standardized circulating-supply calculation. A provider may apply exclusions when estimating circulation. Its methodology must explain those exclusions; you cannot obtain them by renaming a contract response. A maximum supply is another separate question. OpenZeppelin documents a supply-cap extension, but ERC-20 itself does not require every token to have that feature.
The result also belongs to the particular deployment and snapshot you read. It does not automatically combine tokens across chains, wrappers or related contracts. Summing similarly named deployments can produce a figure with no clear meaning unless their relationship and accounting are established separately.
For a portfolio check, keep a small final record: network, token contract, account, block, balance and units. Add supply only when it answers a separate question. If the account balance is 25 tokens and the contract supply is 1,000, keep both labels with their numbers. The difference does not mean that tokens are missing from the account.
Frequently asked questions
Does totalSupply show how many tokens are in my wallet?
No. totalSupply reports the token contract's total supply. balanceOf takes an account address and reports the balance recorded for that account. Both must refer to the intended token contract and network.
Is totalSupply the same as circulating supply or maximum supply?
No. ERC-20 does not define a circulating-supply calculation or require a maximum-supply field. A provider's circulating figure needs its own methodology; any cap needs evidence from the token's implementation.
Can I check these figures without connecting my wallet?
Yes. Public read-only contract calls need the token contract, network and, for balanceOf, the public account address. Reading these values does not require a transfer, approval, recovery phrase or wallet signature.