区块链多链宇宙的发展、应用和用户的增加都将驱动数据市场的需求增长。

撰文:郑嘉梁,HashKey Capital 研究总监

本篇我们探讨一下区块链世界里的数据供应,以及以数据为核心产品的服务商如何形成一定的市场规模,即他们如何产生价值和捕获价值的。

区块链本质上是一个分布式数据库,虽然有着公开、透明、可追溯等特点,但是直接访问或者获取这写数据并不便利,需要特定的接口、进行格式化、以及转变保存类型。大部分区块链使用的是键-值类型的数据库,方便多写少读,而普通用户比较习惯的是关系型数据库。关系型数据库可以用像 SQL 那样的查询语句来进行查询, 像 Dune Analytics 这样的服务商就是把链上数据变成关系数据库,方便调取,这中间的流程还包含了数据的存储和再加工的过程。

一般有两类有价值的数据:

链上数据:链相关数据(哈希、时间戳、难度等)、转账、普通交易、智能合约事件等,这类数据被分布式数据库所维护,可靠性由共识保证。即区块链的核心数据。

非链上数据:与链上相关,准确性依靠中心化或去中心化的节点验证的数据,如交易所、预言机等,类似于 Web2.0 服务。交易所数据介于链上链下之间,是链上数据的链下计算,然后经链上验证,也产生了很大的数据量。

我们认为数据市场需求爆发的驱动来自于:

  • 多链宇宙(含 Layer2)的成型
  • 应用的增加和用户的增加
  • 应用带来的数据需求的增加(如开发、分析、交易、金融产品的使用等)
  • 用户行为复杂化

数据市场参与者

交易者

交易者根据各类数据信息判断可交易的方向,比如观察某条链的活跃程度,某个 DEX 的成交情况、某个借贷协议的借出贷款等。他们会需要有可靠的数据源,一些高级用户会使用付费的数据服务。

数据的提供者

被动的产出方(不以数据盈利为目的):如区块链的节点,交易所,普通用户
主动地产出方(以数据盈利为目的):API 提供者,数据搜索引擎,定制化数据包。他们往往是原始数据的加工者。

开发者

开发者查询、调用链上数据,与区块链交互。由于节点服务商的存在,开发者不需要搭建自己的节点,就可以直接和链上进行交互。众多 dApp 以及第三方钱包应用都依赖于 Infura 这样的节点服务商,与区块链进行交互。开发者的需求来自于:网络状态监控、交易执行状况监控、稳定的执行环境、市场和竞品趋势信息、产品和市场策略指定、根据客户偏好提升产品性能等。

需要不停监听网络状态的应用和中间

比如借贷协议需要监控账户状态,一些自动化中间件要及时反馈价格变化等。

区块链数据结构、存储、和访问-以 Ethereum 为例

键值数据库

区块链本质上是个数据库,和比较为大众熟悉关系型数据库不同,以太坊使用的键值(K-V)类型数据库,其底层基于 Google 的 Level DB,适用于写多读少的场景。关系型数据库历经多年发展,被程序员所接受,也非常利于普通人理解。关系型数据库的结构是一系列的表。

键值数据库是新发展出来的非关系型数据库,结构相对简单:键作为唯一的标识符,值存储数据,值可以是任何东西,不需要遵循表的结构,灵活多变且扩展性强。键值和关系数据库相比扩展性好,可以提供大数据量的读写,常被用于缓存。
大部分分布式数据库采用键值数据库,依靠 LMS-tree 的结构进行有效的数据写入和查询。少部分选用关系型数据库,如 Ripple。

区块链的数据根据状态和交易的抽象结构如下:

深入解读区块链数据行业:如何产生价值和捕获价值?

深入解读区块链数据行业:如何产生价值和捕获价值?来源:HyperLedger

以太坊的区块数据包括区块头和区块体,区块头包含许多字段。从结构来看,以太坊的主干就是三棵树:状态树、交易树和收据树。

