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.

statusavailable
categoryGraph Protocol
tier0 · beachhead
complexitylow
discoveryfixed addresses

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.

tables3
segments3,045
rows sealed6,940,098
sealed through block523,280,860
datasetf17503984e0051fcf0e9ff20a63b56b8144f8752c2b5277d15454165fc44a2de
views from nuthatch-org/grt-supply-nest at ce2292e

Query it in your tab →

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
views/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

tablerowssegmentsfrom blockto 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.

tables1
segments2,306
rows sealed2,967,515
sealed through block26,386,502
dataset41d7cf9bbb687566e337c8f868d0f31dddbd213813ec5bbc61d3391536b35618
views from nuthatch-org/grt-supply-nest at ce2292e

Query it in your tab →

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
views/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

tablerowssegmentsfrom blockto block
graph_token__transfer 2,967,515 2,306 11,446,769 26,386,502