zzzyx
zzzyx

……

从Dune Analysis 分析The Space 链上数据

(编辑过)
要问「自上线以来有多少人参与了这个像素游戏?」 靠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 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论