
深入存儲證明:實現跨時間、跨鏈的區塊鏈狀態感知
TechFlow Selected深潮精選

深入存儲證明:實現跨時間、跨鏈的區塊鏈狀態感知
存儲證明可以使以太坊作為身份和資產所有權層出現,而不僅僅是一個結算層。
撰寫:LongHash Ventures
編譯:深潮 TechFlow
如果你每小時都失去記憶,需要不停詢問別人告訴你做過什麼事怎麼辦?這就是智能合約目前所處的狀態。在以太坊這樣的區塊鏈上,智能合約無法直接訪問超過 256 個區塊之外的狀態。這個問題在多鏈生態系統中更加嚴重,跨不同執行層檢索和驗證數據甚至更加困難。
2020 年,Vitalik Buterin 和 Tomasz Stanczak 提出了一種跨時間訪問數據的方法。雖然這一 EIP 方案陷入了停滯,但它的需求在以 Roll-up 為中心的多鏈世界中重新出現。如今,存儲證明已經成為前沿領域,以賦予智能合約意識和記憶。
訪問鏈上數據的方式
Dapp 可以通過多種方式訪問數據和狀態。所有這些方法都需要應用程序對人類/實體、加密經濟安全性或代碼進行一定程度的信任,並都存在一定的權衡取捨:

