facts_bridge_tokens.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 = 'ethereum' for transfers leaving Ethereum, destination_chain_id = 'ethereum' 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, including how an unmatched leg is recorded.
Sample queries
For any sum of value, usetransfer_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.
- Daily in and out
- Where value went
- By bridge
Compare the value leaving Ethereum with the value arriving each day. Testing the source and destination columns separately inside the sum splits the same measure into the two directions.