This page contains no referral link and no referral code · Other pages on this site do · Full disclosure →
Home›Deep dive›Proof of reserves explained
Platform safety

What a proof of reserves proves
and what it leaves out

CryptoDesk Editorial Team First published 2026-09-01 Updated 2026-10-17

What a proof of reserves report actually proves

Proof of reserves (PoR, as most exchanges label it) proves one thing: at a chosen moment, the on-chain addresses an exchange controls held as many coins as the report says.

What happened before or after that moment is outside its scope. How much the platform owes its users in total depends on whether it also proves the liability side. Off-chain loans, dealings between related parties and fiat held in bank accounts are places where cryptography has no reach at all.

A passing PoR report works much like a routine blood test: bad numbers are usually enough to rule a platform out, while normal numbers don't mean nothing is wrong.

What you want to knowCan PoR answer it?What it takes to answer
How much BTC the exchange held at one momentYesPublic on-chain addresses plus a snapshot of that moment
What all user balances add up toOnly if the liability side is coveredA Merkle sum tree or a zero-knowledge proof
Whether my balance was counted in the totalYes, if you check it yourselfA verification tool from the platform or a third party
Who the platform owes off-chain, and how muchNoA full financial audit; in the worst case, insolvency proceedings
Whether fiat reserves in the bank are enoughNoAn attestation by an accounting firm
Whether reserves were complete yesterday and will be tomorrowNoOnly more frequent snapshots, which shorten the blind spot

The rest of the page covers mechanism, page layout, verification, limits and a checklist, in that order. By the end you can judge any exchange's report on your own, without needing to remember who does it best right now; that ranking shifts every year.

Merkle sum trees and zero-knowledge proofs: what each one solves

Start with the liability side, because that half is the hard one.

The exchange has to show that every user's balance went into the total without publishing anyone's balance. The usual method: each account's balance becomes a leaf, leaves are merged in pairs, and each parent node stores the sum of its two children's balances plus their two hashes. Merging continues until a single root hash is left, and that root is published.

To check yourself, the platform gives you the path from your leaf to the root, meaning the sibling node at every level on the way up. You recompute it level by level on your own machine. If your result matches the published root, your balance is in the total and was not shaved down.

Why it has to be a sum tree

A plain Merkle tree can only prove "I am on this list". The extra step in a sum tree is the part that matters: if the exchange slips in a fake account with a negative balance to shrink its total liabilities, the intermediate node in the subtree holding that negative number comes out invalid, and any real user under that subtree would catch it on checking. Vitalik Buterin uses exactly this example in his November 2022 post Having a safe CEX: proof of solvency and beyond: an intermediate node totalling -230 ETH, which voids the whole path on the spot.

Zero-knowledge proofs close the privacy gap

Merkle paths have a side effect: you also see the balances of your sibling nodes. With enough users, stitching many paths together reveals a fair amount. A zero-knowledge proof takes another route. Instead of handing you a path, it proves directly that every account balance is non-negative and that together they equal the published figure, without exposing any single account.

Exchanges don't all do this the same way. According to their public pages (viewed September 2026), Binance cites zk-SNARKs, OKX uses zk-STARK and offers a downloadable validator, and Kraken has an independent third-party accountant run the process while users check themselves with a Merkle leaf ID. Each approach has trade-offs, and none is clearly more advanced than the others.

Reading an exchange's PoR page: the few lines that matter

Layouts differ a lot from one exchange to the next, but you read them the same way: first the snapshot time of the current report, then two figures per coin, what users hold on the platform and what the platform actually holds in its wallets, and finally the way into verification. Here is OKX's public page in English:

OKX Proof of Reserves page in English with latest verification date 3 Oct 2026, 12:00 am (UTC+8): cards for BTC 110%, ETH 100%, USDT 105%, USDC 101%, XRP 107% and DOGE 101%, each listing OKX account assets and OKX wallet assets, the latter split into Exchange and Third-party custody
OKX's Proof of Reserves page, viewed without logging in in October 2026, showing the report dated 3 October 2026. A newer report may be up when you open it; the figures on the page at that point are the ones that count.

