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

Aztec中文
2023-02-07 23:57
发布于 Mirror

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

https://medium.com/aztec-protocol/introducing-noir-the-universal-language-of-zero-knowledge-ff43f38d86d9

经过 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

加入我们

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

0
粉丝
0
获赞
9
精选
相关文章
数据来源区块链,不构成投资建议!
网站只展示作者的精选文章
2022 Tagge. With ❤️ from Lambda