以太坊的主要字段是 State Root(状态树),包含了账户余额、声明、随机数等,状态树采用的是 Merkel-Patrica 结构,需要不断的更新。而交易树和收据树不需要更新,所以采用了 Merkel 的数据结构:交易数据是永久数据,永久数据已经记录不会被改变。状态树储存每个以太坊账户的地址余额,一经发生交易就会修改。
以太坊的数据结构总结起来就是这一张图:

深入解读区块链数据行业:如何产生价值和捕获价值?来源:Lucas Saldanha

永久储存与临时储存

如前所述,以太坊的底层数据是以 K-V 形式储存在底层 LevelDB 里的。但是 LevelDB 适合于写多读少的场景,所以真正用于读取、查询的数据库是 StateDb,它管理着所有账户的集合,账户的呈现形式是 stateObjectStateDB。其直接面向业务,是底层数据库(LevelDB)和业务模型的之间的存储模块。它采用两级缓存机制,以满足查询、更新、调用等功能。第一级缓存为 map 形式,存储 stateObject,二级缓存以 MPT 形式存储。当 stateObject 有变动的时候,实例化的 stateObject 会更新,当 IntermediateRoot() 被调用后,他们会被提交到 MPT 上,当 CommitTo() 被调用后,他们会被提交到底层 levelDB 中。这就形成了三级缓存结构。使用多存数据库的好处是,当需要回滚的时候,直接调用 stsateDB 中 MPT 树的根节点进行数据还原即可。

深入解读区块链数据行业:如何产生价值和捕获价值?来源:网络,HashKey Capital 整理

但是要是将这些数据变成可用的数据,就是将这写数据变成可用的查询字段,比如 Blockheader 包含的字段,Block Body 包含的字段,智能合约的 Log 的字段等,交易的 Trsaction 字段等,不同字段对应着不同类型。

深入解读区块链数据行业:如何产生价值和捕获价值?Dune Analytics 提供的以太坊可查询数据字段

Log 是非常重要的数据,因为以太坊的智能合约运行在 EVM 中,与外界隔离,EVM 发生的事件就是通过 Log 传输到外面并记录在区块链上。实际上,像 Etherscan 这样的浏览器就是用过 Parity 客户端回放 EVM,拿到智能合约交易的记录(内部交易)。

许多区块链的结构也可以存储非交易数据,但是容量有限。比如比特币的 output 中的 OP_RETURN 字段就可以存储不超过 40 字节的数据。限制的原因在于放大增加这部分会影响区块链的性能。以太坊的区块头也有 Extra 字段可以用来写入数据,如这样的:

深入解读区块链数据行业:如何产生价值和捕获价值?来源:https://etherscan.io/block/12912176

区块链并不合适进行文件的存储,以 IPFS 作为存储底层和区块链结合的方式是比较认可的,比如数据储存在 IPFS 中,但是数据的 Hash 值存在以太坊的状态数据库中。

缓存

除了上链的交易外,以太坊还有一个保存在缓存中的数据,即 mempool 里面的排队数据。各个节点提交的交易都会被放入 mempool 交易池中,经过序列化、交易验证、过滤等步骤,最终选择合适的交易被矿工打包。交易池中有 Queue 和 Pending 两个 map,用来存储未验证交易和已验证交易。Queue 和 Pending 清理结束后,根据不同节点提交的交易,交易池要进行重构(由于分布式的原因),防止出现分叉。

以前交易池的数据没有那么重要,但是随着智能合约的交易占比提升,交易的排序有了更多的经济意义,所以已经有项目开始做类似的工作。

  • 趣味性强的的比如 Txstreet
  • 真实提供交易池数据接口的比如 Blocknative
  • 提供 MEV 解决方案的如 Flashbot

访问

如何访问以太坊上的数据呢?一般是两种方式 :

远程访问以太坊的节点

