简介

范畴特定言语(DSL)在零知识(ZK)证明[4]范畴中起着至关重要的作用。在核心上,ZK 证明处理了在不透露任何附加信息的情况下证明秘密数据中某些属性存在的应战。但是,将高层次的想法转化为详细的证明或许会很杂乱。这便是 DSL 发挥作用的当地,它们将笼统概念与证明体系所需的电路表明桥接起来。

证明体系[5]是一种答应一方向另一方证明某个陈说或主张的有效性而不透露任何灵敏信息的办法或协议。它触及一组规矩和程序,使证明者能够说服验证者某个陈说的真实性,例如核算的正确性或某些知识的具有,而不透露任何底层的秘密或数据。

但是,证明体系不能直接处理高层次的概念。相反,它们需求被转化为表明所需属性的电路。从高层次概念到电路的这种改变带来了应战。这便是电路言语发挥作用的当地。电路言语经过供给一种结构化和方法化的办法来表达高层次的想法来处理这个问题。

在曩昔的十年中,电路言语的数量和多样性有了明显增加。许多电路言语的开展,如 Noir、Cairo[6]和 Leo,表明晰该范畴的活泼程度。这种言语的增多使得咱们能够比较和比照它们的特性、相似之处和差异。经过对这些言语进行归纳考察,能够更深入地了解整个电路言语的格局。

TLDR;

– Noir – 由 Aztec 开发,笼统了暗码学的杂乱性,使得任何布景的开发人员都能够编写 ZK 电路。

– o1js – 由 O(1) Labs 开发的 TypeScript 库。答应开发人员编写智能合约。与现有的 JavaScript 和 TypeScript 库和东西很好地集成。

– **Circom**[7] – 专为 ZKP 电路开发而规划。供给精确性和明晰性,其功用首要会集在这个特定范畴。

– Leo – 为开发人员供给了一个用户友好的环境。选用了经过方法验证的编译器架构,重点是前期过错检测和防备。

– **Cairo**[8] – 强调功率和可扩展性。经过标准接口支撑互操作性,能够与区块链渠道、智能合约和链下体系集成。

– Lurk – 经过运用 Lisp 完成通用电路,处理了传统 SNARK 的局限性。

ZK语言调查:Noir、o1js、Circom、Leo、Cairo、Lurk

术语表

由于咱们将触及技能概念,以下是一些或许在后续文本中遇到的杂乱术语的术语表:

• 笼统电路中心表明(Acer:Abstract Circuit Intermediate Representation): Noir 运用的 ZK 电路的中心表明,能够编译成一阶束缚体系(R1CS)。

• 自界说门(Custom gates): 专为在 ZK 电路中高效且安全地履行暗码操作而规划的专用逻辑门。

• SHA-256: 一种暗码哈希函数,接受一个输入并发生固定巨细的输出。

• Pedersen-Merkle 查看: 运用 Pedersen 许诺和默克尔树的暗码验证技能,能够验证数据的完整性和一致性。

• 图灵齐备性:核算体系的属性,能够模仿图灵机,在足够的时刻和资源下能够处理任何可核算问题。

• 进程传递风格(CPS:Continuation Passing Style):一种编程技能,将评价进程分解为可办理的进程,完成一致且高效的履行。

• 域元素(Field elements):有限数学域中的元素,常用于暗码学方案和核算中。

Noir

Noir[9] 是 Aztec 规划的一种范畴特定言语(DSL),旨在简化 ZK 电路和 ZK 程序的创立,无需广泛的暗码学知识或成为暗码学家。其首要方针是使来自任何布景的开发人员能够编写 ZK(零知识)电路。Noir 优先考虑安全性、简单性和功用。它供给了一种高级的、类似于 Rust 的语法,笼统了暗码学安全性并简化了暗码学原语的运用,一起坚持高功用。

经过 ZK 证明扩展或许性

Noir 的一个优点是它有潜力扩展能够运用 ZK 证明供给的保护隐私特性的运用范围。这些证明增强了隐私并供给了高效的验证。Noir 编译成一种中心表明称为笼统电路中心表明(Acer),能够进一步编译成一种称为 R1CS(rank one constraint system)的束缚体系。这种后端证明体系与言语的解耦使得 Noir 能够支撑各种证明体系,包括 Aztec Brettenberg、Turbo Plonk 以及潜在的未来集成,如 Groth16 和 Halo 2。

优化和标准库

开发人员能够在证明体系层面上优化电路,运用自界说门,一种专门规划用于高效和安全履行暗码操作的逻辑门类型,提高速度、安全性和各种运用功用。该言语供给了一个标准库,其中包括了优化的函数,如 SHA-256 和 Pedersen-Merkle 查看,这些暗码验证技能运用 Pedersen 许诺和默克尔树,能够验证数据的完整性和一致性。

ZK语言调查:Noir、o1js、Circom、Leo、Cairo、Lurk

显示 Noir 言语语法的图形

