Skip to content

Dune Analytics

Dune Analytics 是最流行的链上数据查询平台,允许你用 SQL 直接查询区块链数据并可视化结果。它将链上原始数据解码为结构化表格,任何人都可以用标准 SQL 查询、分析、可视化链上行为。

核心价值:无需运行节点、无需索引器,用 SQL 即可访问全链历史数据

核心概念

Query → Visualization → Dashboard

Dune 的工作流是一条清晰的链路:

SQL Query → 查询结果 → 可视化图表 → 组装到 Dashboard
  1. Query(查询):编写 SQL 查询链上数据,Dune 支持 PostgreSQL 语法
  2. Visualization(可视化):将查询结果转化为折线图、柱状图、饼图、表格等
  3. Dashboard(看板):将多个可视化组件组合成一个主题面板

Spellbook:社区数据模型层

Spellbook 是 Dune 的预构建数据模型层,由社区维护。它将原始链上数据抽象为更易用的表:

  • 原始表:如 ethereum.transactionsethereum.logs,直接对应链上原始数据
  • Spell 表:如 dex.tradesnft.trades,经过清洗和聚合的中间表
  • 优势:Spell 表已经处理了合约解码、事件标准化等工作,大幅降低查询复杂度

关键理解:优先使用 Spell 表,只有在 Spell 表不覆盖时才回退到原始表

入门步骤

  1. 注册 Dune 账号(免费版足够入门)
  2. 浏览热门 Dashboard 了解数据结构,推荐:
  3. Fork 一个现有 Query 开始修改(比从零写快 10 倍)
  4. 逐步学习 Dune 特有的表命名规则和 Spellbook 模型

常用数据表

原始表

表名用途关键字段
ethereum.transactions以太坊交易记录hash, from, to, value, gas_price, block_time
ethereum.logs合约事件日志topic1-4, data, contract_address
ethereum.token_transfersERC-20 转账from, to, value, contract_address
ethereum.traces内部交易追踪from, to, value, trace_type

Spell 表(优先使用)

表名用途说明
dex.tradesDEX 交易聚合覆盖 Uniswap、Curve、Balancer 等主流 DEX
dex.intra_plateform_transfersDEX 内部转账协议内部资金流转
nft.tradesNFT 交易聚合覆盖 OpenSea、Blur、LooksRare 等
erc20_balancesERC-20 余额快照代币持仓分布
lending.borrow借贷协议借款Aave、Compound 等借款事件
lending.supply借贷协议存款Aave、Compound 等存款事件

5 个实用 SQL 查询模板

1. ETH 余额查询(某地址历史余额变化)

sql
-- 查询某地址每日 ETH 余额变化
SELECT
    block_time::date AS date,
    SUM(value_raw) / 1e18 AS eth_balance
