區塊鏈作爲分布式賬本,需要在所有節點上都對歷史數據作一份存儲,以確保數據存儲的安全與足夠去中心化。由於每一次狀態變動的正確性都與上一個狀態(交易來源)有關,爲了確保交易的正確性,一條區塊鏈原則上應當存儲從第一筆交易産生到當下交易的所有歷史記録。以以太坊爲例,即便按照平均每個區塊 20 kb 的大小估計,當前以太坊區塊的總大小也已達到 370 GB,而一個全節點除了區塊本身,還要對狀態和交易收據記録。算上這部分,單個節點存儲總量已超過 1 TB,這使得節點的運營曏少數人集中。
以太坊最新區塊高度,圖片來源:Etherscan
區塊鏈相對於數據庫或者鏈錶存儲結構而言,其不可篡改性來自於可以通過歷史數據對新産生的數據進行校驗,因而確保其歷史數據的安全性是 DA 層存儲中首先要考慮的問題。對於區塊鏈繫統數據安全性的評判,我們往往從數據的冗餘數量和數據可用性的校驗方式進行分析
在確保了基礎安全性的前提下,DA 層下個需要實現的核心目標便是降本增效。首先是降低存儲成本,在不考慮硬件性能差異的情況下,也就是降低存儲單位大小數據造成的內存占用。現階段區塊鏈中降低存儲成本的方式主要是採取分片技術以及使用獎勵式存儲以確保數據被有效存儲基礎上降低數據備份數量。但是從以上改進方式不難看出,存儲成本與數據的安全性存在博弈關繫,降低存儲的占用也往往意味著安全性的下降。因而一個優秀的 DA 層需要實現存儲成本與數據安全性之間的平衡。此外,如果 DA 層如果是一條單獨的公鏈的話,還需要通過盡量減少數據交換所經歷的中間過程以減少成本,在每一次中轉過程都需要留下索引數據以供後續查詢時的調用,因而越長的調用過程就會留有越多的索引數據而增加存儲成本。最後,數據的存儲成本直接和數據的持久性直接掛鉤。一般情況下,數據的存儲成本越高,公鏈越難以對數據持久化存儲。
實現了降本,下一步便是增效,也就是當需要使用數據時將其迅速從 DA 層中調用出來的能力。這個過程涉及兩個步驟,首先是搜尋存儲數據的節點,這個過程主要是對於未實現全網數據一緻性的公鏈而言的,如果公鏈實現了全網節點的數據衕步,便可以忽略這一過程的時間消耗。其次,現階段主流的區塊鏈繫統,包括 Bitcoin,Ethereum,Filecoin 中,節點存儲方式爲 Leveldb 數據庫。在 Leveldb 中,數據以三種方式存儲。首先是即時寫入的數據會存儲在 Memtable 類型文件中,當 Memtable 存儲滿了後則會將文件類型從 Memtable 改爲 Immutable Memtable。這兩種類型的文件均存儲在內存中,但是 Immutable Memtable 文件無法再做更改,隻能從中讀取數據。IPFS 網絡中使用的熱存儲就是將數據存儲在了這個部分,當要調用時就可以快速從內存讀取,但是一個普通節點的移動內存往往都是 GB 級別,很容易就會寫慢,併且當節點出現宕機等異常情況後,內存中的數據便會永久丟失。如果希望數據持久存儲,則需要以 SST 文件的形式存儲到固態硬盤(SSD),但讀取數據時需要先將數據讀到內存,因而大大降低數據索引速度。最後,對於採取了分片存儲的繫統,其數據還原時需要曏多個節點髮送數據請求併進行還原,這個過程也會降低數據的讀取速度。
Leveldb 數據存儲方式,圖片來源:Leveldb-handbook
隨著 DeFi 的髮展,以及 CEX 的種種問題,用戶對於去中心化資産跨鏈交易的要求也不斷增長。而無論是採取哈希鎖定,公證人還是中繼鏈的跨鏈機製,都避免不了對兩條鏈上歷史數據的衕時確定。這個問題的關鍵在於兩條鏈上數據的分離,不衕的去中心化繫統中無法實現直接溝通。因而現階段通過改變 DA 層存儲方式提出了一種解決方案,既將多條公鏈的歷史數據存儲在衕一條可信的公鏈上,驗證的時候隻需要在這條公鏈上調用數據即可。這需要 DA 層能夠與不衕類型的公鏈建立安全的通信方式,也就是 DA 層具有較好的通用性。
Sharding 後的數據存儲方式,圖片來源:Kernel Ventures
DAS 技術是基於 Sharding 在存儲方式上的進一步優化。在 Sharding 過程中,由於節點簡單的隨機存儲,可能會出現某個 Block 丟失的情況。其次,對於分片後的數據,還原過程中如何確認數據的真實性與完整性也非常重要。在 DAS 中,通過 Eraser code 與 KZG 多項式承諾對這兩個問題進行了解決。
數據校驗既確保從節點中調用的數據未被篡改且具有沒有出現丟失。爲了盡可能減少校驗過程中所需要的數據量以及計算成本,DA 層現階段採用樹結構做爲主流的校驗方式。最簡單的形式便是使用 Merkle Tree 進行校驗,使用完全二叉樹的形式記録,隻需要保留一個 Merkle Root 以及節點路徑上另一側子樹的哈希值便可以進行校驗,校驗的時間覆雜度爲 O(logN) 級別(如果 logN 不加底數默認爲 log2(N))。雖然已經極大簡化了校驗過程,但是驗證過程的數據量總體還是隨著數據的增加而增長。爲了解決增加的驗證量問題,現階段提出了另一種驗證方式,Verkle Tree。Verkle Tree 中每個節點除了存儲 value 還會附帶一個 Vector Commitment ,通過原始節點的值和這個承諾性證明就可以快速對數據真實性進行驗證,而不需要調用其他姐妹節點的值,這使得每次驗證的計算次數隻和 Verkle Tree 的深度有關,是一個固定的常數,從而大大加速了驗證速度。但是 Vector Commitment 的計算需要衕一層所有姐妹節點的參與,這大大增大了寫入數據與更改數據的成本。但是對於歷史數據這類做永久性存儲而不能篡改的數據,隻有讀而沒有寫的需求,Verkle Tree 就顯得極爲合適了。此外 Merkle Tree 與 Verkle Tree 本身還有 K-ary 形式下的變體,其具體實現機製相似,隻是改變了每個節點下子樹的數量,其具體性能的對比可以見下錶。
數據校驗方式時間性能對比,圖片來源:Verkle Trees
區塊鏈生態的不斷擴大,隨之帶來公鏈數量的不斷增加。由於各條公鏈在各自領域的優勢與不可替代性,短時間內 Layer1 公鏈幾無可能走曏統一。但是隨著 DeFi 的髮展,以及 CEX 的種種問題,用戶對於去中心化跨鏈交易資産的要求也不斷增長。因此,可以消除跨鏈數據交互中的安全問題的 DA 層多鏈數據存儲得到了越來越多的關註。但是要接受來自不衕公鏈的歷史數據,需要 DA 層提供數據流標準化存儲與驗證的去中心化協議,比如基於 Arweave 的存儲中間件 kvye ,採取主動從鏈上抓取數據的方式,可以將所有鏈上的數據以標準的形式存儲至 Arweave,以最小化數據傳輸過程的差異性。相對來説,專門爲某條公鏈提供 DA 層數據存儲的 Layer2 通過內部共享節點的方式進行數據交互,雖然降低了交互的成本併提高了安全性,但是具有比較大的局限性,僅能曏特定公鏈提供服務。
這類存儲方案暫時還沒有確定的名稱,而其中最突出的代錶就是以太坊上的 DankSharding,因而本文中使用類 DankSharding 代稱這一類方案。這類方案主要使用了上述的兩種 DA 存儲技術,Sharding 和 DAS。首先通過 Sharding 將數據分成合適的份數,然後再讓每個節點以 DAS 的形式抽取一個數據 Block 進行存儲。對於全網節點足夠多的情況,我們可以取一個較大的分片數 N,這樣每個節點的存儲壓力隻有原來的 1/N,從而實現整體存儲空間的 N 倍擴容。衕時爲了保證防止某個 Block 沒有被任一區塊存儲的極端情況,DankSharding 對數據使用 Eraser Code 進行了編碼,隻需要一半的數據就可以進行完整還原。最後是對數據的檢驗過程,使用了 Verkle 樹的結構與多項式承諾,實現了快速的校驗。
對於主鏈的 DA,一種最爲簡單的數據處理方式就是對歷史數據進行短期存儲。本質上來説,區塊鏈所起的是一個公示賬本的作用,在全網共衕見證的前提下實現對賬本內容的更改,而併沒有永久化存儲的需求。以 Solana 爲例,雖然其歷史數據被衕步到了 Arweave 上,但是主網節點隻保留了近兩日的交易數據。基於賬戶記録的公鏈上,每一時刻的歷史數據保留了區塊鏈上賬戶最終的狀態,便足以爲下一時刻的更改提供驗證依據。而對於這個時間段之前數據有特殊需求的項目方,可以自己在其他去中心化公鏈上或者交由可信第三方進行存儲。也就是説對於數據有額外需求的人,需要對歷史數據存儲進行付費。
EthStorage 合約,圖片來源:Kernel Ventures
Celestia 數據讀取方式,圖片來源:Celestia Core
在主鏈 DA 技術原理上,曏存儲公鏈借鑒了類似 Sharding 的許多技術。而在第三方 DA 中,有些更是直接借助存儲公鏈完成了部分存儲任務,比如 Celestia 中具體的交易數據就是放在了 LL-IPFS 網絡上。第三方 DA 的方案中,除了搭建一條單獨的公鏈解決 Layer1 的存儲問題之外,一種更直接的方式是直接讓存儲公鏈和 Layer1 對接,存儲 Layer1 上龐大的歷史數據。對於高性能區塊鏈來説,歷史數據的體量更爲龐大,在全速運行的情況下,高性能公鏈 Solana 的數據量大小接近 4 PG,完全超出了普通節點的存儲範圍。Solana 選擇的解決方案是將歷史數據存儲在去中心化存儲網絡 Arweave 上,隻在主網的節點上保留 2 日的數據用來驗證。爲了確保存儲過程的安全性 Solana 與 Arweave 鏈自己專門設計了一個存儲橋協議 Solar Bridge。Solana 節點驗證後的數據會衕步到 Arweave 上併返回相應 tag。隻需要通過該 tag,Solana 節點便可以對 Solana 區塊鏈任意時刻的歷史數據進行查看。而在 Arweave 上,不需要全網節點保持數據一緻性,併以此作爲參與網絡運行的門檻,而是採取了獎勵存儲的方式。首先 Arweave 併沒有採用傳統鏈結構構建區塊,而更類似一種圖的結構。在 Arweave 中,一個新的區塊不僅會指曏前一個區塊,還會隨機指曏一個已生成的區塊 Recall Block。Recall Block 的具體位置由其前一區塊與其區塊高度的哈希結果決定,在前一區塊被挖出之前,Recall Block 的位置是未知的。但是在生成新區塊的過程中,需要節點具有 Recall Block 的數據以使用 POW 機製計算規定難度的哈希,隻有最先計算出符合難度哈希的礦工才可以穫得獎勵,鼓勵了礦工存儲盡可能多的歷史數據。衕時,存儲某個歷史區塊的人越少,節點在生成符合難度 nonce 時會有更少的競爭對手,鼓勵礦工存儲網絡中備份較少的區塊。最後,爲了保證節點在 Arweave 中對數據做永久性存儲,其引入了 WildFire 的節點評分機製。節點間會傾曏於與可以較快的提供更多歷史數據的節點通信,而評分等級較低的節點往往無法第一時間穫得最新的區塊與交易數據從而無法在 POW 的競爭中占取先機。
Arweave 區塊構建方式,圖片來源:Arweave Yellow-Paper
接下來,我們將從 DA 性能指標的四個維度出髮,分別對 5 種存儲方案的優劣進行比較。
存儲方案性能比較,圖片來源:Kernel Ventures
現階段的區塊鏈正在經歷從 Crypto 曏更具包容性的 Web3 轉換的過程中,這個過程中帶來的不僅是區塊鏈上項目的豐富。爲了在 Layer1 上容納如此多項目的衕時運行,衕時保證 Gamefi 和 Socialfi 項目的體驗,以以太坊爲代錶的 Layer1 採取了 Rollup 和 Blobs 等方式來提高 TPS。而新生區塊鏈中,高性能區塊鏈的數量也是不斷增長。但是更高的 TPS 不僅意味著更高的性能,也意味著網絡中更大的存儲壓力。對於海量的歷史數據,現階段提出了主鏈和基於第三方的多種 DA 方式,以適應鏈上存儲壓力的增長。改進方式各有利弊,在不衕情境下有不衕適用性。
以支付爲主的區塊鏈對於歷史數據的安全性有著極高的要求,而不追求特別高的 TPS。如果這類公鏈還處於籌備階段,可以採取類 DankSharding 的存儲方式,在保證安全性的衕時也可以實現存儲容量的巨大提升。但如果是比特幣這種已經成型併有大量節點的公鏈,在共識層貿然進行改進存在巨大風險,因而可以採取鏈外存儲中安全性較高的主鏈專用 DA 來兼顧安全性與存儲問題。但值得註意的是,區塊鏈的功能併不是一成不變而是不斷變化的。比如早期的以太坊的功能主要也局限於支付以及使用智能合約對資産和交易進行簡單的自動化處理,但是隨著區塊鏈版圖的不斷拓展,以太坊上逐漸加入了各種 Socialfi 與 Defi 項目,使以太坊曏著更加綜合性的方曏髮展。而最近伴隨著比特幣上銘文生態的爆髮,比特幣網絡的交易手續費自 8 月以來激增了近 20 倍,背後反映的是現階段比特幣網絡的交易速度無法滿足交易需求,交易者隻能拉高手續費使交易盡快得到處理。現在,比特幣社區需要做出一個 trade-off,是接受高昂的手續費以及緩慢的交易速度,還是降低網絡安全性以提高交易速度但違背支付繫統的初衷。如果比特幣社區選擇了後者,那麽麵對增長的數據壓力,相應的存儲方案也需要做出調整。
比特幣主網交易費用波動,圖片來源:OKLINK
而對於綜合功能的公鏈,其對 TPS 有著更高的追求,歷史數據的增長更加巨大,採取類 DankSharding 的方案長期來看難以適應 TPS 的快速增長。因此,較爲合適的方式是將數據遷移到第三方 DA 進行存儲。其中,主鏈專用 DA 具有最高的兼容性,如果隻考慮單條公鏈的存儲問題,可能更具優勢。但是在 Layer1 公鏈百花齊放的今天,跨鏈資産轉移與數據交互也成爲區塊鏈社區的普遍追求。如果考慮到整個區塊鏈生態的長期髮展,將不衕公鏈的歷史數據存儲在衕一條公鏈上可以消除許多數據交換與驗證過程中的安全問題,因此,模塊化 DA 和存儲公鏈 DA 的方式可能是一個更好的選擇。在通用性接近的前提下,模塊化 DA 專註於提供區塊鏈 DA 層的服務,引入了更精細化的索引數據管理歷史數據,可以對不衕公鏈數據進行一個合理歸類,與存儲公鏈相比具有更多優勢。然而,上述方案併未考慮在已有公鏈上進行共識層調整的成本,這個過程具有極高的風險性,一旦出現問題可能會導緻繫統性的漏洞,使得公鏈失去社區共識。因此,如果是區塊鏈擴容過程中的過渡方案,最簡單的主鏈臨時存儲可能更合適。最後,以上討論都基於實際運行過程中的性能出髮,但如果某條公鏈的目標是髮展自身生態,吸引更多項目方和參與者,也有可能會傾曏於受到自身基金會扶持和資助的項目。比如在衕等甚至總體性能略低於存儲公鏈存儲方案的情況下,以太坊社區也會傾曏於 EthStorage 這類以太坊基金會支持的 Layer2 項目,以持續髮展以太坊生態。
總而言之,當今區塊鏈的功能越來越覆雜,也帶來了更大的存儲空間需求。在 Layer1 驗證節點足夠多的情況下,歷史數據併不需要全網所有節點共衕備份,隻需要備份數量達到某個數值後便可保證相對的安全性。與此衕時,公鏈的分工也變得越來越細緻,Layer1 負責共識和執行,Rollup 負責計算和驗證,再使用單獨的一條區塊鏈進行數據存儲。每個部分都可以專註於某一功能,不受其他部分性能的限製。然而,具體存儲多少數量或讓多少比例的節點存儲歷史數據才能實現安全性與效率的平衡,以及如何保證不衕區塊鏈之間的安全互操作,這是需要區塊鏈開髮者進行思考和不斷完善的問題。對於投資者而言,可以關註以太坊上的主鏈專用 DA 項目,因爲現階段以太坊已有足夠多的支持者,不需要再借助其他社區擴大自己的影響力。更多的需要是完善與髮展自己的社區,吸引更多項目落地以太坊生態。但是對處於追趕者地位的公鏈,比如 Solana,Aptos 來説,單鏈本身沒有那麽完善的生態,因而可能更傾曏於聯合其他社區的力量,搭建一個龐大的跨鏈生態以擴大影響力。因而對於新興的 Layer1 ,通用的第三方 DA 值得更多的關註。
Kernel Ventures是一個由研究和開髮社區驅動的加密風險投資基金,擁有超過70個早期投資,專註於基礎設施、中間件、dApps,尤其是ZK、Rollup、DEX、模塊化區塊鏈,以及將搭載未來數十億加密用戶的垂直領域,如賬戶抽象、數據可用性、可擴展性等。在過去的七年裡,我們一直緻力於支持世界各地的核心開髮社區和大學區塊鏈協會的髮展。
Bagikan
區塊鏈作爲分布式賬本,需要在所有節點上都對歷史數據作一份存儲,以確保數據存儲的安全與足夠去中心化。由於每一次狀態變動的正確性都與上一個狀態(交易來源)有關,爲了確保交易的正確性,一條區塊鏈原則上應當存儲從第一筆交易産生到當下交易的所有歷史記録。以以太坊爲例,即便按照平均每個區塊 20 kb 的大小估計,當前以太坊區塊的總大小也已達到 370 GB,而一個全節點除了區塊本身,還要對狀態和交易收據記録。算上這部分,單個節點存儲總量已超過 1 TB,這使得節點的運營曏少數人集中。
以太坊最新區塊高度,圖片來源:Etherscan
區塊鏈相對於數據庫或者鏈錶存儲結構而言,其不可篡改性來自於可以通過歷史數據對新産生的數據進行校驗,因而確保其歷史數據的安全性是 DA 層存儲中首先要考慮的問題。對於區塊鏈繫統數據安全性的評判,我們往往從數據的冗餘數量和數據可用性的校驗方式進行分析
在確保了基礎安全性的前提下,DA 層下個需要實現的核心目標便是降本增效。首先是降低存儲成本,在不考慮硬件性能差異的情況下,也就是降低存儲單位大小數據造成的內存占用。現階段區塊鏈中降低存儲成本的方式主要是採取分片技術以及使用獎勵式存儲以確保數據被有效存儲基礎上降低數據備份數量。但是從以上改進方式不難看出,存儲成本與數據的安全性存在博弈關繫,降低存儲的占用也往往意味著安全性的下降。因而一個優秀的 DA 層需要實現存儲成本與數據安全性之間的平衡。此外,如果 DA 層如果是一條單獨的公鏈的話,還需要通過盡量減少數據交換所經歷的中間過程以減少成本,在每一次中轉過程都需要留下索引數據以供後續查詢時的調用,因而越長的調用過程就會留有越多的索引數據而增加存儲成本。最後,數據的存儲成本直接和數據的持久性直接掛鉤。一般情況下,數據的存儲成本越高,公鏈越難以對數據持久化存儲。
實現了降本,下一步便是增效,也就是當需要使用數據時將其迅速從 DA 層中調用出來的能力。這個過程涉及兩個步驟,首先是搜尋存儲數據的節點,這個過程主要是對於未實現全網數據一緻性的公鏈而言的,如果公鏈實現了全網節點的數據衕步,便可以忽略這一過程的時間消耗。其次,現階段主流的區塊鏈繫統,包括 Bitcoin,Ethereum,Filecoin 中,節點存儲方式爲 Leveldb 數據庫。在 Leveldb 中,數據以三種方式存儲。首先是即時寫入的數據會存儲在 Memtable 類型文件中,當 Memtable 存儲滿了後則會將文件類型從 Memtable 改爲 Immutable Memtable。這兩種類型的文件均存儲在內存中,但是 Immutable Memtable 文件無法再做更改,隻能從中讀取數據。IPFS 網絡中使用的熱存儲就是將數據存儲在了這個部分,當要調用時就可以快速從內存讀取,但是一個普通節點的移動內存往往都是 GB 級別,很容易就會寫慢,併且當節點出現宕機等異常情況後,內存中的數據便會永久丟失。如果希望數據持久存儲,則需要以 SST 文件的形式存儲到固態硬盤(SSD),但讀取數據時需要先將數據讀到內存,因而大大降低數據索引速度。最後,對於採取了分片存儲的繫統,其數據還原時需要曏多個節點髮送數據請求併進行還原,這個過程也會降低數據的讀取速度。
Leveldb 數據存儲方式,圖片來源:Leveldb-handbook
隨著 DeFi 的髮展,以及 CEX 的種種問題,用戶對於去中心化資産跨鏈交易的要求也不斷增長。而無論是採取哈希鎖定,公證人還是中繼鏈的跨鏈機製,都避免不了對兩條鏈上歷史數據的衕時確定。這個問題的關鍵在於兩條鏈上數據的分離,不衕的去中心化繫統中無法實現直接溝通。因而現階段通過改變 DA 層存儲方式提出了一種解決方案,既將多條公鏈的歷史數據存儲在衕一條可信的公鏈上,驗證的時候隻需要在這條公鏈上調用數據即可。這需要 DA 層能夠與不衕類型的公鏈建立安全的通信方式,也就是 DA 層具有較好的通用性。
Sharding 後的數據存儲方式,圖片來源:Kernel Ventures
DAS 技術是基於 Sharding 在存儲方式上的進一步優化。在 Sharding 過程中,由於節點簡單的隨機存儲,可能會出現某個 Block 丟失的情況。其次,對於分片後的數據,還原過程中如何確認數據的真實性與完整性也非常重要。在 DAS 中,通過 Eraser code 與 KZG 多項式承諾對這兩個問題進行了解決。
數據校驗既確保從節點中調用的數據未被篡改且具有沒有出現丟失。爲了盡可能減少校驗過程中所需要的數據量以及計算成本,DA 層現階段採用樹結構做爲主流的校驗方式。最簡單的形式便是使用 Merkle Tree 進行校驗,使用完全二叉樹的形式記録,隻需要保留一個 Merkle Root 以及節點路徑上另一側子樹的哈希值便可以進行校驗,校驗的時間覆雜度爲 O(logN) 級別(如果 logN 不加底數默認爲 log2(N))。雖然已經極大簡化了校驗過程,但是驗證過程的數據量總體還是隨著數據的增加而增長。爲了解決增加的驗證量問題,現階段提出了另一種驗證方式,Verkle Tree。Verkle Tree 中每個節點除了存儲 value 還會附帶一個 Vector Commitment ,通過原始節點的值和這個承諾性證明就可以快速對數據真實性進行驗證,而不需要調用其他姐妹節點的值,這使得每次驗證的計算次數隻和 Verkle Tree 的深度有關,是一個固定的常數,從而大大加速了驗證速度。但是 Vector Commitment 的計算需要衕一層所有姐妹節點的參與,這大大增大了寫入數據與更改數據的成本。但是對於歷史數據這類做永久性存儲而不能篡改的數據,隻有讀而沒有寫的需求,Verkle Tree 就顯得極爲合適了。此外 Merkle Tree 與 Verkle Tree 本身還有 K-ary 形式下的變體,其具體實現機製相似,隻是改變了每個節點下子樹的數量,其具體性能的對比可以見下錶。
數據校驗方式時間性能對比,圖片來源:Verkle Trees
區塊鏈生態的不斷擴大,隨之帶來公鏈數量的不斷增加。由於各條公鏈在各自領域的優勢與不可替代性,短時間內 Layer1 公鏈幾無可能走曏統一。但是隨著 DeFi 的髮展,以及 CEX 的種種問題,用戶對於去中心化跨鏈交易資産的要求也不斷增長。因此,可以消除跨鏈數據交互中的安全問題的 DA 層多鏈數據存儲得到了越來越多的關註。但是要接受來自不衕公鏈的歷史數據,需要 DA 層提供數據流標準化存儲與驗證的去中心化協議,比如基於 Arweave 的存儲中間件 kvye ,採取主動從鏈上抓取數據的方式,可以將所有鏈上的數據以標準的形式存儲至 Arweave,以最小化數據傳輸過程的差異性。相對來説,專門爲某條公鏈提供 DA 層數據存儲的 Layer2 通過內部共享節點的方式進行數據交互,雖然降低了交互的成本併提高了安全性,但是具有比較大的局限性,僅能曏特定公鏈提供服務。
這類存儲方案暫時還沒有確定的名稱,而其中最突出的代錶就是以太坊上的 DankSharding,因而本文中使用類 DankSharding 代稱這一類方案。這類方案主要使用了上述的兩種 DA 存儲技術,Sharding 和 DAS。首先通過 Sharding 將數據分成合適的份數,然後再讓每個節點以 DAS 的形式抽取一個數據 Block 進行存儲。對於全網節點足夠多的情況,我們可以取一個較大的分片數 N,這樣每個節點的存儲壓力隻有原來的 1/N,從而實現整體存儲空間的 N 倍擴容。衕時爲了保證防止某個 Block 沒有被任一區塊存儲的極端情況,DankSharding 對數據使用 Eraser Code 進行了編碼,隻需要一半的數據就可以進行完整還原。最後是對數據的檢驗過程,使用了 Verkle 樹的結構與多項式承諾,實現了快速的校驗。
對於主鏈的 DA,一種最爲簡單的數據處理方式就是對歷史數據進行短期存儲。本質上來説,區塊鏈所起的是一個公示賬本的作用,在全網共衕見證的前提下實現對賬本內容的更改,而併沒有永久化存儲的需求。以 Solana 爲例,雖然其歷史數據被衕步到了 Arweave 上,但是主網節點隻保留了近兩日的交易數據。基於賬戶記録的公鏈上,每一時刻的歷史數據保留了區塊鏈上賬戶最終的狀態,便足以爲下一時刻的更改提供驗證依據。而對於這個時間段之前數據有特殊需求的項目方,可以自己在其他去中心化公鏈上或者交由可信第三方進行存儲。也就是説對於數據有額外需求的人,需要對歷史數據存儲進行付費。
EthStorage 合約,圖片來源:Kernel Ventures
Celestia 數據讀取方式,圖片來源:Celestia Core
在主鏈 DA 技術原理上,曏存儲公鏈借鑒了類似 Sharding 的許多技術。而在第三方 DA 中,有些更是直接借助存儲公鏈完成了部分存儲任務,比如 Celestia 中具體的交易數據就是放在了 LL-IPFS 網絡上。第三方 DA 的方案中,除了搭建一條單獨的公鏈解決 Layer1 的存儲問題之外,一種更直接的方式是直接讓存儲公鏈和 Layer1 對接,存儲 Layer1 上龐大的歷史數據。對於高性能區塊鏈來説,歷史數據的體量更爲龐大,在全速運行的情況下,高性能公鏈 Solana 的數據量大小接近 4 PG,完全超出了普通節點的存儲範圍。Solana 選擇的解決方案是將歷史數據存儲在去中心化存儲網絡 Arweave 上,隻在主網的節點上保留 2 日的數據用來驗證。爲了確保存儲過程的安全性 Solana 與 Arweave 鏈自己專門設計了一個存儲橋協議 Solar Bridge。Solana 節點驗證後的數據會衕步到 Arweave 上併返回相應 tag。隻需要通過該 tag,Solana 節點便可以對 Solana 區塊鏈任意時刻的歷史數據進行查看。而在 Arweave 上,不需要全網節點保持數據一緻性,併以此作爲參與網絡運行的門檻,而是採取了獎勵存儲的方式。首先 Arweave 併沒有採用傳統鏈結構構建區塊,而更類似一種圖的結構。在 Arweave 中,一個新的區塊不僅會指曏前一個區塊,還會隨機指曏一個已生成的區塊 Recall Block。Recall Block 的具體位置由其前一區塊與其區塊高度的哈希結果決定,在前一區塊被挖出之前,Recall Block 的位置是未知的。但是在生成新區塊的過程中,需要節點具有 Recall Block 的數據以使用 POW 機製計算規定難度的哈希,隻有最先計算出符合難度哈希的礦工才可以穫得獎勵,鼓勵了礦工存儲盡可能多的歷史數據。衕時,存儲某個歷史區塊的人越少,節點在生成符合難度 nonce 時會有更少的競爭對手,鼓勵礦工存儲網絡中備份較少的區塊。最後,爲了保證節點在 Arweave 中對數據做永久性存儲,其引入了 WildFire 的節點評分機製。節點間會傾曏於與可以較快的提供更多歷史數據的節點通信,而評分等級較低的節點往往無法第一時間穫得最新的區塊與交易數據從而無法在 POW 的競爭中占取先機。
Arweave 區塊構建方式,圖片來源:Arweave Yellow-Paper
接下來,我們將從 DA 性能指標的四個維度出髮,分別對 5 種存儲方案的優劣進行比較。
存儲方案性能比較,圖片來源:Kernel Ventures
現階段的區塊鏈正在經歷從 Crypto 曏更具包容性的 Web3 轉換的過程中,這個過程中帶來的不僅是區塊鏈上項目的豐富。爲了在 Layer1 上容納如此多項目的衕時運行,衕時保證 Gamefi 和 Socialfi 項目的體驗,以以太坊爲代錶的 Layer1 採取了 Rollup 和 Blobs 等方式來提高 TPS。而新生區塊鏈中,高性能區塊鏈的數量也是不斷增長。但是更高的 TPS 不僅意味著更高的性能,也意味著網絡中更大的存儲壓力。對於海量的歷史數據,現階段提出了主鏈和基於第三方的多種 DA 方式,以適應鏈上存儲壓力的增長。改進方式各有利弊,在不衕情境下有不衕適用性。
以支付爲主的區塊鏈對於歷史數據的安全性有著極高的要求,而不追求特別高的 TPS。如果這類公鏈還處於籌備階段,可以採取類 DankSharding 的存儲方式,在保證安全性的衕時也可以實現存儲容量的巨大提升。但如果是比特幣這種已經成型併有大量節點的公鏈,在共識層貿然進行改進存在巨大風險,因而可以採取鏈外存儲中安全性較高的主鏈專用 DA 來兼顧安全性與存儲問題。但值得註意的是,區塊鏈的功能併不是一成不變而是不斷變化的。比如早期的以太坊的功能主要也局限於支付以及使用智能合約對資産和交易進行簡單的自動化處理,但是隨著區塊鏈版圖的不斷拓展,以太坊上逐漸加入了各種 Socialfi 與 Defi 項目,使以太坊曏著更加綜合性的方曏髮展。而最近伴隨著比特幣上銘文生態的爆髮,比特幣網絡的交易手續費自 8 月以來激增了近 20 倍,背後反映的是現階段比特幣網絡的交易速度無法滿足交易需求,交易者隻能拉高手續費使交易盡快得到處理。現在,比特幣社區需要做出一個 trade-off,是接受高昂的手續費以及緩慢的交易速度,還是降低網絡安全性以提高交易速度但違背支付繫統的初衷。如果比特幣社區選擇了後者,那麽麵對增長的數據壓力,相應的存儲方案也需要做出調整。
比特幣主網交易費用波動,圖片來源:OKLINK
而對於綜合功能的公鏈,其對 TPS 有著更高的追求,歷史數據的增長更加巨大,採取類 DankSharding 的方案長期來看難以適應 TPS 的快速增長。因此,較爲合適的方式是將數據遷移到第三方 DA 進行存儲。其中,主鏈專用 DA 具有最高的兼容性,如果隻考慮單條公鏈的存儲問題,可能更具優勢。但是在 Layer1 公鏈百花齊放的今天,跨鏈資産轉移與數據交互也成爲區塊鏈社區的普遍追求。如果考慮到整個區塊鏈生態的長期髮展,將不衕公鏈的歷史數據存儲在衕一條公鏈上可以消除許多數據交換與驗證過程中的安全問題,因此,模塊化 DA 和存儲公鏈 DA 的方式可能是一個更好的選擇。在通用性接近的前提下,模塊化 DA 專註於提供區塊鏈 DA 層的服務,引入了更精細化的索引數據管理歷史數據,可以對不衕公鏈數據進行一個合理歸類,與存儲公鏈相比具有更多優勢。然而,上述方案併未考慮在已有公鏈上進行共識層調整的成本,這個過程具有極高的風險性,一旦出現問題可能會導緻繫統性的漏洞,使得公鏈失去社區共識。因此,如果是區塊鏈擴容過程中的過渡方案,最簡單的主鏈臨時存儲可能更合適。最後,以上討論都基於實際運行過程中的性能出髮,但如果某條公鏈的目標是髮展自身生態,吸引更多項目方和參與者,也有可能會傾曏於受到自身基金會扶持和資助的項目。比如在衕等甚至總體性能略低於存儲公鏈存儲方案的情況下,以太坊社區也會傾曏於 EthStorage 這類以太坊基金會支持的 Layer2 項目,以持續髮展以太坊生態。
總而言之,當今區塊鏈的功能越來越覆雜,也帶來了更大的存儲空間需求。在 Layer1 驗證節點足夠多的情況下,歷史數據併不需要全網所有節點共衕備份,隻需要備份數量達到某個數值後便可保證相對的安全性。與此衕時,公鏈的分工也變得越來越細緻,Layer1 負責共識和執行,Rollup 負責計算和驗證,再使用單獨的一條區塊鏈進行數據存儲。每個部分都可以專註於某一功能,不受其他部分性能的限製。然而,具體存儲多少數量或讓多少比例的節點存儲歷史數據才能實現安全性與效率的平衡,以及如何保證不衕區塊鏈之間的安全互操作,這是需要區塊鏈開髮者進行思考和不斷完善的問題。對於投資者而言,可以關註以太坊上的主鏈專用 DA 項目,因爲現階段以太坊已有足夠多的支持者,不需要再借助其他社區擴大自己的影響力。更多的需要是完善與髮展自己的社區,吸引更多項目落地以太坊生態。但是對處於追趕者地位的公鏈,比如 Solana,Aptos 來説,單鏈本身沒有那麽完善的生態,因而可能更傾曏於聯合其他社區的力量,搭建一個龐大的跨鏈生態以擴大影響力。因而對於新興的 Layer1 ,通用的第三方 DA 值得更多的關註。
Kernel Ventures是一個由研究和開髮社區驅動的加密風險投資基金,擁有超過70個早期投資,專註於基礎設施、中間件、dApps,尤其是ZK、Rollup、DEX、模塊化區塊鏈,以及將搭載未來數十億加密用戶的垂直領域,如賬戶抽象、數據可用性、可擴展性等。在過去的七年裡,我們一直緻力於支持世界各地的核心開髮社區和大學區塊鏈協會的髮展。