代码安排和表达才能

Noir 经过模块和外部 crate 支撑代码安排,便于创立 Noir 程序的库。它供给了数组、元组和结构等复合数据类型,答应开发人员对数据进行分组并完成公共函数。该言语还支撑操控流结构,如 for 循环、if 语句以及逻辑和位运算符。泛型和一级函数正在活跃开发中,进一步增强了 Noir 的表达才能。

需求留意的是,Noir 依然在不断开展中。它或许存在一些约束和潜在的过错。开发团队持续迭代言语,并致力于不断改善。

o1js

o1js[10] 是 (0)1Labs 规划的一种 TypeScript 库,用于运用 Snark 编程言语编写智能合约。它运用现有的敞开技能,如 Node.js 和浏览器,使其对开发人员来说愈加易于拜访和方便。经过构建在 TypeScript 上,o1js 答应开发人员运用他们对 JavaScript 和 TypeScript 库和东西的现有知识。

集成

o1js 与 JavaScript 和 TypeScript 库和东西无缝集成,为开发人员供给了强壮的功用和广泛的社区支撑。这种集成提高了生产力,并削减了选用新开发环境的学习曲线。

VS Code 支撑

它供给对 Visual Studio Code (VS Code) 的支撑,这是一款盛行的代码编辑器。开发人员能够运用比如代码补全、语法高亮和调试等功用,增强整体的开发体会。

标准库

o1js 供给了一个全面的标准库,包括域元素、un-64、un-32、公钥、私钥和签名等根本类型。这些类型带有内置办法,简化了加密方案、可选数据、布尔值和椭圆曲线的处理进程。

Circom

Circom 是 Circuit Compiler 的缩写,是一种专为零知识证明 (ZKP) 电路开发而规划的强壮范畴特定言语 (DSL),由 Jordi Balyna 和 iden3 团队创立。

表达性电路界说

凭借其表达性的语法,Circom 答应开发人员以精确和明晰的办法界说用于 ZKP 运用的电路。但是,对于 Circom 的新手和对 DSL 或 ZKP 概念不熟悉的人来说,其语法和语义或许难以了解。对于新手电路开发者或具有通用编程言语布景的开发者来说,或许需求额定的尽力和时刻。

范围约束

尽管 Circom 在 ZKP 电路开发方面表现出色,但需求留意的是,它的功用首要会集在这个特定范畴。因此,寻求处理各种核算使命的更通用言语的开发人员或许会发现 Circom 有所约束。为了满足更广泛的开发需求,或许需求将 Circom 与其他编程言语或结构结合运用。

ZK语言调查:Noir、o1js、Circom、Leo、Cairo、Lurk

Circom 作业原理的解释。

东西和生态体系约束

Circom 遭到各种开发东西的支撑,并具有不断开展的生态体系,尽管与更老练的编程言语和结构比较,其东西和资源的可用性或许依然相对有限。开发人员或许在寻找特定用例或高级功用的全面文档、库和社区支撑方面遇到应战。这种约束或许会对 Circom 的开发速度和社区选用发生影响。

兼容性考虑

Circom 的兼容性首要会集在像 snarkjs 和 libsnark 这样的盛行零知识证明体系上。尽管这使得它能够与这些体系无缝集成,但也引入了对它们特定功用和约束的依靠。偏好或需求其他 ZKP 体系的开发人员或许会遇到兼容性问题,或需求额定的尽力来适应和集成 Circom 生成的电路到他们首选的体系中。

Leo

Leo[11] 是一种专门规划用于开发零知识证明运用程序的编程言语。它旨在为开发人员供给一个用户友好的环境,特别是那些在区块链生态体系中具有先前经验的开发人员。LEO 类似于 Rust,并具有一些类似 JavaScript 的元素,旨在在运用程序开发中创立熟悉感和便利性。

Leo 的一个明显特点是其编译器,它将程序转换为一种称为 R1CS 的初级证明格局。Leo 编译器的区别在于它经历的严厉方法验证进程。这种验证是必要的,由于过错或许在各个阶段呈现,包括编程、审计和编译。经过数学上保证编译器遵从程序员的目的,Leo 旨在最大程度地削减过错被忽视或被运用的风险,特别是在 L2 上下文、ZK-rollups 或 LEO 渠道中的私有程序中。

ZK语言调查:Noir、o1js、Circom、Leo、Cairo、Lurk

Leo 言语的语法

认识到尽管尽力而为,过错是不可避免的,Leo 团队强调了前期过错防备和检测的重要性,特别是在处理重要价值转移的体系中。为了处理这个问题,Leo 的经过正式验证的编译器架构注入了额定的决心,降低了意外偏离预期程序行为的或许性。

除了言语和编译器之外,Leo 还供给了各种开发者体会东西和功用。这些组件旨在增强开发进程,简化使命,提高功率。学习了七年的经验,并调查了以太坊生态体系的开展,Leo 团队旨在供给一个用户友好的环境,类似于比如 explorers、部署结构(如Truffle和Ganache)以及简化运用程序开发和测试的其他资源的东西演化。

