區塊鏈多鏈宇宙的發展、應用和用戶的增加都將驅動數據市場的需求增長。
撰文:鄭嘉梁,HashKey Capital 研究總監
本篇我們探討一下區塊鏈世界裡的數據供應,以及以數據為核心產品的服務商如何形成一定的市場規模,即他們如何產生價值和捕獲價值的。
區塊鏈本質上是一個分佈式數據庫,雖然有著公開、透明、可追溯等特點,但是直接訪問或者獲取這寫數據並不便利,需要特定的接口、進行格式化、以及轉變保存類型。大部分區塊鏈使用的是鍵-值類型的數據庫,方便多寫少讀,而普通用戶比較習慣的是關係型數據庫。關係型數據庫可以用像SQL 那樣的查詢語句來進行查詢, 像Dune Analytics 這樣的服務商就是把鏈上數據變成關係數據庫,方便調取,這中間的流程還包含了數據的存儲和再加工的過程。
一般有兩類有價值的數據:
鏈上數據:鏈相關數據(哈希、時間戳、難度等)、轉賬、普通交易、智能合約事件等,這類數據被分佈式數據庫所維護,可靠性由共識保證。即區塊鏈的核心數據。
非鏈上數據:與鏈上相關,準確性依靠中心化或去中心化的節點驗證的數據,如交易所、預言機等,類似於Web2.0 服務。交易所數據介於鏈上鍊下之間,是鏈上數據的鏈下計算,然後經鏈上驗證,也產生了很大的數據量。
我們認為數據市場需求爆發的驅動來自於:
- 多鏈宇宙(含Layer2)的成型
- 應用的增加和用戶的增加
- 應用帶來的數據需求的增加(如開發、分析、交易、金融產品的使用等)
- 用戶行為複雜化
數據市場參與者
交易者
交易者根據各類數據信息判斷可交易的方向,比如觀察某條鏈的活躍程度,某個DEX 的成交情況、某個借貸協議的借出貸款等。他們會需要有可靠的數據源,一些高級用戶會使用付費的數據服務。
數據的提供者
被動的產出方(不以數據盈利為目的):如區塊鏈的節點,交易所,普通用戶
主動地產出方(以數據盈利為目的):API 提供者,數據搜索引擎,定制化數據包。他們往往是原始數據的加工者。
開發者
開發者查詢、調用鏈上數據,與區塊鏈交互。由於節點服務商的存在,開發者不需要搭建自己的節點,就可以直接和鏈上進行交互。眾多dApp 以及第三方錢包應用都依賴於Infura 這樣的節點服務商,與區塊鏈進行交互。開發者的需求來自於:網絡狀態監控、交易執行狀況監控、穩定的執行環境、市場和競品趨勢信息、產品和市場策略指定、根據客戶偏好提升產品性能等。
需要不停監聽網絡狀態的應用和中間
比如借貸協議需要監控賬戶狀態,一些自動化中間件要及時反饋價格變化等。
區塊鏈數據結構、存儲、和訪問-以Ethereum 為例
鍵值數據庫
區塊鏈本質上是個數據庫,和比較為大眾熟悉關係型數據庫不同,以太坊使用的鍵值(KV)類型數據庫,其底層基於Google 的Level DB,適用於寫多讀少的場景。關係型數據庫歷經多年發展,被程序員所接受,也非常利於普通人理解。關係型數據庫的結構是一系列的表。
鍵值數據庫是新發展出來的非關係型數據庫,結構相對簡單:鍵作為唯一的標識符,值存儲數據,值可以是任何東西,不需要遵循表的結構,靈活多變且擴展性強。鍵值和關係數據庫相比擴展性好,可以提供大數據量的讀寫,常被用於緩存。
大部分分佈式數據庫採用鍵值數據庫,依靠LMS-tree 的結構進行有效的數據寫入和查詢。少部分選用關係型數據庫,如Ripple。
區塊鏈的數據根據狀態和交易的抽象結構如下:
來源:HyperLedger
以太坊的區塊數據包括區塊頭和區塊體,區塊頭包含許多字段。從結構來看,以太坊的主乾就是三棵樹:狀態樹、交易樹和收據樹。
以太坊的主要字段是State Root(狀態樹),包含了賬戶餘額、聲明、隨機數等,狀態樹採用的是Merkel-Patrica 結構,需要不斷的更新。而交易樹和收據樹不需要更新,所以採用了Merkel 的數據結構:交易數據是永久數據,永久數據已經記錄不會被改變。狀態樹儲存每個以太坊賬戶的地址餘額,一經發生交易就會修改。
以太坊的數據結構總結起來就是這一張圖:
來源:Lucas Saldanha
永久儲存與臨時儲存
如前所述,以太坊的底層數據是以KV 形式儲存在底層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 發展曲線類似。