> ## 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.

# Metrics

> Daily chain fees, revenue, and the fees passed on.

The chain's own figures: fees and revenue, costs and incentives, active addresses, transactions and network measures. One row per thing per day, at one grain: chain.

## Tables

> [!NOTE]
>
> Daily HyperEVM gas fees and revenue cover closed UTC days and follow HyperEVM’s availability cutoff.

A tab per grain. [Coverage](https://tokenterminal.com/docs/catalog/chains.md) shows which chains report which measure.

**Chain**

One row per chain per day. Every table holds `timestamp`, `chain_id` and one value column.

<table>
  <thead>
    <tr>
      <th width="320">Table</th>
      <th width="200">Value column</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`metrics_chains.daily_active_addresses_daily`</td>
      <td>`daily_active_addresses`</td>
      <td>Distinct addresses transacting on the chain per day.</td>
    </tr>

    <tr>
      <td>`metrics_chains.monthly_active_addresses_daily`</td>
      <td>`monthly_active_addresses`</td>
      <td>Distinct addresses transacting on the chain over a rolling 30 days.</td>
    </tr>

    <tr>
      <td>`metrics_chains.weekly_active_addresses_daily`</td>
      <td>`weekly_active_addresses`</td>
      <td>Distinct addresses transacting on the chain over a rolling 7 days.</td>
    </tr>

    <tr>
      <td>`metrics_chains.block_time_average_daily`</td>
      <td>`block_time_average`</td>
      <td>Average time between blocks, in milliseconds.</td>
    </tr>

    <tr>
      <td>`metrics_chains.bridge_deposits_daily`</td>
      <td>`bridge_deposits`</td>
      <td>USD value of assets held in the chain's canonical bridge on the chain it settles to.</td>
    </tr>

    <tr>
      <td>`metrics_chains.daily_contract_deployers_daily`</td>
      <td>`daily_contract_deployers`</td>
      <td>Distinct addresses deploying contracts.</td>
    </tr>

    <tr>
      <td>`metrics_chains.contract_deployment_count_daily`</td>
      <td>`contract_deployment_count`</td>
      <td>Contracts deployed on the chain.</td>
    </tr>

    <tr>
      <td>`metrics_chains.cost_of_revenue_daily`</td>
      <td>`cost_of_revenue`</td>
      <td>The chain's direct cost of revenue, such as data posted to the chain it settles to.</td>
    </tr>

    <tr>
      <td>`metrics_chains.expenses_daily`</td>
      <td>`expenses`</td>
      <td>What the chain spent, in USD.</td>
    </tr>

    <tr>
      <td>`metrics_chains.fees_daily`</td>
      <td>`fees`</td>
      <td>Fees paid to the chain (gas / sequencer).</td>
    </tr>

    <tr>
      <td>`metrics_chains.fees_supply_side_daily`</td>
      <td>`fees_supply_side`</td>
      <td>Fees the chain does not retain (pass-throughs to builders / operators); fees = revenue + fees\_supply\_side. 0 where there are no pass-throughs, e.g. HyperEVM gas.</td>
    </tr>

    <tr>
      <td>`metrics_chains.validators_daily`</td>
      <td>`validators`</td>
      <td>Number of validators securing the chain's consensus.</td>
    </tr>

    <tr>
      <td>`metrics_chains.revenue_daily`</td>
      <td>`revenue`</td>
      <td>Revenue retained by the chain (gas / sequencer fees net of pass-throughs; equals fees where there are none, e.g. HyperEVM).</td>
    </tr>

    <tr>
      <td>`metrics_chains.staking_market_cap_daily`</td>
      <td>`staking_market_cap`</td>
      <td>USD value of the chain's native token staked to secure the network.</td>
    </tr>

    <tr>
      <td>`metrics_chains.token_incentives_daily`</td>
      <td>`token_incentives`</td>
      <td>Value of tokens the chain distributed as incentives.</td>
    </tr>

    <tr>
      <td>`metrics_chains.transaction_count_daily`</td>
      <td>`transaction_count`</td>
      <td>Transactions processed by the chain.</td>
    </tr>

    <tr>
      <td>`metrics_chains.transaction_fee_average_daily`</td>
      <td>`transaction_fee_average`</td>
      <td>Average fee per transaction.</td>
    </tr>

    <tr>
      <td>`metrics_chains.transaction_fee_median_daily`</td>
      <td>`transaction_fee_median`</td>
      <td>Median fee per transaction.</td>
    </tr>

    <tr>
      <td>`metrics_chains.transactions_per_second_daily`</td>
      <td>`transactions_per_second`</td>
      <td>Average transactions per second.</td>
    </tr>
  </tbody>
</table>

**Apps on the chain**

One row per chain per day. These are what the apps deployed on the chain do there. Every table holds `timestamp`, `chain_id` and one value column. The chain's own operator is left out, so a chain's own fees sit in the Chain tab and never in both.

<table>
  <thead>
    <tr>
      <th width="320">Table</th>
      <th width="200">Value column</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`metrics_chains.app_monthly_active_addresses_daily`</td>
      <td>`app_monthly_active_addresses`</td>
      <td>Distinct addresses using the apps' contracts on the chain over a rolling 30 days, each app's count added up, so an address using two apps counts twice.</td>
    </tr>

    <tr>
      <td>`metrics_chains.app_active_loans_daily`</td>
      <td>`app_active_loans`</td>
      <td>Open loans in the apps on the chain, USD.</td>
    </tr>

    <tr>
      <td>`metrics_chains.app_assets_staked_daily`</td>
      <td>`app_assets_staked`</td>
      <td>Assets staked with the apps on the chain, USD.</td>
    </tr>

    <tr>
      <td>`metrics_chains.app_bridged_supply_daily`</td>
      <td>`app_bridged_supply`</td>
      <td>Stablecoins bridged onto the chain, USD.</td>
    </tr>

    <tr>
      <td>`metrics_chains.app_fees_daily`</td>
      <td>`app_fees`</td>
      <td>Fees paid to the apps on the chain, USD.</td>
    </tr>

    <tr>
      <td>`metrics_chains.app_gas_used_daily`</td>
      <td>`app_gas_used`</td>
      <td>Gas consumed by transactions calling the apps' contracts on the chain.</td>
    </tr>

    <tr>
      <td>`metrics_chains.app_outstanding_supply_daily`</td>
      <td>`app_outstanding_supply`</td>
      <td>Stablecoin supply issued on the chain, USD.</td>
    </tr>

    <tr>
      <td>`metrics_chains.app_trading_volume_daily`</td>
      <td>`app_trading_volume`</td>
      <td>Trading volume of the exchanges on the chain, USD. Derivatives venues and aggregators are left out: an aggregator's volume is counted at the exchange it routes to.</td>
    </tr>

    <tr>
      <td>`metrics_chains.app_transaction_count_contracts_daily`</td>
      <td>`app_transaction_count_contracts`</td>
      <td>Transactions calling the apps' contracts on the chain.</td>
    </tr>

    <tr>
      <td>`metrics_chains.app_tvl_daily`</td>
      <td>`app_tvl`</td>
      <td>Value locked in the apps on the chain, USD.</td>
    </tr>

    <tr>
      <td>`metrics_chains.app_monthly_active_users_daily`</td>
      <td>`app_monthly_active_users`</td>
      <td>Monthly active users of the apps on the chain, each app's count added up, so a user of two apps counts twice.</td>
    </tr>
  </tbody>
</table>

## Sample queries

**One chain's series**

Each measure is its own table, so a row with both is a join on `chain_id` and `timestamp`. Bound the day range on every side, or the unbounded side reads its whole table.

```sql theme={null}
with fees as (
    select timestamp, fees
    from `metrics_chains.fees_daily`
    where chain_id = 'ethereum'
      and timestamp >= timestamp('2026-06-01')
),

revenue as (
    select timestamp, revenue
    from `metrics_chains.revenue_daily`
    where chain_id = 'ethereum'
      and timestamp >= timestamp('2026-06-01')
)

select
    timestamp,
    fees.fees,
    revenue.revenue
from fees
full join revenue
    using (timestamp)
order by timestamp
```

**Monthly fees**

`fees` adds up over time, so a month is its days added together. Every table here is partitioned by `timestamp` and clustered on `chain_id`, so bounding both reads the least.

```sql theme={null}
select
    timestamp_trunc(timestamp, month) as month,
    sum(fees) as fees
from `metrics_chains.fees_daily`
where chain_id = 'ethereum'
  and timestamp >= timestamp('2026-01-01')
group by month
order by month
```

**Fees by project**

These tables key on `chain_id` alone, so attributing a chain's fees to the project running it means joining `dimensions.chains`. A project that runs several chains lands one row, with its chains added together.

```sql theme={null}
select
    chains.project_id,
    sum(daily.fees) as fees
from `metrics_chains.fees_daily` as daily
join `dimensions.chains` as chains
    using (chain_id)
where daily.timestamp = timestamp('2026-08-01')
group by chains.project_id
order by fees desc
```

**Fee split**

`fees` is `revenue` plus `fees_supply_side`. Ethereum burns base and blob fees into `revenue` and pays priority tips to validators as `fees_supply_side`, while a chain that keeps all of its gas reads `revenue` equal to `fees`.

```sql theme={null}
with fees as (
    select chain_id, fees
    from `metrics_chains.fees_daily`
    where timestamp = timestamp('2026-08-01')
),

revenue as (
    select chain_id, revenue
    from `metrics_chains.revenue_daily`
    where timestamp = timestamp('2026-08-01')
),

supply_side as (
    select chain_id, fees_supply_side
    from `metrics_chains.fees_supply_side_daily`
    where timestamp = timestamp('2026-08-01')
)

select
    chain_id,
    fees.fees,
    revenue.revenue,
    supply_side.fees_supply_side
from fees
left join revenue
    using (chain_id)
left join supply_side
    using (chain_id)
order by fees desc
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.