Nansen Query Documentation
  • Introduction
  • Overview
    • 📍Getting Started
    • 📍Benefits of Curation
  • Data
    • 🗃️Data Sources
    • 🗃️Data Catalog
      • 🗃️Raw Events
      • 🗃️Aggregates
        • Entity Stats
        • Address Stats
        • Token Usage Stats
        • Transaction Stats
        • Address & Their Relationships
      • 🗃️Dex Trades
        • 🗃️Dex Trader P&L
        • 🗃️Dex Trader Use Cases
        • 🗃️Advanced Topics
        • 🗃️Trader P&L FAQ
      • 🗃️Decoded Contracts
      • 🗃️NFTs
      • 🗃️Governance
      • 🗃️Solana
        • 🗃️Solana Aggregates
    • 🗃️Repeated / Nested Fields
    • 🗃️Adding New Projects
    • 🗃️Data Marketplace
  • Web App
    • 🖥️Overview
    • 🖥️Getting Started: Web App
    • 🖥️My Queries
    • 🖥️Query Editor
    • 🖥️Visualizations
    • 🖥️Dashboards
    • 🖥️Dashboard Editor
    • 🖥️Refresh Schedules
    • ⚙️Custom Query APIs
      • ⚙️API Keys
      • ⚙️Execute A Query
      • ⚙️Get Query Results
  • Database Access
    • 📂Database Overview
    • 📂Getting Started: Database
    • 📂Sample Queries
      • 📂Wallet Examples
      • 📂Token Examples
      • 📂Trader P&L
      • 📂Project Examples
      • 📂Solana Queries
      • 📂Blockchain Examples
    • 📂Sample Python Code
      • 📂Wallet Examples
      • 📂Token Examples
    • 📂Cost Optimization
    • 📂Database FAQs
  • Other
    • ⁉️General FAQs
    • 🏷️Wallet Labels
Powered by GitBook
On this page
  1. Database Access
  2. Sample Queries

Wallet Examples

Replace from_address, to_address, and the source table with the appropriate values

All Token Movement for a Wallet

SELECT
    token_address,
    from_address,
    to_address,
    value,
    DATE(block_timestamp) AS date
FROM
    `nansen-query.raw_ethereum.token_transfers`
WHERE
    from_address = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
    OR to_address = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
ORDER BY 
    DATE(block_timestamp) DESC

Token Balance for a Wallet

DECLARE wallet STRING DEFAULT LOWER('0x3637d7f6041d73917017e5d3e2259473215ecf6f');

WITH
txns AS (
    SELECT  
        block_timestamp,
        token_address,
        from_address AS address,
        -CAST(value AS FLOAT64) / 1e18 AS value
    FROM 
        `nansen-query.raw_ethereum.token_transfers`
    UNION ALL
    SELECT
        block_timestamp,
        token_address,
        to_address AS address,
        CAST(value AS FLOAT64) / 1e18 AS value
    FROM
        `nansen-query.raw_ethereum.token_transfers`
)

SELECT 
    token_address,
    SUM(value) AS token_balance
FROM txns 
WHERE address = wallet
GROUP BY
    token_address
HAVING 
    SUM(value) > 1
ORDER BY token_balance DESC

Top 50 Wallet by ETH Balance

SELECT
    SUM(CAST(balance / 1e18 AS FLOAT64)) AS eth_balance,
    address
FROM `nansen-query.raw_ethereum.balances`
GROUP BY address
ORDER BY eth_balance DESC
LIMIT 50

Estimated Location Based On Trading Hours

DECLARE input_address STRING DEFAULT LOWER('0x41339d9825963515e5705df8d3b0ea98105ebb1c');
WITH

all_sent_tx AS (
    SELECT
        block_timestamp,
        from_address,
        transaction_hash
    FROM
        `nansen-query.raw_ethereum.token_transfers`
    WHERE
        from_address = input_address
),

all_sent_tt AS (
    SELECT
        block_timestamp,
        block_hash,
        from_address
    FROM
        `nansen-query.raw_ethereum.token_transfers`
    WHERE
        from_address = input_address
),

all_sent AS (
    SELECT * FROM all_sent_tx
    UNION ALL
    SELECT * FROM all_sent_tt
),

all_hours AS (
    SELECT * FROM UNNEST(GENERATE_ARRAY(0, 23)) AS hour
),

tx_per_hour AS (
    SELECT
      EXTRACT(HOUR FROM block_timestamp) AS hour_of_day,
      COUNT(DISTINCT from_address) AS num_tx_sent
    FROM
        all_sent
    GROUP BY
      hour_of_day
),

list AS (
    SELECT
        hour,
        COALESCE(num_tx_sent, 0) AS txs
    FROM
        all_hours
    LEFT JOIN
        tx_per_hour
        ON
        all_hours.hour = tx_per_hour.hour_of_day
    ORDER BY
        all_hours.hour
),

almost AS (
    SELECT
        MAX(txs) AS most_transactions
    FROM list 
)

SELECT
    most_transactions,
    hour,
    IF(hour < 7, 'APAC', IF(hour > 13, 'USA', 'EURO')) AS continent
FROM almost
LEFT JOIN
    list
    ON most_transactions = txs

Token Flow Path Between Two Wallets

DECLARE start_address STRING DEFAULT LOWER('0x47068105c5feff69e44520b251b9666d4b512a70');
DECLARE end_address STRING DEFAULT LOWER('0x2604afb5a64992e5abbf25865c9d3387ade92bad');

WITH
traces_0 AS (
    SELECT *
    FROM `nansen-query.raw_ethereum.traces`
    WHERE from_address = start_address
),

traces_1_hop AS (
    SELECT
        1 AS hops,
        traces_1.from_address,
        traces_1.to_address,
        traces_1.trace_address,
        traces_1.block_timestamp,
        CONCAT(traces_0.from_address, ' -> ', traces_0.to_address, ' -> ', traces_1.to_address) AS path
    FROM `nansen-query.raw_ethereum.traces` AS traces_1
    INNER JOIN traces_0
    ON traces_0.to_address = traces_1.from_address
    AND traces_0.block_timestamp <= traces_1.block_timestamp 
),

traces_2_hops AS (
    SELECT
        2 AS hops,
        traces_2.from_address,
        traces_2.to_address,
        traces_2.trace_address,
        traces_2.block_timestamp,
        CONCAT(path, ' -> ', traces_2.to_address) AS path
    FROM `nansen-query.raw_ethereum.traces` AS traces_2
    INNER JOIN traces_1_hop
    ON traces_1_hop.to_address = traces_2.from_address
    AND traces_1_hop.block_timestamp <= traces_2.block_timestamp 
),

traces_3_hops AS (
    SELECT
        3 AS hops,
        traces_3.from_address,
        traces_3.to_address,
        traces_3.trace_address,
        traces_2_hops.block_timestamp,
        CONCAT(path, ' -> ', traces_3.to_address) AS path
    FROM `nansen-query.raw_ethereum.traces` AS traces_3
    INNER JOIN traces_2_hops
    ON traces_2_hops.to_address = traces_3.from_address
    AND traces_2_hops.block_timestamp <= traces_3.block_timestamp 
    WHERE traces_3.to_address = end_address
),

traces_all_hops AS (
    SELECT * FROM traces_1_hop
    UNION ALL
    SELECT * FROM traces_2_hops
    UNION ALL
    SELECT * FROM traces_3_hops
)

SELECT *
FROM traces_all_hops
WHERE hops = 3
LIMIT 100
PreviousSample QueriesNextToken Examples

Last updated 2 years ago

📂
📂