Daily supply check
- 5 mints of 50,000
- 2 burns of 20,000 after the upgrade
- Contract upgrade at block 21,302,400
First run
Original burn rule- Opening supply
- 1,000,000
- Minted (5)
- +250,000
- Burned (0 of 2)
- Not collected
- Expected closing supply
- 1,250,000
- Observed contract supply
- 1,210,000
40,000 USDC difference
Corrected run
Updated burn rule- Opening supply
- 1,000,000
- Minted (5)
- +250,000
- Burned (2 of 2)
- −40,000
- Expected closing supply
- 1,210,000
- Observed contract supply
- 1,210,000
Matches the contract read
How it comes together
- GraphOps service
- Your systems and team
- GraphOps RPC
Read supply at both boundaries
Total supply reads at blocks 21,300,000 and 21,307,199 return 1,000,000 and 1,210,000. Reads at past blocks need archive state on that network.
- GraphOps Substreams
Collect the day’s mints and burns
Your consumer stores five 50,000 mints with their transaction and event index. The package’s burn rule finds nothing after block 21,302,400.
- Your supply check
Hold the report and find the cause
Opening supply plus stored movements gives 1,250,000, which is 40,000 above the contract read. The cause is the upgrade: the new contract no longer emits the Burn event the package selects and records burns only as transfers to the zero address.
- GraphOps Substreams
Stream again from the upgrade block
After you update the package’s burn rule, your consumer streams from block 21,302,400, collects both 20,000 burns, and replaces the stored interval. The event model now closes at 1,210,000.
- Your operations team
Sign off with the cause recorded
Publish the report with the upgrade block, both burn references, and the rule version that found them.
ResultThe report goes out with expected and observed closing supply at 1,210,000 USDC and the cause on record.
Supply agreement supports an onchain reconciliation. Reserve evidence and backing assessments stay with your separate controls.
What to keep with the correction
Keep each burn’s transaction and event index, the upgrade block, the replaced block range, and the rule version. Publish the corrected total only after the replacement records are committed.