> ## Documentation Index
> Fetch the complete documentation index at: https://tokenterminal.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> To query the Token Terminal data catalog, read https://tokenterminal.com/docs/catalog/agents-manual.md first. It is the whole catalog as one page: table naming grammar, key columns, partition and cluster rules, units, additivity, and the tables that are documented but not served yet.
> Never query a catalog table on a time bound alone. Also filter its cluster key, which you read from INFORMATION_SCHEMA.COLUMNS; an empty result means the object is a view, whose pruning contract is on its page. Compute is billed to the caller's own Google Cloud project.

# Human's manual

> How the catalog is organized, how its tables are named, and how to read a page.

The catalog is a set of BigQuery tables. These docs describe every one of them, and every page follows the same shape. This page explains the organization, the table names, the parts of a page and the marks on it.

## Organization

The catalog is one set of tables, presented four ways.

<table>
  <thead>
    <tr>
      <th width="170">Band</th>
      <th>What it is</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><a href="/docs/catalog/index#core-entities">Core entities</a></td>
      <td>The model of the system and the actors in it. A project runs apps on chains and issues assets; an asset is deployed as tokens; tokens move between accounts. Every table in the catalog is keyed to one or more of those actors. Each entity section holds their registry, the events they take part in, and their daily numbers.</td>
    </tr>

    <tr>
      <td><a href="/docs/catalog/index#core-datasets">Core datasets</a></td>
      <td>A dataset that belongs to no single market and no single chain: Financial statements, Prices, Agentic payments, Yields, Token transfers, Account labels and P\&L. Each one answers a question on its own terms, so its shape follows the question rather than the house pattern. The entity keys still join: every row carries a <code>project\_id</code>, <code>asset\_id</code>, <code>token\_id</code> or account address.</td>
    </tr>

    <tr>
      <td><a href="/docs/catalog/index#market-verticals">Market verticals</a></td>
      <td>A cross-chain slice into one market: Stablecoins, Tokenized assets, DEX, Perpetuals, Lending, Bridges and the rest. A market is the entity tables with one filter applied, so its pages point back at the tables the entities own.</td>
    </tr>

    <tr>
      <td><a href="/docs/catalog/index#chain-verticals">Chain verticals</a></td>
      <td>One chain's slice across every market: its raw blocks and transactions, then every entity and market layer with data on that chain. Each chain page lists the layers the chain carries and the date each one starts.</td>
    </tr>
  </tbody>
</table>

## Dataset types

The dataset a table lives in says what kind of table it is. Each kind has its own icon in the sidebar.

