Dune Analytics 零基礎入門教學

Dune Analytics

作者:gm365.eth

Dune Analytics 號稱 “平民版Nansen”、“鏈上數據分析師神器”,為各路大神所追捧。然而神器在手,奈何找不到適合新手小白的說明書,我等只得望洋興嘆否?

非也!

本文作為一篇入門級的極簡教學,適合 Dune 的零基礎小白用戶,與大家一起掀開 Dune 女神的面紗。


Dune Analytics 是什麼?

Dune Analytics 作為一款鏈上數據研究分析的強大工具,經過 4 輪融資,目前估值已達 10億美元。

用戶通過類 SQL 的數據庫查詢語言,從 Dune 緩存的區塊鏈數據倉庫中檢索、篩選、提取、聚合,形成一個個 Query,再對查詢到的數據進行可視化,最終匯總而成一個個 Dashboard 面板。

閱讀更多:熊市是學習的好時機!10 個必備的加密研究工具

何謂數據倉庫?

區塊鏈本質上是一個去中心化的帳本,所有過往的交易轉帳、合約調用形成了一條條的交易記錄明細,包含交易時間、轉入、轉出地址、交易金額、調用訊息、合約事件、tx_hash 等數據。

Dune Analytics 將以上所有數據分門別類進行存儲形成數據倉庫,供有需要的人通過類 SQL語言來調用、查詢、分析(可謂功德無量)。

何謂 SQL?

SQL 即“結構化查詢語言”,專用於數據庫相關的查詢、管理。在 Dune 中,我們用 SQL 查詢語句來獲取所有想要的數據,構建成對應的“Query”。

何謂數據表?

每一個數據表(table)可以視作一個超大的 Excel 表格,按順序記錄了所有與之相關的數據。

Dune 提供了很多內置的知名協議專屬的”數據表dataset”。註冊登陸你的Dune 賬戶,點擊頂部的”New Query” 即可打開如下頁面: 左側即為內置數據表,右側是“查詢語句”和“查詢結果”

常用數據表

除了內置的數據表外,還有些常用的數據表,比如: 最常用的 ethereum.transactions,可以查詢所有的以太坊鏈上交易訊息,包括了普通轉帳和合約調用等訊息。

數據表裡有什麼?

不同數據表,提供的內容各有迥異。

以 "ethereum.transactions" 為例,表內提供了:

  • block_time 區塊時間
  • from 發起地址
  • to 轉入地址(或調用的合約地址)
  • value 轉帳金額,
  • data 附加數據(合約調用的 input data)

等諸多數據

transactions 數據表

SQL 查詢語句怎麼寫?

基本的SQL 查詢語句: SELECT * FROM X

  • select: 取什麼數據
  • from: 從哪裡取數據
  • where: 限制條件是什麼
  • order by: 根據什麼排序
  • limit: 限制取回的數據條數
SQL 查詢語句

Dune Analytics 教學:你的第一條查詢語句

打開 Dune 的”New Query”,貼上以下語句

select * from ethereum.transactions limit 5

點擊”Run” 稍等即可在”Query Results”看到查詢結果

語句中的 * 代表查詢所有字段,limit 5是為了限制數據取回的數量,如果不加這條限制,你就是在告訴 Dune 要取回以太坊鏈上的所有交易數據(耗時超長且無必要)

首條Dune 查詢語句

更複雜的查詢語句

現在讓我們來試試更複雜(也更有趣)的 Dune 查詢語句:查詢 V 神錢包的鏈上交易訊息

這次我們新增了 where "from" 限制條件,只篩選“V神”的錢包地址,order by語句限定排序條件,desc 表降序

select *
from ethereum.transactions
where "from" = '\x1Db3439a222C519ab44bb1144fC28167b4Fa6EE6'
order by "block_time" desc
limit 10

複製以上程式碼或 fork 後自己該參數運行dune.com/queries/724390

更複雜的查詢語句

更有用的查詢語句

現在,讓我們篩選一些“更有用”的訊息,比如:轉帳金額

select block_time as "date",
value/1e18 as "value" -- value 字段的值換算為 ETH 單位
from ethereum.transactions
where "from" = '\x1Db3439a222C519ab44bb1144fC28167b4Fa6EE6' -- 交易的發出地址為 V 神錢包
and value/1e18 > 0.1 -- 轉帳金額 > 0.1 ETH
order by "block_time" desc  -- 按照區塊時間倒敘排序

