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

# Bridges

> Cross-chain transfers that left Rootstock or arrived on it, matched leg to leg.

A bridge moves value from one chain to another. Each move leaves an event on the chain it departs from and another on the chain it arrives at, and [`facts_bridge_tokens.transfers`](https://tokenterminal.com/docs/catalog/bridges/transfers) pairs those two events into one row. One transfer belongs to two chains, so each side is keyed on its own column: filter `source_chain_id = 'rootstock'` for transfers leaving Rootstock, `destination_chain_id = 'rootstock'` for transfers arriving, or either for every transfer that touched the chain.

Every row has a full pair of columns for each side: chain, transaction hash, block, sender, recipient, token address and amount, prefixed `source_` or `destination_`. A transfer matched on one side only still appears, with the leg it has and an `unmatched_reason` saying why the other side stayed unmatched. To count matched pairs alone, require both chain columns to be present.

Every column is documented at [Bridges ▸ Transfers](https://tokenterminal.com/docs/catalog/bridges/transfers.md), including how an unmatched leg is recorded.

## Sample queries

For any sum of value, use `transfer_amount_usd`: it prices the transfer once. `source_transfer_amount_usd` and `destination_transfer_amount_usd` price each leg on its own chain, and adding them counts one transfer twice; reach for them only when the question is the difference between the two ends.

> [!WARNING]
>
> The table splits by day on `block_timestamp`. Bound that column in every query; without a bound the query reads the whole table. For a daily total per token, `metrics_bridge_tokens.transfer_volume_source_daily` and `metrics_bridge_tokens.transfer_volume_destination_daily` answer the same question at a fraction of the cost.

> [tab] Daily in and out
>
> **Compare the value leaving Rootstock with the value arriving each day.** Testing the source and destination columns separately inside the sum splits the same measure into the two directions.
>
> ```sql theme={null}
> select
>     timestamp_trunc(block_timestamp, day) as day,
>     sum(if(source_chain_id = 'rootstock', transfer_amount_usd, 0)) as leaving_usd,
>     sum(if(destination_chain_id = 'rootstock', transfer_amount_usd, 0)) as arriving_usd
> from `facts_bridge_tokens.transfers`
> where block_timestamp >= timestamp('2026-08-16')
>   and block_timestamp < timestamp('2026-08-23')
>   and (source_chain_id = 'rootstock' or destination_chain_id = 'rootstock')
> group by day
> order by day
> ```

> [tab] Where value went
>
> **Find where the value leaving Rootstock went.**
>
> ```sql theme={null}
> select
>     destination_chain_id,
>     count(*) as transfers,
>     sum(transfer_amount_usd) as volume_usd
> from `facts_bridge_tokens.transfers`
> where block_timestamp >= timestamp('2026-08-16')
>   and block_timestamp < timestamp('2026-08-23')
>   and source_chain_id = 'rootstock'
> group by destination_chain_id
> order by volume_usd desc
> limit 20
> ```

> [tab] By bridge
>
> **Rank the bridges by the Rootstock value they moved.** `app_id` names the bridge behind the transfer.
>
> ```sql theme={null}
> select
>     apps.name,
>     countif(transfers.source_chain_id = 'rootstock') as leaving,
>     countif(transfers.destination_chain_id = 'rootstock') as arriving,
>     sum(transfers.transfer_amount_usd) as volume_usd
> from `facts_bridge_tokens.transfers` as transfers
> join `dimensions.apps` as apps
>     using (app_id)
> where transfers.block_timestamp >= timestamp('2026-08-16')
>   and transfers.block_timestamp < timestamp('2026-08-23')
>   and (transfers.source_chain_id = 'rootstock' or transfers.destination_chain_id = 'rootstock')
> group by apps.name
> order by volume_usd desc
> ```


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