Cairo

Cairo[12]供给了一种简化构建 ZKP 电路进程的语法。学习传统编程言语的灵感,Cairo答应开发人员在规划 ZK 体系时运用他们现有的编程技能。经过其声明性办法,Cairo使得能够标准逻辑语句和核算,更容易地在零知识证明的布景下表明现实世界的场景。

功率和可扩展性

功用是 ZK 体系的关键因素。Cairo经过关注功率和可扩展性来处理这个问题。该言语选用了优化技能,如束缚削减和循环消除,以最小化与 ZKP 电路相关的核算开支。经过优化电路规划,Cairo完成了更快的证明生成和验证,适用于需求高吞吐量和低延迟的运用程序。

互操作性和集成性

Cairo 被规划为与现有软件基础设施集成,使开发人员能够将 ZKP 的才能与其他技能相结合。该言语经过标准接口支撑互操作性,答应与区块链渠道、智能合约和离链体系进行集成。这种灵活性为在去中心化运用、金融体系和数据验证协议中完成增强隐私功用的或许性打开了大门。

ZK语言调查:Noir、o1js、Circom、Leo、Cairo、Lurk

一个比如中的Cairo SNARK CPU 架构

社区和生态体系

Cairo项目培育了一个由开发人员、研究人员和爱好者组成的社区,他们为其开展做出了奉献。文档、教程和示例代码的可用性有助于入门进程,使开发人员能够把握概念并开端构建 ZK 体系。此外,Cairo还获益于 StarkWare 更广泛的生态体系,该生态体系供给支撑、东西和研究进展,以增强该言语及其功用。

Lurk

Lurk[13]旨在经过运用 Lisp(一种函数式编程言语)完成通用电路,处理传统 SNARK 和电路的局限性。运用 Lisp,Lurk 引入了一个名为“eval”的通用函数,能够在 snark 电路中评价任何数据表达式。

代码即数据,数据即代码

Lurk 的一个根本原则是将程序表明为内容可寻址的数据。这种办法能够高效地评价和验证 Lurk 程序。内容可寻址性简化了解析进程,而且生成的数据能够直接在 snark 证明者中运用,而无需单独的编译进程。

在 SNARK 中完成 Lisp

为了创立一个通用电路,Lurk 运用了 Lisp 的内存分配器“cons”。该分配器将两个表达式组合起来,并经过哈希生成对成果表达式的引证。经过证明两个表达式哈希到相同的引证,Lurk 能够在 snark 电路中履行核算。

延续传递风格

Lurk 选用了延续传递风格(CPS)将评价进程分解为可办理的进程。每个评价进程都变成了可处理的核算,完成了一致且高效的履行。在 SNARK 电路中包括显式的延续,有助于逐步进行评价进程。

赋予图灵齐备性和递归才能

经过选用 Lisp,Lurk 完成了图灵齐备性,并支撑 SNARK 电路中的无限递归。这一重要才能答应证明杂乱核算,并完成能够履行任意核算的通用电路。

影响和运用

Lurk 的才能具有广泛的影响。经过支撑无限递归、循环和条件操控流,Lurk 使得在 SNARK 电路中能够进行杂乱核算。这为验证核算、私有数据处理和履行图灵齐备程序开辟了各种运用。

定论

范畴特定言语(DSL)的选择是多样的,而且跟着零知识证明(ZK)在各个区块链生态体系中的运用事例不断扩展,估计将持续增加。目前,建立用于构建 ZK 运用程序的主导言语的竞争仍处于前期阶段,这表明咱们能够预期在这个范畴会有进一步的改善。

但是,大多数 DSL 的一个共同约束是缺乏来自庞大社区和强壮库的网络效应。具有充满活力的社区和全面的库能够极大地提升开发者的体会。尽管这个缺乏或许会跟着时刻的推移得到处理,但对于参与 DSL 开发的团队来说,优先考虑与其他库的兼容性非常重要,能够学习 o1js 所选用的办法。

经过保证与现有库的兼容性,DSL 能够运用更广泛的开发者社区的集体知识和资源,完成更容易的集成、更快的开发,并在完成 ZK 运用程序时具有更大的灵活性。这种协作的办法将促进环绕 DSL 的更强壮的生态体系的开展,使开发者获益,并终究推进 ZK 技能的选用和效果的提升。

此时快讯

【Starknet开发团队:Juno v0.7.3已上线,将支持Starknet v0.12.3】金色财经报道,Nethermind Starknet在X平台表示,Juno v0.7.3已上线,支持即将推出的Starknet v0.12.3,此次更新还通过新的全局类缓存增强了RPC 性能,从而实现更高的请求处理量和优化的资源使用。Juno v0.7.3还更新了blockifier,其中包括钱包集成修复。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注