Micro-Rollups 的可驗證鏈下計算、可審計狀態及鏈上應用集成能力,或促使鏈上現實世界用例呈爆炸式增長。
撰文:stackrlabs
編譯:Frank,Foresight News

證明(Attestation),這是一個含義廣泛的詞,幾乎每個人都對它的意思有一些理解,並且每個人在生活中都曾經在不知不覺中使用過這個概念。
那麼讓我們嘗試定義它,證明本質上是對某一信息做出的陳述或聲明,它們作為可信賴方提供的證據或確認,以驗證特定陳述的真實性。證明的可信度取決於提供證明的實體的聲譽,在 Web3 世界中,證明帶有數字簽名,確保真實性和不可變性。
讓我們來看一些例子,無論是現實世界還是加密領域,你可能都沒有意識到它們實際上就是某種形式的證明。

Web3 世界的證明:以太坊證明服務登場
以太坊證明服務(Ethereum Attestation Service,EAS)是 Web3 領域支持證明用例的領先項目之一,它是一個開源的基礎設施公共產品,用於鏈上或鏈下進行證明。EAS 的運作方式非常簡單,你只需註冊一個關於任何主題的架構(或使用現有的架構),然後根據該架構進行證明。

侷限性
儘管 EAS 為 Web3 中的證明推理和利用提供了堅實的基礎,但它並非沒有侷限性。使用 EAS 進行鏈上證明的成本可能會非常高昂,並且需要編寫 EVM 智能合約來實現任何自定義邏輯。對於鏈下證明,架構仍然需要放在鏈上,並且開發人員經常將這些證明存儲在私有數據庫中,從而損害了用戶的可驗證性。
這種情況凸顯了使用 Stackr SDK 構建的 Micro-Rollups 如何用於增強 EAS 或整體證明的功能。
快速介紹 Micro-Rollups

Micro-Rollups 本質上是一種狀態機,可以在鏈下執行特定的邏輯,然後將執行結果的驗證外包到另一個稱為「Vulcan」的層,而 Vulcan 會更新驗證狀態並把計算數據上鍊。
-
Micro-Rollups 的狀態機具有定義良好的狀態格式,並通過創世條件進行初始化;
-
狀態機可以執行動作(即交易類型),當觸發這些動作時,會調用狀態機上的狀態轉換函數;
-
狀態轉換函數(STF)負責執行計算並更新狀態機的狀態;
在 STF 執行後,所有動作將被打包成一個區塊併發送到 Vulcan 層。
Vulcan 層會執行以下操作:
-
以「悲觀」(Pessimistically)的方式重新執行區塊中的動作,以檢查狀態轉換函數(STF)的有效性;
-
為經過驗證的區塊生成元數據;
-
在 L1(主鏈)和數據可用性層(DA)上進行結算;
-
將 Micro-Rollups 的更新狀態發送到 DA 層;
-
將經過驗證的區塊的元數據和更新後的狀態根哈希值寫入 L1 上 Micro-Rollups 的 inbox 合約;
上述流程共同構成了 Stackr 的 Micro-Rollups 框架。
證明系統 Micro-Rollups
那麼,為什麼 Micro-Rollups 特別適合構建證明系統呢?Micro-Rollups 具有以下優勢:
-
可驗證的鏈下計算:Micro-Rollups 在功能上類似於後端服務,但它為應用程序的狀態和計算增加了一層可驗證性,這可以確保證明的頒發者沒有篡改系統規則;
-
可審計的狀態:一旦狀態機部署完成,狀態轉換函數(STF)的邏輯就無法被修改,這可以讓用戶確信提供者不會任意更改系統的規則;
-
可與鏈上應用集成:Micro-Rollups 可以與鏈上應用集成,Micro-Rollups 會將應用程序的狀態根哈希值寫入 L1,其他應用程序可以使用此哈希值來證明性地訪問 Rollup 的狀態;
Micro-Rollups 用於證明的三種方式
1.EAS 鏈下證明的可驗證存儲

如前所述,EAS 的鏈下證明只是一個包含證明數據和簽名的 JSON 文件,這些數據不會存儲在鏈上,而是存儲在私有數據庫或去中心化存儲解決方案中。
與 EAS 推薦的「Ceramic 網絡的可驗證數據賬本」非常相似,Micro-Rollups 是存儲這些鏈下證明的理想解決方案。從本質上講,Micro-Rollups 是一個可驗證的數據賬本,因為:
-
可驗證的計算確保了狀態轉換的正確性;
-
狀態被「彙總」成一個哈希值(稱為 Merkle 根哈希),並在每個 epoch 結束後發佈到以太坊 L1 主網上;
-
所有數據都對底層的 DA 層可用;
這樣的系統將是一個通用型的 Micro-Rollups,旨在存儲針對任何已在 EAS 上註冊的架構的證明,同時不會影響最終用戶的可驗證性。
2.適用於特定架構證明的 Micro-Rollups

其核心即 Micro-Rollups 本質上只是一個由狀態和狀態轉換函數組成的狀態機,當通過架構和證明的視角審視這個框架時,我們可以發現一些相似之處。
狀態類似於架構,它定義了數據結構,而證明類似於狀態轉換,它們是經過驗證的符合架構的更新,這種對比凸顯了 Micro-Rollups 的真正潛力:可以構建針對特定架構的 Micro-Rollups,使證明能夠適應特定的架構,並賦予開發人員將自定義邏輯納入轉換函數的靈活性,類似於 EAS 中的解析器合約(Resolver contracts)。
更棒的是,由於計算完全在鏈下、EVM 之外進行,因此用戶在進行證明時無需支付任何 Gas 費。
我們最近的一篇關於 「積分系統 Micro-Rollups」 的文章討論了應用程序如何利用積分作為激勵機制,這正是一個這樣的系統的直接例子,因為積分本質上是應用程序授予用戶的證明。
還可以使用 Stackr 的 SDK 構建一個封裝器,以便輕鬆啟動一個具有自定義架構和解析器邏輯的新 Micro-Rollups,同時保持相同的 API 以實現跨 Micro-Rollups 的互操作性。
3.Micro-Rollups 作為 EAS 的改進方案

