編譯:Alex Liu ,Foresight News

以太坊成功帶來了一個蓬勃發展的去中心化應用生態,但它的可擴展性挑戰也日益嚴峻。開發人員面臨着一個艱難的選擇:限制其應用程序的功能和數據豐富性,或者忍受高昂的 Gas 費用和 Gas 用量限制。如果開發人員有辦法繞過這些限制,會怎麼樣?

Steel,連接 RISC Zero 和以太坊

RISC Zero 是主要的 zkVM 開發商之一,如果你常在耳邊聽到 zkEVM,但並不瞭解一字之差的 zkVM 是什麼,可以參考這篇文章。RISC Zero 最新推出了 Steel,它是基於 Alloy 的視圖調用證明庫,爲開發人員與以太坊 L1 或其他 EVM 鏈交互方式帶來巨大轉變。利用零知識證明和 RISC Zero zkVM,Steel 使開發人員能夠以可擴展、安全且經濟高效的方式執行視圖調用並可證明地讀取和計算以太坊的狀態。

Solidity 的便利, ZK 的力量

Steel 彌合了以太坊應用開發和零知識技術之間的距離,使開發人員更容易在其智能合約中利用 ZK 的力量。結合 RISC Zero zkVM 的功能,Steel 使開發人員能夠在以太坊 L1 或任何 EVM 等效鏈上構建更安全、可擴展且高效的應用程序。

藉助 Steel,開發人員能夠:

  • 直接在 zkVM 內執行 Solidity 智能合約,兼容更復雜的鏈上邏輯

  • 訪問 zkVM 內的歷史以太坊狀態

  • 使用 continuations 進行計算,不受區塊和交易數據大小的限制

  • 確保鏈下計算像在鏈上執行一樣安全可靠

  • 利用經多個合作伙伴嚴格測試和使用的第一個勝任生產環境的 zkVM

  • 以太坊狀態的私有計算

  • 通過開源代碼庫保持靈活性,不受供應商限制

無縫集成並節省成本

使用 Steel,執行視圖調用像指定所需的 Solidity 方法一樣簡單。無論是檢索 ERC-20 代幣餘額 (example) 還是訪問以太坊狀態等各個方面,Steel 都可以通過與 RISC Zero zkVM 無縫集成來簡化流程,同時確保安全性和效率。測試表明,Steel 有能力在單個視圖調用中處理超過 100K SLOAD 操作,這節省了主網上數千美元的 Gas 費用。我們可以使用 Bonsai 在大約 15 分鐘內證明它,這至少需要 210M 的 Gas,超出區塊限制 7 倍。

示例: ERC20 balanceOf

下面的代碼片段演示了使用 Steel 證明以太坊上部署的 ERC-20 合約的特定地址餘額的過程。此示例展示了開發人員如何利用 Steel 在 zkVM 內與以太坊鏈上數據進行交互。完整代碼可在此處查看。

定義視圖函數簽名

首先,使用 sol! 宏來定義 ERC-20 的 balanceOf 函數簽名。這將解析 Solidity 語法以生成相應的 Rust 結構體,該結構體實現了 SolCall trait,可用於調用 balanceOf 方法,該方法接受一個賬戶地址並返回關聯的 ERC-20 代幣餘額。

準備調用

接下來,通過用目標賬戶地址實例化 balanceOfCall 結構體來設置調用。同時,爲希望查詢的合約地址和調用者的地址定義常量。

在 Main 中執行調用

主函數在 zkVM 中執行,生成零知識證明。它首先讀取輸入環境,然後構造一個 ViewCallEnv 對象,確保當前狀態與預期的狀態根匹配。在提交相關區塊哈希和編號後,執行視圖調用,並打印餘額。

它的原理

Steel 通過三個步驟在 RISC Zero zkVM 中證明 Solidity 代碼,簡化了執行的過程:

  1. 預飛行階段:通過對以太坊 RPC 節點進行視圖調用來啓動預飛行,會緩存必要的存儲槽,僅使用查詢所需的數據填充 EVM 數據庫。所有存儲槽是根據視圖調用執行自動發現和獲取的。

  2. 存儲驗證:進行存儲完整性檢查,確保 EVM 數據庫中的數據與區塊鏈的狀態根對齊,從而確認其合法性。

  3. Solidity 執行:在 RISC Zero zkVM 內的 EVM 上運行給定的 Solidity 函數。

這與存儲證明有何不同?

使用傳統的存儲證明,開發人員必須手動選擇其智能合約使用的存儲槽,並重新實現智能合約邏輯。而使用 Steel,所有存儲槽都會根據視圖調用執行自動發現和獲取。這爲開發人員節省了大量時間,減少了實施錯誤的可能性,從而減少了出現安全漏洞的機會。

獲取已驗證的區塊哈希

在以太坊智能合約中使用 blockhash 操作碼進行驗證時,驗證的 commitment 必須引用不超過 256 個區塊舊的區塊哈希。考慮到平均區塊時間爲 12 秒,這就設置了一個約爲 50 分鐘的狹窄時間範圍,用於完成證明生成並確認驗證交易已包含在一個區塊中。

當需要在鏈上獲取一個早於 256 個區塊的已驗證的區塊哈希時,可以使用以下幾種策略之一:

  • 當預先知道將需要的區塊哈希時(例如,在發起治理提案時),可以將該區塊哈希保存到合約狀態中。

  • 另一種方法是使用 RISC Zero 來證明從查詢的區塊到最近的 256 個區塊中的一個區塊的哈希鏈。

鏈上應用程序的未來

設想未來鏈下計算將與鏈上驗證無縫集成。 Steel 使開發人員能夠在 zkVM 內可靠地訪問和計算以太坊的完整歷史,從而能創建出下一代數據豐富且功能更強大的鏈上應用程序,爲實現這一願景做出不小的貢獻。