這次我們 select 選取兩個字段:block_timevalue

value的值,我們通過 value/1e18 這個計算公式,換算為 ETH 單位。

as關鍵詞為其取一個好聽的別名

第 5 行 and 關鍵詞指  where 下多個限定條件取交集

Query 連結:https://dune.com/queries/728779

更有用的查詢語句

Dune Analytics 教學:你的第一個可視化圖表

數據已有,可視化圖表呼之欲出,對於隨時間變動的數值,最普遍使用的圖表就是 bar chart (條形圖📊、柱狀圖)了

在前一步生成的查詢結果頂部點擊 “New visualization”,選擇 “Bar Chart”,看到系統已經自動幫我們把 X,Y軸都選好了。

如果在數據較多的情況下,則需要手動選擇 Y 軸數據

首個可視化圖表📈

閱讀更多:Nansen:2022 最佳加密投資分析工具介紹

Sum 函數求和

一個最普遍的數據統計需求就是:加總求和,我們對篩選到的數據,直接使用 sum 函數即可

  • sum(value/1e18) as "total"
select sum(value/1e18) as "total" -- 使用 sum 函數對 value 求和
from ethereum.transactions
where "from" = '\x1Db3439a222C519ab44bb1144fC28167b4Fa6EE6'

然後在可視化圖表區域選擇 Counter,修改 Title,就有瞭如圖的匯總數據:83.25 萬 ETH

sum 求和函數

計數 count

SUMAVGMAXMINCOUNT 統稱為聚合函數,用於將組中的行匯總為單個值。

前面提到的 sum 用於對數值求和,count 則用於統計查詢記錄的總數目。

比如我們統計下 V 神錢包總計對外發出交易的次數

  • select count(*)
select count(*)   -- count 函數用於計數
from ethereum.transactions
where "from" = '\x1Db3439a222C519ab44bb1144fC28167b4Fa6EE6' -- V神 對外發出交易的次數
count 計數

Dune Analytics 教學:你的第一個數據看板

保存前面每一個 Query 並取名,現在我們就來搭建你的首個 Dune Dashboard

在首頁點擊 “New Dashboard”,或直接在 Query 結果頁面點擊 “Add to dashboard”,輸入 Dashboard 名字即可

建議:首次取名選簡短的英文,這部分內容會被用在 url 上(只支持英文、數字且後期無法修改)。你可以首次取名並保存之後,再對其改名以顯示完成內容(現在可以中英文、emoji 表情混用了)

分類匯總 group by

另一個常見的數據統計需求:分類匯總,比如我們想知道 V 神每月的轉入、轉出 ETH 總額

Query 代碼的第1行中 date_trunc('month', block_time) 稱為截斷日期函數,用於將時間間隔截斷為指定的精度級別(這裡我們選取 month 統計每月數值,你還可以選hourminuteseconddayweekyear等時間間隔單位)

select date_trunc('month', block_time) as "Date",
sum(value/1e18) as "Value" -- 當月接收 ETH 求和

第 2 行中,我們要使用 sum 表示對當月 的ETH 轉帳金額進行求和

最後一行的 group by 1 即按第一個字段 "date" 進行分類匯總,如果是第二個字段,則為group by 2,以此類推

分類匯總

累計求和 Cumulative Sum

累計求和,在前一項數據基礎上,累加當前數據,不斷重複。

一般我們會先按日求和,再不斷累加匯總。比如統計某個協議有史以來所有充值到合約地址的ETH總額。

要實現“累計求和”,其Query 代碼稍微有些複雜。

with net as (
select day,
sum("total") as daily_sum 
from (
    select value/1e18 as "total", 
    date_trunc('day', "block_time") as day
    from ethereum."traces" 
    where "from" = '\x1Db3439a222C519ab44bb1144fC28167b4Fa6EE6' -- 從 V神钱錢包地址發出的交易
) as "total_amount"
group by day
)

select day, sum(sum("daily_sum")) over (order by day)
from net
group by day
order by day desc

面對這種情況,千萬不要氣餒。因為我們新人小白也有必殺技 :Fork 並修改關鍵參數

比如,我們直接 fork 下面這個 Query ,在其基礎之上,只需要修改第 8 行參數即可

累計求和

閱讀更多:Nansen:如何發現和跟蹤 NFT 巨鯨?

Fork 神技能