<Tabs>
  <Tab title="Dimensions">
    <Icon icon="table-list" /> **Dimensions** are the registry. A dimension is the metadata of every thing of one kind, one row per thing: its name, its identifiers and its classifications. `dimensions.assets` is every asset, `dimensions.chains` every chain, `dimensions.dex_pools` every trading pool. Nothing on a dimension row changes from day to day. Every other table joins a dimension on its id. The Registry page of each section documents them.

    <CardGroup cols={3}>
      <Card title="Assets ▸ Registry" icon="table-list" href="/docs/catalog/assets/registry">
        Asset names, where each is issued, and what each one tracks.
      </Card>

      <Card title="Projects ▸ Registry" icon="table-list" href="/docs/catalog/projects/registry">
        Project and app names, market sectors, and who runs what.
      </Card>

      <Card title="DEX ▸ Registry" icon="table-list" href="/docs/catalog/dex/registry">
        Pool identity, the fee it charges, its tokens, and who runs it.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Facts">
    <Icon icon="bolt" /> **Facts** are events. A fact is one row per thing that happened onchain, at the time it happened: the block, the transaction, the accounts involved, the amount and the ids of the dimensions it belongs to. `facts_tokens.transfers` is every token transfer, `facts_bridge_tokens.transfers` every cross-chain transfer, `facts_lending_markets.deposits` every deposit into a lending market. Amounts are in the token's own units; a USD value is a join to prices. Facts are the record every metric is built from. Each fact table has its own page, named by its event: Transfers, Trades, Deposits.

    <CardGroup cols={3}>
      <Card title="Tokens ▸ Transfers" icon="bolt" href="/docs/catalog/tokens/transfers">
        Every fungible token transfer.
      </Card>

      <Card title="Bridges ▸ Transfers" icon="bolt" href="/docs/catalog/bridges/transfers">
        Cross-chain bridge transfers, with the sending and arriving sides matched.
      </Card>

      <Card title="Perpetuals ▸ Trades" icon="bolt" href="/docs/catalog/perpetuals/trades">
        Individual perpetual and order-book trades.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Metrics">
    <Icon icon="chart-line" /> **Metrics** are aggregates over a period. Each measure has its own table, holding one row per thing per period with that thing's identifier columns and one value column: daily for most tables, hourly for prices. Every measure of one kind of thing sits in one dataset, so `metrics_assets.market_cap_circulating_total_daily` is every asset's supply on every day and `metrics_tokens.price_hourly` is every token's price every hour. Reading two measures at once is a join on the thing's id and the period. Metrics are built from the facts and keyed to the same dimensions, so a metric row joins its registry row on the same id. The Metrics page of each section documents them, and [Metric definitions](/docs/catalog/metric-definitions) holds the unit and the combination rule of every measure.

    <CardGroup cols={3}>
      <Card title="Assets ▸ Metrics" icon="chart-line" href="/docs/catalog/assets/metrics">
        Daily asset tables: supply, holders, transfers, price, yield and the gap from peg.
      </Card>

      <Card title="Projects ▸ Metrics" icon="chart-line" href="/docs/catalog/projects/metrics">
        TVL, Fees, Revenue, Token incentives, Active users and sector-specific volume at every level.
      </Card>

      <Card title="Tokens ▸ Prices" icon="chart-line" href="/docs/catalog/tokens/prices">
        One USD price per token per day, and per hour.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Reports">
    <Icon icon="file-invoice-dollar" /> **Reports** are a set of measures pre-joined into one row, for a question you would otherwise answer by joining several metrics tables. A report row is one thing for one period, carrying every measure the question needs side by side, so `reports_projects.financial_statements_quarterly` is one project's income statement and treasury for a quarter, in one row, rather than eight metrics tables joined on project and period. Reports hold nothing the metrics tables do not: every column traces back to a measure, so a figure read here and the same figure read from its metrics table agree. Reach for a report when the question is already the one it answers, and for metrics when it is not.

    A period in the table name means the table carries history, one row per period. No period in the name means one row per thing, as of now.

    <CardGroup cols={2}>
      <Card title="Core datasets ▸ Financial statements" icon="file-invoice-dollar" href="/docs/catalog/core-datasets/financial-statements">
        A protocol's income statement and treasury, by reporting period.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Functions">
    <Icon icon="function" /> **Functions** are calculations on request. A function runs when you call it, for figures too numerous to store. `functions.calculate_latest_token_balances` returns every holder of a token and their balance, worked out from the token's balance changes at query time. Function pages document them.

    <CardGroup cols={2}>
      <Card title="Tokens ▸ Balances" icon="function" href="/docs/catalog/tokens/balances">
        Holder balances on any past date, computed at query time.
      </Card>

      <Card title="Stablecoins ▸ Balances" icon="function" href="/docs/catalog/stablecoins/balances">
        Stablecoin holder balances at any past date, computed at query time.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Raw chain">
    <Icon icon="cube" /> **Raw chain datasets** stand apart from the four. Each chain has its own dataset named after it, holding the chain's own record in a standardized shape: `ethereum.transactions` is every Ethereum transaction, `solana.blocks` every Solana block. Chains of the same kind share one shape, so a query written for one EVM chain runs on another with the dataset name swapped. [Chain verticals](/docs/catalog/index#chain-verticals) document them.

    <CardGroup cols={3}>
      <Card title="Ethereum ▸ Raw" icon="cube" href="/docs/catalog/chain-verticals/evm/ethereum/raw">
        The standardized Ethereum blocks, transactions, logs and internal calls.
      </Card>

      <Card title="Base ▸ Raw" icon="cube" href="/docs/catalog/chain-verticals/evm/base/raw">
        The standardized Base blocks, transactions, logs and internal calls.
      </Card>

      <Card title="Solana" icon="cube" href="/docs/catalog/chain-verticals/solana">
        Standardized Solana blocks, transactions, instructions, account activity and rewards.
      </Card>
    </CardGroup>
  </Tab>
</Tabs>

## Table names