使用 web3 或者是 JSON-RPC 的方式。JSON-RPC 是无状态的轻量级跨语言远程调用协议,文本传输的数据是 JSON 格式,传入和传回都是 JSON 格式。使用 JSON-PRC, 客户端发送 PRC 请求,就可以直接通过以太坊客户端,传回相应数据,比如使用对应字段,eth_gasPrice, eth_blocknumber 等。

深入解读区块链数据行业:如何产生价值和捕获价值?来源:《深入理解以太坊》

如果不使用 JSON-PRC 方式,可以以太坊基金会提供的 javascript 库,即 web3.js。它底层封装了 RPC, 使用起来和 JSON-RPC 方法一样,先创建一个 web3 对象,就可以使用库里提供的方法获取各种数据。比如,显示账户的余额:

var balance_1 = web3.eth.getBalance(web3.eth.accounts[0]);
console.log(balance_1.toString());

使用 web3.js 有一系列好处,在于他们有非常细致的模块:

  • web3-eth 用来与以太坊区块链及合约的交互;
  • web3-shh Whisper 协议相关,进行 p2p 通信和广播;
  • web3-bzz swarm 协议(去中心化文件存储)相关;
  • web3-utils 包含一些对 DApp 开发者有用的方法。

JavaScript 库还可以通过读取 Application Binary Interface (ABI) 来直接和复杂的智能合约进行交互。ABI 就是 json 形式的智能合约函数,因为智能合约是以 solidity 写的,json 形式就可以通过 JavaScript 直接使用了。可以做的事情包括:向合约发送交易、估计使用 EVM 的 gas fee、部署智能合约等等。

除了 web3.js 库外,还有 ether.js 库这样的 javascript 库。

使用 web3.js 的一个实例就是区块链浏览器:使用 web3.js 访问以太坊,获得的数据进行加工,通过中心化的接口加入非链上信息(如标签,项目名字),然后循环调用 web3.js 查询链上数据,不断更新区块。

自己搭建节点,本地访问

自己搭节点就是自己将所有的以太坊全网数据全部下载下来,这需要大量的成本,以及安全技术,大部分用户和开发者都不会选用这样的模式去使用数据,一般会使用第一类方法或者直接从去找到更好的 API 服务商。

流转过程

以太坊的本质是交易驱动的状态机,一切变化皆由交易开始,变化的记录就是数据,API 从头到尾串起了数据的流转。整个区块链数据流转的过程是这样的:

深入解读区块链数据行业:如何产生价值和捕获价值?

数据服务者类型

节点服务层

节点服务商可以说已经变成了以太坊运行的根基,比如最有名的 Infura,本身运行以太坊节点并提供 IaaS 服务,省去了建立以太坊节点的过程 , 应用可以直接靠 Web3 访问。API 成为管道,需要使用数据的话,对管道进行付费。

底层数据服务(和链进行交互)和上层数据服务可以紧密合作,底层提供节点,上层提供数据的查询。比如 Quicknode 和 Dune Analytics 的合作就是这样的例子。Dune 为数据分析这提供一个可以应用 SQL 语句查询的数据库,还可以将数据可视化。在 Dune 出现之前,没有一个统一的数据格式可以将项目之间进行比较。Dune 是 Quicknode 的主要客户,之前是使用自建的 Parity 节点。经常需要担心节点的内存泄露(memory leak)、磁盘空间不够等,而且成本较高,使用 Quicknode 后后大大降低了成本,每月成本 1000 美元降到每月 35 美元。此外 Quicknode 还提供类似 CDN 的服务,这可能是另外一个可以促进 dapp 应用体验的方向。还可以帮助访问 mempool 的数据。还可以提供私有节点。Quicknode 有一些业内知名的用户,比如 Nansen, PayPal, DappRadar, Chainlink。

