作者:gm365.eth
Dune Analytics 號稱 “平民版Nansen”、“鏈上數據分析師神器”,為各路大神所追捧。然而神器在手,奈何找不到適合新手小白的說明書,我等只得望洋興嘆否?
非也!
本文作為一篇入門級的極簡教學,適合 Dune 的零基礎小白用戶,與大家一起掀開 Dune 女神的面紗。
Dune Analytics 是什麼?
Dune Analytics 作為一款鏈上數據研究分析的強大工具,經過 4 輪融資,目前估值已達 10億美元。
用戶通過類 SQL 的數據庫查詢語言,從 Dune 緩存的區塊鏈數據倉庫中檢索、篩選、提取、聚合,形成一個個 Query,再對查詢到的數據進行可視化,最終匯總而成一個個 Dashboard 面板。
何謂數據倉庫?
區塊鏈本質上是一個去中心化的帳本,所有過往的交易轉帳、合約調用形成了一條條的交易記錄明細,包含交易時間、轉入、轉出地址、交易金額、調用訊息、合約事件、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)
等諸多數據
SQL 查詢語句怎麼寫?
基本的SQL 查詢語句: SELECT * FROM X
select
: 取什麼數據from
: 從哪裡取數據where
: 限制條件是什麼order by
: 根據什麼排序limit
: 限制取回的數據條數
Dune Analytics 教學:你的第一條查詢語句
打開 Dune 的”New Query”,貼上以下語句
select * from ethereum.transactions limit 5
點擊”Run” 稍等即可在”Query Results”看到查詢結果
語句中的 *
代表查詢所有字段,limit
5
是為了限制數據取回的數量,如果不加這條限制,你就是在告訴 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_time
和 value
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
軸數據
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
計數 count
SUM
、AVG
、MAX
、MIN
、COUNT
統稱為聚合函數,用於將組中的行匯總為單個值。
前面提到的 sum
用於對數值求和,count
則用於統計查詢記錄的總數目。
比如我們統計下 V 神錢包總計對外發出交易的次數
select count(*)
select count(*) -- count 函數用於計數 from ethereum.transactions where "from" = '\x1Db3439a222C519ab44bb1144fC28167b4Fa6EE6' -- V神 對外發出交易的次數
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
統計每月數值,你還可以選hour
、minute
、second
、day
、week
、year
等時間間隔單位)
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 行參數即可
Fork 神技能
作為新人小白,我們一定要掌握的最重要的一門技能:fork 神技
站在前輩大神的肩膀之上,能讓我們光速入門。越過陡峭的學習曲線,Fork 大神的代碼與勞動成果,然後只需要簡單修改核心參數,即可實現同類功能,獲取心儀的數據(感恩大神與前輩的付出)
具體到 Dune上,我們在任一 Dune看板的圖表區域點擊左上角 Query
名字即可查看完整 SQL
查詢語句。Fork之,修改關鍵參數,然後點 Run
即可見證奇蹟
比如 oxBi 大神做好的一個叫 ”Total Holder by Day – ENS ” 的 Query,統計了ENS 代幣每日的總持幣人數。代碼有 67 行之長,語法複雜,艱深無比,我等小白唯有汪洋興嘆的份兒。
但,如果你只是想藉用下大神這個 Query 的功能,統計其他代幣的每日持幣人數,我們 Fork 後修改第 14 行代碼中 Token 地址即可搞定。
站在巨人肩膀之上,輕鬆無比。
Dune Analytics 零基礎實戰
零基礎入門的小白能否直接實戰?
當然!
這個@SyndicateDAO看板,所用到的基礎知識在前面全部有所涉及。事實上,這也是我近期學習並用 Dune 做的第一個數據 Dashboard。
在前面基礎知識鋪墊之上,另一個關鍵就在於找准協議所對應的合約地址,大家可以點開每一個 Query
查看具體的 SQL
代碼,你會發現實現這些鏈上數據統計功能並沒有太難。
總結
Dune 幫我們保存了珍貴的鏈上數據,我們要做的便是“各取所需,為我所用”。
大神們構建的 Query語句精妙絕倫,卻也繁複無比。我們作為小白,只要掌握了最基本的 SQL
查詢語句,其實已經可以開啟神奇的鏈上數據分析師🧙♂️之旅了。
本文只能算作一個相當初級的 Dune 入門指南,無論是對 SQL
還是 Dune 的介紹,都有諸多遺漏。對於有心深入鏈上數據分析的同學而言,建議可以先從基礎的 SQL
入門教程開始,掌握基礎語法後,就可以選一個你喜歡的協議來嘗試製作你個人版本的 Dune 數據看板了。
比如前面提到的 Syndicate Dashboard,也是我個人嘗試的第一個看板。沒成想,竟然還被收錄到了第 29 期的官方 Dune Digest 中,屬實意外。
致謝
本文寫作過程中,參考了其他前輩與大神的諸多教程和文章。這裡尤其感謝大神 @Pro_0xBi 的三篇 Mirror 教學文章,敬請移步大神置頂推文獲取更多 Dune 秘籍。
備註
- Dune 已經將域名從dune.xyz 跳轉到dune.com
- Dune 於2022.2.2 完成最新一輪6942萬美元融資www.qianba.com/news/p-429265.html
- Dune 實際上使用的是一種叫PostgreSQL 的查詢語言,其兼容大部分SQL 語句,普通用戶無須做更進一步的區分
- 實際上, Dune 已經將其改名為dataset,稱為數據集更為準確,但其本質含義並未發生變化
- 以太坊的單位默認為wei, 1個ETH 相當於10的18次方wei,所以需要把原始單位除以10的18次方,計算後的結果即為常用的ETH 單位
參考文獻
— 精選交易所文章 —
從 0 到 1 購買加密貨幣懶人包:加密貨幣新手入門大百科
交易所 | 特色 | 優惠 |
Max | 可以使用銀行台幣出入金 | 6 個月內 20% 手續費折扣,質押平台幣 MAX 最高可享 60% 折扣 |
Binance | 全球最大交易所,幣種與理財產品齊全 | 終生 20% 手續費折扣 |
Bybit | 豐富的衍生品交易 | 應邀成為 Bybit 用戶,即可獲得 $20 體驗金。還有專屬獎勵 價值高達 $3,230! |
Kucoin | 較多新上線的潛力新幣種 | 終生 20% 手續費折扣 |