Circulacion (Circulation)
Concept
Circulating supply is calculated as:
Code
The dashboard reads totalSupply() on-chain for each token and subtracts the balances held by wallets explicitly marked as non-circulating (treasury, reserves, locked wallets, etc.).
Wallets
Wallets are categorized as:
- Circulating -- Wallets whose balances count toward circulating supply (default).
- Non-Circulating -- Wallets explicitly excluded from circulating supply (treasury, reserves, bridge escrow, etc.). These are registered in the
circulation_wallettable with theirops_token_idandwallet_address.
The circulation_wallet table has a partial unique index (ops_token_id, wallet_address) WHERE deleted_at IS NULL to support soft-delete while preventing duplicate active entries.
There are currently 18 non-circulating wallets tracked across all tokens.
Snapshots
The CIRCULATION_SNAPSHOT cron job runs daily and records a snapshot of:
- Total supply per token
- Sum of non-circulating balances per token
- Calculated circulating supply per token
Snapshots are stored in the circulation_snapshot table and displayed as a historical chart in the dashboard.
Historical data was seeded using seed-historical-circulation.ts, which reads on-chain balances at historical block numbers.
Monitored Tokens
The following 8 tokens are monitored for circulation:
| Token | Network | Address |
|---|---|---|
| ARGt | Base | 0xf016413834E6D1A14F3D628B11D6Ef725a6bdbDD |
| BRAt | Base | 0xFEE29845569570F8e0119291dff77B7b93283aaB |
| COLt | Base | 0xD70ad085684b2A9f4B5d54D7BDB2ecA37a273216 |
| MEXt | Base | 0x59863989d080B22476DB95656d0C3CC18be92214 |
| PERt | Base | 0xD09ABA2969B822d66DC4Bc3bB58eE520Bcf9f0C3 |
| CHLt | Base | 0x95ef2370166b250e7CE3b8F236c7e7E9feD12c2e |
| BOLt | Base | 0x1d2E8C1Fe82ab2AD8dc43eD98A2F507Dfb5b4995 |
| ARGt | Polygon | 0x50464bE58912745447E24EB3bbDedcee10D3E056 |
Note: ARGt Polygon historical seed is pending (requires archive RPC).