如何用Dune Analytics自定义追踪特定钱包组
Dune Analytics里有一堆现成的看板可以看项目数据,但如果你想盯着某个特定的钱包群体——比如某个项目的核心团队地址、几个经常一起操作的巨鲸、或者自己筛选出来的"聪明钱"列表——现成看板就不够用了。这篇文章不讲理论,直接用SQL+实操的方式,拆解怎么在Dune里自定义追踪你指定的那组钱包,包括怎么建表、怎么追踪流水、怎么把数据做成可用的看板。
要追踪的地址放哪里
Dune支持用户自定义数据表(Spells/User Generated Tables)。你可以把要追踪的钱包地址存到一个表里,后续所有查询都从这个表关联。这比自己写一长串IN ('0x...', '0x...')干净得多,也好维护。
建表的SQL模板大概长这样:
CREATE TABLE your_schema.whales_wallets AS SELECT address, '标签1' AS name FROM (VALUES (0x...), (0x...) ) AS t(address) UNION ALL SELECT address, '标签2' AS name FROM (VALUES (0x...) ) AS t(address)
如果你追踪的是不同类别的地址——比如团队钱包、做市商地址、早期投资者——可以用name字段打标签,后续分析时可以按标签分组。
一个已有的实际案例是"巨鲸钱包追踪_某一代币流动"看板,它就是把dune_user_generated.whales_wallets这张表作为地址来源,然后关联erc20.ERC20_evt_Transfer来追踪这些地址的进出流水。
追踪流水的核心逻辑
有了地址表之后,追踪逻辑是标准化的:关联转账事件,匹配"from"或"to"字段是否在地址表里。
正向追踪某个地址组的行为,核心SQL逻辑是:
-- 追踪流入(转入地址表里的地址) SELECT name, date_trunc('hour', evt_block_time) as time, contract_address, sum("value") as flow FROM erc20."ERC20_evt_Transfer" AS t INNER JOIN your_schema.whales_wallets AS w ON t."to" = w.address WHERE evt_block_time > now() - interval '48 hours' GROUP BY name, time, contract_address
UNION ALL
-- 追踪流出(从地址表里的地址转出) SELECT name, date_trunc('hour', evt_block_time) as time, contract_address, -sum("value") as flow -- 负数表示流出 FROM erc20."ERC20_evt_Transfer" AS t INNER JOIN your_schema.whales_wallets AS w ON t."from" = w.address WHERE evt_block_time > now() - interval '48 hours' GROUP BY name, time, contract_address
这个逻辑在"巨鲸钱包追踪"看板中被实际应用:把地址表的address字段分别匹配转账事件的"from"和"to",然后按时间聚合,算出每个地址在每个时间段的净流量。
追踪代币持仓变化
除了流水,另一个常见需求是看这批地址持有的某个代币数量变化。
逻辑是:先找出这批地址在某个时间点持有多少某个代币(通过ERC-20的Transfer事件计算累计余额),然后随时间变化追踪这个数字。
Dune文档里提供的"Tokens"类查询模板就是干这个的——选一个代币、选一个区块链、设定时间范围,就可以追踪这个代币在特定地址组或特定合约上的流动情况。你可以在模板基础上,把地址来源换成自己的whales_wallets表。
钱包分组和行为分类
追踪特定钱包组的另一个方向是对钱包做行为分层。Dune上有一个RFM钱包分割的案例,对Base链上的钱包按三个维度打分:活跃度(Recency,多久没交易了)、频率(Frequency,交易次数)、金额(Monetary,交易金额)。
这个框架可以直接用到自定义钱包组上:针对你追踪的那批地址,计算它们最近一次交易时间、过去30天的交易次数、总交易金额,然后做分层。比如:
sql复制下载WITH user_metrics AS ( SELECT "from" AS wallet, MAX(block_time) AS last_tx, COUNT(*) AS frequency, SUM(value / 1e18) AS monetary_eth FROM base.transactions WHERE block_time >= NOW() - INTERVAL '30' day AND "from" IN (SELECT address FROM your_schema.whales_wallets) GROUP BY 1 ) SELECT wallet, DATE_DIFF('day', last_tx, NOW()) AS days_since_last, frequency, monetary_eth FROM user_metrics
这样你能看到追踪的这批地址里哪些是活跃的、哪些已经休眠了、哪些交易频率突然变高。
新建钱包的检测——识别潜在的"老鼠仓"
这是钱包追踪里比较进阶但实用的一层。Dune可以检测"新钱包"——即首次链上交易发生几天内就大量买入某个代币的地址。
具体做法是:先筛选出首次交易时间在最近7天的地址,然后看这些地址是否在你指定的代币上发生了大额买入。这个模式经常出现在内幕交易或"老鼠仓"中——知情者在利好消息公布前几天用新钱包建仓。
SQL逻辑大致是:
sql复制下载-- 找出在目标代币上有大额交易的新钱包 WITH first_tx AS ( SELECT "from" AS wallet, MIN(block_time) AS first_tx_time FROM ethereum.transactions GROUP BY 1 HAVING MIN(block_time) >= NOW() - INTERVAL '7' day ) SELECT t."from", t.block_time, t.value / 1e18 AS amount_eth FROM ethereum.transactions t INNER JOIN first_tx f ON t."from" = f.wallet WHERE t.to = '目标代币合约地址' -- 买入行为 AND t.value > 阈值 -- 设置最小金额 ORDER BY t.block_time DESC
多个新钱包在相近时间买入同一代币,是比较值得关注的信号。
做看板的两个关键点
参数化查询:把区块链、代币地址、时间范围、金额阈值设成参数({{参数名}}),以后换代币或换链只需要改下拉框,不需要改SQL代码。
周期性刷新:Dune的看板不会自动更新。在Dashboard里点时钟图标可以设置定时刷新频率,比如每6小时跑一次。对于追踪地址组来说,设置好定时刷新之后,就不用手动点"Run"了。
