介绍 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 系统中重新实现——它们已经融入了语言本身。
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 的实现大约是现有参考实现长度的一半。
🌪️ Tornado Cash
引擎盖下的 Tornado Cash 允许用户证明他们拥有 Merkle Tree 中的给定票据。下面我们仅用 10 行就展示了类似 Merkle 成员资格证明的示例实现。
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 合约中验证它:
一旦你起步,请向我们展示你所建立的成果。
我们还有一部分Aztec资助计划,专门资助有Circom、Zokrates或Leo等语言编写系统经验的Noir开发者。如果你有兴趣以早期测试者的身份积极参与Noir的开发,请查看我们的赠款页面以了解更多信息。
如果你要去哥伦比亚区块链周,我们会为 ETHBogota 提供 20,000 美元的奖金,奖励使用 Noir 构建的新颖的 zk 应用程序。
我们将发布更多关于Noir开发的指南,并增加其背后的工具基础设施,目的只有一个--让 Noir 成为零知识的通用语言。
生态系统 Noir 的生态系统刚刚起步。但既然我们已经向你展示了我们正在进行的工作,我们希望你能作出贡献。
目标不是标准的肆意扩散,而是一个语言栈,其普遍性和灵活性加强了它在整个生态系统中的实用性。
这意味着我们希望听到你的声音。为语言和Barretenberg库做出贡献,并加入我们的Discord,直接与Noir团队交谈:discord.gg/aztec
加入我们
我们正在寻找有才华的工程师和应用密码学家。如果加入为区块链带来可扩展隐私的使命让你感到兴奋,请查看我们的空缺职位。