Dune Analytics
Dune Analytics 是最流行的链上数据查询平台,允许你用 SQL 直接查询区块链数据并可视化结果。它将链上原始数据解码为结构化表格,任何人都可以用标准 SQL 查询、分析、可视化链上行为。
核心价值:无需运行节点、无需索引器,用 SQL 即可访问全链历史数据。
核心概念
Query → Visualization → Dashboard
Dune 的工作流是一条清晰的链路:
SQL Query → 查询结果 → 可视化图表 → 组装到 Dashboard- Query(查询):编写 SQL 查询链上数据,Dune 支持 PostgreSQL 语法
- Visualization(可视化):将查询结果转化为折线图、柱状图、饼图、表格等
- Dashboard(看板):将多个可视化组件组合成一个主题面板
Spellbook:社区数据模型层
Spellbook 是 Dune 的预构建数据模型层,由社区维护。它将原始链上数据抽象为更易用的表:
- 原始表:如
ethereum.transactions、ethereum.logs,直接对应链上原始数据 - Spell 表:如
dex.trades、nft.trades,经过清洗和聚合的中间表 - 优势:Spell 表已经处理了合约解码、事件标准化等工作,大幅降低查询复杂度
关键理解:优先使用 Spell 表,只有在 Spell 表不覆盖时才回退到原始表。
入门步骤
- 注册 Dune 账号(免费版足够入门)
- 浏览热门 Dashboard 了解数据结构,推荐:
- Ethereum 101:ETH 链基础数据全景
- DEX Metrics:DEX 交易聚合分析
- NFT Market Overview:NFT 市场概览
- Fork 一个现有 Query 开始修改(比从零写快 10 倍)
- 逐步学习 Dune 特有的表命名规则和 Spellbook 模型
常用数据表
原始表
| 表名 | 用途 | 关键字段 |
|---|---|---|
ethereum.transactions | 以太坊交易记录 | hash, from, to, value, gas_price, block_time |
ethereum.logs | 合约事件日志 | topic1-4, data, contract_address |
ethereum.token_transfers | ERC-20 转账 | from, to, value, contract_address |
ethereum.traces | 内部交易追踪 | from, to, value, trace_type |
Spell 表(优先使用)
| 表名 | 用途 | 说明 |
|---|---|---|
dex.trades | DEX 交易聚合 | 覆盖 Uniswap、Curve、Balancer 等主流 DEX |
dex.intra_plateform_transfers | DEX 内部转账 | 协议内部资金流转 |
nft.trades | NFT 交易聚合 | 覆盖 OpenSea、Blur、LooksRare 等 |
erc20_balances | ERC-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 = 0x6b175474e89094c44da98b954eedeac495271d0f4. 时间处理
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如何从查询结果提取洞察
思维框架
- 趋势识别:时间序列数据关注方向、斜率、拐点
- 异常检测:偏离历史均值 2 个标准差以上的数据点值得深挖
- 结构分析:关注 Top N 的集中度(如 Top 10 地址占比多少)
- 相关性验证:两个指标是否同步变化(如 Gas 价格与 DEX 交易量)
常见分析场景
| 场景 | 关键指标 | 入口表 |
|---|---|---|
| 协议活跃度评估 | 日活地址、交易次数、TVL 变化 | dex.trades, lending.* |
| 鲸鱼监控 | 大额转账、持仓变化 | ethereum.traces, token_transfers |
| Gas 市场分析 | Gas 价格趋势、合约 Gas 消耗 | ethereum.transactions |
| NFT 市场情绪 | 交易量、地板价、洗盘检测 | nft.trades |
| MEV 分析 | 套利利润、三明治攻击 | ethereum.traces, dex.trades |
从数据到洞察的三个关键问题
- 这个变化是真实的还是噪音? -- 看趋势而非单点,对比更长的时间窗口
- 驱动因素是什么? -- 关联其他数据源(价格、新闻、协议升级)
- 谁在行动? -- 拆解到地址级别,区分散户 vs 机构 vs 协议自身
免费版限制
| 限制项 | 免费版 | Plus 版($29/月) |
|---|---|---|
| 查询执行频率 | 1 次/分钟 | 3 次/分钟 |
| 私人 Query 数量 | 5 个 | 无限 |
| Dashboard 缓存 | 1 小时 | 15 分钟 |
| 结果行数 | 10,000 行 | 100,000 行 |
| 并发查询 | 1 个 | 3 个 |
推荐学习路径
- 第 1 周:Fork 热门 Query,理解 SQL 结构和表命名规则
- 第 2 周:用
dex.trades和nft.trades写自己的查询 - 第 3 周:学习 Spellbook 模型,理解数据预处理逻辑
- 第 4 周:构建自己的 Dashboard,整合多维度分析