遙想去年 5 月 DeFi 爆紅後,Etheruem 上的 gas fee 整個噴起來,也出現了一些有趣的分析工具,其中 fee.wtf 這個網站讓我們可以快速連到自己的 Ethereum 錢包地址,接著它會去爬 Etherscan 上的 transaction raw data, 再轉化成可視化 UI,讓大家看看自己到底貢獻了多少 gas fee 在 transactions 上面。以下附上我的結果。
這個網站的製作目的滿明確的,就是讓大家盡情分享出來,有些人可以以此炫耀財力(e.g. 某些好野人光是花掉的 gas fee 就是其他人一生的積蓄之類的),間接證明自己是 DeFi 大佬。而從這張圖看起來,很顯然我是一個 DeFi 廢物…但我今天想說的不是我有多廢,而是我認為這個網站更有趣的是它背後滿滿的 Open data,而這也是我認為很多對區塊鏈有興趣的新手常常忽略的一部分。
事實上剛開始接觸區塊鏈的人,第一步比較容易是接觸到應用層面的互動,比如入金到某交易所開始做比特幣交易 ,或是 Ethereum 上某 Marketplace 上面的某款 NFT 爆紅,想要賺 $$$,開始跨越第一步,去下載託管/非託管錢包,把 ETH 轉去買 NFT,然後等 NFT 漲再賣掉…其實做到這些應用層面的事,就已經很不錯了,但過程中其實有更多值得我們學習的地方:
舉例,當我把我的 ETH 從 A 地址打到 B 地址,去購買 NFT,這個過程的各種數據都是在 Ethereum 鏈上公開的,包含我從 A 地址到底成功打到 B 地址沒?我花了多久時間打過去?我購買這個 NFT 花了多少 gas fee?都能「直接」在 Etherscan 找到。而這也是為什麼新手剛做第一筆 ETH 交易時,可能會問前輩「你可以幫我看看我交易成功沒嗎?」、「為什麼交易打不出去?」等問題,前輩們的起手式就是叫你把錢包地址丟到 Etherscan 上或把 Etherscan 上的 Transaction Hash 傳給他/她,直接從鏈上幫你看數據紀錄。
而在ㄧ般金融軟體上,就絕不可能像區塊鏈交易這樣,任何人都能去鏈上找數據了。舉例來說,你如果想去即時性地撈你在某金融 App 上過去買過的商品細節、過去做了什麼匯兌 & 當時換匯價格是多少, 通常需要這些軟體開放各別 API 讓你去抓取數據,或是要幫你做好 UI,讓你間接搜尋使用。
在區塊鏈上,交易數據則是原生就能直接撈到,作為用戶,可以很有效率地拿到各種自己想要的數據,重點是不用跟第三方索取。我個人認為這是區塊鏈另外一個很棒的學習角度 — 滿滿的 Open Data。
Dune Analytics 提供 SQL Query 鏈上數據

回到 fee.wtf 這個網站,你可能會想,我不是說一般人都能個別去鏈上查找資料嗎?那為什麼會有人做這個網站讓大家輸入地址,才能清楚呈現 UI,讓大家看到自己過去花費的 gas fee?事實上,區塊鏈瀏覽器上的鏈上數據在一般情況下,都是未經處理過的 raw data,可能會包含所謂的 encoded data,光是要 decode 就很麻煩了,或是像 token 進位算法等問題,導致一般人很難直接使用。所以才會有人熱心幫大家把鏈上數據整理過,方便大家直接輸入地址就能看到簡單易懂的 gas fee 使用數據。
而現在,其實有強大的工具可以幫助「個人」分析鏈上數據了。Dune Analytics 這間公司把公鏈數據解析成 PostgreSQL 數據庫,一般使用者能透過他們內建的 Web IDE 輕鬆用 SQL 去 query 數據,做成整齊的 table,最後還能整合成漂亮的數據儀表板。目前他們只有接 Etheruem 和 Layer 2 Polygon、Optimism 和 xDai,據官方說法未來預計會接更多的公鏈,讓大家可以全面地做鏈上分析。接下來我們一起來看看如何使用。
如何在 Dune Analytics 使用 SQL Query 功能

進去 Dune Analytics 網站後,可以在右上方點選開啟一個新的 Query,在左方可以先選擇鏈,在這邊我選了 Ethereum,並可以在 dataset 地方搜尋 Ethereum. ,就可以搜尋到現有可使用的 table。
用 SQL 打撈自己貢獻過的 Gas Fee & 製作成 UI Dashboard


講了這麼多,接下來我會以 Ethereum 舉例,試試看在 Dune Analytics 用 SQL 撈出我自己在 Ethereum 上貢獻過的 Gas Fee,並製作成漂亮的 table & Dashboard,呈現出與我 fees.wtf 類似的 UI 圖。
步驟一、算出我平均每筆 transaction 花了多少 gas fee?

SQL 的部分,我選擇 ethereum.transcations table ,在 {{parameter}}(這邊指的是我的ETH 地址) 找到對應的數據。gas_price 之所以用 /10 ^9 是因為原本 default 的 gas_price 並不是直接表示 gwei (gas fee 的單位),ETH 和 gwei 的轉換是 10⁹ 。
接著去計算 gas_price 的平均值,得出來的 query results 是 49.403285912525



