返回知识库
Day 12

Dune入门:链上数据分析的第一步

掌握Dune Analytics基础,学习SQL核心语法,理解链上数据表结构,开启Web3数据分析之路

2025-01-20
DuneSQL数据分析链上数据Week2

Day 12: Dune Analytics 入门指南

本周学习路径

Week 2: DeFi核心机制
├── Day 8: AMM原理(x*y=k)、无常损失 ✅
├── Day 9: 订单簿vs AMM对比 ✅
├── Day 10: 借贷协议原理 ✅
├── Day 11: 稳定币机制 ✅
├── Day 12: Dune入门(1) - SQL基础 ✅ ← 今天
├── Day 13: Dune入门(2) - 写简单查询
└── Day 14: 复习 + EthPrice多币种支持

核心概念

Dune 是什么?

> 类比理解:Dune 就是区块链世界的 Google Analytics + Excel。想象所有链上交易都被记录在一个超大的公开数据库里,Dune 让你可以用 SQL 查询任何数据——某个协议的交易量、某个地址的持仓、某个Token的持有者分布...而且完全免费、公开透明。

为什么 PM 必须会 Dune?
═══════════════════════════════════════════════════════════
传统 Web2 PM              Web3 PM
─────────────────────────────────────────────────────────
依赖后端给数据            自己查链上数据
数据埋点可能遗漏          链上数据100%完整
数据可能被美化            链上数据不可篡改
只能看自家产品            可以分析任何竞品
═══════════════════════════════════════════════════════════

Dune 能做什么?
├── 追踪协议 TVL、交易量、用户数
├── 分析竞品数据(完全公开!)
├── 监控大户/巨鲸动向
├── 验证项目方的数据宣传是否真实
└── 制作数据看板向团队/投资人汇报

SQL 基础速成

最小知识集(80/20法则)

-- SQL 就是用英语问数据库问题
-- 掌握这6个关键词,覆盖80%的查询需求

SELECT   -- 选择要哪些列(字段)
FROM     -- 从哪个表查
WHERE    -- 筛选条件
GROUP BY -- 按什么分组
ORDER BY -- 按什么排序
LIMIT    -- 只要前N条

语法模板(背下来)

SELECT
    column1,                    -- 要查的列
    column2,
    COUNT(*) as count,          -- 聚合函数
    SUM(amount) as total
FROM schema.table_name          -- 表名
WHERE
    condition1 = 'value'        -- 筛选条件
    AND condition2 > 100
    AND time > now() - interval '7 days'
GROUP BY column1, column2       -- 分组
ORDER BY total DESC             -- 排序(DESC降序)
LIMIT 100                       -- 限制条数

常用函数速查

-- 聚合函数
COUNT(*)           -- 计数
SUM(column)        -- 求和
AVG(column)        -- 平均值
MAX(column)        -- 最大值
MIN(column)        -- 最小值
COUNT(DISTINCT x)  -- 去重计数

-- 时间函数
now()                          -- 当前时间
date_trunc('day', time)        -- 截断到天
interval '7 days'              -- 7天间隔

-- 数值处理
value / 1e18                   -- wei 转 ETH
ROUND(number, 2)               -- 保留2位小数
CAST(x AS DOUBLE)              -- 类型转换

-- 条件判断
CASE
    WHEN x > 100 THEN 'large'
    ELSE 'small'
END as size

Dune 数据表结构

核心表分类

Dune 数据表架构(以 Ethereum 为例)
═══════════════════════════════════════════════════════════

📁 Raw Tables(原始表)—— 最底层,数据未解析
├── ethereum.transactions    所有交易
├── ethereum.traces          内部交易(合约调用合约)
├── ethereum.logs            事件日志(合约emit的事件)
└── ethereum.blocks          区块信息

📁 Decoded Tables(解析表)—— 最常用!⭐
├── uniswap_v3_ethereum.SwapRouter_call_exactInputSingle
├── aave_v3_ethereum.Pool_evt_Borrow
├── erc20_ethereum.evt_Transfer
└── [协议名]_[链名].[合约名]_[call/evt]_[函数/事件名]

📁 Spellbook(魔法书)—— 社区维护的聚合表
├── dex.trades               所有DEX交易聚合
├── nft.trades               所有NFT交易聚合
├── tokens.erc20             所有ERC20代币信息
└── prices.usd               代币价格

