Post

区块链数据解析(1-1):Chain Data

区块链数据解析(1-1):Chain Data

解析背景

查询效率分析

对于传统的意义上来说,用于存储信息的任何数据结构都可以称之为数据库。在这个角度来看,区块链可以认为是一个数据库,区别在于区块链是分布式的数据库,同时内部的结构跟传统数据库有一定的差异。

93587383-2e3a-4409-8e48-56a3850cb007

区块链数据库为了达成数据不可篡改的特性,在数据的存储上是不一样的,数据被存储在不同hash的区块上,区块之间彼此连接。同时由不同的数据节点来管理这些数据,这样就不需要类似传统的数据库那样需要中央的机构来管理数据的存储。这种特性造就了区块链数据较传统数据库更适用于存储资产,广泛利用于金融行业中。

7e248fc1-3943-4435-af15-f34755e03f08

基于上面提到的区块链数据存储的特点,区块链数据做到了高度去中心化不可篡改的特性,但同时带来了一些问题,对于数据分析领域来说,比较明显的问题就是区块链上的数据读取速度远不如传统数据库,而且并不能用传统数据库的分析方法来分析区块链上的情况。

这里就需要引入传统数据库的分析思路来解决链上数据分析的问题,通过将区块链的数据清洗到传统的数据库,利用已有成熟的数据科学的分析方法,例如通过 pythonSQL 等数据分析工具进行数据操作,大数据处理流程进行数据清洗,以及机器学习等方法论挖掘更多有价值的数据。

解析数据

节点搭建

链节点一般通过参与区块链网络,进行验证节点的交易,确保网络安全。从数据分析的角度来看,搭建链节点也是解析区块链数据的第一步,一般根据业务所需要的数据来选择区块链的节点类型,以常见的以太坊节点来看,分为以下的几种节点类型:

轻节点

  • 这种类型节点仅仅下载区块头(block headers)保留在节点上,所需的任何其他信息都从全节点请求。一般只用于 Web3 应用的交互,通常用于用户端,例如钱包,以及 DApp 交互,而不是用于数据分析。

全节点

  • 全节点有以下几个特点:
    • 保存区块链的所有数据。
    • 验证所有区块状态。
    • 所有的状态都可以从一个完整的节点重新生成
  • 从另外一个角度来说,完整的节点是区块链网络的主要组成部分。它们在分布式网络中充当服务器,主要负责事务的验证。这种类型的节点通过在其本地存储器上保存一个副本保存链网络的全部数据。
  • 对于数据分析来说,全节点常用于获取账户/合约等数据的最近状态,以及分析区块链上的一些历史数据,例如 block,transactions 等数据。

1_x6t1mMz6wMd-5DH_bvQrMg

归档节点

  • 归档节点属于另外一种类型的全节点,在全节点的基础保存了每次区块交易的状态更变,通常用户回溯账户/合约的历史情况,例如查询某个账户历史的余额情况,就需要用到归档节点。对于数据分析来说也是最友好的,可以应对各种分析场景。

提取节点数据

  • 归档节点虽好,但是存储成本也是及其高昂。截止到 2022/10 ,以太坊的归档数据已经达到了 12TB,而且硬件成本也比其他节点要高,因此对于一般用户,或者小型企业来说运行归档节点都是一笔不少的费用。在选择节点上可以使用第三方的服务,例如:

标准化接口

  • 以太坊是一个协议标准,社区维护着多种开放源代码的执行客户端。拿现在市场占有率最高的 Geth 来说,部署节点后可选择开放 JSON-RPC 接口,以供本地调用。具体的 API 可见这个 Playground

ETL 流程

  • 通过上述的 JSON-RPC 接口,可以比较方便获取到以太坊的链上数据,但是获取到的数据并不是关系型数据,并不是很方便用于分析,需要 ETL 流程后,解析成易用的数据。具体的代码可见 ethereum-etl 项目,拿获取 block 数据为例子,解析的流程大概是:
    • 任务调度器(例如Airflow)调用 ETL 脚本。
    • 脚本调用 JSON-RPC 接口获取数据,code snippets
    • 获取数据后进行 Mapping 处理,处理成标准化的数据,code snippets
    • 数据处理后生成标准化的 csv 格式,写入数据库/数据湖等,用于数据分析。

数据内容

数据结构

通过 ETL 后可以生成下面的数据表,以及具体的 schema

  • blocks
  • transactions
  • token_transfers
  • receipts
  • logs
  • contracts
  • tokens
  • traces

公开数据库

  • 解析链上数据的方法是开源的,如果要直接使用公开的数据源进行分析,也可以直接进行使用,只需要付计算费用即可,已经公开的数据源,详细可见:The list of public blockchain datasets in BigQuery,blockchain ETL 团队会不定期进行更新。

分析场景

实时数据

  • 获取方式
    • 实时数据一般通过直接调用链节点上的 JSON-RPC 接口进行获取。
  • 使用场景
    • 链上检测/预警,实时通知
    • DApp 开发
      • 包括 Dex、Lending、NFT、Game Fi 等各种场景
      • 用于查询近实时交易数据,余额获取等功能

非实时数据

  • 获取方式
    • 通过链节点获取到数据,经 ETL 后存储到分析型数据库。
  • 使用场景
    • 链上数据分析
    • 利用 AI、机器学习等方法进行数据挖掘

相关资料

This post is licensed under CC BY 4.0 by the author.