撰文:鄭嘉梁,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 提供的數據表有:
- 原始交易數據,提供區塊鏈上所有活動的詳細記錄
- 項目級數據表,返回預處理后數據,用于解碼的項目
- 抽象表,一種更高級的表,返回相關行業 / 主題的聚合數據,
目前支持 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 發展曲線類似,