DAOrayaki|解讀Noir:零知識(ZK)的通用語言

發表於 2022-10-11 10:02 作者: DAOrayaki_

創作者:Yofu 

審核者:Shaun

原文:Noir Introducing Noir: The Universal Language of Zero-Knowledge

Zk因隱私性和可擴展性成爲了區塊鏈技術領域的分水嶺。但zk堆棧因繁瑣且難以理解,使得zk應用开發者的數量只是區塊鏈开發者總數的一個小子集。Noir 是一種基於 Rust 的領域特定語言 (DSL),用於創建和驗證零知識證明。該語言由Aztec團隊开發,致力於成爲編寫與任何證明系統兼容的 zk 應用程序的最簡單方法。

目前推出兩個新的 Typescript 庫,NoirJS:在瀏覽器中編譯 Noir 電路; Barretenberg.js:在瀏覽器中證明和驗證這些電路。

ZK應用的开發障礙:

目前的zk堆棧是繁瑣且難以理解的。ZK 構建者如Circom和ZoKrates,被視爲功能強大而靈活,但仍需要密碼學概念的知識,這爲开發者的廣泛採用制造了障礙。

現有的電路編譯語言需要兩個大腦:

一個理解證明系統、可信設置和一些低級密碼學的密碼學大腦;

一個應用开發者的大腦,能夠直觀地推理公共和私人狀態,以創建新的區塊鏈應用。

這是一件門檻非常高的事情,導致今天zk應用开發者的數量只是區塊鏈开發者總數的一個小子集。

Noir 試圖打破以上的復雜性,成爲足夠簡單的解決方案。

通過抽象出潛在的密碼復雜性,同時保留其他電路構建語言的所有功能和靈活性,Noir 允許任何开發人員——不僅僅是具有密碼學知識的人——構建 zk 應用程序。同時,开發人員可以專注於設計私有應用程序背後的邏輯。

Noir語言:

單腦解決方案

Noir致力於使zk電路和應用程序的創建比以往任何時候都更容易。Noir與Rust的相似性使其簡單、熟悉、易於理解。

創建一個條件就像寫 "if "一樣簡單。使用其他zk電路編寫語言需要下載電路庫,閱讀它們以了解其底層邏輯,然後調用基本功能的庫實現。

許多基本功能(如 Pedersen 哈希)不必在 Noir 電路中重新實現——已融入語言本身。

示例:Circomlib 的多路復用器實現:https://github.com/iden3/circomlib/blob/master/circuits/mux1.circom

Noir 的簡單性也意味着與替代電路書寫語言相比,有了一些改進:

免於頭痛的依賴性管理。Noir有自己的軟件包管理器nargo,它模擬了Rust的crate和軟件包管理系統。nargo支持使用上傳到Github的依賴關系,允許开發者將Noir電路的依賴關系和集成這些電路的項目分开。

電路調試更簡單。开發人員無需編寫腳本並下載證明和驗證者密鑰,還可以使用 nargo 來證明和驗證電路。

自主執行。最後,开箱即用的 Noir 允許您構建編譯的 Solidity 合約,以驗證任何與 EVM 兼容的區塊鏈上的證明。智能合約开發人員現在可以執行基於 Noir 證明的邏輯。

標准加密庫

Noir 還擁有一個標准庫,其中包含電路开發中常用的高度優化功能。stdlib 使开發人員可以訪問廣泛使用的復雜算法,這些算法是由 Aztec 團隊手寫並嚴格優化的。在抽象層的簡單性和它的效率之間總是存在權衡——在這種情況下,程序轉換爲約束的效率。

標准庫爲开發人員提供了高水平的電路效率,同時與一個簡單、易於使用的抽象層進行交互。

證明系統不可知

最後,由於 Noir 不直接編譯爲電路,而是編譯爲中間表示(類似於 LLVM),它與多個後端證明系統兼容,包括 PLONK、Groth16 和 Marlin。

我們將這種中間表示稱爲 ACIR(抽象電路中間表示)。

Aztec Network 有一個名爲 Barretenberg 的證明系統後端,它在 Plonk 上運行。但是使用 Noir 進行开發意味着您可以根據需要插入任何基於 SNARK 的驗證系統。

Noir的實踐

關注我們

Noir的直觀性必須親眼所見才能相信,所以我們在Noir中創建了一些電路的示例實現,向你展示它們與普通參考代碼的對比情況。

? Mastermind

Mastermind是一個簡單的數字猜測遊戲,類似於瘋狂流行的益智遊戲Wordle。我們在Noir中對Mastermind的實現大約是現有參考實現的一半長度。

在Circom中的Mastermind:https://github.com/vezenovm/week3/blob/master/Part1/contracts/circuits/hitandblow.circom

Noir中的Mastermind:https://github.com/vezenovm/mastermind-noir/blob/master/circuits/src/main.nr

Tornado Cash

Tornado Cash在引擎蓋下允許用戶證明他們擁有Merkle樹中的一個給定的音符。下面我們展示了一個僅用10行就能實現的類似Merkle成員證明的例子。

Circom中的Tornado Cash:https://github.com/tornadocash/tornado-core/blob/master/circuits/withdraw.circom

Noir中的Tornado Cash:https://github.com/vezenovm/simple_shield/blob/master/circuits/src/main.nr

Barretenberg.js

Barretenberg後端的Noir Typescript包裝器。允許應用开發者在Javascript中創建證明,而不是通過Rust命令。

該包裝器允許在瀏覽器中直接構建證明,允許Zk开發者快速、輕松地創建全棧的Noir程序。

Noir抽象了大量的密碼學,使开發者能夠使用密碼學功能,而不必擔心安全問題,從而降低了开發障礙。

Noir:語言

Noir 語言與 Rust 類似,具有开箱即用的功能,任何應用程序开發人員都應該熟悉:

功能

子模塊

結構/用戶定義類型

IF語句

循環

全局常量

還有一些正在开發但尚未實現的功能,例如泛型和高階函數。

用例

使用 Noir 比以前更快地構建 zk 遊戲。 Wordle、Battleships 和 Mastermind 的實現可以在一個下午完成。

借助 Barretenberg.js 庫,开發人員還可以在 Aztec Connect 上創建成員資格和身份證明、盲拍以及可以啓用私人空投的行動證明。

標題:DAOrayaki|解讀Noir:零知識(ZK)的通用語言

地址:https://www.coinsdeep.com/article/7500.html

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

你可能還喜歡
熱門資訊