推出 o1js v2.0: 為 Mina 生態系統提供更強大、更安全的 o1js

  • 楊景輝
  • 更新于 2024-11-25 22:07
  • 阅读 345

在o1jsv2.0中,新的版本引入了關鍵的安全優化和新的開發人員工具,以確保zkApps不僅更加強大,而且能更靈活地建立下一代加密應用程式。幾星期之前,在完成廣泛的外部審計後,Mina官方發布了o1jsv2.0—是o1js的最新版本。這個版本建立在今年較早時候的勢頭之上,

在 o1js v2.0 中,新的版本引入了關鍵的安全優化和新的開發人員工具, 以確保 zkApps 不僅更加強大,而且能更靈活地建立下一代加密應用程式。

幾星期之前,在完成廣泛的外部審計後,Mina官方發布了 o1js v2.0 — 是 o1js 的最新版本。 這個版本建立在今年較早時候的勢頭之上,當時與 Mina 的 Berkeley 硬分叉一起推出了 v1.0。 第一個主要版本標誌著 zkApps 生產就緒,而且可以在主網上部署的重要一步。現在通過 v2.0,可以進一步加強 o1js,以完善和強化給開發人員使用的依賴和建構的框架。

o1js v2.0 概述

在 v2.0 中的修改主要集中在內部的電路結構,用來推動約束方面的優化 - 以數學形式表示應用程式原始碼及 zkApps 功能的核心。電路的重寫可以更深入實現安全措施以解決破壞相容性的問題。當中有很多地方是受外部審計 Veridise 的結果影響,該審計結果為進一步加強 o1js 提供了很有價值的見解。雖然相關的見解是先在 v1.0 中實現,不過在這個主要版本中可以在 v2.0 中向後相容。

重要修復和安全優化的亮點

自訂代幣的餘額驗證

一項重要更新是修正了 o1js 處理自訂代幣餘額的方式。在審計中,Veridise 發現了一個問題,在特定情況下,某些 "AccountUpdate" 的標誌沒有充分考慮,這可能會影響自訂代幣的餘額計算。為了解決這個問題,新版本優化了驗證檢查,以確保這些標誌得到一致及準確的驗證。該修復最初是作為 v1.0 中的修補程式引入,使我們能夠在不影響現有 zkApps 的情況下減輕任何直接風險。不過完整的解決方案,可以更深入地應用於電路核心,這表示著 v2.0 具有決定性及持久的修復。

ECDSA 和對外的曲線改進

另一個重要更新是涉及到 ECDSA 和對外的曲線支持。Mina 團隊發現並解決了與 Signature 類別的規範排序相關的問題。 Veridise 將此標記為中等嚴重性的問題,因為它可能會導致簽名被錯誤地驗證為有效的簽名。團隊針對這個問題,實作了一個額外的斷言來執行預期的順序,以確保驗證的準確性及一致性。與代幣餘額修復一樣,在 v1.0 中發布了 ECDSA 的初始修復,加入了開發人員可以立即採用的新函數,分別是 createForeignCurveV2() 和 createEcdsaV2()。在 v2.0 的發布中,這些更安全的 v2 功能已成為預設功能,並且刪除了已棄用的版本。

新功能和增強功能

除了安全性能之外,o1js v2.0 更帶來了新功能以幫助開發人員可以有更大的靈活度來進行開發:

  • ZkProgram 的輔助輸出支持: 開發人員現在可以使用輔助輸出作為電路中的附加數據點。輔助輸出可以被認為是為電路返回的附加輸出,開發人員可以使用它來進行其他計算。與驗證者驗證證明所需的公共輸出相反,輔助輸出不是證明的一部分,而且驗證者也不需要驗證證明的正確性 - 這將使開發人員可以利用 zkProgram 更容易地開發大型、複雜及模組化應用程式。
  • BLAKE2B 雜湊支持: o1js v2.0 引入了 BLAKE2B 加密雜湊函數的支持,類似於 SHA256、Keccak 或 Poseidon。這樣可以為需要多種雜湊選項的 zkApp 開發人員添加了一個新工具。而這個特性也擴展了 o1js 的加密功能,可以支持跨各種應用程式。

o1js v1.0 的持續維護

Mina 建議所有開發者需要升級到 o1js v2.0。 升級到最新版本後可以享受更快的速度,幾乎所有 API(除了少數)都能保持不變。因此只需執行 "npm i o1js",然後繼續開發應用程式。使用 o1js v2.0,應用程式將更加安全,及可以存取更多功能。不過將項目升級到 o1js v2.0 將打破應用程式的限制。這表示如果已經將應用程式部署到 Mina 主網或 devnet,使用 o1js 2.0 的項目就將無法與這些早已部署的應用程式互動。所以如果選擇升級,就必須重新部署它們。

Mina 計劃支持 o1js v1.0,直到 Mina 協議的下一個硬分叉。這種支持將是必要的維護,主要包括重要錯誤修復和安全性修補程式。往後會重點將放在 o1js v2.0 及其後續版本。

如何升級?

將應用程式升級到 o1js v2.0 是很簡單,只需記住兩個主要修改。 第一個修改是需要更新函數名稱: 這表示刪除任何「V2」後綴(例如,將 functionNameV2() 變更為 functionName()),並使用新名稱來完全重命名函數( 例如從 AccountUpdate. defaultAccountUpdate 到 AccountUpdate.default )。

第二個修改會影響 ZkPrograms - 需要調整處理回傳值的方式: 當傳回公共輸出時,將其包裝在一個物件中(將 return Field(1); 更改為return { publicOutput: Field(1) };), 及在使用證明時,需要對它們進行解構 (而不是讓 proof = wait MyProgram.baseCase(),使用 let {proof }: {proof: Proof<Empty, Field> } = wait MyProgram.baseCase())。

現在,應用程式應該與 o1js v2.0 完全相容了。

展望未來

透過 o1js v2.0,不僅優化了 zkApps 的安全性,更擴展了可用於創新加密應用程式的工具包。此版本證明了Mina是致力於不斷發展 o1js 以及 Mina 開發者生態系統的需求,確保每次更新不僅解決安全問題,更加入新功能,讓開發人員能夠突破 zkApps 所能實現的界限。

原文: https://www.o1labs.org/blog/introducing-o1js-v2

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
楊景輝
楊景輝
杨景辉 香港城市大学 硕士 专长: 计算机编程(全栈工程师)、区块链开发、算法研究、数据库设计、项目管理