链上数据分析工具Dune Analytics使用入门指南,从零开始读懂区块链数据
建议

《手把手教你用Dune Analytics:链上数据分析没那么难》
你打开一个区块链浏览器,满屏哈希值、十六进制地址、Gas费用,你看得懂每一个字,拼在一起却像天书,这不是你的问题,区块链数据天然就是为机器设计的,而不是为人设计的,但如果你想要在Web3世界里做点正经事——研究项目、判断趋势、或者纯粹为了不被人忽悠——你需要的工具是Dune Analytics。
Dune不是什么高大上的企业级产品,它是一个社区驱动的链上数据查询平台,核心逻辑很简单:把区块链上那些乱糟糟的原始数据,整理成你可以直接查询的数据库表格,然后用SQL语言拽出来,再画成图表,整个过程不需要你懂区块链底层原理,也不需要你跑节点,你只需要会一点点SQL,甚至不会也行——因为你可以直接复制别人的查询。
这篇文章不会教你怎么安装Dune,因为根本没有安装这个步骤,打开浏览器,输入dune.com,注册一个账号,免费版就够用了,接下来我们直接进入正题。
第一步:理解Dune的数据结构——它到底存了什么?
很多人第一次打开Dune,会被界面吓到,左边一堆表名,右边一堆查询框,你先别慌,Dune最核心的东西,是解码后的区块链数据。
什么叫解码?以太坊上的每一笔交易,本质上都是一串十六进制数据,比如一笔Uniswap的兑换交易,原始数据里包含大量的编码信息,正常人根本看不懂,Dune做的事情就是把这些编码拆解开,变成你能理解的字段:谁发送了代币,发送了多少,换回了什么,交易时间是什么时候,手续费多少,所有这些信息,都被清洗、整理、归类到不同的数据表里。
Dune的数据分为几大类,最基础的是原始交易表,叫ethereum.transactions,记录每一笔交易的发送方、接收方、ETH数量、Gas等信息,然后是事件日志表,ethereum.logs,记录了智能合约触发的事件——比如一个NFT被转移,一次借贷被清算,这些都会写入日志,再往上,是各个协议的解码表,比如uniswap_v3_ethereum.Swap,专门记录Uniswap V3的兑换事件,字段清晰得像是Excel表格。
你要记住一件事:所有热门协议的数据,Dune都已经帮你解码好了,你不需要自己去写解析器,不需要处理那些乱七八糟的十六进制,直接查表就行了。
第二步:写你的第一条查询——别怕,很简单
假设你想知道:过去24小时,Uniswap V3上交易量最大的代币对是什么?
你不用从零开始写SQL,Dune最有价值的地方是它的查询市场,进去之后,点Explore,选Queries,搜索Uniswap V3 volume 24h,你会看到成千上万条别人写好的查询,找一个看起来靠谱的,点Fork——对,就像GitHub一样,这个查询就变成了你的,你可以直接运行,也可以修改。
但如果你非要自己写,也没多难,打开一个新查询,选择数据源为dune入门课程里常用的以太坊数据集,输入下面这段SQL:
SELECT token0, token1, SUM(amountUSD) AS total_volume_usd FROM uniswap_v3_ethereum.Swap WHERE block_time >= NOW() - INTERVAL '24' HOUR GROUP BY token0, token1 ORDER BY total_volume_usd DESC LIMIT 10
运行,等几秒钟,你会看到一个表格,排名第一的可能是USDC-ETH,交易量几亿美元,就这么简单,这不是魔法,这就是把人类可读的数据用SQL拽出来,你不需要理解区块链怎么运行的,你只需要理解:选哪个表,用什么条件,想要什么结果。
第三步:理解时间筛选——你会用到最多的技巧
链上数据分析里最坑爹的坑之一:时间筛选。
很多人第一次查数据,直接用block_time >= ‘2023-01-01’,这样写没错,但效率极低,因为Dune底层用的是Databricks的Spark SQL,处理大数据时,你最好告诉它你只需要某个分区的数据,以太坊的数据按天分区,字段叫dt,高效的写法应该是这样:
SELECT * FROM uniswap_v3_ethereum.Swap WHERE dt >= '2023-01-01' AND block_time >= '2023-01-01'
第一个条件dt是分区过滤,让Dune只扫描2023年之后的文件块,而不是全表扫描,第二个条件block_time是精确筛选,两者配合,查询速度快十倍不止,如果你写的是慢查询,Dune会让你等着,甚至超时。用分区字段是你必须养成的习惯。
第四步:可视化——把数据变成能发推特的东西
查出来的数据只是表格,你要把它变成图表,才能给别人看,或者给自己分析趋势。
Dune的可视化功能藏在查询结果页面的下方,点New Visualization,选图表类型,折线图适合展示随时间变化的数据,比如TVL曲线、交易量趋势,柱状图适合做排名对比,比如各协议的交易量占比,饼图你最好少用——大多数时候它看起来漂亮,但信息量很低。
有个小技巧:如果你想把多条曲线画在一张图上,比如把Uniswap和Sushiswap的交易量对比画在一起,你需要先分别查询两个协议的数据,然后在可视化页面里,添加Series,把第二个查询结果加进来,Dune会自动匹配时间轴,画出对比图。
多图组合是Dune的高级功能,你可以把多个查询结果放在一个仪表盘上,做成一个页面,随时监控,很多人靠这个做链上数据看板,直接发给投资人群当工具用。
第五步:理解Gas费用数据——别被表面数字骗了
初学者最容易犯的错:只看交易金额,不看Gas费。
链上数据分析里,Gas费是你必须关注的核心指标,一个协议交易量很高,但如果Gas费也高得离谱,说明网络拥堵或者协议本身效率低下,查Gas费的数据,用的是ethereum.transactions这个表,字段里有个gas_price,单位是Wei,你需要把它转换成Gwei或者ETH,转换公式很简单:gas_price / 1e9等于Gwei,gas_price * gas_used / 1e18等于ETH。
实际写起来是这样:
SELECT block_time, gas_price / 1e9 AS gas_price_gwei, (gas_price * gas_used) / 1e18 AS fee_eth FROM ethereum.transactions WHERE block_time >= NOW() - INTERVAL '1' HOUR LIMIT 100
这条查询能让你看到最近一小时的Gas费情况,如果你在做DeFi套利或者NFT mint,Gas费数据是你决策的命脉,别省这一步。
第六步:NFT数据分析——地板价、交易量、聪明钱追踪
很多人进Dune不是为了看DeFi,而是为了看NFT,NFT的数据结构和代币不太一样,NFT的核心表是nft.trades,记录了所有主流的NFT市场交易,从OpenSea到Blur到LooksRare,字段包括nft_contract_address、token_id、price_eth、buyer、seller、marketplace。
假设你想知道:最近7天,Azuki的地板价变化趋势,你可以这样写:
SELECT block_date, MIN(price_eth) AS floor_price_eth FROM nft.trades WHERE nft_contract_address = '0xed5af388653567af2f388e6224dc7c4b3241c544' -- Azuki合约地址 AND block_date >= CURRENT_DATE - INTERVAL '7' DAY AND trade_type = 'Sale' GROUP BY block_date ORDER BY block_date
这里千万注意:地板价不是你想查就能直接查到的,Dune没有现成的地板价字段,你得自己从交易记录里算——即每分钟或每天的最低成交价,这是真实的地板价,不是OpenSea页面上那个API显示的地板价,两者的区别在于,OpenSea的地板价可能包含挂单未成交的订单,而Dune算的是真实成交价。真实成交价才是市场认可的价格。
如果你想追踪聪明钱——那些早期买入、高胜率的大户——你需要先找一份聪明钱地址列表,网上有很多公开的聪明钱标签列表,导入Dune的Abstractions功能,然后写查询,筛选出这些地址在某个NFT项目上的买入卖出记录,这不是什么黑科技,就是把地址列表和交易记录做JOIN,但如果你不会SQL,那就只能靠别人公开的看板了。
第七步:掌握参数化查询——让你变得像高手
你辛辛苦苦写了一条查询,只能查一个项目,换一个项目地址,就得改SQL重新跑,累不累?累。
Dune支持参数化查询,你在查询里用双大括号包住一个变量名,比如{{contract_address}},然后在运行之前,Dune会弹出一个输入框,让你填地址,你还可以给这个参数设定默认值、类型、甚至下拉菜单,比如你想做一个通用的NFT交易量查询,参数设置成:
{{contract_address}} default: 0x...BoredApe
这样每次运行,你只要换个合约地址,就能查不同项目。参数化是Dune让你从新手变成中级用户的标志,你会发现自己做看板的能力瞬间提升。
第八步:避免常见错误——新手必踩的坑
第一个坑:误用LIKE进行字符串匹配,区块链地址是精确匹配,千万别写WHERE address LIKE '%0xabc%',这样会触发全表扫描,而且因为地址是区分大小写的,你会漏掉大量数据,正确做法是用或者IN,配合小写地址。
第二个坑:忽视NULL值,链上数据经常有空字段,比如一笔交易可能没有调用数据,或者某个NFT没有元数据URL,如果你直接做聚合计算,结果会莫名其妙少一行,一定要在查询里加上WHERE field IS NOT NULL,或者用COALESCE函数给默认值。
第三个坑:时间精度过高,你和别人分享一个查询,结果因为时区不同,双方看到的数据差了8小时,Dune的block_time是UTC时间,如果你的观众在中国,你最好在查询里显式转换时区:block_time AT TIME ZONE 'Asia/Shanghai',这样所有人都能看到北京时间。
第四个坑:误解表之间的关联关系,比如你想查一个地址在某个项目上的总交易次数,应该用transaction表还是log表?transaction表记录的是每笔交易的发起方和接收方,log表记录的是合约内部事件,如果是普通ERC20转账,用transaction表就行,如果是DeFi兑换,应该用log表配合解码表,两者混用,结果会翻倍或者遗漏。
第九步:利用社区的力量——别一个人硬扛
Dune最强大的地方不是它的技术,而是它的社区,全球有成千上万的链上分析师,每天都在往Dune上传新的查询和看板,你要做的不是从零发明,而是站在他们的肩膀上。
打开Explore页面,按Trending排序,你会看到最近哪些看板最火,比如熊市里,清算相关看板特别多;牛市里,Meme币交易量看板满天飞,点开一个看板,Fork它,然后修改成你自己的数据,很多人靠这个方式,10分钟就做出了一个专业级的分析看板。
Dune也有Discord社区,在里面提问,回复速度很快,但注意,提问之前先搜一下有没有人问过同样的问题,不要问那种“怎么查NFT地板价”这种已经被回答了一千遍的问题,问具体的问题,为什么我的查询结果比OpenSea页面显示的交易量少了30%”,这样的问题,别人会认真回答你。
第十步:进阶方向——你接下来可以做什么
你已经会写基本的SQL查询了,能查交易量、Gas费、NFT地板价,也能做简单的可视化,接下来呢?
你可以做链上用户行为分析,比如追踪某个地址的交互历史,分析它是否属于某个协议的大户,或者做MEV分析,查看抢跑交易、三明治攻击的盈利情况,这些数据Dune里也都有专门的表。
你也可以学习用Python脚本批量拉取Dune数据,Dune有API接口,付费版可以获取无限量的查询结果,这样你就能把链上数据导入自己的数据库,做更复杂的建模。
但最重要的,是你开始养成一种思维习惯:一切链上行为都是数据,每一个地址,每一笔交易,每一次交互,背后都可能隐藏着别人没发现的模式,Dune只是工具,真正有价值的是你对这些数据的理解,你用Dune越久,就越能读懂那些看似杂乱的数据背后,藏着什么样的市场情绪、博弈逻辑和套利机会。
写在最后
这篇文章花了几千字,其实只讲了一件事:Dune让链上数据变得可读、可用、可分享,你不需要成为一个区块链极客,不需要懂密码学,也不需要运行全节点,你只需要愿意花一个下午,学会SQL的基本语法,然后开始翻阅别人的查询。
链上数据的最大魅力在于它无法篡改,你做出来的每一个分析结果,都可以被任何人验证,这比传统金融里的黑箱数据要透明得多,但透明不意味着简单,数据就在那里,能读懂它的人,才能抓到机会。
打开Dune,找一个你感兴趣的项目,Fork一条别人的查询,改几个参数,点运行,就这么开始,数据会告诉你答案。






