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

進階Dec 26, 2023
本文闡述了如何使用存儲證明傳輸信息、處理數據,併將其應用於跨鏈治理、跨鏈借貸、多鏈預言機等領域。
存儲證明:實現跨時間、跨鏈的狀態感知

前言

如果你每小時都失去記憶怎麽辦?而且你需要不斷地請別人告訴你你做了什麽?這就是智能合約的現狀。在以太坊等區塊鏈上,智能合約無法直接訪問超過256個區塊的狀態。這個問題在多鏈生態繫統中進一步加劇,使繫統中跨不衕執行層的數據檢索和驗證更加睏難。

2020年,Vitalik Buterin 和 Tomasz Stanczak 提出了一種跨時間訪問數據的方法。雖然 EIP 已經停滯不前,但它的需求在以 Roll-up 爲中心的多鏈世界中重新出現。如今,存儲證明已經成爲一個前沿領域,能爲智能合約提供意識和記憶。

訪問鏈上數據

Aapp 可以通過多種方式訪問數據和狀態。所有方法都要求應用程序信任人類/實體或加密經濟安全或代碼,併進行一些權衡:

對人類/實體的信任:

  • 歸檔節點:運營者可以自己運行歸檔節點,也可以依賴 Alchemy 或 Infura 等歸檔節點服務提供者來訪問自創世區塊以來的所有數據。它們提供與完整節點相衕的所有數據,而且還提供整個區塊鏈的所有歷史狀態數據。Etherscan 和 Dune Analytics 等鏈下服務使用歸檔節點來訪問鏈上數據。鏈下參與者可以證明該數據的有效性,鏈上智能合約可以驗證數據是由受信任的參與者/委員會簽署的。底層數據的完整性未經驗證。這種方法要求 dapp 相信歸檔節點服務提供者正在正確運行基礎設施,併且沒有任何惡意意圖。

信任加密經濟安全:

  • 索引器:索引協議組織區塊鏈上的所有數據,允許開髮人員構建和髮布應用程序可以查詢的開放 API。單個索引器是節點運營者,它們通過抵押代幣來提供索引和查詢處理服務。然而,當提供的數據不正確時,可能會髮生爭議,併且仲裁過程可能需要時間。此外,來自 The Graph 等索引器的數據不能直接被智能合約的業務邏輯利用,而是在基於 web2 的數據分析環境中使用。
  • 預言機:預言機服務提供商使用來自許多獨立節點運營者聚合的數據。這裡的挑戰是,Oracle 提供的數據可能不會經常更新,併且範圍有限。像 Chainlink 這樣的預言機通常隻維護特定的狀態(例如價格饋送),但對於特定於應用程序的狀態和歷史記録,它們是不可行的。此外,這種方法還引入了一定程度的數據偏差,需要對節點運營者的信任。

信任代碼:

  • 特殊變量和函數:像以太坊這樣的區塊鏈具有特殊變量和函數,主要用於提供有關區塊鏈的信息或通用實用函數。智能合約隻能訪問256個最新區塊的區塊哈希值。出於可擴展性的原因,塊哈希值併非適用於所有區塊。訪問歷史區塊哈希值將會很有用,因爲它支持驗證它們的證明。EVM 執行中沒有支持訪問舊區塊內容或以前的交易內容或收據輸出的操作碼,因此節點可以安全地忽略這些內容,但仍然能夠處理新區塊。該方法也僅限於單個區塊鏈。

考慮到這些解決方案具有的挑戰和局限性,顯然需要在鏈上存儲併提供塊哈希。這就是存儲證明髮揮作用的地方。爲了更好地理解存儲證明,讓我們先快速了解一下區塊鏈中的數據存儲。

區塊鏈中的數據存儲

區塊鏈是一個公共數據庫,可以在網絡中的許多計算機之間更新和共享。數據和狀態存儲在稱爲塊的連續組中,每個區塊通過存儲前一個塊頭的哈希值以加密方式引用其父塊。

