When FTX collapsed in November 2022, billions of dollars in customer funds vanished. The exchange had been lending out deposits without users knowing. That event pushed a single question to the center of every crypto conversation: how can you actually verify that an exchange holds what it claims to hold?
Proof of reserves is the answer the industry has converged on. It is an auditing method that allows an exchange to demonstrate, using cryptographic tools, that its on-chain assets match or exceed its customer liabilities. The concept is not new, but demand for it grew sharply after high-profile insolvencies exposed how little visibility users had into exchange balance sheets.
What Proof of Reserves Actually Means
At its core, proof of reserves has two sides: proving assets exist and proving liabilities are accounted for.
Proving assets is the simpler part. An exchange signs a message with the private keys that control its wallets. Anyone can verify on-chain that those wallets hold the stated balances. This confirms the funds are real and controlled by the entity claiming them.
Proving liabilities is harder. An exchange needs to show that every customer balance is included in the total without revealing any individual account details. This is where cryptographic techniques come in.
How Merkle Trees Make It Work
The most widely used method pairs on-chain asset verification with a Merkle tree structure to handle the liabilities side.
A Merkle tree is a data structure where each piece of data is hashed, and those hashes are combined repeatedly until a single root hash represents the entire dataset. In the context of proof of reserves, each leaf of the tree represents an individual user account with its balance. The root hash represents the total of all balances.
The process works like this:
- The exchange compiles a complete list of customer balances.
- Each balance is hashed and placed in the Merkle tree.
- The root hash is published publicly.
- Each user can request their own Merkle proof, which is a small set of hashes that allows them to verify their account is included in the root without exposing other accounts.
- A third-party auditor checks that the sum of all leaf balances matches the assets the exchange has demonstrated on-chain.
This setup gives users individual verifiability while keeping the full customer list private. You can confirm your funds are counted without seeing anyone else's balance.
The Bitcoin whitepaper introduced the foundational idea of using Merkle trees to verify transaction data without downloading the full blockchain. The proof of reserves model borrows that same logic and applies it to exchange accounting.
What a Full Audit Looks Like
A rigorous proof of reserves engagement typically involves an independent accounting firm. The auditor receives access to the exchange's wallet addresses and internal records. They verify that the exchange controls the private keys, that the on-chain balances are real, and that the Merkle tree correctly captures all customer liabilities.
The output is a report confirming that, at a specific point in time, the exchange held at least one dollar in assets for every dollar owed to customers. Some exchanges publish these reports on their websites. Others post wallet addresses and invite ongoing public monitoring.
A few limitations apply to any snapshot-based audit:
- The report reflects a single moment. An exchange could borrow funds to pass the audit and return them immediately after.
- Liabilities can be undercounted if accounts are excluded from the Merkle tree.
- The audit does not assess the quality of assets held. An exchange could be fully reserved in a token it issued itself.
These gaps have pushed regulators to pay closer attention. The U.S. Securities and Exchange Commission has been examining custody and accounting practices at crypto firms, and regulatory frameworks in multiple jurisdictions are beginning to require stricter disclosure standards for exchanges holding customer assets.
Why the Distinction Between Custodial and Non-Custodial Matters
Proof of reserves is only relevant for custodial platforms, meaning exchanges where the company holds private keys on behalf of users. When you deposit funds on a centralized exchange, you give up direct control. The exchange holds an IOU. If the exchange fails, your ability to recover funds depends on what is actually in its reserves.
Non-custodial platforms, including most decentralized exchanges, do not hold user funds at all. Trades settle directly between wallets using smart contracts. You keep control of your private keys throughout. Transparency is built into the protocol rather than attested to after the fact.
For anyone using a centralized exchange, proof of reserves is one of the few tools available to verify that the platform is solvent. Reading an exchange's published proof of reserves report, checking which auditor signed off, and understanding how frequently the process runs are reasonable steps before deciding how much to keep on any platform.
The Ethereum documentation covers how smart contracts enable non-custodial settlement and why on-chain settlement differs fundamentally from exchange-held custody. Understanding both models helps users make more informed decisions about where to hold assets.
What to Look for in a Proof of Reserves Report
- Confirmation that the auditor verified private key ownership, not just wallet balances.
- A Merkle tree tool that lets you check your own account inclusion.
- Disclosure of which assets are counted and whether any are exchange-issued tokens.
- Audit frequency. A one-time report is less meaningful than quarterly or continuous monitoring.
- Whether the auditor is a recognized independent firm.
Track on CoinMarketGuy
CoinMarketGuy's whale tracker lets you monitor large wallet movements on major exchanges in real time, giving you a live signal when significant funds are flowing in or out of custodial platforms. Pairing that data with our market sentiment tools can help you spot unusual activity around the time exchanges publish or delay proof of reserves reports, adding context that static audit snapshots cannot provide.