A table name is `dataset.table`. The dataset says what kind of table it is, and for facts and metrics it also says which things the table is about. Things are plural in a table name and singular in the identifier column that joins them: `facts_lending_markets.deposits` carries `lending_market_id`, which joins `dimensions.lending_markets`.

<Tabs>
  <Tab title="Dimensions">
    `dimensions.<things>`: the things, plural. One row per thing.

    <table>
      <thead>
        <tr>
          <th width="280">Table</th>
          <th>Reads as</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td><code>dimensions.assets</code></td>
          <td>The registry of assets.</td>
        </tr>

        <tr>
          <td><code>dimensions.asset\_tokens</code></td>
          <td>The registry of asset tokens: one asset on one chain.</td>
        </tr>

        <tr>
          <td><code>dimensions.dex\_pools</code></td>
          <td>The registry of DEX pools.</td>
        </tr>

        <tr>
          <td><code>dimensions.lending\_markets</code></td>
          <td>The registry of lending markets.</td>
        </tr>

        <tr>
          <td><code>dimensions.metrics</code></td>
          <td>The registry of measures: the unit and combination rule of every one.</td>
        </tr>
      </tbody>
    </table>
  </Tab>

  <Tab title="Facts">
    `facts_<things>.<events>`: the dataset names the thing the event happens to, plural; the table names the event, plural. One row per event. The thing's identifier column joins its dimension.

    <table>
      <thead>
        <tr>
          <th width="250">Table</th>
          <th width="120">Thing</th>
          <th width="120">Event</th>
          <th>Reads as</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td><code>facts\_tokens.transfers</code></td>
          <td>Token</td>
          <td>Transfer</td>
          <td>Transfers of tokens, one row per transfer.</td>
        </tr>

        <tr>
          <td><code>facts\_tokens.balance\_changes</code></td>
          <td>Token</td>
          <td>Balance change</td>
          <td>Balance changes of tokens, two rows per transfer: one per side.</td>
        </tr>

        <tr>
          <td><code>facts\_bridge\_tokens.transfers</code></td>
          <td>Bridge</td>
          <td>Transfer</td>
          <td>Transfers across bridges, one row per cross-chain transfer with both legs paired.</td>
        </tr>

        <tr>
          <td><code>facts\_lending\_markets.deposits</code></td>
          <td>Lending market</td>
          <td>Deposit</td>
          <td>Deposits into lending markets, one row per deposit.</td>
        </tr>

        <tr>
          <td><code>facts\_perp\_markets.trades</code></td>
          <td>Perp market</td>
          <td>Trade</td>
          <td>Trades on perpetual markets, one row per leg of a fill.</td>
        </tr>
      </tbody>
    </table>
  </Tab>

  <Tab title="Metrics">
    `metrics_<things>.<measure>_<period>`: the dataset names the **level**, the things measured, plural; two things joined means one row per pair, and every level rolls up to the one above it. The table names the **measure** and the **period**, the row's time step. One measure per table, so a row carries the level's identifier columns, the period column and one value column of the same name as the measure.

    <table>
      <thead>
        <tr>
          <th width="330">Table</th>
          <th>Level</th>
          <th width="170">Measure</th>
          <th width="90">Period</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td><code>metrics\_assets.market\_cap\_circulating\_total\_daily</code></td>
          <td>One asset</td>
          <td>Circulating market cap</td>
          <td>Day</td>
        </tr>

        <tr>
          <td><code>metrics\_asset\_tokens.holders\_native\_daily</code></td>
          <td>One asset on one chain</td>
          <td>Holders</td>
          <td>Day</td>
        </tr>

        <tr>
          <td><code>metrics\_projects.fees\_daily</code></td>
          <td>One project</td>
          <td>Fees</td>
          <td>Day</td>
        </tr>

        <tr>
          <td><code>metrics\_project\_chains.fees\_daily</code></td>
          <td>One project on one chain</td>
          <td>Fees</td>
          <td>Day</td>
        </tr>

        <tr>
          <td><code>metrics\_dex\_pool\_pairs.trading\_volume\_daily</code></td>
          <td>One pool, one traded pair</td>
          <td>Trading volume</td>
          <td>Day</td>
        </tr>

        <tr>
          <td><code>metrics\_tokens.price\_daily</code></td>
          <td>One token</td>
          <td>Price</td>
          <td>Day</td>
        </tr>

        <tr>
          <td><code>metrics\_tokens.price\_hourly</code></td>
          <td>One token</td>
          <td>Price</td>
          <td>Hour</td>
        </tr>
      </tbody>
    </table>
  </Tab>

  <Tab title="Reports">
    `reports_<things>.<report>_<period>`: the dataset names the **things** the report is about, plural, and the table names the **report** and the **period** each row covers. Unlike a metrics table it carries many measures rather than one, because the point of a report is that the joining is already done.

    <table>
      <thead>
        <tr>
          <th width="330">Table</th>
          <th>Reads as</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td><code>reports\_projects.financial\_statements\_quarterly</code></td>
          <td>One project's financial statement for one quarter, per row.</td>
        </tr>

        <tr>
          <td><code>reports\_projects.financial\_statements\_yearly</code></td>
          <td>The same statement over calendar years.</td>
        </tr>
      </tbody>
    </table>
  </Tab>

  <Tab title="Functions">
    `functions.calculate_<result>`: `calculate_`, then what comes back. Called with arguments, in place of a table name.

    <table>
      <thead>
        <tr>
          <th width="340">Function</th>
          <th>Reads as</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td><code>functions.calculate\_latest\_token\_balances</code></td>
          <td>Calculates the latest balance of every holder of one token.</td>
        </tr>

        <tr>
          <td><code>functions.calculate\_historical\_eod\_token\_balances</code></td>
          <td>Calculates every holder's balance of one token at the end of a past day.</td>
        </tr>
      </tbody>
    </table>
  </Tab>

  <Tab title="Raw chain">
    `<chain>.<table>`: the chain's `chain_id` as the dataset, then the record type, plural. One row per block, transaction, log or call.

    <table>
      <thead>
        <tr>
          <th width="280">Table</th>
          <th>Reads as</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td><code>ethereum.blocks</code></td>
          <td>Ethereum's blocks, one row per block.</td>
        </tr>

        <tr>
          <td><code>ethereum.transactions</code></td>
          <td>Ethereum's transactions, one row per transaction.</td>
        </tr>

        <tr>
          <td><code>base.logs</code></td>
          <td>Base's event logs, one row per log.</td>
        </tr>

        <tr>
          <td><code>solana.account\_activity</code></td>
          <td>Solana's account activity, one row per account touched per transaction.</td>
        </tr>
      </tbody>
    </table>
  </Tab>
