Onchain, every stablecoin movement is a Transfer event: a mint is a transfer from the zero address, a burn is a transfer to it, a payment is one between two wallets. SQD serves that transfer and swap data across 225+ networks, the substrate for flow tracking, supply series, and peg monitoring.
Flow, supply, and peg are not separate feeds you subscribe to; each is read back off the same onchain Transfer and Swap events. Rebuilt the naive way, that means a per-chain address map because a stablecoin is a separate native deployment on every network, time-aligning windows across chains where the same block height is a different wall-clock moment, and folding mints minus burns into a supply series by hand. It is all onchain already; the cost is in reading it consistently across every chain the token lives on.
Issuance, redemption, and every payment are the same queryable Transfer event. Filter it for a stablecoin's contract and you have its entire flow of funds on that chain, no separate supply feed, no aggregator.
One real result from the USDC query on the right, at block 21,000,100, is an issuance: the sender is the zero address, so these are new tokens entering circulation, paid to 0xa622…4974.
The query is one filter on the token address and the Transfer topic. Sender is in topic1, recipient in topic2, amount in data:
A stablecoin is rarely one thing on one chain. The same Transfer query runs on every network SQD indexes, but two things have to be right. First, the contract address is a separate native deployment per chain, so a cross-chain query carries a per-chain address map; using one address everywhere silently returns nothing on the others.
Second, block numbers are not comparable across chains: the same height is a different wall-clock moment on each one. To compare a window you resolve the timestamp to a block on each chain first, with one GET (/datasets/{chain}/timestamps/{unix}/block). For a fixed ten-minute window (2025-06-01 00:00 to 00:10 UTC), that same ten minutes is 49 blocks on Ethereum and 2,367 on Arbitrum, and the USDC transfer counts only compare because the windows are time-aligned:
Base moved USDC close to eight times as often as Ethereum in that window. With an RPC node you would binary-search block timestamps instead, roughly twenty calls per bound, per chain. The full walkthrough is in the stablecoin data guide.
There is no cross-chain supply field to read. Circulating supply is the running total of mints (transfers from the zero address) minus burns (transfers to it), summed across every chain. SQD serves the mint and burn transfers; you fold them into the series.
Peg health is the executed price on the deepest DEX pools versus 1.00, read from Swap events, a monitoring signal, not an oracle. Issuer reserve attestations are off-chain and not indexed; pair onchain data with the issuer's published reports.
SQD does not maintain a curated list of "supported" stablecoins. Any ERC-20 Transfer event on any of 225+ networks is queryable, including stablecoins that launched yesterday and newer stablecoin-focused chains like Plasma.
The same Transfer query runs on every chain a stablecoin is deployed on; the only change is the per-chain contract address. USDC is a separate native deployment on Ethereum, Base, Arbitrum, and more, so a cross-chain flow is transfers in several datasets, joined on address and amount.
A mint is a Transfer from the zero address; a burn is a Transfer to it. Stream both from Circle, Tether, MakerDAO, and any issuer as they confirm onchain, then fold mints minus burns into a circulating-supply series.
A stablecoin's peg is the price it trades at, not a contract field. Read the executed price from Swap events on its deepest pools and compare to 1.00; a sustained gap is a depeg signal. This is a trade-price read, not an oracle and not a reserve attestation.
Compute transfer velocity, unique holder counts, and concentration ratios at the wallet level from decoded transfers. The data comes typed; you write the analytics logic, not the data pipeline.
Flow, supply, and peg are read back off the same onchain events; the work a provider saves is in reading them consistently across every chain.
See this on your own contracts
Tell us the chains and contracts you care about, and we will show you the query that returns them.
Tron's TVM emits the same event topics as Ethereum, so decoding is identical, but the request type, the typed-transaction schema, and the energy and bandwidth model differ. The data model, a real TRC-20 query, and what carries over from EVM.
Tron settles more USDT than any other chain. Pull TRC-20 USDT transfers from the Portal in one declarative query, read a real transfer end to end, and see why the energy and bandwidth model lets transfers settle without burning TRX.
TRC-20 mirrors ERC-20: the same Transfer event, the same topic0 hash, so a decoder built for one reads the other unchanged. What actually differs is the chain envelope: address format, native token, fees, finality, and how you fetch the data.
Following stablecoin transfers across every chain they live on with one query model, aligning windows across chains by timestamp, and reading peg health from DEX trades.
How blockchain history feeds analytics dashboards. The data pipeline, the common metrics, and how this is done in tools like Dune and in-house BI.
Issuance, transfers, and the issuer control events a token API omits.
Pool discovery from factory events, and every trade the pools emit.
Item ownership, game currencies, and marketplace settlement onchain.
Registrations, delegation, and the social graph that stays onchain.
Deployments as CREATE traces, LP creation, and the first trades.
Private Portal. Dedicated. Validated. Managed. Tell us what you're building, we'll show you what it looks like on SQD.