價格分析

Curve + zkSync L2:以太坊的ZK Rollup 智能合約

Curve 和Matter Labs 團隊很高興宣布以安全且去中心化的方式向以太坊擴展邁出了一大步:今天,我們和Curve Finance 一起發布了第一個常駐dapp 的zkSync L2 智能合約測試網。

為什麼選擇ZK Rollup ?

擴展性是以太坊一個迫切的需求- 隧道盡頭有一個亮燈。 Vitalik Buterin 剛剛宣布Rollup 是現階段擴展以太坊的“唯一選擇”[6], 突出顯示了其[独特的无需信任安全保证](/ matter-labs/evaluating-ethereum-l2-scaling-solutions-a-comparison-framework-b6b2f410f955 “獨特的無需信任安全保證”) 。

ZK Rollup (ZKR)是現有的兩種Rollup[7] 版本之一,另一種是Optimistic Rollup (簡寫:OR)[8]。兩種方法都有其取捨(參見詳細比較[9])。這是主要的實際差異:

安全- 即使使用單個驗證者,ZK Rollup 也非常安全,因為它們依靠純數學,而不是進行持續的經濟激勵活動來確保資金安全。除了密碼學假設外,ZKR 與基礎L1 一樣安全。這對於處理資產總值高的協議尤其重要。與ZKR 相比, Optimistic Rollup 具有強大的反網絡效應:其安全性與鎖定價值成比例地降低。實際上,需要控制資本上限(數千萬美元的範圍內),才能安全地放如在單個Optimistic Rollup 中,才能保持對對L1 的高度合理攻擊的抵抗[10]. 只要以太坊仍然是PoW 鏈,就無法緩解。

最終確定性。 ZK Rollup 的最終確定性時間(分鐘)短,因此支持資本快速退回到L1(L1:第一層,即以太坊自身網絡)。相反, Optimistic Rollup 被迫在快速退出和資本效率退出之間進行選擇[11],但不能兩者兼有。大多數研究人員認為,OR 至少需要一個星期的爭議延遲時間。這對於與L1 上的合約(至少將在最初)繼續在生態系統中發揮重要作用的合約的互操作性非常重要。

可編程性- 通過Optimistic Rollup 支持完全的EVM 兼容性更加容易。通常認為OR 方法是將現有以太坊智能合約引入L2 (L2 :二層網絡)的唯一可行方法。但是,這種情況即將改變。

ZK Rollup 中的智能合約?

直到最近,在ZK Rollup 中支持任意用戶定義的智能合約還是一項極富挑戰性的任務。但是這些天來,在零知識證明領域中事情發展很快。 2020 年帶來了幾項突破,最終使之成為可能:Matter Labs 引入了Zinc 編程語言和對SNARK 友好的Zinc VM,並實現了以太坊的遞歸PLONK 證明驗證[12]。這些技術的結合將推動zkSync 上的實現智能合約。

Zinc VM 如何工作?

合約以Zinc 編程語言編寫並編譯。編譯器輸出是雙重的:

Zinc 虛擬機的字節碼。
合約的SNARK 驗證密鑰。

Zinc VM 字節碼+驗證密鑰可以完全無許可的方式部署到zkSync 網絡。合約將在L2 中被分配一個新地址。每當用戶與該合約進行交互時,zkSync 的驗證程序將執行Zinc VM 操作碼並產生對交易有效性的零知識證明– 友好的SNARK Zinc VM 的特殊設計使其成為可能。然後將由Rollup 塊電路針對已部署的驗證密鑰來遞歸驗證該證明。然後,以太坊上的zkSync 智能合約驗證區塊證明,以授權狀態轉換,所有交易狀態轉換可以在一個區塊快速的驗證。

因此,zkSync 上的Zinc 智能合約繼承了有效性證明的嚴格安全保證。

如何為zkSync 編寫智能合約?

目前,必須使用Zinc 編程語言編寫Zinc VM 的智能合約。查看最新版本的Zinc Book[13],你將找到完整的入門指南和完整的開發人員參考。我們期待你在Zinc Gitter 聊天室[14]中提出的問題和反饋。

Zinc 目前處於封閉開發Beta 版。如果你有興趣為你的項目嘗試,請與我們聯繫[15]。

Zinc 與Solidity/Vyper 有何不同?我可以移植現有的源代碼嗎?
Zinc 遵循簡化的Rust 語法,但它藉鑑了Solidity 的所有智能合約元素和結構體。任何有經驗的Solidity/Vyper 開發人員都可以在幾天之內了解到它。

由於Zinc 在結構體上與Solidity 相同,因此可以輕鬆地將現有的Solidity 代碼轉換為Zinc。主要的挑戰是Zinc 目前尚未完全圖靈完備。這意味著:禁止遞歸和無限循環(有限循環是OK 的)。

第二受歡迎的ETH 智能合約語言Vyper 也不是圖靈完備的。因此,今天任何Vyper 程序都可以同構轉換為Zinc。這正是zkSync 上Curve 的工作方式:Matter Labs 幫助Curve 團隊將現有的Curve 合約重寫為Zinc 版本。它幾乎逐行與原始來源相同。

儘管Zinc 本身不是圖靈完備的,但實際上任何在Solidity 可以完成的工作而只需進行很少的修改即可在Zinc 中完成,部分是因為大多數Defi 應用程序的代碼很少需要循環或遞歸,部分是因為圖靈完整組件可以通過利用交易級別的遞歸來重新實現,即合約通過外部調用來調用自己的公共方法(在zkSync 中仍然可以實現)。

此外我們還有更多的好消息:Matter Labs 正在努力在不久的將來使Zinc 圖靈完備。在此之前,我們很樂意為你的團隊提供支持,以使現有的Solidity 代碼可移植。請聯繫[16]。

可組合性如何?

zkSync L2 網絡中的所有合約都將能夠以與以太坊主網上完全相同的方式原子地互相調用。

如何管理用戶密鑰?

在Gitcoin 贊助第7 輪[17],zkSync 被直接集成到結帳流程中,這需要信任Gitcoin 網站。在此Demo 中,zkSync 私鑰永遠不會離開connect.zksync.dev[18]的範圍。這種類型的集成類似於Web2 世界中的單點登錄身份驗證方案,該方案廣泛用於Google/Apple/Facebook 登錄。這實際上意味著zkSync 現在可以與任何以太坊錢包和任何數量的完全不受信任的dapp 結合使用。

即使zkSync 網站被黑,我們的方法也需要通過以太坊錢包另外簽名每條消息的方式進行2 次驗證。目前,該簽名已由我們的服務器驗證,儘管遞歸PLONK 證明現在使我們可以將其直接集成到我們的ZKP 電路中,而無需太多開銷。

同時,我們正在與其他團隊合作開發通用的以太坊L2 簽名標準,這將使圍繞L2 合約進行交互的用戶體驗更加令人愉悅。

Zinc Alef 的局限性是什麼?

測試網功能齊全,你可以編寫智能合約,將它們部署到測試網,在本地測試它們,並生成智能合約執行的零知識證明。每筆交易都將導致zkSync 測試網上的進行真實通證轉移,這將反映在區塊瀏覽器和錢包中。

但是,在此階段,Zinc VM 尚未集成到zkSync 核心中。 Zinc 編程語言中的一些重要功能也可能會丟失。我們將根據社區的要求優先開發功能