Nests · Graph Protocol
GRT supply, bridge removed
grt-supply · Ethereum, Arbitrum
GRT burned and minted on Ethereum and Arbitrum One with the bridge taken out. The network subgraph counts a withdrawal to L1 as a burn; this subtracts the bridge share, which BridgeBurned and BridgeMinted carry exactly.
What it indexes
Each event becomes a decoded SQL table.
Transfer, BridgeBurned, BridgeMinted
Two nests in one repository, `mainnet/` and `arbitrum-one/`, because a nest follows one chain; run each from its own directory. Both are on the public mirror. Background: graphprotocol/graph-network-subgraph#337.
Run it yourself
The nest is a git repository: ABIs, views and a manifest. One command scaffolds a local copy, and
nuthatch dev in it backfills and follows the chain against your own RPC.
nuthatch init --from https://github.com/nuthatch-org/grt-supply-nest Source: nuthatch-org/grt-supply-nest.
Published data: grt-supply-arbitrum-one
We run this nest and publish its sealed segments to the public mirror, each stored under the hash of its contents. The figures are what the mirror listed on 2026-11-11, when this page was built; Play reads the mirror as it is now.
Authored views
The nest’s own SQL over its event tables, as published. Open one to read it.
grt_supply, grt_burns_by_sourceviews/10-grt-supply.sql
-- GRT burned and issued on Arbitrum, with the bridge taken out (graph-network-subgraph#337).
--
-- `gross_*` is what the network subgraph reports as totalGRTBurned / totalGRTMinted. A withdrawal
-- to L1 emits a `Transfer` to zero and a `BridgeBurned` for the same amount in the same tx; the GRT
-- is released from the L1 escrow, not destroyed. Subtracting the bridge events leaves what was
-- actually burned or newly issued on L2.
CREATE VIEW grt_supply AS
WITH t AS (
SELECT CAST(value AS HUGEINT) AS v,
"from" = '0x0000000000000000000000000000000000000000' AS is_mint,
"to" = '0x0000000000000000000000000000000000000000' AS is_burn
FROM graph_token__transfer
WHERE "from" <> "to"
AND ("from" = '0x0000000000000000000000000000000000000000'
OR "to" = '0x0000000000000000000000000000000000000000')
)
SELECT CAST((SELECT coalesce(sum(v), 0) FROM t WHERE is_burn) AS VARCHAR) AS gross_burned,
CAST((SELECT coalesce(sum(CAST(amount AS HUGEINT)), 0) FROM graph_token__bridge_burned) AS VARCHAR) AS bridge_burned,
CAST((SELECT coalesce(sum(v), 0) FROM t WHERE is_burn)
- (SELECT coalesce(sum(CAST(amount AS HUGEINT)), 0) FROM graph_token__bridge_burned) AS VARCHAR) AS burned,
CAST((SELECT coalesce(sum(v), 0) FROM t WHERE is_mint) AS VARCHAR) AS gross_minted,
CAST((SELECT coalesce(sum(CAST(amount AS HUGEINT)), 0) FROM graph_token__bridge_minted) AS VARCHAR) AS bridge_minted,
CAST((SELECT coalesce(sum(v), 0) FROM t WHERE is_mint)
- (SELECT coalesce(sum(CAST(amount AS HUGEINT)), 0) FROM graph_token__bridge_minted) AS VARCHAR) AS issued;
-- Real burns by the contract that burned them: HorizonStaking, L2Curation, GraphPayments and so on.
CREATE VIEW grt_burns_by_source AS
SELECT b."from" AS burner,
count(*) AS burns,
CAST(sum(CAST(b.value AS HUGEINT)) AS VARCHAR) AS burned
FROM graph_token__transfer b
WHERE b."to" = '0x0000000000000000000000000000000000000000'
AND b."from" <> b."to"
AND NOT EXISTS (SELECT 1 FROM graph_token__bridge_burned x
WHERE x.tx_hash = b.tx_hash AND CAST(x.amount AS HUGEINT) = CAST(b.value AS HUGEINT))
GROUP BY b."from"
ORDER BY sum(CAST(b.value AS HUGEINT)) DESC; Tables on the mirror
| table | rows | segments | from block | to block |
|---|---|---|---|---|
| graph_token__transfer | 6,927,046 | 3,032 | 42,449,227 | 523,280,860 |
| graph_token__bridge_minted | 12,051 | 12 | 42,535,689 | 488,659,769 |
| graph_token__bridge_burned | 1,001 | 1 | 43,124,991 | 265,201,408 |
Published data: grt-supply-mainnet
We run this nest and publish its sealed segments to the public mirror, each stored under the hash of its contents. The figures are what the mirror listed on 2026-11-11, when this page was built; Play reads the mirror as it is now.
Authored views
The nest’s own SQL over its event tables, as published. Open one to read it.
grt_supply, grt_burns_by_sourceviews/10-grt-supply.sql
-- GRT burned and minted on Ethereum. No bridge correction: the L1 side of the bridge escrows.
CREATE VIEW grt_supply AS
SELECT CAST(coalesce(sum(CAST(value AS HUGEINT)) FILTER (
WHERE "to" = '0x0000000000000000000000000000000000000000'), 0) AS VARCHAR) AS burned,
CAST(coalesce(sum(CAST(value AS HUGEINT)) FILTER (
WHERE "from" = '0x0000000000000000000000000000000000000000'), 0) AS VARCHAR) AS minted
FROM graph_token__transfer
WHERE "from" <> "to"
AND ("from" = '0x0000000000000000000000000000000000000000'
OR "to" = '0x0000000000000000000000000000000000000000');
CREATE VIEW grt_burns_by_source AS
SELECT "from" AS burner, count(*) AS burns, CAST(sum(CAST(value AS HUGEINT)) AS VARCHAR) AS burned
FROM graph_token__transfer
WHERE "to" = '0x0000000000000000000000000000000000000000' AND "from" <> "to"
GROUP BY "from"
ORDER BY sum(CAST(value AS HUGEINT)) DESC; Tables on the mirror
| table | rows | segments | from block | to block |
|---|---|---|---|---|
| graph_token__transfer | 2,967,515 | 2,306 | 11,446,769 | 26,386,502 |