Alchemy 把区块链的底层架构进行梳理,可以提供典型的 JSON-RPC API,还可以提供增强型的 API,将日常请求简单化,简化开发人员的成本等。Alchemy 对许多知名项目也进行了支持,比如 CryptoKitties, Formatic, Bancor, Celer。

Infura, Alchemy 和 Quicknode 均各自有一些知名用户:

深入解读区块链数据行业:如何产生价值和捕获价值?

处在这一赛道的还有 Crypto API,Blockchair,Blockdaemon 等。

查询索引服务层

数据服务再往上进一层就是应用类的服务,比如 Dune Analytics。区块链的数据虽然是公开透明的,但是缺乏工具的情况下,数据都是杂乱的,需要编写各类脚本来访问区块,遍历信息等,然后再进行格式化。

Dune 先把区块链上的数据(主要是以太坊)进行解析,然后填充到数据库中,变成一个 PostgreSQQL 的数据库。用户无需写脚本,只要会使用简单的 SQL 语句就可以进行查询。Dune 起了一层将数据进行解析和格式化的作用,还提供了可视化工具。以太坊是键值数据库,Dune 把它变成一个关系型数据库,SQL 语句就是关系型数据库的接口。Dune 提供的数据表有:

  1. 原始交易数据,提供区块链上所有活动的详细记录
  2. 项目级数据表,返回预处理后数据,用于解码的项目
  3. 抽象表,一种更高级的表,返回相关行业 / 主题的聚合数据。

目前支持 Ethereum 和 xDai (以太坊的测链)两个链。以太坊的原始数据包括 Block,Log,Transaction,Trace 等四大类数据,Dune 把他们解码成 human readable 的格式。

The Graph 提供了一个数据的搜索引擎,借助于 GraphQL API,用户可以通过 subgraph (子图)直接访问获得信息。而且 The Graph 是去中心化的,受到很多 DeFi 项目的支持。其也提供一些列成型的 subgraph (类似于 Dune Analytics 用户的 query 或者 dashboard),供代码能力一般的用户直接使用。

数据查询的流程遵循以下步骤 :

  • Dapp 通过智能合约上的交易将数据添加到以太坊。
  • Graph Node 持续扫描以太坊的新块和它们可能包含的子图数据。
  • Graph Node 在这些块中为子图查找以太坊事件,并运行映射处理程序。(映射是一个 WASM 模块,用于创建或更新 Graph Node 存储的数据实体,以响应以太坊事件。)
  • 去中心化的应用程序使用节点的 GraphQL 端点向 Graph Node 查询从区块链索引的数据。Graph Node 反过来将 GraphQL 查询转换为对其底层数据存储的查询,以便获取该数据,并利用存储的索引功能。
  • Dapp 将这些数据显示在终端用户的前端中。用户通过前端进行交易活动。

由于是去中心化的模式,The Graph 设计了 GRT 代币机制,以鼓励多方参与这个网络,涉及到委托人(Delegator)、索引者(Indexer)、策展人(Curator)、开发者(Developer)等四类。简要而言就是用户提出查询需求,索引者运行 The Graph 节点,委托人向索引者质押 GRT 代币,策展人使用 GRT 来指引哪类子图有查询价值。

快速和节约资源:The Graph 的价值在于,他可以非常快速的用数据回答很具象的问题。他们举了个例子:对于 CryptoKitties, 可以查询在 2018 月之间 1 月到 2 月诞生的 Kitties 的所有者是谁的问题,这就需要遍历智能合约的 birth 事件,以及 ownof 方法。这样一个问题可能需要几天时间才可以。The Graph 的子图就是解决这些问题的索引。