Taking those lines one at a time:

  • Latest verification date — the moment this report's snapshot was locked. OKX gives it in UTC+8 (here 3 Oct 2026, 12:00 am), so convert before comparing it with a page that uses UTC.
  • OKX account assets / OKX wallet assets — the first is the total users hold in that coin on the platform, i.e. what OKX owes them; the second is what OKX actually holds in its wallets, split into two lines, Exchange and Third-party custody.
  • The percentage in the top-right corner — wallet assets divided by account assets. For BTC in the 3 October 2026 report: 156,475 ÷ 142,809 ≈ 1.096, displayed as 110%. Only a figure below 100% means reserves in that coin fall short of user balances.

The disclaimer at the bottom of the page adds that third-party custody balances are held at third-party custodians, and that you can contact those custodians to verify them. In other words, the Third-party custody line is something you cannot check on-chain yourself. The root hash and the personal self-check are not in this public table either; you reach them through View my report at the top of the page, after logging in.

Most exchanges let you look back at earlier reports. How far back the history runs, and whether it has gaps, tells you more than what the latest report looks like.

How to verify your own balance in four steps

The steps barely depend on the exchange. It is nearly always these four:

  1. Open the PoR page, or the proof-of-reserves entry inside your account, and pick a snapshot date.
  2. Download the data that belongs to you. It may be called a Merkle path or a verification file, or it may just be a leaf ID.
  3. Run a verification tool on it locally. Most exchanges provide their own validator, and there are open-source implementations written by third parties.
  4. Read the result. If the inclusion check passes, your balance for that report really was in the total.
Watch out

Using the exchange's own validator has one unavoidable problem: the party being checked is the party that supplied the tool. That doesn't make the tool faulty, but if you can find an implementation independent of the platform, use that one first.

Four questions proof of reserves cannot answer

1. Is the liability side covered at all?

A report that only publishes on-chain addresses and total assets, and leaves user balances untouched, is half a PoR. It shows that the exchange has money; it cannot show that the money is enough to pay everyone back. The first thing to confirm in any report is whether the liability side is there.

2. The days outside the snapshot

A snapshot captures one moment and says nothing about the stretch between two of them. Vitalik's post puts it bluntly: "Shuttling collateral back and forth between each other to do proof of reserves is something that exchanges could easily do." Publishing more often shortens the blind spot but cannot remove it.

3. Off-chain liabilities and related parties

Loan agreements are not on-chain. A platform can be fully reserved on-chain while owing a large sum off the books, or lend users' money to a related entity while everything on-chain looks normal. The platforms that actually failed in 2022 mostly broke down at this layer, which PoR by design cannot see.

4. Fiat and other off-chain assets

Dollars in a bank account cannot be proven with a hash. The fiat side relies on an accounting firm, and how much that is worth depends on whether the firm did a full audit or a set of procedures agreed in advance. The gap between the two is wide, so read the wording on the report's cover page carefully.

One more item that often gets skipped: which coins are covered. Two reports both called PoR may cover twenty-odd coins or just six major ones. Whether the coin you hold is on the list is something you have to check yourself.

Six things to check first in a proof of reserves report

  1. Is there a liability side? If the report covers assets only, the other five checks don't matter.
  2. The date of the latest report, rather than the advertised frequency. If the page says "published regularly" but the latest report is six months old, this check fails.
  3. Which coins are covered, and whether Earn and margin balances are included. A report that covers spot only is of limited use to someone trading derivatives.
  4. Can users verify on their own, and is the tool public? Whether you can get the tool, and whether an independent third-party implementation exists, matters more in practice than which proof system it uses.
  5. Is a third-party firm involved, and what kind of document did it issue? An audit, an attestation and agreed-upon procedures carry different weight.
  6. Can you look back at past reports? Continuity is information in itself; where there is a gap, it is fair to ask why.

Put three exchanges' public pages side by side and their choices on these six points differ noticeably:

DimensionOKXBinanceKraken
Publishing cadencePage says monthly; report numbering past fortyPage lets you look back across multiple snapshot datesChecked in September 2026, the latest snapshot was from the end of June 2026
Verification methodzk-STARK, with a downloadable validatorzk-SNARKs plus a published Merkle root hashPerformed by a third-party accountant; users self-check with a Merkle leaf ID
CoveragePage says more than twenty coinsPage claims user assets are backed 1:1BTC, ETH, SOL, USDC, USDT, XRP, including staked and margin balances
Third-party firmNo named firm on the public pageNo named firm on the public pageStates that an independent third-party accountant performs it

