dDAO 在 Aragon 創建了一個 DAO,並進行了一些動作(分發代幣、投票等)。然後由於 Aragon 默認提供的面板的展示並不是特別友好所以考慮通過 Dune 來個性化製作一個面板,跟蹤一些想看到的數據。
$DDAO token 每次发放记录
$DDAO token holder 及排名
$DDAO 合約地址:0x5D8C3E43EBd84d63CfFD00e473ba3Fdb5920CDC1
本來想直接在 Dune 的 Polygon 分塊上直接搜索類似 “dDAO” 或者 “aragon” 的結果,使用現成的結果集,結果沒有找到。
隨後嘗試使用 polygon.logs 結果集,也沒有發現 dDAO 的合約地址的數據。嘗試查詢了文檔并在社區溝通,了解到需要在 Dune 上提交申請以及相關信息,Dune 才會對涉及的合約以及數據進行處理,形成單獨的數據集。(申請審核時間大概在 2-3 天以上。所以,雖然提交了申請,但本次考慮再嘗試其他方法來完成。)
最終,只能回到 traces、log、transactions 這幾張我理解的原子表,從海量數據里去實現面板展示。
常規套路,從鏈上記錄中去找規律,找信息。通過 tx 記錄,找到 log 頁中的信息(如下截圖),最後定位到發放 token 的方法。 Transfer (index_topic_1 address _from, index_topic_2 address _to, uint256 _amount)
根據參數說明,就可以得到:
智能合約地址:0x5d8c3e43ebd84d63cffd00e473ba3fdb5920cdc1
topic1: _from 發放 token 的地址
topic2: _to 接收 token 的錢包地址
data: _amount 發放 token 數量
通過合約地址以及調用方法,在 logs 表中嘗試查找數據進行驗證。通過比對發放數據,基本確認能匹配上了。唯一美中不足的是,相關數據都是 HEX 格式,最終成為可用的分析、展示數據前,還需要進行轉碼(Decode,這時候就體現出了 Dune 提供的針對合約的解碼數據集的優勢)。 至此,大致思路就確定了:通過合約地址、調用方法,在 logs 中抓取相關發送日誌,形成基礎數據,之後在基礎數據上進行各樣的展示。
考慮到要求還未完全確定,同時可能要產出多種形式的數據,而且操作基本都可以基於相同的數據集,所以在著手展示數據前,先形成一個視圖(view),包含:操作時間、合約地址、接收地址、token 量等解碼后的數據。
同時考慮到 tx 需要被成功執行,最終得到生成視圖的代碼如下:
dune_user_generated.ddao_token_v1
CREATE OR REPLACE view dune_user_generated.ddao_token_v1 as
select
logs.block_time as transfer_day
, replace(CONCAT('', substring(logs.topic3 from 13)), '\x', '0x') as transfer_receiver
, logs.tx_hash as tx_hash
, bytea2numeric(logs.data) / 1e18 as transfer_amount
from
polygon.logs logs, polygon.transactions txs
where
logs.tx_hash = txs.hash
and txs.success = 'true'
and logs.contract_address = '\x5d8c3e43ebd84d63cffd00e473ba3fdb5920cdc1' -- ddao token manager contract address
and logs.topic1 = '\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' -- transfer function hex
隨著視圖的完成,後續的事情就變得簡單很多,只需要考慮展示的內容和形式就好。
根據常規分析套路,并基於 Dune 提供的圖形展示方式,簡單的做出了幾個面板上的組件并展示:
Token 供應總量

Token 發放歷史(按天、按錢包)

Token 持有者分析

關於 Dune 的 Chart 組件
Dune 提供的 Chart 組件,不知道是我使用得不對,還是本身還需要改進,還有一些展示的不便,後面看看能不能解決。
我遇到的一些問題:
多重分組下, Line Chart 的展示。
Stacked Column Chart 中,對數坐標下,數據會覆蓋坐標軸。
dDao 的解碼數據集
準備結束小作文前,看了一下之前提的數據集的解碼申請,很驚喜地發現已經被通過并處理完了。那就順便一起提一下。
最後說幾句題外話,Dune 這個工具大概在一年前就已經了解到,并有一些淺淺的嘗試,由於比較像數據庫操作,加之當時沒有什麼使用場景,就被擱置了。這次是在 dDAO 里正好有需要,終於硬著頭皮重新再來嘗試了 Dune。通過這次面板的嘗試,部分了解了 Dune 的一些機制,一些處理的原理,嗯嗯,蠻不錯的。
