介绍 Noir:零知识的通用语言

翻译自2022年10月7日的官方文章:

经过 18 个月的开发,我们很高兴推出 Noir:零知识证明的语言。

Noir 是一种基于 Rust 领域的特定语言 (DSL),用于创建和验证零知识证明。这是编写与任何证明系统兼容的 zk 应用程序最简单的方法。

我们还宣布了两个新的Typescript库:NoirJS和Barretenberg.js,前者可以在浏览器中编译Noir系统,后者可以在浏览器中证明和验证这些系统。

| 开始使用 Noir

是什么阻碍了ZK应用程序的开发?

目前的zk堆栈是繁琐的,很难理解。我们的zk系统建设是同行的,如Circom和ZoKrates,是强大而灵活的,但它们需要有加密概念的知识,为开发者的广泛采用造成了障碍。

现有的系统编程语言需要两个大脑。

1.一个了解证明系统、可信设置和一些低级密码学的密码学大脑,以及:

2.应用程序开发人员的大脑,可以直观地推理公共和私有状态以创建新颖的区块链应用程序

没有多少人有两个大脑!这意味着今天 zk 应用程序开发人员的数量只是区块链开发人员总数的一小部分。

Noir 的简单性意味着拥有一个大脑就足够了。

通过抽象出底层的密码复杂性,同时保留其他方式构建语言的所有功能和灵活性,Noir 允许任何开发人员——而不仅仅是那些具有密码学知识的开发人员——来构建 zk 应用程序。开发人员现在可以专注于设计私有应用程序背后的逻辑。

单脑解决方案:Noir语言

Noir 使创建 zk 系统和应用比以往任何时候都更容易。

简单、熟悉的语法
Noir与Rust的相似性使其简单、熟悉、易于理解。

创建条件就像写“if”一样简单。使用其他 zk 系统编写语言需要下载系统库,阅读它们以了解其底层逻辑,然后调用库实现基本功能。

许多像 Pedersen 哈希这样的基本函数不必在 Noir 系统中重新实现——它们已经融入了语言本身。

示例:Circomlib 的多路复用器实现

Noir的简单性也意味着与其他系统编写语言相比,生活质量有极大的改进。

简易的依赖性管理。Noir有自己的软件包管理器 nargo ,它模拟了 Rust 的 crate 和软件包管理系统。nargo 支持使用上传到 Github 的依赖关系,允许开发者将 Noir 系统的依赖关系和集成这些系统的项目分开。

更简单的系统调试。开发人员还可以使用 nargo 来证明和验证系统,而不是编写脚本和下载证明和验证器密钥。

自主执行。最后,开箱即用的 Noir 允许你构建已编译的 Solidity 合约,以验证任何 EVM 兼容区块链上的证明。智能合约开发者现在可以根据 Noir 证明来执行逻辑。

标准加密库

Noir 还拥有一个在系统开发中常用的高度优化的标准函数库。

stdlib 使开发人员能够访问广泛使用的复杂算法,这些算法由 Aztec 团队手写并经过严格优化。抽象层的简单性和效率之间总是存在权衡——在这种情况下,程序转换为约束的效率如何。

标准库为开发人员提供了高水平的系统效率,同时与简单易用的抽象层进行交互。

证明系统不可知

最后,由于 Noir 并不直接编译成系统,而是编译成一种中介表示(类似于 LLVM ),所以它与多种后端证明系统兼容,包括 PLONK、Groth16 和 Marlin 。

我们称这种中间表示为 ACIR (抽象系统中间表示)。

Aztec Network 有一个运行在 Plonk 上的名为 Barretenberg 的证明系统后端。但是使用 Noir 进行开发意味着您可以根据需要插入任何基于 SNARK 的证明系统。

Noir 的实践

Noir 的直观性必须亲眼目睹才能相信,所以我们创建了一些 Noir 的系统实现样本,以向你展示它们与通用参考代码的对比:

🧠 Mastermind

Mastermind是一个简单的数字猜测游戏,类似于疯狂流行的益智游戏 Wordle 。我们在 Noir中对 Mastermind 的实现大约是现有参考实现长度的一半。

| Mastermind in Circom

| Mastermind in Noir

🌪️ Tornado Cash
引擎盖下的 Tornado Cash 允许用户证明他们拥有 Merkle Tree 中的给定票据。下面我们仅用 10 行就展示了类似 Merkle 成员资格证明的示例实现。

|Tornado Cash in Circom

|Tornado Cash in Nori

Barretenberg.js 最后,在今天发布 Noir 的同时,我们还开发并发布了 Barretenberg.js --用于 Aztec 的 Barretenberg 后端的 Noir Typescript 包装。它允许应用开发者在 Javascript 中创建证明,而不是通过 Rust 命令。

该包装器可以在浏览器中直接构建证明,使 zk 开发人员能够快速、轻松地创建全栈 Noir 程序。

Noir 抽象出了大量密码学,使开发人员能够使用密码功能而不用担心安全问题,从而降低了开发障碍。

Noir:语言

Noir 语言是类似于 Rust 的语言,具有开箱即用的功能,任何应用程序开发者都应该熟悉这些功能:

  • 函数

  • 子模块

  • 结构/用户定义的类型

  • If 语句

  • 循环

  • 全局常量

还有一些我们正在研究但尚未实现的功能,如泛型和高阶函数。

用例

现在 Noir 可以用来构建 zk 游戏,速度比以前快得多。Wordle、Battleships 和 Mastermind的实现可以在一个下午完成。

借助 Barretenberg.js 库,开发者还可以在 Aztec Connect 上创建会员和身份证明、盲拍和行动证明,从而获得私人空投。

我们相信 Noir 是实用 zk 开发的转型步骤。因此,我们目前正致力于使用 Noir 重写 Aztec 的核心系统,并且我们一直在努力提高其可用性。

入门

您听说过零知识证明。您甚至听说过SNARKs、PLONK和zkRollups。但您从来没有开始过,因为您没有多余的大脑来学习密码学。

今天一切都变了。以下是如何在 15 分钟内安装 Noir、编译您的第一个 zk 程序并在 Solidity 合约中验证它:

|开始使用Noir

一旦你起步,请向我们展示你所建立的成果。

我们还有一部分Aztec资助计划,专门资助有Circom、Zokrates或Leo等语言编写系统经验的Noir开发者。如果你有兴趣以早期测试者的身份积极参与Noir的开发,请查看我们的赠款页面以了解更多信息。

如果你要去哥伦比亚区块链周,我们会为 ETHBogota 提供 20,000 美元的奖金,奖励使用 Noir 构建的新颖的 zk 应用程序。

我们将发布更多关于Noir开发的指南,并增加其背后的工具基础设施,目的只有一个--让 Noir 成为零知识的通用语言。

生态系统 Noir 的生态系统刚刚起步。但既然我们已经向你展示了我们正在进行的工作,我们希望你能作出贡献。

目标不是标准的肆意扩散,而是一个语言栈,其普遍性和灵活性加强了它在整个生态系统中的实用性。

这意味着我们希望听到你的声音。为语言和Barretenberg库做出贡献,并加入我们的Discord,直接与Noir团队交谈:discord.gg/aztec

加入我们

我们正在寻找有才华的工程师和应用密码学家。如果加入为区块链带来可扩展隐私的使命让你感到兴奋,请查看我们的空缺职位

Subscribe to Aztec中文
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.