The table reflects each exchange's public page as of 1 September 2026. Cadence, report numbers and coverage all change, so check the pages as they stand when you read this. "No named firm on the public page" means the public page does not name one; it does not mean there is none.

Where PoR ranks when you judge an exchange's risk

A platform with no PoR, or only half of one, can be crossed off your list straight away. If it still cannot produce one in 2026, there are only two explanations: it lacks the ability, or it doesn't want to be looked at. The converse does not hold. A PoR is not a safety endorsement. It only somewhat lowers the odds of one kind of risk, an exchange directly misusing customer assets the way FTX did. Operational risk, compliance risk and the risk of withdrawals being held up remain entirely uncovered.

⚑ Assets only, no liabilities

It leaves half the question unanswered, yet it is often marketed as "passed proof of reserves".

⚑ The latest snapshot is most of a year old

The frequency printed on the page counts for nothing; look at the date of the latest report.

⚑ Only the exchange's own tool can verify it, and its code isn't public

You are checking a black box, and the act of verifying loses most of its point.

⚑ The exchange's own token makes up a large share of its reserves

FTX propping up its books with FTT is where this one comes from. When a platform's own token backs its own balance sheet, a market turn sets off a chain reaction.

⚑ Reports keep coming out on schedule while withdrawals start slowing down

The two together are a stronger warning than either one on its own.

An overall PoR score is meaningless: a monthly, zero-knowledge report with full history looks perfect, yet if it doesn't cover the coin you hold, it does nothing for you. So check the items that matter and ignore the score.

Where to go next: for how one exchange looks on reserves, licensing and past incidents, see Is OKX safe?; for account settings beyond verification, see the account security guide.

FAQ

If an exchange passes PoR, does that mean it won't collapse?

That conclusion doesn't follow. PoR shows the amount of on-chain assets at one snapshot; it cannot see off-chain loans, related-party dealings or fiat accounts. Platforms that failed in the past mostly had their problems in exactly those blind spots. The sensible use is as a threshold: no PoR rules a platform out, and having one only gets it past the first gate.

If I never verify it myself, does a published PoR mean anything to me?

Much less. Liability proofs are designed on the assumption that users will spot-check them: the more people check, the more likely it is that an exchange leaving some accounts out gets caught. If you don't check, you are reading the proof as a marketing line.

Is there a difference between zk-SNARK and zk-STARK, and should I care?

For an ordinary user, both solve the same problem: proving that every account balance is non-negative and that the total matches the published figure, without revealing anyone's balance. They differ in proof size, verification speed and whether a trusted setup is needed. What deserves your attention is whether you can get the verification tool and whether an implementation independent of the platform exists; the acronym matters far less.

The report says reserves cover more than 100%. Is that good?

It is a necessary condition and makes no promise of safety. The denominator is the user liabilities the platform reports about itself; the numerator is the on-chain assets it controls at the chosen moment. If the denominator leaves some accounts out, the ratio looks better than it should. So look at how liabilities are counted first, then at the ratio. The ratio itself moves every day with prices, deposits and withdrawals; use the figure the exchange's page shows at the time.

How often should I verify my own balance?

Follow the exchange's publishing schedule. If it publishes monthly, a spot check every one or two reports is enough; if quarterly, you can check every report. An extra check makes sense after a big change in your holdings, or when the platform has just been through a wave of bad press.

If an exchange borrows coins just for the snapshot, can anyone tell?

Not easily. In his November 2022 post on exchange solvency, Vitalik Buterin wrote that exchanges shuttling collateral back and forth between each other to pass proof of reserves is something they could easily do. Partial safeguards: more frequent snapshots, checking continuity across several reports, and watching whether the snapshot time can be predicted in advance.

Next: make one check a quarterly habit

Confirming your balance is included is only one part of account safety. Getting 2FA, an anti-phishing code, the withdrawal allowlist and API permissions in place does more to prevent losses you cause yourself than any report can.

Open the account security guide