由於 Micro-Rollups 可以抽象掉構建去中心化應用的大部分複雜性,因此可以相當快速地將一個接近功能完備的 EAS 替代方案作為 Micro-Rollups 來實現,這種替代方案可以提供相同的三個核心功能:
-
用於存儲所有架構的架構註冊表;
-
根據架構創建證明的能力;
-
撤銷現有證明的選項;
在下一節中,我們將更深入地研究如何構建它。
讓我們用 Micro-Rollups 構建一個 EAS
免責聲明:此演示展示了框架的功能,代表了一個不完整的構建,不適用於生產環境,請將內容視為說明性而非最終產品。
在開發 Micro-Rollups 時,至關重要的是用狀態機的方式來理解您的邏輯,這需要仔細考慮 Micro-Rollups 的狀態(即它將持有的數據)以及將支配狀態轉換函數行為的動作,而狀態轉換函數又會操作此狀態。

理解了以上內容,我們現在開始使用 Stackr 的 SDK 設計 Micro-Rollups 的狀態。
設計
-
架構和證明存儲在狀態機內部的鏈下;
-
用戶發送動作,觸發狀態機內部的狀態轉換函數;
-
用戶可以發送動作來註冊架構、針對任何存儲的架構創建證明或撤銷現有證明;
-
每隔一個既定時間戳就會生成一個區塊,其中包含架構和證明狀態的詳細信息;
-
該區塊被髮送到 Vulcan 網絡進行驗證;
-
如果區塊符合狀態機的規則,則該區塊將被批准;
-
區塊數據將被拆分到 L1 和 DA 進行結算;

確定初始狀態
類似於 EAS,我們需要存儲架構和證明的列表。為了清晰地說明這一點並提供明顯的對比,我們將使用與 EAS 相同的結構定義。
1.首先,讓我們在我們的狀態中定義架構和證明。

分析細節如下:
-
schemas: 該字段存儲了一個哈希映射,鍵為架構的 UID,值為 SchemaRecord 結構體,SchemaRecord 結構體對應用戶提交的證明架構。
-
attestations: 該字段存儲另一個哈希映射,鍵為證明的 UID,值為 Attestation 結構體。Attestation 結構體對應引用特定架構的單個證明。
添加狀態更新處理程序
在設置了最小可行狀態之後,我們需要定義用於更新狀態的狀態轉換函數。
2.讓我們定義兩個函數:
-
schema: 負責創建架構條目;
-
attest: 負責創建證明條目;


分析 registerSchema 函數:
-
當用戶提交註冊新證明架構的指令時,需要提供兩個字段:schema:證明架構的 ABI(Application Binary Interface),revocable:架構是否明確允許撤銷證明;
-
發起註冊動作的用戶將被記錄為架構的註冊者;
-
狀態轉換函數會根據提供的數值計算該架構條目的唯一標識符;
-
最後,將新的架構條目添加到狀態中;
分析 attest 函數:
-
用戶提交創建新證明的指令,其中包含相關 schemaUID 等字段;
-
發起創建動作的用戶將被記錄為證明者;
-
狀態轉換函數會根據提供的數值計算該證明條目的唯一標識符;
-
狀態轉換函數會對比傳入的證明數據與相關架構的 ABI;
-
最後,將新的證明條目添加到狀態中;
至此,我們已經構建了一個最低可行系統。
智能合約 vs. Micro-Rollups
要獲取針對某個架構創建的所有證明,或者由某個地址發出的所有證明,我們就需要遍歷所有的證明條目。當我們每次想要進行這樣的查找時,都需要重複這一過程。
為了緩解這個問題,EAS 實現了一個名為 Indexer.sol 的智能合約,專門用於索引多個映射變量中的值。然而,由於以太坊虛擬機(EVM)中的存儲成本與 Micro-Rollups 相比非常昂貴,這會產生額外的 Gas 費用。
但由於我們正在構建一個 Micro-Rollups,我們可以更加自由地使用狀態和計算,以用戶體驗為優先考慮,而不是成本。
添加索引字段以提高查找效率
3.在狀態中添加 schemaAttestations 字段,該字段將用於維護架構與其證明之間的映射關係。

因此,當添加新的證明時,我們也更新 attest 函數,以更新架構的映射關係。

這樣就可以輕鬆構建一個類似於以太坊證明服務的可追溯性的鏈上證明系統,賦予後端服務器鏈上超能力,聽起來是不是很簡單?
將鏈下證明引入鏈上 → 現實世界用例和更多可能
在 Web3 世界中,證明對於啟用大多數現實世界用例至關重要,它們彌合了 Web2 和現實身份與 Web3 之間的差距,保留了分佈式信任。
上述系統的妙處在於,它允許證明在鏈上無縫使用,而不會產生大量開銷。
正如開頭所提到的,Micro-Rollups 的狀態根會結算在 L1 上。值得注意的是,開發人員可以選擇哪些狀態部分結算在 L1 上,哪些部分作為元數據放在 DA 上,從而解鎖混合安全假設。
在這種情況下,如果我們提取證明並將其默克爾根(merklized root)結算在 L1 上,那麼我們就可以在默克爾樹中進行證明的直接包含性證明。



