作者:Bryan,IOSGVentures
目录
ZKP证明系统的电路实现-基于电路(circuit-based)VS基于虚拟机(vm-based)
ZKVM的设计原则
STARK-basedVM之间的比较
为什么Risc0让人兴奋
写在前面:
过去的2022年关于rollup主要的讨论焦点似乎都集中在ZkEVM,但是别忘记ZkVM也是另一种扩容手段。虽然ZkEVM并不是本文的重点,但是值得回味一下ZkVM与ZkEVM之间的的几个维度的不同之处:
1.兼容性:虽然都是扩容,但是侧重点并不同,ZkEVM的侧重点在于直接实现与现有EVM的兼容,而ZkVM的定位在于实现完全的扩容,也就是将dapp的逻辑以及性能提升到最优,兼容性并不是首要的。底层搭好了,EVM兼容也可以实现。
2.性能:两者都有比较可以预见的性能方面的瓶颈,ZkEVM主要瓶颈在于兼容EVM这样一个并不适合封装在ZK证明系统时产生的多余成本。ZkVM的瓶颈在于因为引入了指令集ISA,导致最终输出的约束更复杂。
3.开发者体验:TypeIIZkEVM(如Scroll,Taiko)主打的是对于EVMBytecode的兼容,换句话说就是Bytecode级别及其以上的EVM代码都可以通过ZkEVM产生对应的零知识证明。对于ZkVM来说,有两个方向,一个方向是做自己的DSL(如Cairo),另一个则是目标兼容现有的比较成熟的语言如C++/Rust(如Risc0)。未来我们预计原生的solidity以太坊开发者会可以无成本迁移至ZkEVM,而更新更强大的应用则会跑在ZkVM上。
iZiSwap在zkSync Era正式开启流动性质押激励:5月20日消息,zkSync Era生态DEX平台iZiSwap已开启流动性质押挖矿,支持DEXTF/USDC,ZKSP/ETH,RF/ETH,OT/USDC,SPACE/ETH 五个流动性池。
此批提供流动性质押激励的五个流动性池为iZiSwap推出的zkSync Era大型流动性激励计划“The Ultra Evolution”的首批参与项目。[2023/5/20 15:15:39]
很多人应该还记得这张图,CairoVM事不关己游离于ZkEVM派系斗争的本质原因是设计思想的不同。
在讨论ZkVM之前,我们首先思考的是如何在区块链中实现ZK证明系统。大致上,有两种方法实现电路-基于电路的系统(circuitbased)以及基于虚拟机的系统(vm-based)。
首先,基于电路的系统的功能是将程序(program)直接转化为约束条件(constraints)并送入证明系统(provingsystem);基于虚拟机的系统通过指令集(ISA)执行程序,在此过程中产生执行轨迹(executiontrace)。这个执行轨迹之后会被映射成约束条件,然后被送入证明系统。
对于一个基于电路的系统,程序的计算由执行程序的每台机器(machine)进行约束。而对于基于虚拟机的系统,ISA被嵌入到电路产生器(circuitgenerator)中,并产生程序的约束(constraints),同时电路产生器有指令集、运行周期、内存等等限制。虚拟机提供了通用性,即任何机器都可以运行一个程序,只要该程序的运行条件在上述限制范围内。
在虚拟机中一个zkp程序大概经历如下的流程:
优缺点:
在Polygon zkEVM上部署Uniswap V3提案已获得通过:4月14日消息,Tally 投票页面显示,Uniswap 治理提案在 Polygon zkEVM 上部署 Uniswap V3 链上投票结束,以 100% 的支持率通过。[2023/4/14 14:04:33]
-从开发者(developer)的角度来看,在基于电路的系统中开发通常需要对每个约束条件的成本有深入的了解。然而,对于编写虚拟机程序来说,电路是静态的,开发者需要更关心的是指令(instructions)。
-从验证者(verifier)的角度来看,假设使用相同的纯SNARK作为后端,基于电路的系统和虚拟机在电路的通用性方面有很大的不同。电路系统对每个程序产生不同的电路,而虚拟机对不同程序产生相同的电路。这意味着,在一个rollup中,电路系统需要在L1上部署多个验证合约(verifiercontract)。
-从应用(application)的角度来看,虚拟机通过将内存模型(memory)嵌入到设计中,使应用程序的逻辑更加复杂,而使用电路系统的目的是为了提高程序的性能。
-从系统复杂性(complexity)的角度来看,虚拟机将更多的复杂性纳入系统,如内存模型、主机(host)和客户(guest)之间的通信等,相比之下电路系统更简洁。
以下是目前L1/L2中基于电路和基于虚拟机的不同的项目预览:
虚拟机的设计原则
在虚拟机中,有两个关键的设计原则。首先,确保程序被正确执行。换句话说,输出(output)与输入(input)应当正确匹配。一般这是通过ISA指令集完成的。其次,确保编译器(compiler)在从高级语言转换为适当的约束格式时能正确工作。
关于zkTube主网维护公告:据zkTube Labs 最新消息,zkTube主网将于9月23日起进行交易及验证功能维护,为避免造成用户资产损失,请暂时停止转账交易,等待交易验证功能恢复。具体恢复时间将发布在后续公告中。
此外,参与主网Mining的节点,根据硬件配置和在线时长仍可获得额外激励,不受此次维护影响(详情请查阅9月20日zkTube官网公告)[2021/9/23 17:01:38]
1.ISA指令集
规定了电路产生器的工作方式。它的主要责任是将指令(instructions)正确地映射到约束条件(constraint)中,这些约束条件随后被送入证明系统(provingsystem)。zk系统使用的都是RISC(精简指令集)。有两种ISA的选择:
第一种是自建一个自定义的ISA(customISA),这在Cairo的设计中可以看到。一般来说,有如下四种类型的约束逻辑。
自定义ISA的基本设计重点是确保约束条件尽可能少,从而使程序的执行和验证都能快速运行。
第二种是利用现有的ISA(existingISA),这在Risc0的设计中被采用。除了以简洁的执行时间为目标外,现有的ISA还提供了额外的好处,如对前端语言(front-endlanguage)和后端硬件(backendhardware)友好。一个问题是,现有的ISA会不会在验证时间上有所落后(因为验证时间并不是Risc-V的主要设计追求。
2.编译器(Compiler)
笼统地来说,编译器会逐步将编程语言翻译成机器代码。在ZK的环境下,它指的是使用C、C++、Rust等高级语言编译成约束系统的低级代码表示。有两种方法,
设计一个基于现有zk电路表示(existingcircuitrepresentations)的编译器--比如说在ZK中,电路表现形式从Bellman这样的可以直接调用的库(library)和Circom这样的低级语言开始。为了聚合不同的表现形式,Zokrates这样的编译器旨在提供一个抽象层,可以编译成任意的更低级表现形式。
zkTube Protocol测试网挖矿将获收益:据zkTube官方消息,为激励全球社区矿工,也为即将到来的zkTube主网上线做准备,zkTube将于2021年7月5日0:01-7月14日23:59 (新加坡时间)上线第一期测试网挖矿收益,激励总量为100,000ZKT,本期挖矿并不需要质押。届时,社区矿工将获得zkTube Testnet测试代币ZKTT,其与ZKT映射比例将于主网上线后公布,而具体挖矿收益细则与挖矿教程即将发布。
zkTube Protocol官方将根据挖矿机制与激励模型公平、公正合理分配挖矿收益,以支持社区贡献者,zkTube不排除于下一挖矿周期增加ZKT激励总量。[2021/6/29 0:15:00]
基于编译器基础设施(compilerinfrastructure)来构建。基本逻辑是利用一个针对多个前端和后端的中间表现形式(intermediaterepresentation)。
Risc0的编译器是基于multi-levelintermediaterepresentation,可以生成多个IR。不同的IR给开发者带来了灵活性,因为不同的IR有各自的设计重点,例如其中有一些的优化是专门针对硬件,所以开发者可以根据自己的意愿进行选择。类似的想法在使用GCC的vnTinyRAM和TinyRAM中也可以看到。ZkSync也是另一个利用编译器基础设施的例子。
此外,你还可以看到一些针对zk的编译器基础设施,如CirC,它也借用了LLVM的一些设计理念。
除了上述两个最关键的设计步骤外,还有一些其他的考虑因素:
1.系统的安全性(security)和验证的成本(verifiercost)之间的权衡
系统使用的比特数越高,意味着验证的成本越高。安全性反映在密钥生成器。
BiKi将于1月6日15:30上线ZKS并开启流动性挖矿:据BiKi公告,平台将于1月6日15:30(GMT+8)上线ZKS,开放ZKS/USDT交易对,现已开放充值。
?ZKS上线同时将开放网格流动性挖矿,瓜分该币对50%手续费活动,用户通过网格宝开启ZKS/USDT网格交易,即可瓜分前一日ZKS币对50%手续费奖励池,一键开启网格+流动性挖矿双挖。
ZKSwap (ZK-Rollup based Swap)是一套全新的基于 Zkrollup 技术的兑换协议,通过 Zk-Rollups 技术把所有的 ERC20 token 转移到 Layer2 上,基于不断生成的零知识证明来保证 Layer1 和 Layer2 状态的一致性,从而让所有的兑换在 Layer2 上发生,可以做到零 Gas 费用的实时兑换(不再要等待一个区块确认时间),并且具备无限的拓展性,摆脱以太坊 TPS 和区块确认时间的限制,让 DEX 具备 CEX (中心化交易所) 般丝滑的体验,并同时实时掌控自己的资金安全。[2021/1/6 16:32:53]
2.与前端和后端的兼容性(compatibility)
兼容性取决于为电路的中间表示(intermediaterepresentation)的有效性。IR需要在正确性和灵活性之间取得了平衡。如果IR最初是为解决像R1CS这样的低度(low-degree)约束系统而设计的,那么与其他更高级别(high-degree)的约束系统如AIR的兼容就很难。
3.为提高效率需要手工制作(hand-crafted)电路
使用通用模型(generalpurpose)的缺点是,对于一些不需要复杂指令的简单操作,其效率较低。
简述一下先前的一些理论,
Pinocchio协议之前:实现了可验证的计算,但验证时间非常慢
Pinocchio协议:?在可验证性和验证成功率方面提供了理论上的可行性,是基于电路的系统
TinyRAM协议:?相对于Pinocchio协议,TinyRAM更像一个虚拟机,引入了ISA,因此摆脱了一些限制,如内存访问(RAM)、控制流(conttrolflow)等
vnTinyRAM协议:?使得密钥生成(keygeneration)并不取决每个程序,提供了额外的通用性。扩展电路产生器,即能够处理更大的程序。
上述模型都以SNARK作为其后端证明系统,但是特别是在处理虚拟机时,STARK和Plonk似乎是一个更合适的后端,从根本上说是由于其约束系统更适合于实现cpu一样的逻辑。
接下来,本文会介绍三个基于STARK的虚拟机-Risc0,MidenVM,CairoVM。简而言之,除了都以STARK作为证明系统外,它们各自有一些不同:
-Risc0利用Risc-V来实现指令集的简洁性。R0在MLIR进行编译,这是LLVM-IR的一个变种,旨在支持多种现有的通用编程语言,如Rust、C++。Risc-V还有一些额外的好处,比如对于硬件较为友好。
-Miden的目标是与以太坊虚拟机兼容,本质上是EVM的rollup。Miden现在有自己的编程语言,但也致力于在未来支持Move。
-CairoVM是由Starkware开发的。这三个系统所使用的STARK证明系统是由EliBen-Sasson发明的,目前Starkware的总裁。
让我们更深入地了解它们的区别:
*如何读懂上面的表格?一些注解...
●Wordsize?-由于这些虚拟机所基于的约束系统是AIR,其功能与CPU架构类似。所以选择CPU字长比较合适。
●Memoryaccess-Risc0使用寄存器(register)的原因主要是Risc-V指令集是基于寄存器的。Miden主要使用堆栈(stack)来存储数据,因为AIR的功能与堆栈类似。CairoVM没有使用通用寄存器(general-purposeregister),因为Cairo模型中的内存访问(mainmemory)成本较低。
●Programfeed-不同方法是有取舍的。例如,对于mastroot方法来说,它需要在处理指令时进行解码,因此在执行步骤较多的程序中下证明者的成本较高。Bootloading方法试图在保持隐私的同时在证明者成本和验证者的成本之间取得平衡。
●Non-determinism-非确定性是NP-complete问题的一个重要属性。利用非确定性有助于快速验证过去的执行。反过来说,它增加了更多的约束条件,因此在验证方面会有一些妥协。
●Accelerationoncomplexoperations-?有些计算在CPU上运行很慢。例如,位操作,如XOR和AND,哈希程序(hashprogram),如ECDSA,还有范围检查(range-check)......大多是区块链/加密技术的原生但不是CPU原生的运算。直接通过DSL来实现这些运算会很容易导致证明的周期(cycle)耗尽。
●Permutation/multiset(排列/多列组合)?-在大多数zkVM中大量使用,有两个目的--1.通过减少存储完整的执行轨迹(executiontrace)来降低验证者的成本2.证明验证者知道完整的执行轨迹
文章最后笔者想谈谈Risc0目前的发展以及其让我兴奋的原因。
R0目前的发展:
a.自研的"Zirgen"的编译器基础设施正在开发中。将Zirgen与一些现有的zk专用编译器的性能进行比较会很有趣。
b.一些很有意思的的创新,如fieldextension,可以实现更坚实的安全参数以及在更大的整数上进行操作。
c.见证了在ZK硬件和ZK软件公司之间的整合中看到的挑战,Risc0使用了一个硬件抽象层,以便在硬件方面进行更好的开发。
d.Stillawork-in-progress!还在开发中!
?支持手工制作的电路(hand-craftedcircuits),支持多种哈希算法。目前,专用的SHA256电路已实现,然而还不能满足所有的需求。笔者相信具体选择优化哪类电路取决于Risc0所提供的用例(usecase)。SHA256是一个非常好的起点。另一方面,ZKVM的定位给人以灵活性,例如,只要他们不想,就不必去管Keccak:)
?递归(recursion):这是一个很大的话题,笔者倾向于不在该报告进行深入研究。需要知道的是,随着Risc0倾向于支持更复杂的用例/程序,更迫切地需要递归。为了进一步支持递归,他们目前正在研究一个硬件端的GPU加速方案。
处理非确定性(non-determinism):这是ZKVM必须处理的一个属性,而传统的虚拟机是没有这个问题的。非确定性可以帮助虚拟机执行得更快。MLIR相对更擅长处理传统虚拟机方面的问题,而Risc0如何将非确定性嵌入到ZKVM系统设计中值得期待。
WHATEXCITESME:
a.简单且可验证!
在分布式系统中,PoW需要高水平的冗余,因为人们不信任他人,因此需要重复执行相同的计算来达成共识。而通过利用零知识证明,状态的实现应该和同意1+1=2一样容易。
b.更多更实际的用例:
除了最直接的扩容外,更多有意思的用例将变得可行,比如零知识机器学习、数据分析等。相比于Cairo这样的特定的ZK语言,Rust/C++的功能更普适且更强大,更多web2的用例跑在Risc0VM上。
c.更具包容性/成熟的开发者社区:
对STARK和区块链感兴趣的开发者不必再重新学习DSL,使用Rust/C++即可。
作者:BlockchainAcademyBlockchainAcademy向首届BuildCamp项目的参与者发布了独家的毕业NFT,这标志着首届BuildCamp项目的正式结营.
1900/1/1 0:00:00作者:Masterdai文章来源:HashHunter2007年,加拿大皇家银行的交易员胜山发现了一件令他感到困惑的事情,当他在交易终端按下买入键的一瞬间,所有的订单消失了。而在区块链的世界里也发生了一件相似的事情.
1900/1/1 0:00:00撰文:YihanXu,ForesightResearch在这篇报告中你可以了解到: EIP-4844; Proto-danksharding;Danksharding;KZGCommitment;KZGCeremony;Dynamic.
1900/1/1 0:00:00原文标题:2023NFTgamingwishlist?作者:WilliamM.Peaster,Bankless 编译:DeFi之道 毫无疑问,当我们展望未来时,包括我在内的许多加密领袖都认为NFT游戏生态系统将在2023年大放异彩.
1900/1/1 0:00:00据TheBlock报道,NFTprotocolCollection将于今天在以太坊的Goerli测试网上启动一个NFTDEX协议,允许用户为针对特定标准的NFT创建流动资金池。并将于2023年第一季度晚些时候在以太坊主网上推出.
1900/1/1 0:00:00原文作者:WinterSoldierxz原文来源:Twitter编译:JamesX,MarsBit ??? /img/20230526095205100950/0.jpg "/>除了为引导流动性而出现的最初的排放高峰外.
1900/1/1 0:00:00