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

  • azteclabs
  • 发布于 2023-03-28 13:56
  • 阅读 17

Noir是一种基于Rust的特定领域语言,用于创建和验证零知识证明。它简化了zk应用的开发,使得没有深厚密码学基础的开发者也可以轻松构建zk应用。Noir具备简单的语法、优化的标准库和与多种证明系统的兼容性,从而降低了zk开发的门槛。

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

经历了 18 个月的开发,我们很高兴地介绍 Noir:零知识证明的语言。

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

我们还推出了两个新的 Typescript 库,NoirJS,它允许在浏览器中编译 Noir 电路,以及 Barretenberg.js,它允许在浏览器中证明和验证这些电路。

开始使用 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 还拥有一个标准库,其中包含在电路开发中常用的高度优化的函数。

标准库为开发者提供了广泛使用的复杂算法的访问,这些算法由 Aztec 团队手动编写并进行了紧密优化。抽象层的简单性与其效率之间总是存在权衡——在这种情况下,程序被转换为约束的效率。

标准库为开发者提供了在与简单、易用的抽象层进行交互时的高电路效率。

证明系统无关

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

我们将这种中间表示称为 ACIR(抽象电路中间表示)。

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

Noir 实践

Noir 的直观性必须亲眼见识才能相信,因此我们创建了一些 Noir 中电路的示例实现,以展示它们与常见参考代码的对比:

🧠 Mastermind

Mastermind 是一个简单的猜数字游戏,类似于广受欢迎的拼图游戏 Wordle。我们在 Noir 中实现的 Mastermind 代码长度大约是现有参考实现的一半。

Circom 中的 Mastermind

Noir 中的 Mastermind

🌲 Merkle 成员证明

Merkle 成员证明允许用户证明他们在 Merkle 树中拥有给定的票据。下面我们展示了一个仅用 10 行代码实现的 Merkle 成员证明示例。

Noir 中的简单保护

Barretenberg.js

最后,随着 Noir 的发布,我们开发并发布了 Barretenberg.js——用于 Aztec Barretenberg 后端的 Noir Typescript 包装器。它允许应用开发者通过 Javascript 创建证明,而不是通过 Rust 命令。

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

Noir 抽象掉了很多加密学,使开发者能够使用加密功能而不必担心安全性,从而降低了开发障碍。

Noir:语言

Noir 语言类似于 Rust,具备开箱即用的特性,这些特性应该对任何应用开发者都很熟悉:

  • 函数
  • 子模块
  • 结构体/用户定义类型
  • 如果语句
  • 循环
  • 全局常量

还有一些我们正在开发,但尚未实现的特性,比如泛型和高阶函数。

用例

今天,Noir 可以用于构建比以前更快的 zk 游戏。Wordle、Battleships 和 Mastermind 的实现可以在一个下午完成。

借助 Barretenberg.js 库,开发者还可以创建成员和身份证明、盲拍以及在 Aztec Connect 上的操作证明,从而启用私有空投。

我们深信 Noir 是实用 zk 开发的一次变革性步伐。因此,我们目前正致力于使用 Noir 重新编写 Aztec 的核心电路,并持续努力提升其可用性。

开始使用

你已经听说过零知识证明。你甚至听说过 SNARKs、PLONK 和 zkRollups。但你从未开始,因为你没有空余的大脑来学习加密学。

这一切今天都改变了。以下是如何安装 Noir、编译你的第一个 zk 程序,并在 Solidity 合同中验证它,所有操作在 15 分钟内完成:

开始使用 Noir

一旦你启动了,展示你所构建的内容。

我们还有一部分 Aztec Grants 计划专门用于资助在 Circom、Zokrates 或 Leo 等语言中有编写电路经验的 Noir 开发者。如果你有兴趣作为早期测试者积极参与 Noir 开发,查看我们的 资助页面 以获取更多信息。

如果你要参加哥伦比亚区块链周,我们将为基于 Noir 构建的新颖 zk 应用提供 20,000 美元的奖金。

我们将发布更多关于 Noir 开发的指南,并增加其背后的工具基础设施,唯一的目标就是使 Noir 成为零知识的通用语言。

生态系统

Noir 生态系统刚刚起步。但现在我们已经向你展示了我们的工作,我们希望你能参与贡献。

目标不是任意的标准传播,而是一个其通用性和灵活性增强其在生态系统中有效性的语言堆栈。

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

加入我们

我们在寻找有才华的工程师和应用加密学家。如果能够加入这一使命,为区块链带来可扩展的隐私感到兴奋——请查看我们的 开放职位

  • 原文链接: medium.com/aztec-protoco...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
azteclabs
azteclabs
江湖只有他的大名,没有他的介绍。