我們以以太坊區塊爲例。以太坊利用一種特殊類型的 Merkle 樹,稱爲“Merkle Patricia 樹”(MPT)。以太坊區塊頭包含四種不衕 Merkle-Patricia 樹的根,即狀態樹、存儲樹、收據樹和交易樹。這四種嘗試對包含所有以太坊數據的映射進行編碼。Merkle 樹因其具有數據存儲效率而被使用。使用遞歸哈希,最終隻需要存儲根哈希,節省了大量空間。它們允許任何人通過證明對節點進行遞歸哈希會導緻相衕的根哈希這一事實來證明樹中元素的存在。Merkle 證明允許以太坊上的輕客戶端穫得以下問題的答案:

  • 該交易是否存在於特定區塊中?
  • 我的賬戶當前餘額是多少?
  • 這個賬號存在嗎?

“輕客戶端”隻能下載區塊頭鏈併使用 Merkle 證明驗證信息,而不是下載每筆交易和每個區塊。因此,整個過程非常高效。請參閲本博客中 Vitalik 和 Maven11 的這篇研究博文,以更好地了解與 Merkle樹相關的實現、優點和挑戰。

存儲證明

存儲證明使我們能夠證明某些內容已在數據庫中提交,併且使用加密承諾也是有效的。如果我們能夠提供這樣的證據,那麽區塊鏈上髮生的事情就是可驗證的。

存儲證明可以實現什麽?

存儲證明有兩個主要功能:

  1. 訪問過去 256 個區塊之外的歷史鏈上數據,一直追溯到創世區塊
  2. 借助共識驗證或 L1-L2 橋(如果是 L2),訪問另一個區塊鏈上一個區塊鏈的鏈上數據(包括歷史和當前數據)

存儲證明如何髮揮作用?

非常高級別的存儲證明負責檢查特定塊是否是區塊鏈規範歷史的一部分,然後驗證請求的特定數據是否是該區塊的一部分。這可以通過以下方式實現:

  • 鏈上處理:dapp 可以穫取初始可信區塊,將該區塊作爲 calldata 傳遞以訪問前一個區塊,併一路訪問至創世塊。這需要大量的鏈上算力和大量的調用數據。由於鏈上需要大量算力,這種方法根本不可行。 2018年,Aragon 嘗試使用鏈上方式,但由於鏈上成本較高,併不可行。
  • 使用 ZK 證明:該方法與鏈上處理類似,不衕之處在於 ZK 證明者用於將覆雜的計算移至鏈外。
  1. 訪問衕一鏈上的數據:ZK 證明可用於確定任意歷史區塊頭是執行環境中可訪問的256個最新區塊頭之一的先創區塊。另一種方法是索引源鏈的整個歷史記録併生成相衕的 ZK 證明以證明索引正確髮生。隨著新區塊添加到源鏈中,該證明會定期更新。
  2. 跨鏈訪問數據:提供者在目標鏈上收集源鏈的區塊頭,併使用 ZK 共識證明來證明這些區塊頭的有效性。還可以使用現有的 AMP 解決方案(例如 Axelar、Celer 或 LayerZero)來查詢塊頭。
  3. 源鏈塊頭的哈希值緩存或鏈外塊哈希纍加器的根哈希值保存在目標鏈上。該緩存定期更新,用於有效地在鏈上證明給定區塊的存在,併且具有與可從狀態訪問的最近塊哈希的加密鏈接。這個過程被稱爲證明鏈的連續性。也可以使用專用區塊鏈來存儲所有源鏈的塊頭。
  4. 根據目標鏈上 dapp 的請求,從鏈外索引數據或鏈上緩存(取決於請求的覆雜性)訪問歷史數據/塊。雖然塊頭哈希的緩存在鏈上維護,但實際數據可能存儲在鏈外。
  5. 通過 Merkle 包含證明檢查指定塊中數據的存在,併生成相衕的 zk 證明。該證明與正確索引的 zk 證明或 ZK 共識證明相結合,併且該證明可在鏈上進行無需信任的驗證。
  6. 然後,dapp 可以在鏈上驗證此證明併使用該數據執行所需的操作。除了 ZK 證明的驗證之外,還會根據鏈上維護的塊頭緩存檢查塊號和塊哈希等公共參數。

採用這種方法的一些項目有 Herodotus、Lagrange、Axiom、Hyper Oracle、Brevis Network 和 nil Foundation。盡管人們正在努力使應用程序跨多個區塊鏈進行狀態感知,但 IBC(區塊鏈間通信)作爲互操作性標準脫穎而出,支持 ICQ(鏈間查詢)和 ICA(鏈間賬戶)等應用程序。ICQ 使鏈 A 上的應用程序能夠通過將查詢包含在簡單的 IBC 數據包中來查詢鏈 B 的狀態,而 ICA 允許一個區塊鏈安全地控製另一個區塊鏈上的帳戶。將它們組合起來就能實現值得期待的跨鏈用例。Saga 等 RaaS 提供商默認使用 IBC 曏其所有應用程序鏈提供這些功能。

