Revision history and IPFS entry, back to latest
zzzyx
IPFS What is this

Content Hash

從 Dune Analysis 分析 The Space 鏈上數據

zzzyx
·
·
要問 「自上線以来有多少人參与了這個 像素游戲?」 靠 Polygonscan 上去一個一個數地址嗎?

很久没有在 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 支持現狀

由于 Matters 編輯器不支持表格,這里僅以 Dropbox 上寫的原文截圖示意
  1. Dune 剛起家時是以 Postgresql 導入 Ethereum Mainnet 鏈上為開始,而后的發展中才逐步擴充 Poygon, 幣安鏈、Sonala 等 其它鏈的數據
  2. Postgresql 是平價版數據庫好工具,既開源也免費使用,它同時也是一個通用型的 關系數據庫,是 OLTP (Online Transactional Processing), 指的是 它的設計是平衡了 查詢 (SELECT) 和 变更 ( INSERT, UPDATE, DELETE ) 之間的各類業務需求; 但當查循的數據量来到海量級時,指每日新增量過 millions 接進 or 達到 billiions 量級時,Postgresql就會變得緩慢
  3. Dune 自 2022 首次發布 V2 Engine, 底層是 Databricks 的 基于 ApacheSpark 項目做出来的 SparkSQL, 這個才是分析型的數據庫 OLAP (Online Analytical Processing), 特點是對分析型任務 (SELECT) 做優化,據說 V2 Engine 提升效能 10 倍以上!
    V2 Engine 首個應用就是 Sonala 鏈,之后在逐步導入 Ethereum 鏈的數據,暂時還没有 Polygon 鏈
  4. 對于 Ethereum / Polygon 鏈, Dune 首先做的是導入原始交易表 (ethereum.* polygon.*) 因為在 原始交易表 polygon.transactions 可以查詢到的 input data 部分都是 合約特定的 data, 所以 polygon.transactions 并不方便查詢合約特定的信息。
    所以除了 原始交易表以外, Dune再在其上加上了若干抽象層。抽象層的第二級就是 各合約的項目方可以向 Dune 提交 合約地址,待 Dune 分析合約上的函式,(需要几天)批准之后,就會生成 decoded tables
  5. 在 decoded tables 再往上一層, Dune 還可以把 類似目的的合約進行分類再規并,merge 成為單個 dex.trades 這樣的 tables 可以對 Uniswap, Sushiswap, 等等各 DEX 交易所的數據合并到一處,進一步提升分析效率
  6. 還有另一些非鏈上數據,也被 Dune 導入: 比如 ETH/USD 的比價,其形成原理是 各 中心化交易所里的 供需需求,這個 比價 本身不来自鏈上,但對鏈生態的價值分析至关重要, Dune 也都全都收录。
  7. 最后一點是 各項數據的 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 數據是你想知道的?




CC BY-NC-ND 2.0