接著把 query results 做可視化,點選 ”New visualization”。在這裡因為只算出了一個 gas price 的平均值,所以可以用 “Counter” 這個類型來呈現圖表。圖表可以顯示要有多少小數點,在這邊我在 Decimals 的地方輸入 3,所以最後會呈現 49.403。
另外補充一下 parameter 的使用方法,如果每一個 table 要 query 數據時,where from 的地址部分常常重複,Dune Analytics 提供我們快速創 parameter 的方式,之後就不用再重複輸入地址了。

步驟二、算出我總共花了等值多少 USD 的 gas fee?

SQL 的地方,增加一個 eth_paid_for_tx,這邊的算法是把 gas_price * gas_used 並再做進位的轉換,意思每一次 transaction 當前的 gas fee 費用 * 使用了多少 gas。

接著用 date_trunc 去加總 eth_paid_for_tx * price (price 在這邊指 USD),算出累進的等值 USD 的 gas fee 花費。

最後一樣會得到一組 query results,在這邊以 desc(下降)數據排序日期和時間,與相對應的累進 gas fee 花費(USD)。


圖表呈現方式,可以使用 Counter 來呈現最後計算出來累計花費的 USD ,也可以以 Line Chart 的方式呈現累計時的成長曲線。
步驟三、算出有多少次成功的 Transaction?
在 Ethereum 上,有時即便你已經付出了 gas fee 去做交易,也有可能交易失敗,但付出的 gas fee 是不能收回的,只能算在個人損失,而這就是為什麼會需要在鏈上查找 Transaction 成功與失敗的次數。
在這裡,success 表示 transaction 成功的次數。因為我用 where success = ‘false’ 計算出來的結果是 0,所以我就不做圖表顯示了。而直接呈現 success=’true’ 的情況下有多少次,最後的結果是 40。




因為最後只顯示 transation 總共成功次數,所以我就使用 Counter 作為圖表呈現方式。
步驟四、拉出一個漂亮的數據儀表板

在 Dune Analytics 右上方點擊 “My Creations”,接著到 Dashboard 的地方新增一個 Dashboard,並在右上方點擊“Edit”,再點擊”Add visualization” 就能把剛剛做的 table 都匯入進來。
匯入進 Dashboard 後,強大的地方是每一個 Table 的大小都可以再縮放,可以輕鬆排出一個漂亮的版面。
完成品就是這樣!比 fees.wtf 的 UI 呈現更漂亮且詳細!有興趣可以試試:)
Dune Analytics 上提供的鏈上數據 table 種類

最後來介紹一下 Dune Analytics 上提供的鏈上數據 table,包含了5 種 ,我這邊會快速地講過,想要了解更詳細內容,可以看官方的教學 YouTube。
(1 Raw Data Table
在 Dune Analytics 可以用 SQL 找到鏈上 raw data ,以 Ethereum 而言,能使用 Ethereum.logs、Ethereum.traces 等 table。在這邊選擇了 ethereum.logs table,並去找每隔 5 分鐘最新的 log, 並將 table 限縮為 query 100 筆。而 raw data 一般可讀性很差。以這個例子而言,log 爬出來的 topic1、topic2 代表什麼?目前是看不太懂的,需要再回過頭把這些 tx hash 貼回去 Etherescan 才能看到更詳細資料。
(2 Decoded Data Table
而 decoded data 以智能合約而言,會因應 Event 的操作類型而有多個 table。舉例來說,在這裡是選擇了 AAVE Lending Pool Borrow Event 的 Table,用 Event Tx Hash 能找到該類型 Event 的地址、總量以及借貸率等,而其他類型的 Event 則會有另一個 Table。
其餘可以參考的 decoded data table 的例子包含:
- superrare.”SuperRare_v2_evt_Transfer”
- Uniswap_v2.”pair_evt_swap”
- uniswap_v2.”Pair_evt_Sync”
- aave.”LendingPool_evt_Borrow”
(3 Token standard Table
而 Token standard tables 指的是把 erc20 token 標準的合約集中在一張 table 中,而不用查詢每個 erc20 代幣本身的合約,數據都集中在一個地方。
另外常見的 token 標準包含 ERC721、ERC 1155(通常是拿來作為 NFT 的標準)。
(4 Prepared Data Table

Prepared Data 則是由 Dune Analytics 團隊將多個項目或多個智能合約之間的數據去做標準化,並作成儀表板。舉例來說他們整合了去中心化交易所的各種數據,詳情可以參考這個例子:Dex.trades -> Dashboard -> Query。
以這個 Dex.trades dashboard table 例子而言,概念類似是把 Ethreum raw data 中多個 table 集結成一個標準化的 dex trades table。
(5 Dex Price Table
Dex Price Table 可以使用 dex.trades table 中的 dex.view_token_prices ,它是從 dex.trades table 動態計算的數據。
總結
如果你/妳對區塊鏈有興趣,或是剛剛踏入這個領域,我個人認為除了快速體驗各種區塊鏈上的 DApps 或應用,其實還有一個更棒的學習角度 — 可以試著使用鏈上的 Open Data 做分析,這些都是免費、無須申請,就能直接使用的數據。
而透過 Dune Analytics 這種整合了不同鏈上數據類型的 table,讓我們可以透過 SQL 輕鬆寫出漂亮 table 與報表,更可以幫助我們快速了解鏈上的數據,不用再像以前一樣為了 raw data 太難看得懂而傷腦筋。