类似于 The Graph 的项目还有 Covalent,提供了一个数据查询层,让工程师可以快速的以 API 的形式调用数据。一个简单的 API 就可以解决所有 Covalent 支持的链的数据。Covalent 的数据集比较完备,可以多链多项目的一起查询,不需要很强的 coding 基础。Covalent 也有自己的代币 CQT,代币持有者可以用来抵押、投票(数据库上新)。Covalent 有两类 endpoints,一类是区块链全体数据类型,如余额、交易、日志类型等;另一类是对某一个协议的 endpoint,如查询 AAVE 的日志。Covalent 最有特点的是跨多链查询,不想需要重新建立类似子图的索引,二是通过改变 chain ID 就可以实现,query 的可扩展性大大增强了。

SubQuery 是专注于波卡生态的数据提供方,可以转换和查询 Web3.0 生态数据。SubQueary 受到 The Graphh 启发,也是使用的 Facebook 开发的 graphQL 语言。SubQuery 面向所有的 Polkadot 和 Substrate,并且提供一个开源 SDK。相对于 The Graph, 作为开放市场的 SubQuery 中的角色有三个:消费者、索引这和委托人。消费者发布任务,索引这提供数据,委托将空闲的 SQT 代币委托给索引者,激励他们更多的诚实参与工作。代币经济学和 The Graph 类似。

如前所述 Blocknative 专注于实时交易数据的检索功能,提供了 mempool 的数据浏览器。最大的特点是突出了实时性,可以追踪交易相关的相应字段的结果,比如地址的追踪,内部交易的追踪,未成功交易的信息,被替换交易的信息比如被加速或者取消。

主要的产品有:mempool 浏览器、网站 SDK、Gas 平台和模拟平台

  • Mem 浏览器,通过 API 形式的可以订阅 mempool,可以精确到任何一一个协议中,比如 UniswapV3, Sushiswap 的相关交易在 mempool 里面的表现
  • Gas 平台,通过实时 mempool 数据来预测 gasfee 的工具
  • 模拟平台功能,模拟 mempool 中检测可被执行的事务,并根据当前块高度对它们进行模拟,以显示它们的效果。只要符合 Blocknative 检测规则的交易进行模拟
  • SDK 平台,各类网站可以通过 javascript 挂接 Blocknative 的 API,来显示该网站产品的交易执行情况

Blocknative 是专门针对 mempool 进行侦测的数据网站,因为 mempool 的数据和最终区块数据不会一致,其及时性和其他数据 indexing 比要求跟高。以太坊有一套复杂的系统来管理 mempool 中的交易,Blocknative 提供的字段查询更加即时和精确。

数据分析层

这一层主要是提供一整套链上或者链下的数据集或 API,方便于交易员进行分析。

链上和链下数据:链上数据的提供者直有很细分的 raw data,但对于非专业的认识不需要,其实很多用户需要的颗粒度并不是很高。这样的选手包括 Coinmetics,Nomics,Glassnode,intotheBlock, CryptoQuant 等。他们本身会拆分每一笔交易,但是提供的产品是一种交易的集合。还有一类是交易所数据的包括:Skew,Kaiko,CoinAPI。他们把各类交易所的交易数据进行集合,打包提供给交易者。包括最近崛起的 Nansen,将标签的精细度加深,这也代表深颗粒度 / 面向特定领域的数据受到重视。

业务很传统:这些服务商体量都不大,经过几年的竞争,上面提到的这些名字已经初步跑出。他们基本都是中心化的项目,估值在几千万美元(市场的需求还没有完全起来)。业务逻辑容易理解,有传统的可比标的,数据合规做得好是很好的收购标的。

交易所也自然的参与其中:除了集中式的 API 供应,交易所本身也提供大量的数据。这部分是中心化交易所私有的,交易所把这部分数据半免费开放给外部,这属于整个区块链里最有价值的一类。对于 trader 来讲,orderbook 和成交量比较有用,orderbook 类似以太坊的内存池数据。而还有一类就是交易所钱包和链上交互的数据,代表了一定的得市场氛围。