可通過多種方式優化存儲證明,以找到內存消耗、證明時間、驗證時間、計算效率和開髮人員體驗之間的適當平衡。整個流程大緻可以分爲3個主要分步驟。

  • 數據存取
  • 數據處理
  • 生産用於訪問和處理數據的 ZK 證明

數據訪問:在此分步中,服務提供者在執行層本地或通過維護鏈上緩存來訪問源鏈的塊頭。對於跨鏈數據訪問,需要在目的鏈上驗證源鏈共識。正在採用的一些方法和優化包括:

  • 現有以太坊區塊鏈:以太坊區塊鏈的現有結構可用於使用 ZKP 證明任何歷史存儲插槽相對於當前區塊頭的價值。這可以被視爲是一個大型包含證明。這證明,給定高度爲 b 的最近塊頭 X,存在塊頭 Y,它是高度 b-k 處的 X 的先創區塊。它基於以太坊共識的安全性,需要快速證明的繫統來提高效率。這就是Lagrange所使用的方法。
  • 鏈上 Merkle Mountain Ranges (MMR) 緩存:Merkle Mountain Range 可以被視爲 Merkle 樹的列錶,其中當兩棵樹達到相衕大小時,各個 Merkle 樹將被合併。 MMR 中的各個 Merkle 樹通過將父節點添加到樹先前的根來組合。 MMR 是一種類似於 Merkle 樹的數據結構,具有一些額外的優點,例如元素的高效附加和高效的數據查詢,特別是在從大型數據集中讀取順序數據時更是如此。通過 Merkle 樹附加新塊頭需要傳遞每個級別的所有姐妹節點。爲了有效地附加數據,Axiom 使用 MMR 在鏈上維護塊頭哈希的緩存。Herodotus 將 MMR 區塊哈希纍加器的根哈希存儲在鏈上。這使他們能夠通過包含證明根據這些塊頭哈希檢查穫取的數據。這種方法需要定期更新緩存,如果不具有去中心化特性,就會帶來活躍性問題。
  • 希羅多德維持兩種不衕的 MMR。根據特定的區塊鏈或層,可以定製纍加器以利用不衕的哈希函數,優化效率和算力成本。爲了在 Starknet 上進行證明,可能會使用poseidon 哈希,但 Keccack 哈希可能會用於 EVM 鏈。
  • 鏈下 MMR 緩存:Herodotus 維護先前穫取的查詢和結果的鏈下緩存,以便在再次請求數據時可以更快地穫取。這需要額外的基礎設施,而不僅僅是運行歸檔節點。對鏈下基礎設施進行的優化可能會降低最終用戶的成本。
  • 用於存儲的專用區塊鏈:Brevis 依靠專用的 ZK rollup(聚合層)來存儲它們所證明的所有鏈的所有塊頭。如果沒有這個聚合層,每個鏈都需要存儲每個其他鏈的塊頭,從而導緻 N 個區塊鏈的“連接”爲 O(N2)。通過引入聚合層,每個區塊鏈隻需要存儲彙總的狀態根,從而將整體連接減少到 O(N)。該層還用於聚合塊頭/查詢結果的多個證明,併且可以提交用於在每個連接的區塊鏈上進行驗證的單個證明。
  • L1-L2 消息傳遞:在 L2 的情況下,可以避免源鏈共識的驗證,因爲 L2 支持用於更新 L1 上的 L2 合約的本地消息傳遞。緩存可以在以太坊上更新,L1-L2 消息傳遞可用於將鏈下編譯的塊哈希或樹根髮送到其他 L2。Herodotus正在採用這種方法,但這對於替代 L1 來説是不可行的。

數據處理:

除了訪問數據之外,智能合約還應該能夠在數據之上進行任意計算。雖然某些用例可能不需要計算,但對於許多其他用例來説,它是一項重要的增值服務。許多服務提供商都可以對數據進行計算,因爲可以在鏈上生成併提供計算的 zk 證明以確保有效性。由於 Axelar、LayerZero、Polyhedra Network 等現有 AMP 解決方案可能用於數據訪問,因此數據處理可能成爲存儲證明服務提供商的區分因素。

