区块链最大的特点之一就是数据公开透明,然而普通用户想要自行分析链上数据仍然很难,好在有链上数据分析神器Dune.com提供了基础的数据服务。本文旨在提供完全零基础的Dune入门指南,让所有人都能把Dune用起来。
原文标题:Dune零基础入门指南
原文作者:gerace、huisu、zhu
原文来源:notion
目录
Dune支持链上数据的SQL查询、数据可视化、仪表盘搭建,还支持分享与团队协作。这些功能都是免费开放给所有用户的,用户保存的SQL及dashboard也都会公开在Dune网站中,也就是说你不仅可以自己查询,还可以看看别人在关注什么以及学习他人的分析方法。Dune最核心的功能是:
SQL查询数据:区块链上的数据都已被Dune获取并清洗,你只需要用简单的SQL语句就能查到想要的区块链数据。
查询结果可视化:通过SQL查询后结果会以表格的形式展示,但有时我们想要查看某个coin的价格变化趋势,表格的呈现方式不够清晰。Dune可以实现查询结果可视化,目前支持的可视化工具类型有:柱状图、面积图、散点图、连线表、饼图、计数器、表格。
搭建dashboard进行数据监控:当你需要查看多维度的变化趋势,比如说想同时查看某Token的价格以及交易用户数是如何变化的,单一查询结果就不太能满足你的需求了。此时你可以使用Dune的Dashboard功能,将多个查询结果可视化后组装成dashboard。
Dune由位创始人:Fredrik Haga, Mats Olsen创立,最初只想做出一个有用的工具,随着大家对加密货币的关注日益增长,Dune不仅成为了区块链领域的重要工具之一,还获得投资机构的青睐,目前已进行到B轮融资,估值10亿美金。
Dune的两位创始人原本是同事关系,且都很认可Web3的金融模式,平时也会写智能合约等参与web3建设。Web2时代获取信息的成本很高,大公司以及投资机构除了在季度or年度披露一些信息外基本无法获取其他数据,而Web3数据具有open to everyone的特点。但是在日常查询、使用数据时,他们发现Etherscan展示的数据基本围绕在单笔交易,Uniswap也是如此:数据复杂度较高、单次操作可获取的信息很有限,很难追踪到数据的变化趋势。基于此,他们最初的想法是搭建类似google analytics的仪表盘,商业模式是售卖成品dashboard, 他们希望实现用户只需要点击几次就能获得想要的数据。创始人相继辞职后决定开始做产品,并在初期经常飞往各地去见那些在做cool stuff的人。
Dune问世2周时创始人就飞去ETH Berlin进行宣讲,在3个月后获得了首位客户:Dharma. 超出他们预期的是:**原本要出售的产品是成品dashboard,而客户只想要他们清洗过的数据,搭建看板等分析的过程由客户自行完成。**创始人表示:你想买什么我们就卖什么。最终交易内容是Dune每月发送清洗过的ETH数据给客户,获得$600的报酬。这笔交易让创始人更有动力做好产品了,因为在当时的加密领域里几乎没什么付费服务。
收获第一位客户之后创始人开始寻求融资,但一直在被拒绝,投资人认为,1) 目前加密行业不大,可使用这个工具的数据源很少; 2) Web3的数据本来就是公开的,你只是在公开数据的基础上搭了个看板而已,从商业模式上好像没有什么盈利点。在经历50+次被拒绝、创始人都准备开始找其他工作的时候,终于遇到了币安,将Dune纳入了孵化项目。Fredrik Haga在blog中写道:“在连续7个月没收入后,收到的四千美元工资是让我最激动的一次。”
Dune的成功与刚刚过去的牛市息息相关,把Dune的融资历程与BTC的价格曲线相对照,牛市情绪对它的融资帮助极大:
Dune不仅是数据查询平台,社区建设也是非常重要的一部分。与用户建立连接,并通过自身功能让用户创作价值,最终不断吸引区块链数据分析爱好者共享知识、共同成长,同时也能不断提升产品自身的口碑。
“其实很长时间 Dune 是没有物质层面激励给到创作者的(有些项目方会有做 Dune 看板的诉求,项目方会给激励),在这种情况下社区建设做得很棒,这也是我认为 Dune 在社区建设上很牛逼的地方。” by @pandajackson42
在获得B轮融资后,Dune将加倍致力于实现加密数据的可访问性,并致力于为web3带来100万个Dune Wizards。(注:Dune Wizard是Dune对区块链分析师的称呼)
Dune接下来的计划主要有三点:
Dune平台的基础查询功能都是免费的,同时也有付费版本来支持有额外需求的用户。会员价格为$390 Per month Per user, 功能明细见下表:
Dune帮助你获取链上数据并生成数据看板的主要流程如下图。Dune完成了数据抓取、解析、标准化存储的部分,并且提供了自助的查询和可视化平台,而你需要使用SQL语言编写查询语句(query),利用你的查询结果生成数据图表(chart),然后把你生成的数据图表组合成数据看板(dashboard)。
对于链上数据(Public Blockchain),Dune的长远目标是支持所有的公共区块链数据,但是由于不同的链数据结构不同,处理新的链需要额外的时间。目前Dune主要支持两大生态:
对于第三方数据(Third Party Data),目前主要是分析必备的价格数据,根据不同市场的实时价格按照交易量权重得出的平均值,以美元计价。该数据由 coinpaprika 提供,详见prices文档。
按照数据来源和数据处理程度,Dune目前提供的数据表主要有以下五类:
官方文档:https://dune.com/docs/tables/
普通用户通常不需要使用Raw Tables,因为未经整理。普通用户最容易理解的就是Abstractions数据表,例如查询erc20.view_token_balances_latest,可以直接得到每一个钱包里的每一个erc20 token的最新余额数据。Dune会不断的增加这类方便使用的抽象表。关于有哪些抽象表以及表的生成逻辑、字段含义,可查阅官方文档。这类抽象表,在Dune提供的最新V2数据库中,升级成了Spellbook。
Dune V2 升级了数据查询引擎,让查询速度更快,并且还提供了更合理的数据表目录,尤其是支持同一主题下的跨链数据查询。由于V2刚上线不久,数据内容还在完善中,本文主要仍然基于Dune V1介绍核心功能,关于V2的详细解释参见V2文档。
Decoded Tables是数据表最核心的部分,Dune的核心价值就在于它们把链上数据进行了解析和标准化整理。如果最方便的Abstractions抽象表无法满足你的需求,你就需要进一步探索Decoded Tables。以下内容以Ethereum生态为例,讲解Dune的Decoded Tables。Dune通过调用智能合约的数据接口提取数据,然后把这些数据整理成为两大类:
在Ethereum,以及所有的EVM兼容链环境中,所有的token、dapp都是以智能合约的形式运行在链上,通过查询合约地址,你可以在etherscan上直观地看到每一个合约的接口内容。我们以uniswap为例:
1.在uniswap的官方文档中,我们可以看到uniswapV3包含多个智能合约如下:
2.我们复制"Quoter"这个合约的地址,在etherscan中查询,可看到所有接口:
3.我们发现其中一个接口叫做WETH9,相应的,在Dune中有一张数据表uniswap_v3.Quoter_call_WETH9, 它记录的就是这个接口的调用记录。
你会发现,Dune通过数据表命名的固定格式,帮助你快速定位到自己想查找的数据。这个格式的规律是:ProjectName.ContractName_call_FunctionName。所有的合约调用表,都会在表名中带有call标记。
对于这个示例来说,从字面意思上很容易可以推断出,这个接口记录的是WETH的报价。但并不是每个合约都能一眼看出用途,合约执行的函数也不会总是恰好跟接口一致。理解这些数据表最准确的信息还是需要详细查看合约代码(或者项目的官方文档提供了详细说明)。更多详情参见官方文档。
对于普通用户来说,很少需要用到Call tables, 因为调用合约时会登记该行为的日志记录,日志记录中的数据更加容易理解,并且也很完整。例如,在上文中提到的uniswapV3合约地址中,有一个"UniswapV3Factory",在etherscan中查询它的代码中有一段如下,开头定义了function名为createPool, 末尾记录了一个行为 emit PoolCreated。
执行这段代码会有两个标准行为,1. 调用函数 call function ,2. emit 产出的结果就是该事件的日志记录 event logs. 对应在Dune中,我们会找到两个数据表:
仔细对比观察etherscan上的code内容,和Dune上的event数据表,你会发现:
以上是关于事件表的基本逻辑解释,在实际录入数据时还会有一些复杂的细节处理,详情参见官方文档。
打开查询页面,在左上角首先需要选择数据库。图上的1-6选项,都是DuneV1数据库,7是V2数据库,还在测试状态中。
对于V1数据库,你需要先选择想查询的链,然后依靠搜索表名关键词找到你想要的数据表。所以理解2.2中的标准化表名命名规则很重要。
而V2 数据库对数据表做了更清晰的分组,更容易阅读。不过在decoded类别中的数据表同样遵循2.2中解释的标准化表名命名规则。
如果你已经很熟悉如何运用SQL进行数据查询,那么Dune提供的Query查询界面与主流产品非常一致。如果完全不懂SQL语言,如何能够在Dune上查到自己想要的数据呢?首先,在完全不理解SQL语言的情况之下,基本只能直接运行别人写好的sql语句,想要自己创建新的查询恐怕是不太可能的。但是,好在SQL是一门非常贴近自然语言的编程语言,花一点时间学会使用基础的SQL语言是完全可行的。
Dune V1使用postgreSQL,V2使用Databricks SQL。所有的SQL语言都是高度相似的,只是不同的数据库软件平台运用的语法规则有细微的差别,就好像英国英语和美国英语的差别一样,你学会任意一种SQL就有能力运用所有类型的SQL。
SQL查询的基本原理,是使用一段查询语句,从一个或多个源数据表,提取数据进行重新排列组合,并得到一张结果数据表。你查询的数据表可以有多个,但是你得到的结果数据表只有一个,就如我们的流程图中所示:
下文将以V1的postgreSQL为例简介基本原理。postgreSQL适用于查询关系型数据库(relational database)。如果你要同时查询多个数据表,那么这些数据表必然是存在某种联系,才能让数据整合在一起。
Sample 1 单表查询
我们在2.2示范过, uniswap V3的factory合约里,一条PoolCreated事件的记录,该事件的基本信息如下:
hash: 0xd8e3f5f4c49462ba320052c678bdc56751f1d30147a01007b5f110783b43e381
etherscan显示结果:https://etherscan.io/tx/0xd8e3f5f4c49462ba320052c678bdc56751f1d30147a01007b5f110783b43e381
我们通过以下这条SQL在Dune的事件表中找到这条记录(记得把hash前面的"0"改成"\"):
查询得出的结果如下,我们把这个表命名为 table1
这条数据表示,在“2021-07-29 10:25”,在uniswap V3创建了一个pool,token0, token1记录了组成这个pool的两个token。现在,我们还想知道,在创建这个pool的时刻,token0的价格多少?
Sample 2 多表查询
首先,我们把token0的地址放入价格表中,查询它是什么token,以及它在“2021-07-29 10:25”的价格。
查询得出结果如下,我们把这个表命名为 table2
如果我想要通过一次查询,同时得出创建pool的记录,并附上token0的价格。此时,在查询前,我只知道evt_tx_hash值,其余信息未知,我需要把table1 和 table2 关联起来同时查询。关联的条件是,table1的token0 = table2的contract_address, 并且,table1的evt_block_time = table2的minute。
于是我们得到下表,其中前三个字段来自table1,后两个字段来自table2。查看Query
以上是基本概念的简介,其它详细的SQL语法、用法,包括关于数据库和数据表的基础知识等,都可以在postgresql的官方文档中找到。通常普通用户不需要了解如何管理数据库、删除数据等内容,只需要了解如何查询,尤其是其中的query一节。
在界面上方输入池子的合约,可以看到池子的相关数据:交易量/交易费/无常损失/流动性挖矿净利率等,以usdc-weth池子为例:
usdc-weth交易池的情况,左图为池子的总锁仓量,右图为两个代币的价格。随着weth价格的下跌,池子锁仓量也下降。在六月份的时候锁仓量加速下降,说明有人赎回提供的usdc-weth代币对并且卖出weth,抛压得到缓解,weth暂时止跌。
左图为池子里usdc的数量,右图为weth的数量。6月之后,在weth横盘的期间,池子的锁仓量上涨了。图中显示池子中的weth数量越来越多,在市场上的流通量减少,能防止价格进一步下跌。
当前池子流动性挖矿的净利率,如果数值大于weth在链上其他投资的收益就可以决定为这个池子提供流动性。
在不同链上opensea的交易量/用户数/nft项目数量
图中数据为opensea在ethereum上的月交易量。六月份opensea在ethereum上的交易量大幅下降,市场进入熊市。
左图为opensea上nft项目在ethereum上的月销售量,右图为交易费用。六月份的时候交易费/销售量的大幅下降,说明在熊市期间大多数项目的单价下降,用户会购买更便宜的nft。
左图opensea在solana上的日交易量,右图为交易次数。交易量/交易次数的上涨说明solana上的nft价格是上涨的。
输入项目的合约地址,可以看到项目的基本数据:交易量/nft数量/地板价/mint价格/交易版税/持有人
单个nft出售的具体数据,点击buyer/seller前面的黄圈,可以查看此钱包持有的nft和erc20代币/mint过的nft/买卖nft的交易数据/在defi上的交易数据/花费的gas。点击token前面的小船,可以看见此nft在交易平台上的信息。TX是交易哈希。
该项目的平均获利额以及平均持有时间。
该项目持有者和BAYC持有者的重叠情况,重叠人数越多,价格上涨可能性就比较大。
查询价格一般用prices.usd这个表格
如果要查询的代币不在prices.usd表格里,则用dex.view_token_prices
使用dex.trades表格可以查看dex交易的相关数据:
查询不同dex的交易量
责编:Lynn