儲存證明可以使以太坊作為身分和資產所有權層出現,而不僅僅是一個結算層。本文源自 LongHash Ventures 所著文章《Storage proofs: Achieving state awareness across time and chains》,由 白話區塊鏈 編譯、整理。
(前情提要:富達:比特幣「價值儲存優勢」無法被取代,教你如何正確解讀BTC? )
(背景補充:一文讀懂EthStorage,會成為以太坊的去中心化儲存中心嗎? )
如果你每小時都失去記憶,需要不停詢問別人告訴你做過什麼事怎麼辦?這就是智慧合約目前所處的狀態。在以太坊這樣的區塊鏈上,智慧合約無法直接訪問超過 256 個區塊之外的狀態。這個問題在多鏈生態系統中更加嚴重,跨不同執行層檢索和驗證資料甚至更加困難。
2020 年, Vitalik Buterin 和 Tomasz Stanczak 提出了一種跨時間訪問資料的方法。雖然這一 EIP 方案陷入了停滯,但它的需求在以 Rollup 為中心的多鏈世界中重新出現。如今,儲存證明已經成為前端領域,以賦予智慧合約意識和記憶。
訪問鏈上資料的方式
Dapp 可以通過多種方式訪問資料和狀態。所有這些方法都需要應用程式對人類 / 實體、加密經濟安全性或程式碼進行一定程度的信任,並都存在一定的權衡取捨:
信任人類 / 實體:
存檔節點:操作者可以自己執行存檔節點,或者依賴 Alchemy 、Infura 等存檔節點服務提供商,訪問從創世塊開始的所有資料。它們提供與全節點相同的資料,還包括整個區塊鏈的所有歷史狀態資料。鏈下服務如 Etherscan 和 Dune Analytics 使用存檔節點訪問鏈上資料。鏈下參與者可以證明這些資料的有效性,鏈上智慧合約可以驗證資料是由可信參與者 / 委員會簽名的。但是底層資料的完整性無法被驗證。這種方法需要 Dapp 信任存檔節點服務提供商以正確的方式執行基礎設施,沒有任何惡意意圖。
延伸閱讀:Dune Analytics 完整介紹|免費鏈上工具教學,邁向數據分析師
信任加密經濟安全性:
索引器:索引協議組織區塊鏈上的所有資料,允許開發者構建和釋出開放 API,以便應用程式可以查詢。單個索引器是質押代幣以提供索引和查詢處理服務的節點操作者。但是,當提供的資料不正確時,可能會發生爭議,仲裁過程需要時間。此外,來自 The Graph 等索引器的資料不能被直接利用在智慧合約的業務邏輯中,而是被用於基於 web2 的資料分析背景中。
預言機:預言機服務提供商使用從許多獨立節點操作者那裡彙總的資料。這裡的挑戰在於,從預言機獲得的資料可能不會被頻繁更新,範圍也有限。像 Chainlink 這樣的預言機通常只維護特定狀態,比如價格資訊,對於應用程式特定狀態和歷史的資料則不可行。此外,這種方法也會在資料中引入一定程度的偏差,需要信任節點運營商。
延伸閱讀:一文讀懂區塊鏈、預言機和 DeFi 的權益質押機制
信任程式碼:
特殊變數和函式:像以太坊這樣的區塊鏈具有特殊變數和函式,主要用於提供關於區塊鏈的資訊,或者是通用實用函式。智慧合約只能訪問最近 256 個區塊的區塊hash。出於可擴充套件性的原因,並非所有區塊的區塊hash都是可用的。能夠訪問歷史區塊hash將非常有用,因為它可以允許針對它們進行證明的驗證。EVM 執行環境中沒有可以訪問舊區塊內容、之前交易內容或收據輸出的操作碼,所以節點可以安全地忘記這些內容,並仍能處理新區塊。這種方法也僅限於單個區塊鏈。
鑑於這些解決方案的挑戰和侷限性,顯然存在對鏈上儲存和提供區塊hash的明確需求。這就是儲存證明的用武之地。為了更好地理解儲存證明,我們快速看一下區塊鏈中的資料儲存。
區塊鏈中的資料儲存
區塊鏈是一個公共資料庫,在網路中的許多電腦之間更新和共享。資料和狀態以連續的區塊組儲存,每個區塊通過儲存前一個區塊頭的hash來加密引用其父區塊。
以以太坊區塊為例。以太坊使用一種特殊的 Merkle 樹,稱為 「Merkle Patricia Tree」(MPT)。以太坊區塊頭包含四個不同的 Merkle -Patricia 樹的根,即狀態樹、儲存樹、收據樹和交易樹。這四棵樹對包含所有以太坊資料的反射進行編碼。使用 Merkle 樹是由於其在資料儲存中的高效性。通過遞迴hash,最終只需要儲存根hash,節省了大量空間。它們允許任何人通過證明遞迴hash節點導致相同的根hash,來證明樹中元素的存在。Merkle 證明允許以太坊上的輕客戶端通過回答以下問題來獲取答案:
- 這個交易存在於某個特定區塊中嗎?
- 我的帳戶當前餘額是多少?
- 這個帳戶存在嗎?
與下載每個交易和每個區塊不同,「輕客戶端」 只能下載區塊頭鏈,並使用 Merkle 證明來驗證資訊。這使整個過程非常高效。
請參閱 Vitalik 和 Maven 11 的這篇部落格研究文章,更好地理解與 Merkle 樹相關的實現、優點和挑戰。
儲存證明
儲存證明允許我們使用加密證明來證明某件事被記錄在資料庫中且有效。如果我們能提供這樣的證明,那就是一個可驗證的宣告,證明某件事發生在區塊鏈上。
儲存證明可以實現什麼?
儲存證明允許兩個主要功能:
- 訪問最後 256 個區塊之外的歷史鏈上資料,一直回到創世塊
- 在一個區塊鏈上訪問另一個區塊鏈的鏈上資料(歷史和當前),藉助共識驗證或 L2 橋接(針對 L2)
儲存證明的工作原理是什麼?
簡單來說,儲存證明檢查特定區塊是否是區塊鏈的規範歷史的一部分,然後驗證所請求的特定資料是否是區塊的一部分。這可以通過以下方式實現:
- 鏈上處理:Dapp 可以獲取初始可信區塊,將區塊作為 Calldata 傳遞以訪問前一個區塊,一直遍歷回創世塊。這需要大量的鏈上計算和大量的 Calldata。由於需要海量的鏈上計算,這種方法完全不切實際。 Aragon 在 2018 年嘗試使用鏈上方法,但由於高昂的鏈上成本而不可行。
- 使用零知識證明:方法類似於鏈上處理,不同之處在於使用零知識證明將複雜計算轉移到鏈下。
訪問同一鏈的資料:可以使用零知識證明斷言任意歷史區塊頭是執行環境中可訪問的最近 256 個區塊頭的祖先之一。另一種方法是索引源鏈的全部歷史並生成零知識證明以證明索引正確完成。該證明會隨源鏈的新區塊新增而定期更新。
- 訪問跨鏈資料:提供者在目標鏈上收集源鏈的區塊頭,並使用零知識共識證明證明這些區塊頭的有效性。也可以使用現有的跨鏈訊息傳遞解決方案,如 Axelar 、 Celer 或 LayerZero 來查詢區塊頭。
- 在目標鏈上維護源鏈的區塊頭hash快取,或鏈下區塊hash累加器的根hash。這個快取定期更新,用於在鏈上高效證明給定的區塊存在且與可從狀態訪問的最近的區塊hash具有加密連結。這個過程稱為證明鏈的連續性。也可以使用專用區塊鏈來儲存所有源鏈的區塊頭。
- 根據 Dapp 在目標鏈上的請求,從鏈下索引資料或鏈上快取(取決於請求的複雜性)訪問歷史資料 / 區塊。 快取的區塊頭hash在鏈上維護,而實際資料可能儲存在鏈下。
- 通過 Merkle 包含證明檢查指定區塊中是否存在資料,並為此生成零知識證明。該證明與正確索引的零知識證明或零知識共識證明相結合,並在鏈上提供以進行無需信任的驗證。
- 然後 Dapp 可以在鏈上驗證該證明,並使用資料執行所需操作。除了驗證零知識證明,公共引數(如區塊號和區塊hash)也與在鏈上維護的區塊頭快取進行檢查。
採用這種方法的專案有 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 在鏈上維護區塊頭hash的快取。Herodotus 在鏈上儲存 MMR 區塊hash累加器的根hash。這使他們能夠通過包含證明檢查所獲取的資料與這些區塊頭hash。這種方法需要定期更新快取,如果不去中心化會帶來活躍性問題。
- 為了優化效率和計算成本,Herodotus 維護兩種不同的 MMR。 根據特定的區塊鏈或層,累加器可以使用不同的hash函式進行訂製。對 Starknet 進行證明時可能使用 poseidon hash,但對 EVM 鏈使用 Keccack hash。
- 鏈下 MMR 快取:Herodotus 維護鏈下快取之前獲取的查詢和結果,以便在再次請求資料時能更快獲取。這需要比僅執行存檔節點更多的基礎設施。 在鏈下基礎設施上的優化潛在地可以為終端使用者減少成本。
- 專用區塊鏈用於儲存:Brevis 依靠專用的零知識 rollup(聚合層)來儲存其證明的所有鏈的所有區塊頭。如果沒有這個聚合層,每個鏈都需要儲存每個其他鏈的區塊頭,這將導致對於 N 條區塊鏈有 O(N 2)「連線」。通過引入聚合層,每個區塊鏈只需要儲存 rollup 的狀態根,將總體連線降低到 O(N)。該層還用於聚合多個區塊頭 / 查詢結果證明,並在每個連線的區塊鏈上提交單個驗證證明。
- L1-L2 訊息傳遞:由於 L2 支援通過 L1 更新 L2 合約的原生訊息傳遞,所以可以避免源鏈共識驗證。快取可以在以太坊上更新,L1-L2 訊息傳遞可以用於將鏈下編譯的區塊hash或樹根傳送到其他 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 個區塊上的波動性來對期權進行定價。
最後兩個用例將需要在源鏈中新增新區塊時更新證明。
延伸閱讀:Uniswap V4 版本降臨!你該知道 V4 的全部升級重點
中介軟體:
意圖:儲存證明將允許使用者對意圖更具表現力和明確。雖然求解器的工作是執行必要的步驟以滿足使用者的意圖,但使用者可以根據鏈上資料和引數更清楚地指定條件。求解器還可以證明找到最佳解決方案所利用的鏈上資料的有效性。
帳戶抽象:使用者可以利用儲存證明根據來自其他鏈的資料設定規則。例如:每個錢包都有一個 nonce。我們可以證明一年前 nonce 是一個特定的數位,目前 nonce 與之相同。這可以被用來證明這個錢包根本沒有被使用過,然後可以將錢包的訪問權委託給另一個錢包。
鏈上自動化:智慧合約可以根據依賴鏈上資料的預定義條件自動執行某些操作。自動化程式需要定期呼叫智慧合約以維持 AMM 的最佳價格流動或通過避免不良債務來保持借貸協議的健康。HyperOracle 支援自動化以及鏈上資料訪問。
延伸閱讀:解碼以太坊 Intents(意圖):如何顛覆Web3使用者體驗與訂單流模式
基礎設施
無需信任的鏈上預言機:去中心化的預言機網路彙總來自預言機網路內多個單獨預言機節點的響應。預言機網路可以消除這種冗餘,利用加密安全性實現鏈上資料。預言機網路可以將來自多個鏈(L1、L2 和 alt L1)的資料彙集到單個鏈上,並簡單地使用儲存證明證明其他地方的存在。取得重大進展的 DeFi 解決方案也可以使用訂製解決方案。例如,最大的流動性質押提供者 Lido Finance 已經與 Nil Foundation 合作,資助 zkOracle 的開發。這些解決方案將實現對 EVM 歷史資料的無需信任的資料訪問,並保護 Lido Finance 150 億美元的已抵押以太坊流動性。
跨鏈訊息傳遞協議:現有的跨鏈訊息傳遞解決方案可以通過與儲存證明服務提供商合作來增加其訊息的表達能力。這是 Lagrange 在其模組化論文中建議的方法。
結論
意識讓科技公司能夠更好地為客戶服務。 從使用者身份到購買行為再到社交關係,科技公司利用認知來解鎖精準定位、客戶細分和病毒行銷等功能。傳統的科技公司需要使用者的明確許可,在管理使用者資料時必須謹慎行事。但是,許可區塊鏈上的所有使用者資料都是公開的,不一定會洩露使用者身份。智慧合約應該能夠利用公開可用的資料來更好地為使用者服務。更專業生態系統的發展和採用,將使跨時間和跨鏈的狀態意識成為一個越來越重要的問題。儲存證明可以使以太坊作為身份和資產所有權層出現,而不僅僅是一個結算層。使用者可以在以太坊上維護自己的身份和關鍵資產,這可以在多個區塊鏈中使用,而不需要始終橋接資產。我們對未來會解鎖的新可能性和用例保持興奮。