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



存儲證明可以使乙太坊作為身份和資產所有權層出現,而不僅僅是一個結算層。

撰寫:LongHash Ventures

編譯:深潮TechFlow

如果你每小時都失去記憶,需要不停詢問別人告訴你做過什麼事怎麼辦? 這就是智慧合約現時所處的狀態。 在乙太坊這樣的區塊鏈上,
智慧合約無法直接訪問超過256個區塊之外的狀態
。 這個問題在多鏈生態系統中更加嚴重,跨不同執行層檢索和驗證數據甚至更加困難。

2020年,Vitalik Buterin和Tomasz Stanczak提出了一種跨時間訪問資料的方法。 雖然這一EIP方案陷入了停滯,但它的需求在以Roll-up為中心的多鏈世界中重新出現。 如今,存儲證明已經成為前沿領域,以賦予智慧合約意識和記憶。

訪問鏈上數據的管道

Dapp可以通過多種方式訪問資料和狀態。 所有這些方法都需要應用程序對人類/實體、加密經濟安全性或程式碼進行一定程度的信任,並都存在一定的權衡取捨:

深入存儲證明:實現跨時間、跨鏈的區塊鏈狀態感知插图1

信任人類/實體:

存檔節點:
操作者可以自己運行存檔節點,或者依賴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個區塊頭的祖先之一。 另一種方法是索引源鏈的全部歷史並生成零知識證明以證明索引正確完成。 該證明會隨源鏈的新區塊添加而定期更新。

  1. 訪問跨鏈數據:提供者在目標鏈上收集源鏈的區塊頭,並使用零知識共識證明證明這些區塊頭的有效性。 也可以使用現有的跨鏈消息傳遞解決方案,如Axelar、Celer或LayerZero來査詢區塊頭。

  2. 在目標鏈上維護源鏈的區塊頭雜湊緩存,或鏈下區塊雜湊累加器的根哈希。 這個緩存定期更新,用於在鏈上高效證明給定的區塊存在且與可從狀態訪問的最近的區塊雜湊具有加密連結。 這個過程稱為證明鏈的連續性。 也可以使用專用區塊鏈來存儲所有源鏈的區塊頭。

  3. 根據Dapp在目標鏈上的請求,從鏈下索引數據或鏈上緩存(取決於請求的複雜性)訪問歷史資料/區塊。 緩存的區塊頭雜湊在鏈上維護,而實際數據可能存儲在鏈下。

  4. 通過Merkle包含證明檢查指定區塊中是否存在數據,並為此生成零知識證明。 該證明與正確索引的零知識證明或零知識共識證明相結合,並在鏈上提供以進行無需信任的驗證。

  5. 然後Dapp可以在鏈上驗證該證明,並使用數據執行所需操作。 除了驗證零知識證明,公共參數(如區塊號和區塊雜湊)也與在鏈上維護的區塊頭緩存進行檢查。

採用這種方法的項目有Herodotus、Lagrange、Axiom、HyperOracle、Brevis Network和nil基金會。 儘管正為使應用程序跨多個區塊鏈具有狀態意識而做出重大努力,但IBC(鏈間通信)作為一種互操作性標準脫穎而出,支持應用程序使用如ICQ(跨鏈査詢)和ICA(跨鏈帳戶)。 ICQ使Chain A上的應用程序可以通過在簡單的IBC數据包中包含査詢來査詢Chain B的狀態,ICA允許一個區塊鏈安全控制另一個區塊鏈上的帳戶。 將它們組合在一起可以支持有趣的跨鏈用例。 像Saga這樣的RaaS提供商會默認使用IBC為所有應用鏈提供這些功能。

存儲證明可以通過多種方式進行優化,以在記憶體消耗、證明時間、驗證時間、計算效率和開發者體驗之間找到最佳平衡。 整個過程可以大致分為3個主要子過程:

  • 數據訪問;

  • 資料處理;

  • 數據訪問和處理的零知識證明生成。

深入存儲證明:實現跨時間、跨鏈的區塊鏈狀態感知插图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在其模組化論文中建議的方法。

結論

意識讓科技公司能够更好地為客戶服務。 從用戶身份到購買行為再到社交關係,科技公司利用認知來解鎖精准定位、客戶細分和病毒行銷等功能。 傳統的科技公司需要用戶的明確許可,在管理用戶數據時必須謹慎行事。 但是,許可區塊鏈上的所有用戶數據都是公開的,不一定會洩露用戶身份。 智慧合約應該能够利用公開可用的數據來更好地為使用者服務。 更專業生態系統的發展和採用,將使跨時間和跨鏈的狀態意識成為一個越來越重要的問題。 存儲證明可以使乙太坊作為身份和資產所有權層出現,而不僅僅是一個結算層。 用戶可以在乙太坊上維護自己的身份和關鍵資產,這可以在多個區塊鏈中使用,而不需要始終橋接資產。 我們對未來會解鎖的新可能性和用例保持興奮。

聯系郵箱:0xniumao@gmail.com