信任人類/實體:
存檔節點:操作者可以自己運行存檔節點,或者依賴 Alchemy、Infura 等存檔節點服務提供商,訪問從創世塊開始的所有數據。它們提供與全節點相同的數據,還包括整個區塊鏈的所有歷史狀態數據。鏈下服務如 Etherscan 和 Dune Analytics 使用存檔節點訪問鏈上數據。鏈下參與者可以證明這些數據的有效性,鏈上智能合約可以驗證數據是由可信參與者/委員會簽名的。但是底層數據的完整性無法被驗證。這種方法需要 Dapp 信任存檔節點服務提供商以正確的方式運行基礎設施,沒有任何惡意意圖。
信任加密經濟安全性:
-
索引器:索引協議組織區塊鏈上的所有數據,允許開發者構建和發佈開放 API,以便應用程序可以查詢。單個索引器是質押代幣以提供索引和查詢處理服務的節點操作者。但是,當提供的數據不正確時,可能會發生爭議,仲裁過程需要時間。此外,來自 The Graph 等索引器的數據不能被直接利用在智能合約的業務邏輯中,而是被用於基於 web2 的數據分析背景中。
-
預言機:預言機服務提供商使用從許多獨立節點操作者那裡彙總的數據。這裡的挑戰在於,從預言機獲得的數據可能不會被頻繁更新,範圍也有限。像 Chainlink 這樣的預言機通常只維護特定狀態,比如價格信息,對於應用程序特定狀態和歷史的數據則不可行。此外,這種方法也會在數據中引入一定程度的偏差,需要信任節點運營商。
信任代碼:
特殊變量和函數:像以太坊這樣的區塊鏈具有特殊變量和函數,主要用於提供關於區塊鏈的信息,或者是通用實用函數。智能合約只能訪問最近 256 個區塊的區塊哈希。出於可擴展性的原因,並非所有區塊的區塊哈希都是可用的。能夠訪問歷史區塊哈希將非常有用,因為它可以允許針對它們進行證明的驗證。EVM 執行環境中沒有可以訪問舊區塊內容、之前交易內容或收據輸出的操作碼,所以節點可以安全地忘記這些內容,並仍能處理新區塊。這種方法也僅限於單個區塊鏈。
鑑於這些解決方案的挑戰和侷限性,顯然存在對鏈上存儲和提供區塊哈希的明確需求。這就是存儲證明的用武之地。為了更好地理解存儲證明,我們快速看一下區塊鏈中的數據存儲。
區塊鏈中的數據存儲
區塊鏈是一個公共數據庫,在網絡中的許多計算機之間更新和共享。數據和狀態以連續的區塊組存儲,每個區塊通過存儲前一個區塊頭的哈希來加密引用其父區塊。
以以太坊區塊為例。以太坊使用一種特殊的 Merkle 樹,稱為“Merkle Patricia Tree”(MPT)。以太坊區塊頭包含四個不同的 Merkle -Patricia 樹的根,即狀態樹、存儲樹、收據樹和交易樹。這四棵樹對包含所有以太坊數據的映射進行編碼。使用 Merkle 樹是由於其在數據存儲中的高效性。通過遞歸哈希,最終只需要存儲根哈希,節省了大量空間。它們允許任何人通過證明遞歸哈希節點導致相同的根哈希,來證明樹中元素的存在。Merkle 證明允許以太坊上的輕客戶端通過回答以下問題來獲取答案:
-
這個交易存在於某個特定區塊中嗎?
-
我的賬戶當前餘額是多少?
-
這個賬戶存在嗎?
與下載每個交易和每個區塊不同,“輕客戶端”只能下載區塊頭鏈,並使用 Merkle 證明來驗證信息。這使整個過程非常高效。
請參閱Vitalik 和 Maven11 的這篇博客研究文章,更好地理解與 Merkle 樹相關的實現、優點和挑戰。
存儲證明
存儲證明允許我們使用加密證明來證明某件事被記錄在數據庫中且有效。如果我們能提供這樣的證明,那就是一個可驗證的聲明,證明某件事發生在區塊鏈上。
存儲證明可以實現什麼?
存儲證明允許兩個主要功能:
-
訪問最後 256 個區塊之外的歷史鏈上數據,一直回到創世塊
-
在一個區塊鏈上訪問另一個區塊鏈的鏈上數據(歷史和當前),藉助共識驗證或 L2 橋接(針對 L2)
存儲證明的工作原理是什麼?
簡單來說,存儲證明檢查特定區塊是否是區塊鏈的規範歷史的一部分,然後驗證所請求的特定數據是否是區塊的一部分。這可以通過以下方式實現:
-
鏈上處理:Dapp 可以獲取初始可信區塊,將區塊作為 Calldata 傳遞以訪問前一個區塊,一直遍歷回創世塊。這需要大量的鏈上計算和大量的 Calldata。由於需要海量的鏈上計算,這種方法完全不切實際。Aragon 在 2018 年嘗試使用鏈上方法,但由於高昂的鏈上成本而不可行。
-
使用零知識證明:方法類似於鏈上處理,不同之處在於使用零知識證明將複雜計算轉移到鏈下。
訪問同一鏈的數據:可以使用零知識證明斷言任意歷史區塊頭是執行環境中可訪問的最近 256 個區塊頭的祖先之一。另一種方法是索引源鏈的全部歷史並生成零知識證明以證明索引正確完成。該證明會隨源鏈的新區塊添加而定期更新。
-
訪問跨鏈數據:提供者在目標鏈上收集源鏈的區塊頭,並使用零知識共識證明證明這些區塊頭的有效性。也可以使用現有的跨鏈消息傳遞解決方案,如 Axelar、Celer 或 LayerZero 來查詢區塊頭。
-
在目標鏈上維護源鏈的區塊頭哈希緩存,或鏈下區塊哈希累加器的根哈希。這個緩存定期更新,用於在鏈上高效證明給定的區塊存在且與可從狀態訪問的最近的區塊哈希具有加密鏈接。這個過程稱為證明鏈的連續性。也可以使用專用區塊鏈來存儲所有源鏈的區塊頭。
-
根據 Dapp 在目標鏈上的請求,從鏈下索引數據或鏈上緩存(取決於請求的複雜性)訪問歷史數據/區塊。 緩存的區塊頭哈希在鏈上維護,而實際數據可能存儲在鏈下。
-
通過 Merkle 包含證明檢查指定區塊中是否存在數據,併為此生成零知識證明。該證明與正確索引的零知識證明或零知識共識證明相結合,並在鏈上提供以進行無需信任的驗證。
-
然後 Dapp 可以在鏈上驗證該證明,並使用數據執行所需操作。除了驗證零知識證明,公共參數(如區塊號和區塊哈希)也與在鏈上維護的區塊頭緩存進行檢查。
採用這種方法的項目有 Herodotus、Lagrange、Axiom、HyperOracle、Brevis Network 和 nil 基金會。儘管正為使應用程序跨多個區塊鏈具有狀態意識而做出重大努力,但 IBC(鏈間通信)作為一種互操作性標準脫穎而出,支持應用程序使用如 ICQ(跨鏈查詢)和 ICA(跨鏈帳戶)。 ICQ 使 Chain A 上的應用程序可以通過在簡單的 IBC 數據包中包含查詢來查詢 Chain B 的狀態,ICA 允許一個區塊鏈安全控制另一個區塊鏈上的賬戶。將它們組合在一起可以支持有趣的跨鏈用例。像 Saga 這樣的 RaaS 提供商會默認使用 IBC 為所有應用鏈提供這些功能。
存儲證明可以通過多種方式進行優化,以在內存消耗、證明時間、驗證時間、計算效率和開發者體驗之間找到最佳平衡。整個過程可以大致分為 3 個主要子過程:
-
數據訪問;
-
數據處理;
-
數據訪問和處理的零知識證明生成。

