- 在产品建设方面,数据所有权转移已迅速成为需要解决的关键问题之一。社交媒体平台滥用数据的现象频发,我们亟需建立方案来解决这一问题。鉴于此,区块链提供了一种功能,可以永恒地存储、转移数据,并创建市场,允许用户将其数据货币化。
- 区块链,首先是一种技术。取决于某个生态系统试图解决什么问题,技术的实施方案可以有很大的不同。一些区块链试图专注于性能,以可能取代传统的基础设施(例如,VISA每秒可以处理12,000笔交易),而其他区块链则把隐私作为金融基础设施的主要组成部分。是的,在全球范围内,任何区块链的核心都是具有一定存储能力的区块,当被填满时,会被关闭并与之前填满的区块相连,形成一个被称为区块链的数据链,但区块链之间的存储组织本身可以有根本的不同。以太坊的所有商业逻辑主要是通过智能合约实现的,而例如在波尔卡多,则是通过托盘来实现的。是的,即使纠结于同样的智能合约,比较一下,例如以太坊和Solana,首先,它们是用不同的编程语言编写的(以太坊是Solidity,Solana是RUST | C | C++),其次,它们实现的存储方法完全不同。
- 需求产生供给,随着使用Web3 数据的需求逐渐增加,为用户提供数据的平台也越来越受欢迎。大部分新数据平台,都是尽量降低入门门槛,尽量让开发者和分析师都满意。数据创业公司遵循的目标有很多,但最重要的也许是数据模型,因为用户的使用体验、查询执行速度和其他关键指标都取决于它。
本文将探讨 Footprint Analytics 的数据模型和目前最受欢迎的分析平台 Dune Analytics 提供的数据模型之间的实施差异。
处理区块链数据的平台有一个类似的ETL过程。这个过程的步骤是:
- 节点提供者将数据传输给索引器
- 处理原始数据
- 对原始数据进行抽象化
- 视觉化
在下面的部分,我们将更详细地研究每个步骤,并指出每个平台内实施的差异。
--- **NOTE** - 为了简单起见,下面所有的例子都是基于 EVM 链的--V2 版的 Dune 作为比较对象。
节点提供者向索引器传输数据
节点提供者是一个 "客户端 "软件,将它们连接到区块链的网络,使它们能够在其他节点之间来回发送信息,在某些情况下,验证交易和存储数据。为了接收这个 "新区块创建 "信息,必须有人运行一个区块链节点。为了确保新交易有足够高的处理速度,挑选一个可靠的 RPC 至关重要。对于节点提供方,我们所对比的这两个平台都是闭源的,所以很难说他们正在使用哪个节点提供者,或者是否自建节点。但大部分数据平台通常遵循的是一种混合选项:既使用节点提供者,又使用部署的本地节点。
处理原始数据
作为下一步,从节点提供者那里收到包含区块链交易数据的哈希字节码。该字节码被解码并以原始形式保存。如果你曾经使用过[[block explorer]],你应该知道某个区块链所持有的原始数据。这些细节在不同的链之间是不同的,但是作为一个例子,大多数由以太坊虚拟机(EVM)驱动的链包括:
- Blocks - 附加在链上的交易组
- Transactions - 加密签名的区块链状态指令
- Logs - 由智能合约创建的事件
- Traces - 记录交易执行过程中发生的每一个事情
实际上,上述实体构成了区块链的全部内容。这表明,仅通过使用它们,任何去中心化的生态系统可能已经被充分分析。尽管这些表中的数据可以由人类读取(与字节码不同),但需要对区块链有深刻的理解。该平台将上述实体存储到以下表格中,作为ETL程序的一部分:
两个平台上的表数据,几乎都有相同的列,所以不同的查询可以基本上在平台之间重复使用。
数据解码
任何 EVM 区块链上的大多数智能合约都是使用 Solidity 等高级编程语言创建的。它们必须被编译成 EVM 可执行字节码,然后才能在 EVM 执行环境中使用。一旦部署,字节码将永久存储在链的状态存储中,并分配给一个特定的地址。
客户端应用程序需要一个指南来调用高级语言中定义的功能,以便能够与这个智能合约进行互动,目前它只是字节码。一个应用二进制接口(ABI)被用来将名称和参数翻译成字节形式。ABI 正确记录了名称、类型和参数,允许客户端应用程序以人类相对可读的方式与智能合约沟通。可以利用高级编程语言的源代码来编译 ABI。TLDR:要调用智能合约或破译其产生的数据,请使用 ABI。
为了允许对正在发生的事情进行后向分析,区块链被设计为分析和存储事件。智能合约通过交易和消息调用发出过程中的事件,相互沟通。因此,查看事件通常是分析区块链上发生的各种事情的最简单和最方便的方法。
然而,偶尔会有重要的信息从发出的事件中被遗漏,或者根本没有事件。在这种情况下,分析师可能不得不求助于交易和消息调用(在原始表格中发现)。随着时间的推移,没有事件被发出的情况越来越少,因为现在的开发人员大多明白,事件对分析的重要性。但目前还是仍然存在遗漏的情况。在某些情况下,将解码后的数据与原始数据结合起来,以获得关于交易的元数据或更深入地研究,是有意义的。
Dune
对于要解码并添加到 Dune 数据集的合约,可以使用以下表格。智能合约上传表格 一旦合约被解析,与特定智能合约相关的调用和事件正在被保存到相应的表格中。
Calls
通常情况下,一个智能合约将有可能被另一个智能合约或外部拥有的账户(EOA)调用的功能。从直接的状态读取和返回到修改几个状态并触发对其他智能合约的消息调用,函数可以是任何东西。对智能合约的每一个消息调用和交易都可以在 Dune 上被解析为它们自己的表。然后,这些表被赋予以下名称:
Screenshot 2022-11-21 at 13.20.30.png
Events
事件日志是由智能合约在完成特定的预先定义动作时产生的。智能合约开发者已经预先定义了这些日志的结构,而内容是在整个交易过程中动态创建的。日志有助于跟踪智能合约内部的活动,并用于监测、警报和其他目的。
Screenshot 2022-11-21 at 13.21.47.png
Footprint
截至发稿时,Footprint 目前已支持 Ethereum 存储调用和事件的表。而其它公链的底层原始数据,连同 ABI 提交、合约解析需求提交,计划在2022年底前发布。
对原始数据进行抽象化
将原始数据转化为有洞察力的信息绝不是一件小事。虽然艰难,但并不是不可行的。建立和微调 ETL 模型只是许多数据企业家每天进行的工作中的一小部分。在试图转换原始数据的系统设计中,包括以下规格:
- 数据表,可以实时连续分析来自历史和实时的数据流,大大简化了生产数据科学的工作流程。
- 模式的执行,使表保持整洁有序,没有列的污染,并为机器学习做好准备。
- 模式演进,使现有的数据表增加新的列,而不会在生产中使用这些表时导致其中断。
- 数据版本,这使得审计、复制,甚至在必要时回滚任何Delta Lake表的变化,以避免人为错误带来的意外变化。
数据摄取("铜")、转换/特征开发("银")和业务汇总("金")是典型 ETL 的三个阶段,它们采用的表格与数据工程管道中的各种质量等级相关。这些表格一起被称为 "金银铜 "架构。
它使数据工程师能够创建一个流程,从未经处理的数据开始,并作为 "单一源",其他一切都通过它流动。即使下游用户清理了数据并添加了特定的上下文结构,也可以计算和检查进一步的转换和汇总,以确保业务层面的汇总表仍然反映基础数据。Dune 和 Footprint 都在工作流程中实施了以下方法,但形式上有很大的不同。
Dune
银以及金数据表在 Dune V2 上是使用魔法表(Spellbook)构建的. Spellbook 是一个社区构建的层。通过创建复杂的表的指令,处理广泛使用的用例,如NFT交易。抽象可以被物化为视图和表,但也有许多可能的细化,包括增量加载的表、日期分割的表等等。在 Page Not Found | dbt Developer Hub 中查看所有支持的具体化类型。数据完整性测试可以很容易地添加到 YAML 文件中,只需一行。关系完整性、非空值、独特的主键和接受的值都可以在模型上快速检查。Dbt 理解所有模型的原生依赖性。
Footprint
Footprint 则完成遵循金银铜结构中描述的方法。按数据的级别分组的做法如下:
2ab5caf-Screenshot_2022-10-27_at_08.35.37.png
铜数据是未经修改,未经处理的原始数据。 提供所有区块链活动的彻底记录。交易、日志、痕迹和其他数据,如 EVM 网络的情况,将以与区块链上的数据相同的方式存储在这里。虽然使用这些数据进行查询是可行的,但要有效地做到这一点,需要对智能合约的内部运作有扎实的掌握。与其他表格相比,这种类型的表格中的数据是最多的。因此,查询的处理意味着该数据的汇总将需要相当长的时间。
银数据是未经处理的青铜数据被转化为具有附加值的数据集。这可能需要将代码改为相关的值,增加合理性检查,消除不必要的数据,等等。这些表格旨在统一 EVM 和非 EVM 的数据标准,抽象出各领域的数据结构,并建立一个事实上的商业逻辑标准。NFT交易、以太坊代币转移、协议交易、合约信息等就是这样的几个表。这些表的主要优点是,在EVM和非EVM链之间,以及在不同的市场和协议之间切换很简单。这是因为数据在语义上被正确组织,使得没有任何原始区块链数据结构知识的人可以立即使用这些表。
金表是业务层面的数据聚合,直接解决某个领域的问题。在查询本身中不需要任何聚合(连接和合并,解码等),金表提供了一些统计指标,可以随时进行研究。指标可以按原样使用,节省了开发团队在开发、运行时计算以及数据验证和测试方面的时间,因为像活跃用户,新增用户和钱包地址的持有余额这样的统计数据的所有必要计算已经由 Footprint 完成。
查询引擎
Dune
DuneV2 改变了整个数据库架构。Dune 现在正从 PostgreSQL 数据库过渡到托管在[[Databricks]] 上的 [[Apache Spark]] 的 Instance。
Footprint
Footprint Analytics在 [[Apache Iceberg]] 和 [[Trino]] 数据架构上工作。[[Apache Iceberg]] 是一种用于海量分析数据集的开放式表格格式。[[Trino]]是一个分布式 SQL 查询引擎,旨在查询分布在一个或多个不同结构数据源的大型数据集。
执行查询
Dune
Dune 上所有的查询都需要通过 SQL 执行。
query-editor.png
Footprint
Footprint 是建立在 [[Metabase]] 之上的。该技术代码的开放性允许不同的用户对代码库做出贡献,从而开发和改进它,随后可以被其他用户使用。该技术本身实现了一个方便的拖放查询生成器。这大大降低了进入门槛,允许任何没有任何技术知识的用户使用该产品并提取商业价值。
值得注意的是,从架构上来说,Metabase 是对 SQL 代码的抽象,也就是说,任何通过拖放的请求都可以表示为 SQL 。因此,想要建立更复杂的查询的用户,或者喜欢用代码处理数据的用户,都可以在 Footprint 上直接使用 SQL。
可视化
可参考分析师 @escapist5563 在文章《5分钟快速对比头部链上数据分析平台》的介绍。