# Track your asset’s supply, holders, and activity.

GraphOps operates the RPC, indexing, and streaming services behind your supply monitors and holder applications.

[Create account (opens in a new tab)](https://platform.graphops.xyz/auth/register) [Explore RPC API](https://graphops.xyz/services/rpc#service-example) 

Issuers 

Worked example 

## Explain a 40,000 USDC supply gap

Your operations team publishes a daily supply report. Today the stored mint and burn events say supply should close at 1,250,000 USDC, but the contract reports 1,210,000.

At stake 

The report cannot go out with a 40,000 USDC difference that nobody can explain.

Built with 

- GraphOps RPC

- GraphOps Substreams

### Daily supply check

USDC · blocks 21,300,000 to 21,307,199      

- 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 supply1,000,000

Minted (5)+250,000

Burned (0 of 2)Not collected

Expected closing supply1,250,000

Observed contract supply1,210,000

40,000 USDC difference 

#### Corrected run

Updated burn rule  

Opening supply1,000,000

Minted (5)+250,000

Burned (2 of 2)−40,000

Expected closing supply1,210,000

Observed contract supply1,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.

Related workflows 

## Across the asset lifecycle

- ### Supply oversight

Compare supply reads with mint and burn activity at explicit blocks.

[GraphOps RPC](https://graphops.xyz/services/rpc)

- ### Holder-facing products

Build balances and activity views from a schema with account relationships and transfer identifiers.

[GraphOps Subgraphs](https://graphops.xyz/services/subgraphs)

- ### Transfer analysis

Collect transfer history into your database to study asset movement.

[GraphOps Substreams](https://graphops.xyz/services/substreams)

- ### Operational reporting

Connect chain records to internal reports and asset-specific rules.

[GraphOps Substreams](https://graphops.xyz/services/substreams)

Evaluate with your data 

## Prove the model against your asset

Choose a sample period that contains the behaviors most likely to change a supply report or a holder’s view.

- Test 01 

### Cross a contract change

Include an upgrade boundary and any asset-specific mint, burn, or balance adjustment. Compare decoded events with contract reads on both sides of it.

- Test 02 

### Follow busy holders

Check transfers into and out of the same address, pagination through a busy period, and the indexed block behind each holder view.

- Test 03 

### Give every gap an owner

Assign each unexplained difference to a named owner, with a resolution record that stays with the report it affected.

### Bring to the first conversation

- Network and contract addresses

- Mint, burn, and upgrade behavior

- The history your first report needs

- The first report or holder feature to build

[Explore current pricing](https://graphops.xyz/pricing) 

## Connect your asset’s next workflow.

Create an account and fund access for contract reads or event collection. Work with GraphOps on your asset model, integration, and operating requirements.

[Create account (opens in a new tab)](https://platform.graphops.xyz/auth/register)[Discuss your project](https://graphops.xyz/contact#enterprise)