</Tabs>

## Page kinds

Every page is one of the kinds below. Each kind has a fixed flow of parts, top to bottom.

<Tabs>
  <Tab title="Overview">
    The first page of a section.

    <table>
      <thead>
        <tr>
          <th width="160">Part</th>
          <th>What it holds</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td>Intro</td>
          <td>What the entity or the market is, in a few sentences.</td>
        </tr>

        <tr>
          <td>Pages</td>
          <td>One card per page in the section.</td>
        </tr>
      </tbody>
    </table>

    <CardGroup cols={3}>
      <Card title="Stablecoins ▸ Overview" icon="circle-info" href="/docs/catalog/stablecoins/index">
        Every stablecoin: supply, holders, transfers and off-peg, across every chain.
      </Card>

      <Card title="Projects ▸ Overview" icon="circle-info" href="/docs/catalog/projects/index">
        Protocols, the apps they run, and financial metrics at every level.
      </Card>

      <Card title="EVM ecosystem ▸ Overview" icon="circle-info" href="/docs/catalog/chain-verticals/evm/index">
        Standardized blocks, transactions, logs and traces for every EVM chain.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Registry">
    The dimension tables of a section.

    <table>
      <thead>
        <tr>
          <th width="160">Part</th>
          <th>What it holds</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td>Intro</td>
          <td>What the tables describe; with several tables, one bullet per table with its grain.</td>
        </tr>

        <tr>
          <td>Columns</td>
          <td>Every column, its type and one line on what it holds. With several tables this is Tables: one tab per table, each with its own column table.</td>
        </tr>

        <tr>
          <td>Sample queries</td>
          <td>One tab per question, each opening with a bold sentence saying what the query answers.</td>
        </tr>
      </tbody>
    </table>

    <CardGroup cols={3}>
      <Card title="Assets ▸ Registry" icon="table-list" href="/docs/catalog/assets/registry">
        Asset names, where each is issued, and what each one tracks.
      </Card>

      <Card title="Projects ▸ Registry" icon="table-list" href="/docs/catalog/projects/registry">
        Project and app names, market sectors, and who runs what.
      </Card>

      <Card title="Lending ▸ Registry" icon="table-list" href="/docs/catalog/lending/registry">
        Every lending market: one asset inside one lending pool.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Facts">
    One fact table, named by its event: Transfers, Trades, Deposits.

    <table>
      <thead>
        <tr>
          <th width="160">Part</th>
          <th>What it holds</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td>Intro</td>
          <td>What the table records and what one row stands for: "one row per transfer".</td>
        </tr>

        <tr>
          <td>Columns</td>
          <td>Every column, its type and one line on what it holds.</td>
        </tr>

        <tr>
          <td>Sample queries</td>
          <td>A yellow box naming the timestamp column to bound, then one tab per question.</td>
        </tr>

        <tr>
          <td>Notes</td>
          <td>Caveats: what the table does not hold, or a rule that is easy to get wrong.</td>
        </tr>
      </tbody>
    </table>

    <CardGroup cols={3}>
      <Card title="Tokens ▸ Transfers" icon="bolt" href="/docs/catalog/tokens/transfers">
        Every fungible token transfer.
      </Card>

      <Card title="Bridges ▸ Transfers" icon="bolt" href="/docs/catalog/bridges/transfers">
        Cross-chain bridge transfers, with the sending and arriving sides matched.
      </Card>

      <Card title="Perpetuals ▸ Trades" icon="bolt" href="/docs/catalog/perpetuals/trades">
        Individual perpetual and order-book trades.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Metrics">
    The metrics tables of a section.

    <table>
      <thead>
        <tr>
          <th width="160">Part</th>
          <th>What it holds</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td>Intro</td>
          <td>What is measured, and the dataset behind each level with the grain of its rows.</td>
        </tr>

        <tr>
          <td>Tables</td>
          <td>One tab per level. Each tab lists that level's tables with the value column each one carries.</td>
        </tr>

        <tr>
          <td>Sample queries</td>
          <td>One tab per question, each bounded on <code>timestamp</code>.</td>
        </tr>

        <tr>
          <td>Notes</td>
          <td>Caveats: which measures do not add up, and what an empty cell means.</td>
        </tr>
      </tbody>
    </table>

    <CardGroup cols={3}>
      <Card title="Assets ▸ Metrics" icon="chart-line" href="/docs/catalog/assets/metrics">
        Daily asset tables: supply, holders, transfers, price, yield and the gap from peg.
      </Card>

      <Card title="Projects ▸ Metrics" icon="chart-line" href="/docs/catalog/projects/metrics">
        TVL, Fees, Revenue, Token incentives, Active users and sector-specific volume at every level.
      </Card>

      <Card title="DEX ▸ Metrics" icon="chart-line" href="/docs/catalog/dex/metrics">
        Daily volume, TVL, fees and flash-loan volume per pool and per pair.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Functions">
    The functions of a section.

    <table>
      <thead>
        <tr>
          <th width="160">Part</th>
          <th>What it holds</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td>Intro</td>
          <td>What the functions compute and from which table.</td>
        </tr>

        <tr>
          <td>Functions</td>
          <td>One tab per function: its parameters, what it returns, and what the result means.</td>
        </tr>

        <tr>
          <td>Sample queries</td>
          <td>One tab per question, each calling a function in place of a table.</td>
        </tr>

        <tr>
          <td>Notes</td>
          <td>Caveats: cost, and what a missing row means.</td>
        </tr>
      </tbody>
    </table>

    <CardGroup cols={2}>
      <Card title="Tokens ▸ Balances" icon="function" href="/docs/catalog/tokens/balances">
        Holder balances on any past date, computed at query time.
      </Card>

      <Card title="Stablecoins ▸ Balances" icon="function" href="/docs/catalog/stablecoins/balances">
        Stablecoin holder balances at any past date, computed at query time.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Worked view">
    A market's page over a table another section owns.

    <table>
      <thead>
        <tr>
          <th width="160">Part</th>
          <th>What it holds</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td>Intro</td>
          <td>The filter that selects the market, and the pointer to the owning page: "Every column is documented at ...".</td>
        </tr>

        <tr>
          <td>Sample queries</td>
          <td>One tab per question, with the filter applied.</td>
        </tr>

        <tr>
          <td>Notes</td>
          <td>Caveats specific to the market.</td>
        </tr>
      </tbody>
    </table>

    <CardGroup cols={3}>
      <Card title="Stablecoins ▸ Transfers" icon="bolt" href="/docs/catalog/stablecoins/transfers">
        Every stablecoin transfer.
      </Card>

      <Card title="Stablecoins ▸ Metrics" icon="chart-line" href="/docs/catalog/stablecoins/metrics">
        Daily supply, holders, transfers and off-peg, per stablecoin and per deployment.
      </Card>

      <Card title="Tokenized assets ▸ Metrics" icon="chart-line" href="/docs/catalog/tokenized-assets/metrics">
        Daily tokenized asset supply, holders, transfer activity and price.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Chain overview">
    The first page of a chain section.

    <table>
      <thead>
        <tr>
          <th width="160">Part</th>
          <th>What it holds</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td>Intro</td>
          <td>What the catalog holds for the chain and the dataset the chain's own record sits in.</td>
        </tr>

        <tr>
          <td>Layers</td>
          <td>One row per layer with data on the chain, with the date the layer starts.</td>
        </tr>

        <tr>
          <td>Filtering</td>
          <td>The <code>chain\_id</code> filter that selects the chain in every catalog table, with one query.</td>
        </tr>
      </tbody>
    </table>

    <CardGroup cols={3}>
      <Card title="Ethereum ▸ Overview" icon="circle-info" href="/docs/catalog/chain-verticals/evm/ethereum/index">
        Everything the catalog holds for Ethereum, from raw blocks to project activity.
      </Card>

      <Card title="Base ▸ Overview" icon="circle-info" href="/docs/catalog/chain-verticals/evm/base/index">
        Everything the catalog holds for Base, from raw blocks to project activity.
      </Card>

      <Card title="Solana" icon="cube" href="/docs/catalog/chain-verticals/solana">
        Standardized Solana blocks, transactions, instructions, account activity and rewards.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Chain layer">
    One layer on one chain: a worked view of that layer with the chain filter applied.

    <table>
      <thead>
        <tr>
          <th width="160">Part</th>
          <th>What it holds</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td>Intro</td>
          <td>What the layer holds on this chain, and the pointer to the page that owns the columns.</td>
        </tr>

        <tr>
          <td>Tables</td>
          <td>On the Raw page only: the chain's own tables, one line each.</td>
        </tr>

        <tr>
          <td>Sample queries</td>
          <td>One tab per question, with <code>chain\_id</code> fixed.</td>
        </tr>

        <tr>
          <td>Notes</td>
          <td>Caveats specific to the chain.</td>
        </tr>
      </tbody>
    </table>

    <CardGroup cols={3}>
      <Card title="Ethereum ▸ Raw" icon="cube" href="/docs/catalog/chain-verticals/evm/ethereum/raw">
        The standardized Ethereum blocks, transactions, logs and internal calls.
      </Card>

      <Card title="Ethereum ▸ DEX" icon="arrows-rotate" href="/docs/catalog/chain-verticals/evm/ethereum/dex">
        Ethereum trading pools, their daily volume, value locked and fees.
      </Card>

      <Card title="Base ▸ Stablecoins" icon="sack-dollar" href="/docs/catalog/chain-verticals/evm/base/stablecoins">
        Every stablecoin issued on Base: supply, holders and transfers.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Archived roster">
    One page per family for the chains that have stopped, in place of a section each.

    <table>
      <thead>
        <tr>
          <th width="160">Part</th>
          <th>What it holds</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td>Intro</td>
          <td>The tables the family carries, and that the record has ended, so both dates are final.</td>
        </tr>

        <tr>
          <td>Chain tabs</td>
          <td>One tab per chain, holding a row per raw table with the earliest and latest month it covers.</td>
        </tr>
      </tbody>
    </table>

    <CardGroup cols={2}>
      <Card title="Archived chains ▸ EVM ecosystem" icon="cube" href="/docs/catalog/chain-verticals/archived/evm">
        The archived EVM chains, and the months each raw table covers.
      </Card>

      <Card title="Archived chains ▸ Substrate ecosystem" icon="cube" href="/docs/catalog/chain-verticals/archived/substrate">
        The archived Substrate chains, and the months each raw table covers.
      </Card>
    </CardGroup>
  </Tab>