📁 Community Tables(社区表)
└── 用户自己创建的数据集
═══════════════════════════════════════════════════════════

关键表详解

-- 1. ethereum.transactions(交易表)
-- 每一笔链上交易都在这里
SELECT
    block_time,      -- 时间
    hash,            -- 交易哈希
    "from",          -- 发送方(注意引号,from是SQL保留字)
    "to",            -- 接收方
    value,           -- ETH金额(单位:wei,需要/1e18)
    gas_price,       -- Gas价格
    gas_used,        -- Gas消耗
    success          -- 是否成功
FROM ethereum.transactions
LIMIT 10

-- 2. Decoded Tables(解析表)
-- 例:Uniswap V3 Swap 事件
SELECT
    evt_block_time,
    sender,
    recipient,
    amount0,         -- Token0 数量
    amount1,         -- Token1 数量
    sqrtPriceX96     -- 价格
FROM uniswap_v3_ethereum.Pair_evt_Swap
LIMIT 10

-- 3. Spellbook 聚合表
-- 例:所有DEX交易
SELECT
    block_time,
    project,         -- 'uniswap', 'sushiswap', etc.
    token_bought_symbol,
    token_sold_symbol,
    amount_usd
FROM dex.trades
WHERE block_time > now() - interval '1 day'
LIMIT 100

实战查询示例

示例1:最近24小时大额ETH转账

-- 查询 >100 ETH 的转账
SELECT
    block_time,
    "from" as sender,
    "to" as receiver,
    value / 1e18 as eth_amount,
    hash
FROM ethereum.transactions
WHERE
    block_time > now() - interval '24 hours'
    AND value > 100 * 1e18
    AND success = true
ORDER BY value DESC
LIMIT 50

示例2:Uniswap每日交易量

-- Uniswap V3 每日交易量趋势
SELECT
    date_trunc('day', block_time) as day,
    COUNT(*) as trade_count,
    SUM(amount_usd) as volume_usd
FROM dex.trades
WHERE
    project = 'uniswap'
    AND block_time > now() - interval '30 days'
GROUP BY 1
ORDER BY 1 DESC

示例3:某Token持有者数量

-- USDC 持有者地址数
SELECT
    COUNT(DISTINCT "to") as holder_count
FROM erc20_ethereum.evt_Transfer
WHERE
    contract_address = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48  -- USDC
    AND "to" != 0x0000000000000000000000000000000000000000  -- 排除销毁

链上实操记录

1. Dune 账号注册与界面熟悉

Dune 界面核心区域:
┌─────────────────────────────────────────────────────────┐
│  🔍 搜索栏 - 搜索 Dashboard、查询、用户                  │
├─────────────────────────────────────────────────────────┤
│  📊 Discover - 发现热门 Dashboard                       │
│  📝 My Creations - 我的查询和看板                       │
│  ⭐ Favorites - 收藏夹                                  │
│  👥 Following - 关注的创作者                            │
├─────────────────────────────────────────────────────────┤
│  Editor 编辑器:                                        │
│  ├── 左侧:数据表浏览器(可搜索表和列)                  │
│  ├── 中间:SQL 编辑区                                   │
│  ├── 右侧:参数设置                                     │
│  └── 下方:查询结果 + 可视化                            │
└─────────────────────────────────────────────────────────┘

2. Fork 的 Dashboard 记录

Dashboard 1: Uniswap V3 Overview
URL: dune.com/hagaetc/uniswap-v3-1
学习点:
- 如何展示 TVL 趋势
- 多个查询组合成完整看板
- 时间筛选器的使用

Dashboard 2: Ethereum Overview
URL: dune.com/hildobby/ethereum-overview
学习点:
- 链级别的宏观数据
- Gas 费用趋势分析
- 活跃地址统计方法

Dashboard 3: DEX Market Share
URL: dune.com/hagaetc/dex-metrics
学习点:
- 多协议对比查询
- 市场份额饼图
- 用 dex.trades 聚合表

3. 修改查询练习

-- 原查询:最近7天数据
WHERE block_time > now() - interval '7 days'

-- 修改为:最近30天
WHERE block_time > now() - interval '30 days'

-- 修改为:指定日期范围
WHERE block_time BETWEEN '2024-01-01' AND '2024-01-31'

-- 修改为:只看某个地址
WHERE "from" = 0x123...abc
   OR "to" = 0x123...abc

收藏夹整理

必收藏的 Dashboard 清单

