EVM Balance Updates - Dune Docs
Documentation Index
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
balances_<chain>.updates records one row per observed balance change for native currencies and ERC20 tokens. Each row is the on-chain balance at a specific block for an (address, token_address) pair. Refreshed hourly. For most historical analysis prefer balances_<chain>.daily_updates, which is faster and includes USD values. Use balances_<chain>.updates when you need block-level resolution.
Table Schema
| Column | Type | Description |
|---|---|---|
blockchain |
varchar |
Chain identifier (e.g. ethereum) |
block_date |
date |
Date of block_number (partition key) |
block_number |
bigint |
Block at which the balance was observed |
timestamp |
timestamp |
Block time |
address |
varbinary |
Account address |
token_address |
varbinary |
Token contract address. Native tokens use the standardized address from dune.blockchains (zero address on most EVMs, 0x0000…1010 on Polygon). |
token_standard |
varchar |
native or erc20 |
token_symbol |
varchar |
Token symbol (nullable) |
balance_raw |
uint256 |
Balance in raw units (smallest denomination) |
balance |
double |
Balance in display units (balance_raw / 10^decimals, 18 if unknown) |
Usage Notes
balances_<chain>.updates is partitioned by block_date. For best performance, include block_date and at least one of address or token_address in your WHERE clause.
USD Values
This table is intentionally not enriched with USD prices. A balance change observed at a specific block can be priced against many different reference points (time of change, end of day, latest, custom benchmark) and there is no single right choice. Bring your own price by joining prices.minute, prices.hour, prices.day, or prices.latest at the time anchor that fits your analysis. If you only need end-of-day USD values, use balances_<chain>.daily_updates where balance_usd is precomputed from prices.day.
Example Queries
All balance updates for a wallet in the last 7 days:
SELECT block_number, timestamp, token_symbol, balance
FROM balances_ethereum.updates
WHERE block_date >= CURRENT_DATE - INTERVAL '7' day
AND address = 0xd8da6bf26964af9d7eed9e03e53415d37aa96045
ORDER BY block_number DESC
Mark-to-market a wallet’s ETH balance at each change: For a volatile asset, attaching the price at the hour of each balance change shows the wallet’s USD position as both balances and prices move.
SELECT
u.block_number,
u.timestamp,
u.balance AS eth_balance,
u.balance * p.price AS eth_balance_usd
FROM balances_ethereum.updates u
LEFT JOIN prices.hour p
ON p.blockchain = 'ethereum'
AND p.contract_address = u.token_address
AND p.timestamp = date_trunc('hour', u.timestamp)
WHERE u.block_date >= DATE '2025-01-01'
AND u.address = 0xd8da6bf26964af9d7eed9e03e53415d37aa96045
AND u.token_address = 0x0000000000000000000000000000000000000000 -- native ETH
ORDER BY u.block_number