</Tabs>

## Marks

<table>
  <thead>
    <tr>
      <th width="200">Mark</th>
      <th>Meaning</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><strong>In progress</strong></td>
      <td>A <code>Soon</code> tag beside a page title, a banner at the top of a page, or bold text on a card. The table is documented ahead of serving: the page is its spec, and the table lands behind it.</td>
    </tr>

    <tr>
      <td>Since</td>
      <td>A date in a chain page's Layers table: the earliest day that layer holds for the chain.</td>
    </tr>

    <tr>
      <td>Warning box</td>
      <td>The table is large and split by day. The box names the column to bound. A query with no bound reads the whole table, and the whole table is billed to you.</td>
    </tr>

    <tr>
      <td>Your BQ Project ID</td>
      <td>The field at the right end of the top bar. Write your project id there and the browser keeps it. Every sample query on every page rewrites itself to run in your project.</td>
    </tr>
  </tbody>
</table>

## Identifiers

Simple identifiers are lowercase names. Combined identifiers join their parts with dashes.

<table>
  <thead>
    <tr>
      <th width="170">Identifier</th>
      <th width="320">Shape</th>
      <th>Example</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>chain\_id</code></td>
      <td>Chain name</td>
      <td><code>ethereum</code></td>
    </tr>

    <tr>
      <td><code>asset\_id</code></td>
      <td>Asset name</td>
      <td><code>usdc</code></td>
    </tr>

    <tr>
      <td><code>project\_id</code></td>
      <td>Project name</td>
      <td><code>uniswap</code></td>
    </tr>

    <tr>
      <td><code>app\_id</code></td>
      <td>Project name and version</td>
      <td><code>uniswap-v3</code></td>
    </tr>

    <tr>
      <td><code>token\_id</code></td>
      <td><code>\{token\_address}-\{chain\_id}</code></td>
      <td><code>0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48-ethereum</code></td>
    </tr>

    <tr>
      <td><code>asset\_token\_id</code></td>
      <td><code>\{asset\_id}-\{token\_address}-\{chain\_id}</code></td>
      <td><code>usdc-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48-ethereum</code></td>
    </tr>
  </tbody>