FROM ethereum.traces
WHERE
    -- 替换为目标地址
    (to = 0x...' OR "from" = 0x...)
    AND block_time >= NOW() - INTERVAL '30 days'
GROUP BY 1
ORDER BY 1;

洞察方向:识别鲸鱼地址的持仓变化模式,大额转入/转出往往是市场信号。

2. Uniswap V3 24h 交易量

sql
-- Uniswap V3 近 24h 各交易对交易量
SELECT
    token_bought_symbol,
    token_sold_symbol,
    SUM(amount_usd) AS volume_24h,
    COUNT(*) AS tx_count
FROM dex.trades
WHERE
    project = 'uniswap-v3'
    AND block_time >= NOW() - INTERVAL '24 hours'
GROUP BY 1, 2
ORDER BY volume_24h DESC
LIMIT 20;

洞察方向:交易量突然飙升的交易对可能是新热点;交易次数与交易量的比值反映散户 vs 巨鲸结构。

3. Gas 消耗 Top 合约

sql
-- 近 7 天 Gas 消耗最多的合约
SELECT
    to AS contract_address,
    SUM(gas_used) / 1e9 AS gas_used_gwei,
    COUNT(*) AS tx_count,
    SUM(gas_used) * 1.0 / COUNT(*) AS avg_gas_per_tx
FROM ethereum.transactions
WHERE
    block_time >= NOW() - INTERVAL '7 days'
    AND to IS NOT NULL
GROUP BY 1
ORDER BY gas_used_gwei DESC
LIMIT 20;

洞察方向:Gas 消耗突增通常意味着协议活动增加(如空投、新功能上线)。关注不知名合约突然进入 Top 排行,可能是新项目爆发。

4. NFT 交易排行

sql
-- 近 7 天 NFT 交易量排行
SELECT
    nft_project_name,
    COUNT(*) AS sale_count,
    SUM(amount_usd) AS total_volume_usd,
    AVG(amount_usd) AS avg_sale_price_usd,
    MAX(amount_usd) AS max_sale_price_usd
FROM nft.trades
WHERE
    block_time >= NOW() - INTERVAL '7 days'
GROUP BY 1
ORDER BY total_volume_usd DESC
LIMIT 20;

洞察方向:平均售价与最高售价差距大的项目可能有炒作成分;交易次数与交易量的比值反映洗盘可能性。

5. DeFi 协议 TVL 变化

sql
-- 某协议近期 TVL 变化(以 Aave 为例)
SELECT
    block_time::date AS date,
    SUM(amount_usd) AS daily_tvl_change
FROM lending.supply
WHERE
    project = 'aave'
    AND block_time >= NOW() - INTERVAL '30 days'
GROUP BY 1
ORDER BY 1;

洞察方向:TVL 突增可能是激励活动吸引;TVL 持续流出往往预示协议风险。结合价格数据可区分"真实 TVL 变化"和"代币价格波动导致的 TVL 变化"。

Dune 特有语法要点

1. Spell 表的命名规则

Spell 表按项目/协议分类,命名格式为 <project>.<table>

sql
-- 正确:使用项目级 Spell 表
SELECT * FROM dex.trades WHERE project = 'uniswap-v3';

-- 正确:使用链级原始表
SELECT * FROM ethereum.transactions;

-- 错误:不存在的表
SELECT * FROM uniswap.trades;  -- 应该用 dex.trades + WHERE 过滤

2. dex.trades 的关键字段

sql
-- dex.trades 是最常用的 Spell 表之一
SELECT
    blockchain,         -- 所在链:ethereum, polygon, etc.
    project,            -- DEX 项目:uniswap-v3, curve, sushiswap
    version,            -- 版本:2, 3
    block_time,         -- 区块时间
    token_bought_symbol,-- 买入代币符号
    token_sold_symbol,  -- 卖出代币符号
    token_bought_amount,-- 买入数量
    token_sold_amount,  -- 卖出数量
    amount_usd,         -- 美元金额
    tx_from,            -- 交易发起者
    tx_to               -- 交易目标合约
FROM dex.trades
LIMIT 10;

3. 地址格式

Dune 中地址统一为小写,不带 0x 前缀的格式:

sql
-- 正确
WHERE to = '\x6b175474e89094c44da98b954eedeac495271d0f'

-- 或使用 0x 前缀(Dune 会自动处理)
WHERE to = 0x6b175474e89094c44da98b954eedeac495271d0f

4. 时间处理

sql
-- 常用时间过滤
WHERE block_time >= NOW() - INTERVAL '7 days'           -- 最近 7 天
WHERE block_time::date = '2024-01-01'::date             -- 特定日期
WHERE block_time >= '2024-01-01' AND block_time < '2024-02-01'  -- 月度

5. 大数处理

链上数值通常以 wei 为单位(18 位精度),需要除以 1e18

sql
-- ETH 金额
value / 1e18 AS eth_amount

-- ERC-20 代币(注意不同代币精度不同)
value_raw / power(10, decimals) AS token_amount

如何从查询结果提取洞察

思维框架

  1. 趋势识别:时间序列数据关注方向、斜率、拐点
  2. 异常检测:偏离历史均值 2 个标准差以上的数据点值得深挖
  3. 结构分析:关注 Top N 的集中度(如 Top 10 地址占比多少)
  4. 相关性验证:两个指标是否同步变化(如 Gas 价格与 DEX 交易量)

常见分析场景

场景关键指标入口表
协议活跃度评估日活地址、交易次数、TVL 变化dex.trades, lending.*
鲸鱼监控大额转账、持仓变化ethereum.traces, token_transfers
Gas 市场分析Gas 价格趋势、合约 Gas 消耗ethereum.transactions
NFT 市场情绪交易量、地板价、洗盘检测nft.trades
MEV 分析套利利润、三明治攻击ethereum.traces, dex.trades

从数据到洞察的三个关键问题

  1. 这个变化是真实的还是噪音? -- 看趋势而非单点,对比更长的时间窗口
  2. 驱动因素是什么? -- 关联其他数据源(价格、新闻、协议升级)
  3. 谁在行动? -- 拆解到地址级别,区分散户 vs 机构 vs 协议自身

免费版限制

限制项免费版Plus 版($29/月)
查询执行频率1 次/分钟3 次/分钟
私人 Query 数量5 个无限
Dashboard 缓存1 小时15 分钟
结果行数10,000 行100,000 行
并发查询1 个3 个

推荐学习路径

  1. 第 1 周:Fork 热门 Query,理解 SQL 结构和表命名规则
  2. 第 2 周:用 dex.tradesnft.trades 写自己的查询
  3. 第 3 周:学习 Spellbook 模型,理解数据预处理逻辑
  4. 第 4 周:构建自己的 Dashboard,整合多维度分析