Skip to main content
Deprecation NoticeThis table will be removed from the platform on December 11, 2025 (4 weeks from November 13, 2025).Please migrate to the new standardized balances tables:
  • ethereum.balances.ez_balances_native_daily - Daily native ETH balance snapshots
  • ethereum.balances.ez_balances_erc20_daily - Daily ERC20 token balance snapshots
The new tables offer improved performance, daily granularity, USD pricing, and are standardized across all EVMs.
Schema: ethereum.core Table: ez_balance_deltas Type: View This table contains the block level balance changes for both tokens (including ERC721s) and the native asset on this EVM blockchain for all wallets and contracts. If a token or the native asset is moved, we will read the balance of the involved wallets at that block, and carry forward the previous balance into the current record. Symbol, name, and price are joined where possible. ERC721s are included. Please note - the underlying data for this is large. If you want your query to run quickly, please use filters as much as possible. Using at least block_timestamp::date as a filter will lead to optimal query performance. If you want to take this data and make it daily, you can do so with the query below. You must use a block_timestamp::date filter here at a minimum. Other filters will help query runtime.
WITH base_table AS (
    SELECT
        block_timestamp :: DATE AS balance_date,
        CASE
            WHEN symbol = 'ETH' THEN 'ETH'
            ELSE contract_address
        END AS contract_address,
        user_address,
        symbol,
        current_bal
    FROM
        ethereum.core.ez_balance_diffs
    WHERE
        block_timestamp :: DATE >= '' --user input
        AND user_address = '' --user input
        AND (
            contract_address = '' --user input1
            OR symbol = 'ETH'
        )
),
all_days AS (
    SELECT
        date_day AS balance_date
    FROM
        ethereum.core.dim_dates
),
address_ranges AS (
    SELECT
        user_address,
        contract_address,
        symbol,
        MIN(
            balance_date :: DATE
        ) AS min_block_date,
        CURRENT_DATE() :: DATE AS max_block_date
    FROM
        base_table
    GROUP BY
        user_address,
        contract_address,
        symbol,
        max_block_date
),
all_dates AS (
    SELECT
        C.balance_date,
        A.user_address,
        A.contract_address,
        A.symbol
    FROM
        all_days C
        LEFT JOIN address_ranges A
        ON C.full_balance_date BETWEEN A.min_block_date
        AND A.max_block_date
    WHERE
        A.user_address IS NOT NULL
),
eth_balances AS (
    SELECT
        user_address,
        contract_address,
        balance_date,
        current_bal,
        TRUE AS daily_activity
    FROM
        base_table
),
balance_tmp AS (
    SELECT
        d.balance_date,
        d.user_address,
        d.contract_address,
        d.symbol,
        b.current_bal,
        b.daily_activity
    FROM
        all_dates d
        LEFT JOIN eth_balances b
        ON d.balance_date = b.balance_date
        AND d.user_address = b.user_address
        AND d.contract_address = b.contract_address
),
FINAL AS (
    SELECT
        balance_date,
        user_address,
        contract_address,
        symbol,
        LAST_VALUE(
            current_bal ignore nulls
        ) over(
            PARTITION BY user_address,
            contract_address
            ORDER BY
                balance_date ASC rows unbounded preceding
        ) AS balance,
        CASE
            WHEN daily_activity IS NULL THEN FALSE
            ELSE TRUE
        END AS daily_activity
    FROM
        balance_tmp
)
SELECT
    *
FROM
    FINAL
WHERE
    balance <> 0
ORDER BY
    balance_date DESC,
    contract_address

Columns

Column NameData TypeDescription
BLOCK_NUMBERNUMBERBlock at which the balance was read (when the transfer occurred).
BLOCK_TIMESTAMPTIMESTAMP_NTZBlock timestamp at which the balance was read (when the transfer occurred).
USER_ADDRESSTEXTThe wallet address holding the tokens / ETH.
CONTRACT_ADDRESSTEXTThe contract address of the token (null for ETH).
PREV_BAL_UNADJNUMBERThe token or ETH balance from the previously recorded record for this wallet / token, without a decimal adjustment.
PREV_BALFLOATThe decimal adjusted token or ETH balance from the previously recorded record for this wallet and token.
PREV_BAL_USDFLOATPreviously recorded balance in USD - this will be null for tokens without a decimal adjustment. Please note, the USD value is calculated at this block.
CURRENT_BAL_UNADJNUMBERThe token or ETH balance at the current block number, without a decimal adjustment.
CURRENT_BALFLOATThe decimal adjusted token or ETH balance at the current block number.
CURRENT_BAL_USDFLOATThe current balance in USD - this will be null for tokens without a decimal adjustment. Please note, the USD value is calculated at this block.
BAL_DELTA_UNADJNUMBERThe non-decimal adjusted balance change.
BAL_DELTAFLOATThe decimal adjusted balance change
BAL_DELTA_USDFLOATThe balance change in USD, will be null for tokens without a decimal.
SYMBOLTEXTThe symbol of the token contract, or ETH.
TOKEN_NAMETEXTThe name of the token contract, or Native ETH.
DECIMALSNUMBERThe decimals for the token contract.
HAS_DECIMALBOOLEANWhether the token has a decimal or not, either TRUE or FALSE.
HAS_PRICEBOOLEANWhether the token has an hourly price or not, either TRUE or FALSE.
EZ_BALANCE_DELTAS_IDTEXTPrimary key - unique identifier for each row ensuring data integrity.
Format: Usually VARCHAR containing composite key generated using MD5 hash of the relevant columns. Example: MD5(block_number, tx_hash, trace_index) Usage:
  • Deduplication in incremental loads
  • Join operations for data quality checks
  • Troubleshooting specific records
Important: Implementation varies by table - check table-specific documentation. | | INSERTED_TIMESTAMP | TIMESTAMP_NTZ | UTC timestamp when the record was first added to the Flipside database. Format: TIMESTAMP_NTZ Use Cases:
  • Data freshness monitoring
  • Incremental processing markers
  • Debugging data pipeline issues
  • SLA tracking
Query Example:
-- Check data latency
SELECT
    DATE_TRUNC('hour', block_timestamp) as block_hour,
    DATE_TRUNC('hour', inserted_timestamp) as insert_hour,
    AVG(TIMESTAMPDIFF('minute', block_timestamp, inserted_timestamp)) as avg_latency_minutes
FROM <blockchain_name>.core.fact_transactions
WHERE block_timestamp >= CURRENT_DATE - 1
GROUP BY 1, 2;
``` |
| MODIFIED_TIMESTAMP | TIMESTAMP_NTZ | UTC timestamp of the most recent update to this record.

**Format**: TIMESTAMP_NTZ

**Triggers for Updates**:
- Data corrections
- Enrichment additions
- Reprocessing for accuracy
- Schema migrations

**Monitoring Usage**:
```sql
-- Recently modified records
SELECT *
FROM <blockchain_name>.core.fact_transactions
WHERE modified_timestamp > inserted_timestamp
AND modified_timestamp >= CURRENT_DATE - 1;

-- Data quality tracking
SELECT
    DATE(modified_timestamp) as mod_date,
    COUNT(*) as records_updated,
    COUNT(DISTINCT block_number) as blocks_affected
FROM <blockchain_name>.core.fact_transactions
WHERE modified_timestamp > inserted_timestamp
GROUP BY 1
ORDER BY 1 DESC;
``` |