📊 协议分析类
├── Uniswap V3 Overview - DEX数据模板
├── Aave V3 - 借贷协议数据模板
├── Lido - 质押协议数据
└── OpenSea/Blur - NFT市场数据

📈 宏观数据类
├── Ethereum Overview - 链整体健康度
├── L2 Comparison - Layer2对比
├── Stablecoin Dashboard - 稳定币供应量
└── Gas Tracker - Gas费趋势

🐋 巨鲸监控类
├── Whale Watching - 大户动向
├── Smart Money - 聪明钱追踪
└── CEX Flows - 交易所资金流

🏆 优质创作者
├── @hildobby - 链宏观数据专家
├── @hagaetc - DEX数据专家
├── @0xBoxer - NFT数据专家
└── @0xKofi - DeFi协议分析

今日思考

问题1:Dune 对 PM 的核心价值?

1. 数据驱动决策
   └── 不再拍脑袋,用链上数据说话

2. 竞品分析神器
   └── 对手的TVL、用户数、增长率全透明

3. 验证项目真伪
   └── 项目方说DAU 10万?查一下就知道

4. 发现市场机会
   └── 追踪资金流向,发现新趋势

5. 向上汇报利器
   └── 用数据看板展示产品成绩

问题2:SQL 学到什么程度够用?

PM 级别(够用):
├── SELECT, FROM, WHERE, GROUP BY, ORDER BY
├── 基本聚合函数(COUNT, SUM, AVG)
├── 时间过滤和分组
└── 简单 JOIN(明天学)

分析师级别(进阶):
├── 窗口函数(ROW_NUMBER, LAG, LEAD)
├── 子查询和 CTE
├── 复杂 JOIN
└── 自定义函数

不需要学:
├── 存储过程
├── 数据库管理
└── 索引优化

问题3:如何高效学习 Dune?

学习路径推荐:

Week 1: 模仿期
├── Fork 热门 Dashboard
├── 修改参数运行
└── 理解每个查询的逻辑

Week 2: 修改期
├── 在现有查询上增加条件
├── 改变时间范围
└── 添加新的列

Week 3: 创造期
├── 写第一个独立查询
├── 组合多个查询成 Dashboard
└── 分享给社区获取反馈

捷径:
└── 看到想要的图表?点击查看 SQL,直接学习!

面试题准备

Q: 如何衡量 Web3 产品的成功指标?

30秒版本:

> Web3产品指标分三层:链上指标(TVL、日交易量、独立地址数、Gas消耗)、协议指标(收入、费用、代币持有者)、社区指标(Discord活跃度、治理参与率)。与Web2不同,这些数据都是公开可查的,用Dune就能分析。核心关注TVL趋势、真实用户数(非刷量)、以及协议收入的可持续性。

2分钟版本:

> Web3产品的成功指标可以分为三个层次:

>

> 第一层是链上核心指标。TVL(总锁仓量)反映用户对协议的信任度和资金规模;日活地址数显示真实用户参与度,但要注意区分真实用户和刷量机器人;交易量和交易笔数反映协议的实际使用频率;协议收入(手续费)证明商业模式是否成立。

>

> 第二层是代币相关指标。持有者数量和分布反映社区基础;代币流通量和解锁计划影响价格压力;质押率体现长期持有意愿。

>

> 第三层是社区指标。Discord成员数和活跃度、Twitter关注和互动、治理提案参与率,这些反映社区健康度。

>

> 作为PM,我会用Dune建立数据看板追踪这些指标,特别关注趋势变化而非绝对数值。比如TVL从1亿涨到2亿重要,但如果是靠补贴堆起来的就要警惕。同时会对比竞品数据,了解市场份额变化。

>

> 一个实用技巧是:看协议收入和代币激励的比例。如果每赚1美元要花10美元激励,这个模式就不可持续。


学习资源

资源链接说明
Dune 官方文档https://docs.dune.com/必读
SQL 基础教程https://www.w3schools.com/sql/快速入门
Dune 教程视频YouTube @Andrew Hong实战讲解
OurNetworkhttps://ournetwork.mirror.xyz/数据分析案例

明日预告

Day 13: Dune入门(2) - 写简单查询

  • 写第一个独立查询:某Token持有者数量
  • 学习 JOIN 操作连接多表
  • 理解协议专用的 Decoded Tables
  • 产出:第一个 Dune 查询

SQL 基础打好了,明天开始动手写!