作為新人小白,我們一定要掌握的最重要的一門技能:fork 神技

站在前輩大神的肩膀之上,能讓我們光速入門。越過陡峭的學習曲線,Fork 大神的代碼與勞動成果,然後只需要簡單修改核心參數,即可實現同類功能,獲取心儀的數據(感恩大神與前輩的付出)

具體到 Dune上,我們在任一 Dune看板的圖表區域點擊左上角 Query 名字即可查看完整 SQL 查詢語句。Fork之,修改關鍵參數,然後點 Run 即可見證奇蹟

比如 oxBi 大神做好的一個叫 ”Total Holder by Day – ENS ” 的 Query,統計了ENS 代幣每日的總持幣人數。代碼有 67 行之長,語法複雜,艱深無比,我等小白唯有汪洋興嘆的份兒。

但,如果你只是想藉用下大神這個 Query 的功能,統計其他代幣的每日持幣人數,我們 Fork 後修改第 14 行代碼中 Token 地址即可搞定。

站在巨人肩膀之上,輕鬆無比。

ENS 每日持幣人數Query

Dune Analytics 零基礎實戰

零基礎入門的小白能否直接實戰?

當然!

這個@SyndicateDAO看板,所用到的基礎知識在前面全部有所涉及。事實上,這也是我近期學習並用 Dune 做的第一個數據 Dashboard。

在前面基礎知識鋪墊之上,另一個關鍵就在於找准協議所對應的合約地址,大家可以點開每一個 Query 查看具體的 SQL 代碼,你會發現實現這些鏈上數據統計功能並沒有太難。

辛迪加沙丘儀表板

總結

Dune 幫我們保存了珍貴的鏈上數據,我們要做的便是“各取所需,為我所用”。

大神們構建的 Query語句精妙絕倫,卻也繁複無比。我們作為小白,只要掌握了最基本的 SQL查詢語句,其實已經可以開啟神奇的鏈上數據分析師🧙‍♂️之旅了。

本文只能算作一個相當初級的 Dune 入門指南,無論是對 SQL 還是 Dune 的介紹,都有諸多遺漏。對於有心深入鏈上數據分析的同學而言,建議可以先從基礎的 SQL 入門教程開始,掌握基礎語法後,就可以選一個你喜歡的協議來嘗試製作你個人版本的 Dune 數據看板了。

比如前面提到的 Syndicate Dashboard,也是我個人嘗試的第一個看板。沒成想,竟然還被收錄到了第 29 期的官方 Dune Digest 中,屬實意外。

致謝

本文寫作過程中,參考了其他前輩與大神的諸多教程和文章。這裡尤其感謝大神 @Pro_0xBi 的三篇 Mirror 教學文章,敬請移步大神置頂推文獲取更多 Dune 秘籍。

備註

  1. Dune 已經將域名從dune.xyz 跳轉到dune.com
  2. Dune 於2022.2.2 完成最新一輪6942萬美元融資www.qianba.com/news/p-429265.html
  3. Dune 實際上使用的是一種叫PostgreSQL 的查詢語言,其兼容大部分SQL 語句,普通用戶無須做更進一步的區分
  4. 實際上, Dune 已經將其改名為dataset,稱為數據集更為準確,但其本質含義並未發生變化
  5. 以太坊的單位默認為wei, 1個ETH 相當於10的18次方wei,所以需要把原始單位除以10的18次方,計算後的結果即為常用的ETH 單位

參考文獻

— 精選交易所文章 —

從 0 到 1 購買加密貨幣懶人包:加密貨幣新手入門大百科

交易所特色優惠
Max可以使用銀行台幣出入金6 個月內 20% 手續費折扣,質押平台幣 MAX 最高可享 60% 折扣
Binance全球最大交易所,幣種與理財產品齊全終生 20% 手續費折扣
FTX具有豐富的現貨與衍生品產品終生 5%手續費折扣
Bybit豐富的衍生品交易應邀成為 Bybit 用戶,即可獲得 $20 體驗金。還有專屬獎勵 價值高達 $3,230!
Kucoin較多新上線的潛力新幣種終生 20% 手續費折扣
AAX年化報酬率為目前全交易所最高註冊即享 110 USDT,合約贈金和最高 50USDT 新手獎勵

本文不構成投資建議,虛擬貨幣波動大請謹慎小心

掌握虛擬貨幣、區塊鏈大小事

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。