> ## 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 Solana 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 = 'solana'` for transfers leaving Solana, `destination_chain_id = 'solana'` 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.

**Daily in and out**

**Compare the value leaving Solana 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 = 'solana', transfer_amount_usd, 0)) as leaving_usd,
    sum(if(destination_chain_id = 'solana', 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 = 'solana' or destination_chain_id = 'solana')
group by day
order by day
```

**Where value went**

**Find where the value leaving Solana went.** Each row already holds both ends, so grouping on `destination_chain_id` needs no second pass over the table.

```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 = 'solana'
group by destination_chain_id
order by volume_usd desc
limit 20
```

**By bridge**

**Rank the bridges by the Solana value they moved.** `app_id` names the bridge behind the transfer, and joining `dimensions.apps` turns it into a readable name.

```sql theme={null}
select
    apps.name,
    countif(transfers.source_chain_id = 'solana') as leaving,
    countif(transfers.destination_chain_id = 'solana') 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 = 'solana' or transfers.destination_chain_id = 'solana')
group by apps.name
order by volume_usd desc
```


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