你的位置:注册送300元打到3000 > 产品中心 >
原文:A Developer’s Guide to the zkGalaxy600cc全讯白菜网
客岁夏天,Vitalik 写了一篇博文,概述了不同类型的 zkEVM(零常识以太坊假造机)。Vitalik 凭据性能和兼容性来界说与衡量。
这是一个相配有用的启发式方法,以差异维持 zkEVM 的方法。关联词,zkEVM 是构建零常识应用方法的整个可能方法的一个子集。对于念念要利用 zk 狡计的独有属性,即简约性、零常识和正确性的方法员来说,zkEVM 可能不是最佳的采纳。通过进展通盘斥地器用集,本文但愿提供一个指南,匡助斥地者在决策进程中采纳合适的 zk 堆栈。
抽象复杂度的力量在往日的一两年中,zk 器用有了强大的逾越。使得闲居软件的斥地东谈主员不错利用 zk 的刚劲属性,而不需要深入了解令东谈主生畏的基础数学和工程。另一方面,为高等用户提供的器用激增,使 zk 内行梗概极其邃密地抑遏 zk 堆栈。
当代软件是修复在无数的抽象层上的,以最大抑遏地普及内行的坐蓐力。工程中的抽象有许多上风,这些上风在某种进程上是直不雅的--网罗斥地者不需要深入了解操作系统的责任旨趣。
修复细腻的、可重叠使用的抽象层的要津是封装一个层的复杂性,然后为堆栈中更高的层提供粗浅但有分解力的接口。正确的作念法是,这使得具有不同专科边界和常识的斥地东谈主员梗概在通盘堆栈中修复有用的器用。
绝不奇怪,这些原则也适用于 zk 系统,而且这些抽象层正变得富余熟习,一个 zk 生手今天就不错运应用用它们并构建应用方法。
zk 堆栈与各层的一些器用/期间实例
初级别的 zk 斥地Arkworks-rsArkworks-rs 是一个 Rust 库的生态系统,它为 zkSNARK 应用方法的子组件提供高效和安全的达成。Arkworks 为斥地者提供了必要的接口,以定制 zk 应用方法的软件栈,而无须再行达成与其他现存库的共性。
在 Arkworks 之前,创建一个新的 zk 应用方法的唯一方法是从新运行构建一切。与定制的垂直整合器用比拟,Arkworks-rs 的主要上风在于其活泼性水平,减少重叠工程,以及减少审计责任。Arkworks 组件之间合理的接口线允许升级的速率,不错使堆栈在 zk 期间快速翻新的进程中保捏联系性,而不会迫使团队从新运行重建一切。
优点
通过模块化达成活泼性
减少重叠代码
缩散工程老本
减少审计/bug 的名义积
无需要紧重构即可升级任何组件
易于在快速发展的 zk 环境中试验新原语
过错
需要深入了解完整的软件堆栈
如果莫得正确相识,太多的抑遏会导致脚枪
邃密抑遏需要堆栈整个级别的专科常识。
Arkworks 如实提供了一些合理的默许建树。
zk 边界专用说话(DSL)为了创建一个对于某些狡计的分解注解,领先这个狡计必须以一个 zkSNARK 系统不错相识的体式来抒发。一些特定边界的说话依然创建了编程说话,允许应用斥地者以这种时势抒发他们的狡计。这些说话包括 Aztec Noir、Starknet 的 Cairo、Circom、ZoKrates 和 Aleo 的 Leo 等等。底层的分解注解系统和数学细节一般不会表示给应用斥地者。
斥地者的教悔zkApp 的斥地者必须熟练地用特定边界的说话编写方法。其中一些说话看起来很像咱们熟悉的编程说话,而其他说话可能格外难学。让咱们来分析一下其中的几个。
Cairo - Starkware DSL 对于在 Starknet 上构建应用方法是必要的。编译成 Cairo 特有的汇编说话,可由 Cairo zkVM 解释。
ZoKrates - ZoKrates 是一个知足 SNARK 常见需求的器用包,包括一种编写电路的高等说话。ZoKrates 在弧线、分解注解有筹谋和后端方面也有一些活泼性,允许斥地者通过粗浅的 CLI 参数进行热交换。
Circom — Circom 是一种用于构建电路的专用说话。目下,它是坐蓐电路的本体说话。该说话不是荒芜顺应东谈主体工程学,使斥地者机敏地意志到正在编写电路。
Leo——Leo 被斥地为 Aleo 区块链的说话。Leo 有一些近似 Rust 的语法,挑升用于区块链里面的气象调度。
Noir – 受 Rust 启发的语法。围绕 IR 而不是说话自己构建,这意味着它不错有一个大肆的前端。
任何念念要在其应用方法中利用 zk 的独有属性的应用方法斥地东谈主员。
其中一些说话依然过数十亿好意思元的实战测试,如在 ZCash 和 Starknet 等链的流动。固然咱们将究诘的一些模样还莫得统统准备好用于坐蓐,但使用其中一种说话编写电路是目下最佳的计谋,除非需要像 Arkworks 这么的器用包提供的更邃密的抑遏。
优点
用户不需要了解底层的 zk 细节
有一定的坐蓐教悔,今天就不错使用
可在链上考据
生态系统不能知
不过,林心如没嫁给霍建华之前,她还有一个已经15岁的女儿,这个大女儿已经躲藏了14年,就在不久前,林心如在微博上发了一条消息:再见,这是为了更好的相遇,并配图她和非洲女孩的照片。
在明星大侦探当中一直是常驻嘉宾的王鸥也曾经公开卸妆,比起妆前的精致美丽,卸完妆以后的王鸥看上起还是减分了一些,皮肤有些蜡黄,不过五官也还是相当的秀气好看的。
过错
用户需要学习一个新的 DSL
围绕这些说话的器用和维持王人是孤单的
对底层分解注解堆栈险些莫得抑遏权(目下)。
zkEVMszkEVM 的主要筹谋是选择 Ethereum 气象调度,并使用简约的零常识正确性分解注解来分解注解其有用性。正如 Vitalik 的帖子中提到的,有许多方法不错作念到这小数,并有奥妙的各异和相应的衡量。
整个这些方法之间的主要期间区别在于,在说话栈中,狡计究竟在那边被调度为不错在分解注解系统中使用的体式(算术化)。在一些 zkEVM 中,这发生在高等说话中(Solidity、Vyper、Yul),而其他方礼貌试图将 EVM 一直分解注解到操作码级别。这些方法之间的衡量在 Vitalik 的帖子里有潜入的呈文,但我将用一句话来详尽它。在堆栈中发生的调度/算术化越低,性能亏本就越大。
为假造机创建分解注解的主要挑战是,电路的大小与每条奉行教唆的整个可能教唆的大小成比例地增长。这是因为电路不知谈在每个方法中会奉行哪些教唆,是以它需要维持整个的教唆。
在通用电路中,每条奉行的教唆的老本与整个维持的教唆之和成正比。
这在推行满意味着,你要为最崇高的教唆支付(性能老本),即使你仅仅在奉行最粗浅的教唆。这导致了通用性和性能之间的径直衡量--当你为通用性加多更多的教唆时,你要为你分解注解的每一条教唆付出代价!这即是通用电路的根蒂问题。
但跟着 IVC(增量可考据狡计)等期间的新发展600cc全讯白菜网,这种抑遏不错通过将狡计分红更小的块来改善,每个块王人有挑升的、更小的子电路。
今天的 zkEVM 达成使用不同的计谋来收缩这个问题的影响......举例,zkSync 去掉了更崇高的操作(主如果加密的预编译,如哈希值,以超越他一些操作)
zkEVM 的理念念客户是那些需要比L1以太坊上的往还低廉几个数目级的智能合约应用。这些斥地东谈主员不一定有专科常识或带宽来从新运行编写 zk 应用方法。因此,更心爱用熟悉的更高等的说话来写应用方法,如 Solidity。
宽绰斥地团队扩张 Ethereum 是目下 zk 期间最需要的应用。
zkEVM 是一个以太坊扩张惩办有筹谋,不错无摩擦地缓解抑遏L1 dApp 斥地者的拥挤问题。
斥地者体验zkEVM 的筹谋是维持一个尽可能接近面前以太坊斥地的斥地者体验。统统维持 Solidity 意味着团队无须修复和真贵多个代码库。这在某种进程上是不切本体的,因为 zkEVM 需要交换一些兼容性,以便梗概在合理的时安分生成合理边界的分解注解。
zkSync 与 ScrollzkSync 和 Scroll 之间的主要区别在于它们在堆栈中的何处/何时奉行算术运算——也即是说,它们从闲居 EVM 构造调度为 SNARK 友好暗示的位置。对于 zkSync,当他们将 YUL 字节码调度为他们我方的自界说 zk 教唆集时,就会发生这种情况。对于 Scroll 来说,这发生在临了,当本体的奉行追踪用本体的 EVM 操作码生成时。
因此,对于 zkSync,在生成 zk 字节码之前,产品中心一切王人与与 EVM 交相互同。对于 Scroll,在奉行本体的字节码之前,一切王人是相通的。这是一个奥妙的各异,它以性能疏通维持。举例,zkSync 不会像开箱即用的调试器那样维持 EVM 字节码器用,因为它是统统不同的字节码。固然 Scroll 很难从教唆聚拢取得细腻的性能,但这并不是为 zk 联想的。这两种计谋各成心弊,最终有许多外生身分会影响它们的相对告捷。
zkLLVM 电路编译器正如驻防究诘的那样,斥地 zk 应用方法有无数不同的采纳,整个这些王人有我方独有的衡量。此图表将匡助讲求此决策矩阵,以便凭据您的 zk 专科常识水温存性能需求,采纳最恰当该责任的器用。这不是一个完整的列表,会跟着 zk 的发展更新。
zkLLVM 被联想为现存 LLVM 基础设施的扩张,LLVM 基础设施是一个行业按序器用链,维持许多高等说话,如 Rust、C、C++ 等。
若何运行念念要分解注解某些狡计的用户只需用 C++ 达成该狡计即可。zkLLVM 罗致其修改后的 clang 编译器(面前为 C++)维持的高等源代码,并生成电路的一些中间暗示。此时,电路已准备好进行考据,但用户可能但愿凭据一些动态输入来考据电路。为了处理动态输入,zkLLVM 有一个称为分派器的附加组件,它生成一个分派表,其中包含整个输入和见证,这些输入和见证已统统预处理并准备好与电路沿途进行分解注解。
这两个组件是生成分解注解所必需的。表面上,用户不错我方生成分解注解,但由于这是一项有点专科化的狡计任务,可能需要用钱请领有硬件的其他东谈主作念这件事。对于这种往还敌手发现机制,=nil;Foundation 还修复了一个“分解注解阛阓”,分解注解者竞相为支付给他们的用户分解注解狡计。这种摆脱阛阓动态将导致分解注解者优化最有价值的分解注解任务。
比权量力由于每个要分解注解的狡计任务王人是唯一无二的,何况会生成不同的电路,因此分解注解者需要梗概处理的电路数目是无穷的。这种强制的通用性使得单个电路的优化变得贫困。分解注解阛阓的引入允许对阛阓以为有价值的电路进行专科化。如果莫得这个阛阓,由于这种当然的冷启动问题,劝服考据者优化该电路将是一项挑战。
另一个衡量是经典的抽象与抑遏。顺心罗致这种易于使用的界面的用户正在放手对底层加密原语的抑遏。对于许多用户来说,这是一个相配有用的衡量,因为让密码学内举止您作念出这些决定通常更好。
优点
用户不错用熟悉的高等说话编写代码
整个的 zk 里面结构王人被抽象出来,不受用户影响
不依赖加多特殊支出的特定 "假造机 "电路。
过错
每个方法王人有一个不同的电路。难以优化。(分解注解阛阓部分惩办了这个问题)
交换/升级里面 zk 库并非易事(需要分叉)
zkVMzkVM 面目了整个 zk 假造机的超集,而 zkEVM 是一种特定类型的 zkVM,由于其在目下的流行,值得算作一个单独的主题进行究诘。除了定制的加密 VM 除外,还有一些其他模样正在贫寒于构建基于 ISA 的更通用的 zkVM。
系统不错分解注解不同的教唆集架构 (ISA),举例新 VM 中的 RISC-V 或 WASM,而不是分解注解 EVM。贫寒于这些通用 zkVM 的两个模样是 RISC Zero 和 zkWASM。
让咱们在这里深入了解一下 RISC Zero,以分解注解这种计谋是若何责任的,以及它的一些上风/弱势。
Risc ZeroRisc Zero 分解注解生成的高等架构
RISC Zero 梗概分解注解任安在 RISC-V 架构上奉行的狡计。RISC-V 是一个开源的教唆集架构(ISA)按序,依然越来越受接待。RISC(精简教唆集狡计机)的理念是以最小的复杂性修复一个极其粗浅的教唆集。这意味着堆栈中较高脉络的斥地者在使用这种架构达成教唆时最终会承担更大的负荷,同期使硬件达成愈加粗浅。
这种理念也适用于一般的狡计,ARM 芯片一直在利用 RISC 作风的教唆集,并运行主导迁徙芯片的阛阓。事实分解注解,更粗浅的教唆集也具有更大的能量和芯单方面积效果。
这个类比对于生成 zk 分解注解的效果来说格外适用。正如前边所究诘的,在分解注解 zk 的奉行轨迹时,你要为轨迹中每一项的整个教唆的老本之和买单,是以更粗浅、更少的总教唆是更好的。
若何责任从斥地者的角度来看,使用 RISC Zero 来处理 zk 分解注解,很像使用 AWS Lambda函数来处理后端处事器架构。斥地东谈主员通过粗浅地编写代码与 RISC Zero 或 AWS Lambda 互动,处事处理整个后端复杂性。
对于 RISC Zero,斥地者编写 Rust 或 C++(最终是任何针对 RISC-V 的东西)。然后,系统接受编译进程中产生的 ELF 文献,并将其算作假造机电路的输入代码。斥地者只需调用分解注解,复返一个收条(包含奉行追踪的 zk 分解注解)对象,任何东谈主王人不错从任何方位调用`考据'。从斥地者的角度来看,莫得必要了解 zk 是若何责任的,底层系统处理整个这些复杂的问题。
为了维持这么一个通用接口,需要大王人的支出(在分解注解大小和生成速率方面)。
需要对分解注解生成期间进行要紧校正,以达成对现存库的平庸维持
预建的可重叠使用电路对于一些对区块链应用或其他方位荒芜有用的基本和可重叠使用的电路,团队可能依然为你构建和优化了这些电路。你只需为你的特定用例提供输入即可。举例,Merkle 包容分解注解是加密货币应用中深广需要的东西(空投清单、龙卷风现款等)。算作一个应用方法的斥地者,你老是不错再应用用这些经过实战磨砺的合约,仅仅在上头修改一些层,以创建一个独有的应用方法。
举例,Tornado Cash 的电路不错再行用于私东谈主空投应用方法或私东谈主投票应用方法。Manta 和 Semaphore 正在构建一个完整的器用包,包括像这么的通用电路孤寒用,不错在 Solidity 合约中使用,而无需了解或不了解底层的 zk moon 数学。
正如驻防究诘的那样,斥地 zk 应用方法有无数不同的采纳,整个这些王人有我方独有的衡量。
此图表将匡助讲求此决策矩阵,以便凭据您的 zk 专科常识水温存性能需求,采纳最恰当该责任的器用。这不是一个完整的列表,会跟着 zk 的发展更新。
zkGalaxy 应用斥地者指南1. 初级 Snark 库适用场景
需要对通盘分解注解堆栈进行邃密抑遏
幸免重建宇宙组件
尝试分解注解有筹谋、弧线和其他初级原语的不同组合
不适用场景
寻找高等分解注解接口的生手
可选用器用
Arkworks-rs
2. zk DSLs适用场景
念念使用一些久经闇练的说话
需要最小的电路尺寸,顺心放手抽象
不适用场景
需要对分解注解的后端进行邃密抑遏(目下,不错为一些 DSL 交换后端)
可选用器用
Circom
Aztec Noir
Cairo
ZoKrates
Leo
3. zk 编译器适用场景
不肯意承担通用电路的支出
念念用熟悉的说话编写电路
需要高度定制的电路
不适用场景
念念要抑遏底层加密原语
需要一个依然高度优化的电路
可选用器用
nil zkLLVM
4.zkEVM适用场景
有一个依然在 EVM 上运行的 dApp
需要为用户提供更低廉的往还
但愿将部署到新链的责任量降到最低
只温顺 zk(压缩)的简约性
不适用场景
需要好意思满的 EVM 等效性
需要 zk 的躲避属性
有一个非区块链用例
可选用器用
zksync 2.0
Polygon zkEVM
Scroll
Starknet
5.zkVM适用场景
念念用高等说话编写代码
需要分解注解该奉行的正确性
需要向考据者覆盖该奉行的一些输入信息
险些莫得 zk 方面的专科常识
不适用场景
在蔓延极低的环境中(它仍然很慢)。
有一个强大的方法(目下)。
可选用器用
RISC Zero
zkWASM
6. 预建的可重叠使用的电路适用场景
有一个依赖常见的 zk 构建模块的智能合约应用,比如 Merkle 包容。
对 zk 底层的东西险些莫得专科常识
不适用场景
有高度专科化的需求
用例不被预建电路所维持
可选用器用
Manta Network
Semaphore
论断zk 处于多项期间的前沿,构建它需要对数学、密码学、狡计机科学和硬件工程有潜入的相识。关联词,跟着每天王人有越来越多的抽象层可用,应用方法斥地东谈主员无需博士学位即可利用 zk 的刚劲功能。跟着时分的推移,通过对堆栈的整个级别进行优化,分解注解时分的抑遏会渐渐捣毁,咱们可能会看到针对闲居斥地东谈主员的更粗浅的器用。
致谢本文编译责任取得 DAOrayaki 社区的维持与反映600cc全讯白菜网。