</table>

An asset is one identity across chains and a token is one contract on one chain: USDC is one row in `dimensions.assets` and one row per chain in `dimensions.asset_tokens`. EVM addresses are stored lowercase: wrap an address copied from a block explorer in `lower()` before matching it. Solana addresses are base58 and case-sensitive: stored and matched verbatim. [Accounts](/docs/catalog/accounts/index) covers the address rules.

## Numbers

* **An empty cell is not zero.** It means no figure exists for that measure, for that thing, on that day.
* **Units live in the metric definition.** `dimensions.metrics` names the unit of every measure: `usd`, `count`, `ratio` or `pct`. Ratios are fractions: an `apy` of `0.05` is five percent, and an `off_peg` of `-0.02` is two percent below peg.
* **Every measure is additive, semi-additive or non-additive.**

  * **Additive**: flows, such as Fees or Trading volume. They add up across days and across things: a week is seven days added together, a project is its apps added together.
  * **Semi-additive**: balances, such as TVL or Supply. They add up across things but not across days: a week's figure is the last day's.
  * **Non-additive**: rates and counts of distinct addresses, such as APY or Active users. They add up neither way.

  [Metric definitions](/docs/catalog/metric-definitions) holds the class and the rule for every measure.
* **A long table holds one row per measure.** Most tables give each measure its own column, one row per thing per day. [Financial statements](/docs/catalog/core-datasets/financial-statements) instead carries a `metric_id` column and a `value` column, so one statement is a set of rows rather than one row. Filter to the line items you want, or pivot them onto one row with `max(if(metric_id = ...))`.

## Running a query

<Steps>
  <Step title="Get the share">
    The catalog arrives in your own Google Cloud project as a BigQuery share, and compute is billed to you. [Contact us](/docs/contact) to arrange it.
  </Step>

  <Step title="Write your project id">
    Type your BigQuery project id into the field at the right end of the top bar. Every sample query on every page carries it.
  </Step>

  <Step title="Copy a sample query">
    Open the page for the table, pick the tab whose bold sentence matches your question, and copy the query.
  </Step>

  <Step title="Run it in BigQuery">
    Paste the query into the BigQuery console and run it. Keep the date bound the query came with, and widen it once the result looks right.
  </Step>
</Steps>