數據訪問:在這個子過程中,服務提供商以原生方式在執行層訪問源鏈的區塊頭,或通過維護鏈上緩存。對於跨鏈的數據訪問,需要在目標鏈上驗證源鏈共識。採用的方法和優化包括:
-
現有以太坊區塊鏈:可以使用以太坊區塊鏈的現有結構,利用零知識證明證明相對於當前區塊頭的任意歷史存儲插槽的值。這可以視為一個大型包含證明。也就是說,給定最近的區塊頭 X 在高度 b,存在區塊頭 Y 在高度 b-k 是 X 的祖先。這基於以太坊共識的安全性,需要高效的證明系統。這是 Lagrange 採用的方法。
-
鏈上 Merkle Mountain Ranges (MMR) 緩存:Merkle Mountain Range 可以看作是 Merkle 樹列表,當兩個樹達到相同大小時組合起來。MMR 中的單個 Merkle 樹通過將父節點添加到樹的先前根來組合。MMR 與 Merkle 樹類似,具有一些額外優點,例如有效地追加元素和高效的數據查詢,特別是從大型數據集讀取順序數據。通過 Merkle 樹追加新頭需要在每個級別傳遞所有姐妹節點。為了有效地追加數據,Axiom 使用 MMR 在鏈上維護區塊頭哈希的緩存。Herodotus 在鏈上存儲 MMR 區塊哈希累加器的根哈希。這使他們能夠通過包含證明檢查所獲取的數據與這些區塊頭哈希。這種方法需要定期更新緩存,如果不去中心化會帶來活躍性問題。
-
為了優化效率和計算成本,Herodotus 維護兩種不同的 MMR。 根據特定的區塊鏈或層,累加器可以使用不同的哈希函數進行定製。對 Starknet 進行證明時可能使用 poseidon 哈希,但對 EVM 鏈使用 Keccack 哈希。
-
鏈下 MMR 緩存:Herodotus 維護鏈下緩存之前獲取的查詢和結果,以便在再次請求數據時能更快獲取。這需要比僅運行存檔節點更多的基礎設施。 在鏈下基礎設施上的優化潛在地可以為終端用戶減少成本。
-
專用區塊鏈用於存儲:Brevis 依靠專用的零知識 rollup(聚合層)來存儲其證明的所有鏈的所有區塊頭。如果沒有這個聚合層,每個鏈都需要存儲每個其他鏈的區塊頭,這將導致對於 N 條區塊鏈有 O(N2)“連接”。通過引入聚合層,每個區塊鏈只需要存儲 rollup 的狀態根,將總體連接降低到 O(N)。該層還用於聚合多個區塊頭/查詢結果證明,並在每個連接的區塊鏈上提交單個驗證證明。
-
L1-L2 消息傳遞:由於 L2 支持通過 L1 更新 L2 合約的原生消息傳遞,所以可以避免源鏈共識驗證。緩存可以在以太坊上更新,L1-L2 消息傳遞可以用於將鏈下編譯的區塊哈希或樹根發送到其他 L2。Herodotus 正在採用這種方法,但這對於 alt L1 不可行。
數據處理:
除了訪問數據,智能合約還應該能夠對數據進行任意計算。雖然一些用例可能不需要計算,但對許多其他用例來說,這是一個重要的增值服務。許多服務提供商支持以零知識證明的形式對數據進行計算,並在鏈上提供該證明以驗證其有效性。因為現有的跨鏈消息傳遞解決方案如 Axelar、LayerZero、Polyhedra Network 可能被用於數據訪問,因此數據處理可能會成為存儲證明服務提供商的一個差異化點。
例如,HyperOracle 允許開發者使用 JavaScript 定義自定義的鏈下計算。Brevis 設計了一個開放的零知識查詢引擎市場,接受來自 Dapp 的數據查詢,並使用證明過的區塊頭對其進行處理。智能合約發送數據查詢,由市場上的證明者獲取。證明者基於查詢輸入、相關的區塊頭(來自 Brevis 聚合層)和結果生成證明。Lagrange 引入了零知識大數據技術棧,用於證明分佈式編程模型如 SQL、MapReduce 和 Spark/RDD。這些證明是模塊化的,可以由來自現有跨鏈橋接和跨鏈消息傳遞協議的任何區塊頭生成。Lagrange 零知識大數據技術棧的第一個產品是零知識 MapReduce,這是一個用於證明涉及大量多鏈數據計算結果的分佈式計算引擎(基於著名的 MapReduce 編程模型)。例如,單個零知識 MapReduce 證明可以證明部署在 4-5 條鏈上的 DEX 在指定時間窗口內的流動性變化。對於相對簡單的查詢,計算也可以像 Herodotus 目前所做的那樣直接在鏈上完成。
證明生成:
-
可更新證明:當需要對移動的區塊流計算和有效維護證明時,可以使用可更新證明。當新的區塊被創建時,為了維護合約變量(如代幣價格)的移動平均證明,可以高效更新現有證明,而不需要從頭重新計算新的證明。為了證明鏈上狀態的動態數據並行計算,Lagrange 在 MPT 的一部分之上構建了一個批量向量承諾,稱為 Recproof,實時更新它,並對其進行動態計算。通過在 MPT 之上遞歸創建 Verkle 樹,Lagrange 能夠高效計算大量動態鏈上狀態數據。
-
Verkle 樹:與 Merkle 樹不同,Merkle 樹需要提供所有共享父節點的節點,Verkle 樹只需要根路徑。與 Merkle 樹中的所有姐妹節點相比,這條路徑要小得多。以太坊也在考慮在未來版本中使用 Verkle 樹來最小化以太坊全節點需要持有的狀態量。Brevis 利用 Verkle 樹在聚合層存儲證明過的區塊頭和查詢結果。它大大減小了數據包含證明的大小,特別是當樹包含大量元素時,並支持高效包含證明批量數據。
-
內存池監控以加快證明生成:Herodotus 最近發佈了 turbo,允許開發者在智能合約代碼中添加幾行代碼來指定數據查詢。Herodotus 監控與 turbo 合約交互的智能合約交易的內存池。當交易在內存池本身時,證明生成過程就開始了。一旦證明在鏈上生成和驗證,結果就被寫入鏈上 turbo 交換合約。只有通過存儲證明進行身份驗證後,結果才能被寫入 turbo 交換合約。一旦發生這種情況,交易費用的一部分就與排序器或區塊生成者共享,激勵他們等待更長時間以收取費用。對於簡單的數據查詢,所請求的數據可能在用戶的交易被包含在區塊之前就已經在鏈上可用。
狀態/存儲證明的應用
狀態和存儲證明可以為應用層、中間件和基礎設施層的智能合約解鎖許多新的用例。其中一些是:
應用層:
治理:
-
跨鏈投票:鏈上投票協議可以允許 Chain B 上的用戶證明在 Chain A 上擁有資產。用戶不需要橋接他們的資產才能在新的鏈上獲得投票權。例如:Herodotus 上的 SnapshotX
-
治理代幣分發:應用可以向活躍用戶或早期採用者分發更多的治理代幣。例如:Lagrange 上的 RetroPGF。
身份和聲譽:
-
所有權證明:用戶可以證明在鏈 A 上擁有某個 NFT、SBT 或資產,從而在鏈 B 上執行某些操作。例如,遊戲應用鏈可以決定在其他有現有流動性的鏈上像以太坊或任何 L2 啟動其 NFT 收藏。這將允許遊戲利用其他地方存在的流動性,而實際上不需要跨鏈 NFT。
-
使用證明:用戶可以根據其在平臺上的歷史使用情況(證明用戶在 Uniswap 上交易了 X 量)獲得折扣或高級功能。
-
OG 證明:用戶可以證明他/她擁有一個活躍賬戶,該賬戶的天數超過 X 天。
-
鏈上信用評分:一個跨鏈信用評分平臺可以彙總單個用戶的多個賬戶的數據以生成信用評分。
上述所有證明都可以用於向用戶提供定製體驗。Dapp 可以提供折扣或特權來保留有經驗的交易員或用戶,併為新手用戶提供簡化的用戶體驗。
Defi:
-
跨鏈借貸:用戶可以在鏈 A 上鎖定資產,而在鏈 B 上獲得貸款,而不需要橋接代幣。
-
鏈上保險:可以通過訪問歷史鏈上數據來確定故障,保險賠付可以完全在鏈上完成。
-
資產在池中的時間加權平均價格:應用可以計算並獲取資產在指定時間段內 AMM 池中的平均價格。 例如:Axiom 上的 Uniswap TWAP 預言機。
-
期權定價:鏈上期權協議可以使用資產在去中心化交易所過去 n 個區塊上的波動性來對期權進行定價。
最後兩個用例將需要在源鏈中添加新區塊時更新證明。
中間件:
-
意圖:存儲證明將允許用戶對意圖更具表現力和明確。雖然求解器的工作是執行必要的步驟以滿足用戶的意圖,但用戶可以根據鏈上數據和參數更清楚地指定條件。求解器還可以證明找到最佳解決方案所利用的鏈上數據的有效性。
-
賬戶抽象:用戶可以利用存儲證明根據來自其他鏈的數據設置規則。例如:每個錢包都有一個 nonce。我們可以證明一年前 nonce 是一個特定的數字,目前 nonce 與之相同。這可以被用來證明這個錢包根本沒有被使用過,然後可以將錢包的訪問權委託給另一個錢包。
-
鏈上自動化:智能合約可以根據依賴鏈上數據的預定義條件自動執行某些操作。自動化程序需要定期調用智能合約以維持 AMM 的最佳價格流動或通過避免不良債務來保持借貸協議的健康。HyperOracle 支持自動化以及鏈上數據訪問。
基礎設施
-
無需信任的鏈上預言機:去中心化的預言機網絡彙總來自預言機網絡內多個單獨預言機節點的響應。預言機網絡可以消除這種冗餘,利用加密安全性實現鏈上數據。預言機網絡可以將來自多個鏈(L1、L2 和 alt L1)的數據彙集到單個鏈上,並簡單地使用存儲證明證明其他地方的存在。取得重大進展的 DeFi 解決方案也可以使用定製解決方案。例如,最大的流動性質押提供者 Lido Finance 已經與 Nil Foundation 合作,資助 zkOracle 的開發。這些解決方案將實現對 EVM 歷史數據的無需信任的數據訪問,並保護 Lido Finance150 億美元的已抵押以太坊流動性。
-
跨鏈消息傳遞協議:現有的跨鏈消息傳遞解決方案可以通過與存儲證明服務提供商合作來增加其消息的表達能力。這是 Lagrange 在其模塊化論文中建議的方法。
結論
意識讓科技公司能夠更好地為客戶服務。 從用戶身份到購買行為再到社交關係,科技公司利用認知來解鎖精準定位、客戶細分和病毒營銷等功能。傳統的科技公司需要用戶的明確許可,在管理用戶數據時必須謹慎行事。但是,許可區塊鏈上的所有用戶數據都是公開的,不一定會洩露用戶身份。智能合約應該能夠利用公開可用的數據來更好地為用戶服務。更專業生態系統的發展和採用,將使跨時間和跨鏈的狀態意識成為一個越來越重要的問題。存儲證明可以使以太坊作為身份和資產所有權層出現,而不僅僅是一個結算層。用戶可以在以太坊上維護自己的身份和關鍵資產,這可以在多個區塊鏈中使用,而不需要始終橋接資產。我們對未來會解鎖的新可能性和用例保持興奮。
歡迎加入深潮 TechFlow 官方社群
Telegram 訂閱群:https://t.me/TechFlowDaily
Twitter 官方帳號:https://x.com/TechFlowPost
Twitter 英文帳號:https://x.com/BlockFlow_News














