# 關於在 Dune 平台上進行 dDAO DashBoard 的一些開發.md

By [嗷嗷#8854](https://paragraph.com/@shenyc82) · 2022-11-13

---

關於在 Dune 平台上進行 dDAO DashBoard 的一些開發
-----------------------------------

###### tags: `Tools`, `Dune`

背景
--

dDAO 在 Aragon 創建了一個 DAO，並進行了一些動作（分發代幣、投票等）。然後由於 Aragon 默認提供的面板的展示並不是特別友好所以考慮通過 [Dune](https://dune.xyz/) 來個性化製作一個面板，跟蹤一些想看到的數據。

### 想看到的數據

*   $DDAO token 每次发放记录
    
*   $DDAO token holder 及排名
    

### dDao 以及本次面板開發需要用到的一些信息

[dDAO 鏈接](https://client.aragon.org/#/ddao/0x950431cb41140814577b501386e8c0a3d5f532b6/) [代幣分發記錄](https://polygonscan.com/token/0x5d8c3e43ebd84d63cffd00e473ba3fdb5920cdc1)

$DDAO 合約地址：0x5D8C3E43EBd84d63CfFD00e473ba3Fdb5920CDC1

一些思路和備忘
-------

### 關於 Dune 上的數據源

本來想直接在 Dune 的 Polygon 分塊上直接搜索類似 “dDAO” 或者 “aragon” 的結果，使用現成的結果集，結果沒有找到。

隨後嘗試使用 polygon.logs 結果集，也沒有發現 dDAO 的合約地址的數據。嘗試查詢了文檔并在社區溝通，了解到需要在 Dune 上提交申請以及相關信息，Dune 才會對涉及的合約以及數據進行處理，形成單獨的數據集。（申請審核時間大概在 2-3 天以上。所以，雖然提交了申請，但本次考慮再嘗試其他方法來完成。）

最終，只能回到 traces、log、transactions 這幾張我理解的原子表，從海量數據里去實現面板展示。

### 接下來的一些分析

#### 先分析鏈上 tx 信息

常規套路，從鏈上記錄中去找規律，找信息。通過 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 數量
    

#### 到 Dune 的數據集里對照著找關係

通過合約地址以及調用方法，在 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 供應總量
    

![](https://storage.googleapis.com/papyrus_images/3061d56cd9ad54e95ecbed39872812cb60fa6d7493fd9d45d39dcabcc2d5482d.png)

*   Token 發放歷史（按天、按錢包）
    

![](https://storage.googleapis.com/papyrus_images/51d35013b50f898ec6d42791a7a56af4ac36a0c6608904599d9a4bf5021fb300.png)

*   Token 持有者分析
    

![](https://storage.googleapis.com/papyrus_images/6bd389bfa70c4b924ac2ffcb5fc486eda46642ab9ce0bb0ebae49e85f885074e.png)

一些後續和總結
-------

**關於 Dune 的 Chart 組件**

Dune 提供的 Chart 組件，不知道是我使用得不對，還是本身還需要改進，還有一些展示的不便，後面看看能不能解決。

> 我遇到的一些問題：
> 
> *   多重分組下， Line Chart 的展示。
>     
> *   Stacked Column Chart 中，對數坐標下，數據會覆蓋坐標軸。
>     

**dDao 的解碼數據集**

準備結束小作文前，看了一下之前提的數據集的解碼申請，很驚喜地發現已經被通過并處理完了。那就順便一起提一下。

最後說幾句題外話，Dune 這個工具大概在一年前就已經了解到，并有一些淺淺的嘗試，由於比較像數據庫操作，加之當時沒有什麼使用場景，就被擱置了。這次是在 dDAO 里正好有需要，終於硬著頭皮重新再來嘗試了 Dune。通過這次面板的嘗試，部分了解了 Dune 的一些機制，一些處理的原理，嗯嗯，蠻不錯的。

---

*Originally published on [嗷嗷#8854](https://paragraph.com/@shenyc82/dune-ddao-dashboard-md)*