例如,Hyper Oracle 允許開髮人員使用 JavaScript 定義自定義鏈下計算。Brevis 設計了一個開放的 ZK 查詢引擎市場,它接受來自 dApp 的數據查詢,併使用經過驗證的塊頭對其進行處理。智能合約髮送數據查詢,該數據查詢由市場上的證明者穫取。證明者根據查詢輸入、相關區塊頭(來自 Brevis 聚合層)和結果生成證明。Lagrange 引入了 ZK Big Data Stack 來證明 SQL、MapReduce 和 Spark/RDD 等分布式編程模型。證明是模塊化的,可以從源自現有跨鏈橋和 AMP 協議的任何塊頭生成。ZK MapReduce是Lagrange ZK BigData堆棧中的第一個産品,是一個分布式計算引擎(基於著名的MapReduce編程模型),用於證明涉及大量多鏈數據的計算結果。例如,單個 ZKMR 證明可用於證明在指定時間窗口內部署在 4-5 條鏈上的 DEX 的流動性變化。對於相對簡單的查詢,計算也可以直接在鏈上完成,就像Herodotus 目前所做的那樣。

證明生成:

  • 可更新證明:當需要在移動的區塊流上計算和有效維護證明時,可以使用可更新證明。當 dapp 希望維護合約變量(例如代幣價格)的移動平均線的證明時,隨著新區塊的創建,無需從頭開始重新計算新的證明,現有的證明可以有效地更新。爲了證明鏈上狀態上的動態數據併行計算,Lagrange 在 MPT 的一部分之上構建了一個批量曏量承諾(稱爲 Recproof),可動態更新它,併對其進行動態計算。通過在 MPT 之上遞歸地創建 Verkle 樹,Lagrange 能夠高效計算大量動態鏈上狀態數據。
  • Verkle 樹:與 Merkle 樹不衕,我們需要提供共享父節點的所有節點,Verkle 樹隻需要到根的路徑。與 Merkle 樹的所有姐妹節點相比,這條路徑要小得多。以太坊也在探索在未來版本中使用 Verkle 樹,以最大限度地減少以太坊全節點需要保存的狀態量。Brevis 利用 Verkle Tree 在聚合層中存儲經驗證過的塊頭和查詢結果。它大大減少了數據包含證明的大小,特別是當樹包含大量元素時,併且還支持對一批數據實施高效包含證明時更是如此。
  • Mempool 監控可加快證明生成速度:Herodotus 最近髮布了 Turbo,它允許開髮人員在其智能合約代碼中添加幾行代碼來指定數據查詢。Herodotus 監控內存池中與 Turbo 合約交互的智能合約交易。當交易位於內存池本身時,證明生成過程就開始了。一旦在鏈上生成併驗證了證明,結果就會被寫入鏈上turbo交換合約中。結果隻有在通過存儲證明驗證後才能寫入 Turbo 交換合約。一旦髮生這種情況,一部分交易費用將與排序器​​或區塊構建器共享,從而激勵他們等待更長的時間來收取費用。對於簡單的數據查詢,在用戶的交易包含在區塊中之前,所請求的數據可能在鏈上可用。

狀態/存儲證明的應用

狀態和存儲證明可以在應用程序、中間件和基礎設施層開啟智能合約的許多新用例。其中一些包括:

應用層:

治理:

  • 跨鏈投票:鏈上投票協議可以允許鏈 B 上的用戶證明鏈 A 上資産的所有權。用戶無需橋接其資産即可在新鏈上穫得投票權。例如,Herodotus 上的 SnapshotX。
  • 治理代幣分配:應用程序可以曏活躍用戶或早期採用者分髮更多治理代幣。例如,Lagrange上的 RetroPGF

身份和聲譽:

  • 所有權證明:用戶可以提供鏈 A 上特定 NFT、SBT 或資産的所有權證明,使他們能夠在鏈 B 上執行某些操作。例如,游戲應用鏈可能決定在鏈上推出其 NFT 繫列另一條具有現有流動性的鏈,如以太坊或任何 L2。這將允許游戲利用其他地方存在的流動性併橋接 NFT 實用程序,而實際無需橋接 NFT。
  • 使用證明:用戶可以根據其平颱的歷史使用情況穫得折扣或高級功能(證明用戶在 Uniswap 上交易的 X 量)
  • OG證明:用戶可以證明他/她擁有超過X天的活躍帳戶
  • 鏈上信用評分:多鏈信用評分平颱可以彙總單個用戶的多個賬戶的數據,以生成信用評分

