All posts

Proving Stablecoin Supply Under the GENIUS Act

Under the GENIUS Act, the CEO and CFO of every permitted US stablecoin issuer will certify its tokens outstanding each month. That number comes from public chains, and a proof lets everyone who relies on it verify it instead of rebuilding it.

The GENIUS Act, the US stablecoin law signed in July 2025, takes effect on January 18, 2027 at the latest. Among other things, it requires every permitted stablecoin issuer to publish a report each month covering two things: the reserves backing its stablecoin and the total number of its stablecoins outstanding. An accounting firm has to examine that report every month, and the CEO and CFO have to certify that it's accurate. Knowingly certifying a false one carries the same criminal penalties that Sarbanes-Oxley applies to executives who certify false financial reports.

The reserves are mostly cash, bank deposits, and short-term Treasuries held at banks and custodians, and examining them is the accounting firm's job. The tokens outstanding are a different kind of number. They live on public blockchains, and every change to them is an event anyone can see. This post walks through what the rules ask for on that side of the report, why the number is harder to pin down than it looks, and what changes when it comes with a proof.

The two halves of the monthly report: the reserves (cash, bank deposits, and short-term Treasuries) are held offchain at banks and custodians and examined by the accounting firm, while the tokens outstanding live on public chains, where every mint, burn, transfer, and freeze is a public event that can be indexed with a proof

What the rules ask for

The statute asks for "the total number of outstanding payment stablecoins issued by the issuer," published monthly on the issuer's website. The OCC, which will supervise many of these issuers, has proposed rules that fill in the details, including when the number is taken, which is noon on the last day of each month.

The OCC has also proposed a weekly confidential report that goes much further. For each blockchain and each day, the issuer would report how many tokens it issued, how many it redeemed, how many were frozen or otherwise restricted, and how many were outstanding at the end of the day. Both are still proposals, and the OCC has said it wants its main rule finalized by November.

Some issuers already work under a version of this. New York's 2022 stablecoin guidance requires a monthly examination as of the last business day and at least one randomly selected business day, which means the issuer has to be able to produce its tokens outstanding as of a moment it didn't choose, after the fact. The OCC has also asked commenters whether the monthly report should be real-time, and about the challenges of providing assurance over real-time figures.

Why it's harder than it looks

Say an issuer has tokens on several chains. On each one, a contract mints tokens when someone deposits dollars, burns them when someone redeems, and can freeze an address when a lawful order requires it. Tokens also move between chains, which often means burning them on one chain and minting them on another.

On top of that, not every token that exists counts as outstanding. Circle's latest annual report, for example, leaves three things out of USDC in circulation: tokens Circle holds that haven't been issued yet, tokens frozen to comply with a legal order ($116.8M at the end of 2025), and balances in its contracts that are pending a burn. Each of those is itself onchain, as a balance held at a known address. So the tokens outstanding are basically everything minted minus everything burned, less what sits in the issuer's own wallets, frozen addresses, and pending burns, on every chain, as of a specific moment.

What counts as outstanding on each chain: everything minted minus everything burned, less the tokens in the issuer's own wallets, tokens frozen by a legal order, and tokens pending a burn, with what remains summed across every chain as of the snapshot. The excluded tokens are onchain too, each at a known address

Reading the contract's total supply on each chain gets you part of the way, and with a storage proof against a verified state root, that number is even verifiable. But it's one number at one block. It doesn't give you the daily issued, redeemed, and frozen amounts the OCC wants, and it can't list which addresses are frozen. That list only comes from the complete history of freeze events. It also can't tell you whether every mint on one chain had a matching burn on another.

So today, the issuer and its accounting firm each derive the number themselves. The issuer reconciles its books against each chain, and the accounting firm does the work again with its own tools. Deloitte, Circle's auditor, described this in the same annual report: it "utilized our proprietary audit tool and involved specialists to independently obtain evidence from public blockchains to test the completeness of stablecoins minted and outstanding by blockchain." It also "evaluated the reliability of audit evidence obtained from public blockchains." A proof gives the auditor a way to verify that evidence against the chain itself, instead of judging the source it came through.

In a January 2024 comment letter to the AICPA on a proposed criterion to disclose tokens outstanding for each blockchain, Circle wrote that the detail would add "significant administrative overhead for preparers with tokens issued across numerous public blockchains (USDC is currently issued across 15 blockchains)." Circle's latest annual report puts USDC natively on 30 chains. The OCC's proposed weekly report would ask for that breakdown for every day.

Cross-chain movement adds another layer. Every token minted on a destination chain has to match one burned or locked on the source chain. A mint without a matching burn creates tokens out of thin air. That's the kind of failure behind the $292M KelpDAO exploit in April, where Ethereum released rsETH against a burn on Unichain that never happened. The OCC's proposal relies on this matching in one place. During a reserve shortfall, an issuer could still mint for a transfer from one chain to another, but only if its net tokens outstanding don't go up.

What a proof changes

The onchain numbers in these reports all come from public events (mints, burns, transfers, and freezes), which means they can be proven instead of re-derived.

We index those events and prove three things about them: every event is really onchain, none were left out, and every total computed from them is correct. The proofs are anchored to the chains themselves, to Ethereum's own block hashes and, for rollups, to the roots they settle on Ethereum, so they don't depend on any RPC node. Anyone can verify one in milliseconds, on their own computer or in a smart contract.

In other words, one party produces the numbers with a proof, and the issuer, its accounting firm, its regulator, and its partners each verify that proof instead of rebuilding the numbers with their own tools.

Who derives the number: today the issuer reads and reconciles every chain, the accounting firm derives the number again, and the regulator, partners, and holders rely on the published report; with a proof, the number is indexed once with a proof, and the issuer, accounting firm, regulator, partners, and holders each verify it against the chains themselves in milliseconds

For a monthly report, the starting point can be the token contract's first block, or the last figure an accounting firm examined. Given the token's contracts and the issuer's own wallets on each chain, we can prove every mint, burn, freeze, and transfer in or out of those wallets since then, so the new month's tokens outstanding are the old figure plus a set of changes proven to be complete. Frozen balances come from each frozen address's full transfer history, which we can prove the same way. The same proven events give the daily issued, redeemed, and frozen amounts for the OCC's weekly report, and the tokens outstanding as of any past block, which covers the randomly selected day. Across chains, each mint on a destination chain can be matched to its burn on the source chain.

For rollups, a proof anchored to a settled root has to wait for the rollup to finalize on Ethereum, which takes about a week on some of them, so the most recent days on those chains are proven after that delay.

What this doesn't cover is the reserves. Cash at a bank isn't onchain, and examining it stays with the accounting firm. What we can prove is the onchain token side of the report, on the chains we support.

Where Willow is today

Willow is the first cryptographically verifiable blockchain indexer. Contracts on Ethereum mainnet verify our proofs of event logs from Ethereum, Base, Arbitrum One, OP Mainnet, Unichain, Ink, and Robinhood Chain, and anyone can verify our proofs on their own computer. A stablecoin's supply on those chains is the same kind of data, since it comes from events emitted by a known contract.

If you issue a stablecoin, examine one, or build on one, and you'd rather verify its supply than rebuild it, we'd love to hear from you at [email protected].

Sources: GENIUS Act, Pub. L. 119-27 · OCC proposed rule · OCC proposed weekly report (Bulletin 2026-24) · PYMNTS on the OCC's timeline · NYDFS stablecoin guidance · Circle 10-K, including Deloitte's audit report · Circle comment letter to the AICPA (January 2024)

Put proven data under your app.

Partners

Request a call