從 Dune Analysis 分析 The Space 鏈上數據
很久没有在 Matters 發文了,這次看到 TheSpace.Game 的上線,忽然想起可以給它做一點鏈上數據的分析。
緣起
與 Matters 之前發布的 Traveloggers / Logbook 等单一合約的 NFT 項目不同的是, TheSpace 是 Matters 發行的首個多合約大型項目,項目方網站已給出其所用到的各個合約地址 https://wiki.thespace.game/addresses 每個地址都是 link 到 Polygonscan 上可以直接查看,這個固然方便,但要統計一些長遠一點的指標,比如要問 「自上線以来有多少人參与了這個 像素游戲?」 靠 Polygonscan 上去一個一個數地址嗎? 顯然是不可靠 (not reliable)、也不是可擴展的 ( not scalable )
近一二年来,隨着很多鏈上項目變得越来越复雜,功能越完善,或曰變得越来越精細化,無可避免的就是 合約代碼量的增長,而很多時候已超出 Ethereum 上單個 Block 所能承載的極限,這時如果繼續用單合約則根本無法 部署成功,必須要對合約以功能模塊進行划分而分開 作為子合約部屬,并且也帶来合約可升級等等額外好處。 TheSpace 的多合約部屬也看起来是在走向 精細化 合約之路。
從單個 合約看 Polygon 已經够复雜了,多合約地址給統計工作進一步增加了難度。
試用 Dune.com Analysis 工具分析
所幸的是進一二年来, Blockchain 上的各層級的工具已經日趨完善,包括 Infrastructure 層級的鏈上分析,你能想像到的需求,只要需求有够大,就必然有人尝試去解决。
在分析領域,要問什么是最方便又靈活的做統計分析? 當然首推 SQL 了
其中一家 名為 Dune Analysis 的初創公司就是着眼于這個 鏈上數據的分析 需求,而诞生于 2020 年,于 挪威首都 Oslo。并且它成立三年以来,每年都從資本市場能拿到大量融資,尤其是 2022/2月份這最近的一次是 B輪融資 6,900萬美元 (累計近 8千萬),尤为耀眼,估值也直接晋級 Unicorn 俱樂部。 有兴趣可以直接去 Crunchbase 查看,從 blog 看起来至少在 2022/3 月份 公司人數 還停留在僅 16 人!
Oslo, Oslo, Norway; 11-50; Series B total funded amount $79.4M;
latest round on Feb 2, 2022 ; Series B - Dune Analytics ; 3 ; $69.4M ; Coatue;
Dune 平台對各 Blockchain 支持現狀
- Dune 剛起家時是以 Postgresql 導入 Ethereum Mainnet 鏈上為開始,而后的發展中才逐步擴充 Poygon, 幣安鏈、Sonala 等 其它鏈的數據
- Postgresql 是平價版數據庫好工具,既開源也免費使用,它同時也是一個通用型的 關系數據庫,是 OLTP (Online Transactional Processing), 指的是 它的設計是平衡了 查詢 (SELECT) 和 变更 ( INSERT, UPDATE, DELETE ) 之間的各類業務需求; 但當查循的數據量来到海量級時,指每日新增量過 millions 接進 or 達到 billiions 量級時,Postgresql就會變得緩慢
- Dune 自 2022 首次發布 V2 Engine, 底層是 Databricks 的 基于 ApacheSpark 項目做出来的 SparkSQL, 這個才是分析型的數據庫 OLAP (Online Analytical Processing), 特點是對分析型任務 (SELECT) 做優化,據說 V2 Engine 提升效能 10 倍以上!
V2 Engine 首個應用就是 Sonala 鏈,之后在逐步導入 Ethereum 鏈的數據,暂時還没有 Polygon 鏈 - 對于 Ethereum / Polygon 鏈, Dune 首先做的是導入原始交易表 (ethereum.* polygon.*) 因為在 原始交易表 polygon.transactions 可以查詢到的 input data 部分都是 合約特定的 data, 所以 polygon.transactions 并不方便查詢合約特定的信息。
所以除了 原始交易表以外, Dune再在其上加上了若干抽象層。抽象層的第二級就是 各合約的項目方可以向 Dune 提交 合約地址,待 Dune 分析合約上的函式,(需要几天)批准之后,就會生成 decoded tables - 在 decoded tables 再往上一層, Dune 還可以把 類似目的的合約進行分類再規并,merge 成為單個 dex.trades 這樣的 tables 可以對 Uniswap, Sushiswap, 等等各 DEX 交易所的數據合并到一處,進一步提升分析效率
- 還有另一些非鏈上數據,也被 Dune 導入: 比如 ETH/USD 的比價,其形成原理是 各 中心化交易所里的 供需需求,這個 比價 本身不来自鏈上,但對鏈生態的價值分析至关重要, Dune 也都全都收录。
- 最后一點是 各項數據的 Delay 分别有多少? Dune 公司的技朮本質是 Data Engineering, 只要談到 Data Engineering / ETL / Data Pipeline 這些名詞,繞不開的就是離 Real-time 之間差多少 Delay? 在 資料工程學的最大難點就是 真正的 Real-time 是不可能做到的, Reality is up to 3 minutes delay, or 3 hours delay, or 3 days delay? 離 Real-time 越近則需要花的工程代價越大,當前 Dune Docs 中给出的答复是 up to 3 hours delay。 但从上述抽象層數據表的建立過程可知,越往上層就一定會 delay 越多,所以做查詢分析時,如接近用上底層的原始表,則 delay越小,越可能接近 Real-time
Dune 分析實作
1) Chart1: 有多少人已参与到了 TheSpace,多少帳户,多少筆交易?
這個問題不涉及 TheSpace 的合約内信息,可以从 polygon.transanctions 直接查詢
使用 Dune 首先需要申請一個 Dune帳號,使用郵箱/密碼即可創建,此處不赘述。
有了 Dune帳號登录之后,可以點 New Query 新建一個查詢,在左側欄選擇 ( 3. Polygon ),然后底下一欄可以輸入 polygon. 查詢有哪些 data tables 可用,以及每 table 有哪些 columns 可用于查循。
這里可以看到 最关鍵的几項: from 是源帳號, to 是 目的帳號,還有 block number、交易時間等等。 如果第一步要查 交易數量,對應的 SQL 就是 COUNT(...),比如
SELECT COUNT(*) FROM polygon.transactions
能給出所有 polygon 鏈上自誕生以来所有交易數
要查詢與 TheSpace 協議相关的話,需要的就是 對 "to" 帳號進行過慮,比如
SELECT COUNT(*) FROM polygon.transactions WHERE "to" = '\x264808855b0a6a5a318d238c6ee9f299179f27fc'
則給出 所有 TheSpace Token 相關的記录条數
再進一步,如果要查出有多少不重复的 "from" 帳户數,對應的 SQL 就是 COUNT(DISTINCT ...)
對應的整個查詢就是:
SELECT COUNT(DISTINCT "from") FROM polygon."transactions" WHERE "to" = '\x264808855b0a6a5a318d238c6ee9f299179f27fc'
得出結論是 669。
2) Chart2: 有多少人領了 $Space 幣? 領了多少 $Space幣? ( from the initial airdrop )
上一步查到的 669 個帳户實際上是對各種原因得到 $Space 幣而直接与 TheSpace Token 合約直接交互的,包括 transfer 接收到 $Space 幣的,還包括僅僅在 DEX 交易過的,如果想要進一步查詢有哪些人是從 airdrop 途徑得来的,可以從 decoded tables 上查詢,這一點我已經提交了 TheSpace 几個 contract 地址 并且 Dune 已生成了 thespace.* 這里面包含了很多 TheSpace 層面的事件表,所以從事件表里能查到 領幣方面更全面的數據:
SELECT COUNT(*) FROM thespace."MerkleDistributor_evt_Claimed"
得到答案是 1,349 。所以看起来虽然項目方提到给 5千多帳號准备了空投,但實際領幣的只有 1,349 。
這一步還可以順便做 Visual Board, 就是點 「New visualization」里面有 折線圖,柱狀圖,Pie狀圖 等等,在這一步還僅有 count 數量的分析,所以就選 Counter 好了,呈現為這樣
3) Chart3: 每天有多少人在 TheSpace 上作畫? 有多少像素已被画過了?
先說答案,在 https://dune.com/queries/890566/1556569 所用 SQL 還有點長,所以這里就不复制全部了,有兴趣者可以自己去點開看 ( 提示: 使用 thespace."TheSpaceRegistry_evt_Color" 事件 table )
這里只 Share 建好的 Visual Chart, 可以看到截止 6/9 日(UTC時間),有 168+5 accounts 在作畫,如果你再點開 Query results 那一Tab,還可以看到每日具體數字,還有每日累計畫過的像素數量,截止現在 (6/9 UTC) 有 18,933 像素被畫過,包括被争奪過,這麼看起来離 全圖100萬像素被畫滿還距離有點遠,現在還不到 2%
小結,以及 Dune 的 Share Board
上述 Visual Charts 還每個停留在 單個 Question 階段,每個 Questions 的 Charts 可以單獨 Share, 還可以建立 Board 来包含多個 Charts 来更为集中展示。
https://dune.com/bluebasketbooks/thespace-dashboard
這里是我在建的 TheSpace Board,里面還在持續更新中。 为了避免单篇太長,由下一篇再續寫。 大家也可以提問看看,還有什么 TheSpace 數據是你想知道的?
Like my work? Don't forget to support and clap, let me know that you are with me on the road of creation. Keep this enthusiasm together!
- Author
- More