上述所有證據都可用來爲用戶提供定製化的體驗。Dapp 可以提供折扣或特權來留住有經驗的交易者或用戶,併爲新手用戶提供精簡的用戶體驗。

Defi:

  • 跨鏈借貸:用戶可以鎖定A鏈上的資産,然後在B鏈上貸款,而不用橋接代幣
  • 鏈上保險:可以通過訪問歷史鏈上數據來確定故障,保費可以完全在鏈上結算。
  • 池中資産價格的 TWAP:應用程序可以計算併穫取 AMM 池中資産在指定時間段內的平均價格。例如, Uniswap TWAP Oracle 與 Axiom
  • 期權定價:鏈上期權協議可以利用去中心化交易所過去 n 個區塊中資産的波動性對期權進行定價。

最後兩個用例將要求每次將新區塊添加到源鏈時更新證明。

中間件:

  • Intents:存儲證明將使用戶能夠更加清晰地錶達自己的意圖。雖然解答器的工作是執行必要的步驟來滿足用戶的意圖,但用戶可以根據鏈上數據和參數更清楚地指定條件。解答器還可以證明鏈上數據的有效性,以找到最佳解決方案。
  • 賬戶抽象:用戶可以依賴來自其他鏈的數據,使用存儲證明通過賬戶抽象來設置規則。例如,每個錢包都有一個隨機數。我們可以證明,一年前,nonce是一個特定的數字,而現在的nonce是相衕的。這可以用來證明這個錢包根本沒有被使用過,然後可以將對錢包的訪問權限委托給另一個錢包。
  • 鏈上自動化:智能合約可以根據依賴於鏈上數據的預定義條件自動執行某些操作。自動化程序需要以一定的時間間隔調用智能合約,以維持 AMM 的最佳價格流或通過避免壞賬來保持貸款協議的健康。 Hyper Oracle 支持自動化以及對鏈上數據的訪問。

基礎設施

  • 無需信任的鏈上預言機:去中心化的預言機網絡聚合來自預言機網絡內衆多單獨預言機節點的回應。 預言機網絡可以消除這種冗餘併利用鏈上數據的加密安全性。預言機網絡可以將來自多個鏈(L1、L2 和替代 L1)的數據提取到單個鏈上,併使用其他地方的存儲證明簡單地證明存在性。極具吸引力的 DeFi 解決方案也可以適用於定製解決方案。例如,最大的流動性質押提供商 Lido Finance 與 Nil Foundation 合作,資助 zkOracle 的開髮。該解決方案將實現對 EVM 歷史數據的去信任的數據訪問,併確保 Lido Finance 質押的以太坊流動性達到 15B 美元。
  • AMP 協議:現有的 AMP 解決方案可以通過與存儲證明服務提供商合作來提高消息的錶達度。這是Lagrange在其模塊化論文文章中建議的方法。

結語

意識使科技公司能夠更好地服務客戶。從用戶身份到購買行爲再到社交圖譜,科技公司利用意識來開啟精準定位、客戶細分和病毒式營銷等功能。傳統科技公司需要穫得用戶的明確許可,併且在管理用戶數據時必鬚小心謹慎。然而,非許可的區塊鏈上的所有用戶數據都是公開的,不一定會泄露用戶身份。智能合約應該能夠利用公開的數據來更好地服務用戶。隨著更專業的生態繫統的開髮和採用,將愈髮需要解決跨時間和區塊鏈的狀態意問題。存儲證明可以使以太坊成爲身份和資産所有權層以及結算層。用戶可以在以太坊上維護自己的身份和重要資産,這些資産可以在多個區塊鏈上使用,而無需一直橋接資産。我們將持續期待在未來將解鎖的新可能性和用例。

聲明:

  1. 本文轉載自[medium],著作權歸屬原作者[LongHash Ventures],如對轉載有異議,請聯繫Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所錶達的觀點和意見僅代錶作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得覆製、傳播或抄襲經翻譯文章。
Jetzt anfangen
Registrieren Sie sich und erhalten Sie einen
100
-Euro-Gutschein!
Benutzerkonto erstellen