数据的合规性还未受到重视:合规是很多服务商较少充实的层面,不仅公司合规,数据也要合规。Kaiko 的数据广度好,而且颗粒度精细,拥有把一整套数据进行标准化的方法,满足传统机构投资人的合规要求,并符合 FIGI (Financial Instruments Global Identifier®)标准,是认证的 FIGI 服务商。在未来机构进场的趋势下是一个很大的优势。

除此以外,还有各类 DeFi 分析面板如 Defi Pulse、Dfilima、DeBank 等,都提供各自擅长的数据集。

数据服务商的价值提升仍然有很大空间

可靠性的提升

区块链数据越来越多是一个不可避免的趋势。但只有对数据进行分析,得出可操作的见解,才能利用数据的真正价值。区块链技术在数据分析领域扮演着两个截然不同的角色。首先,存储在区块链和区块链网络中的数据本身提供了丰富的信息来源。第二,通过在数据和派生分析模型中添加保证元素,区块链可以使可信的数据分析环境用于多方数据共享。

虽然规模在增加,但是数据质量还没有受到重视,数据质量即代表数据可用性的问题,数据质量需有以下标准:

  • 一致性-数据没有矛盾且一致。
  • 可追溯性-数据可审计,变动可追踪
  • 可用性-能够被授权用户和应用程序进行检索。
  • 合规性-数据符合标准、惯例或一些已经执行的规定
  • 机密性-数据只能被授权用户访问
  • 可信度-用户相信数据的真实性

区块链的数据就有很好的一致性、可追溯性、可用性,但是缺乏合规性、一定的私密性和可信性,尤其是面对监管的时候。用户相信一些数据,还是需要对方数据交叉验证,自己去链上数据交叉验证并不容易。这是未来需要解决的。

用户数据从里层走向表层

用户数和用户行为的爆发还有一个潜在结果,就是当这个级别开始逐渐接近互联网级别的时候,一些传统的数据挖掘方法就开始体现出价值。Web3.0 上依然可以提供类似 Web2.0 的服务,而有些数据虽然是公开的,但却是只能被部分公司 access 到,者给予对用户行为分析和打标签的能力。一个比较大的 gap 是,现在用户的 Web2.0 和 Web3.0 身份还没有对应上,比如很多项目的用户,也非常积极的在 Discord 里面交流,他们和 Web3.0 的身份没有对应,这里面其实也会让很多机会。像 Nansen 就是把海量的钱包进行打标签,为数据用户提供真实的链上行为分析,尤其是可以看到那些巨鲸的活动。像 Nansen 这样的,未来针对用户数据的再挖掘,会让数据服务上的(服务)再上一个新台阶,比如 Zerion、Zapper、InstaDapp 这样的 DeFi 聚合层,也是可以很好发掘用户数据的平台。Covalent 也提供了对钱包的查询功能。

价值的体现

数据的可靠性是一方面(客观),价值捕获依靠的是可用性(客观)和认可(主观)。数据变得有值钱我们可以从这类项目的融资可以看出,2021 年是数据真正开始体现价值的一年,以上提及的项目今年发生了多次融资:

深入解读区块链数据行业:如何产生价值和捕获价值?

Skew 和 Zabo 直接被 Coinbase 收购,传统领域的资金也在参与。随着多链时代的开启,数据量会成倍的增加。多链时代对行业是个考验,但对于数据公司来说,则打开了宝藏之门。The Graph 提供的统计显示,2020 年 6 月,每天只有 3000 万的 query,到了 2021 年的 6 月份,每天的 query 达到了 6.75 亿。

深入解读区块链数据行业:如何产生价值和捕获价值?来源:https://thegraph.com/blog/20billion-queries

未来数据市场的驱动力主要有四个:多链宇宙(含 Layer2)的成型, 应用的增加和用户的增加,应用带来的数据需求的增加(如开发、分析、交易、金融产品的使用等),用户行为复杂化。但是数据状态也不会爆炸下去,也会经过一波整合,和 Gartner 发展曲线类似。

深入解读区块链数据行业:如何产生价值和捕获价值?