TL;DRZKR设计:汇总经济学使得交易越多,Gas越低;ZK证明验证的方法取代了节点执行全部交易以验证正确性的方法,大大降低链上计算与存储数据量,提高执行效率;工作流优越性需要等待其他zkEVMzkVM确定设计后再对比优越性;原生账户抽象可以消灭助记词,已经实现手机硬钱包,并为更加易用、安全、低成本的链上可编程奠定基础。EVM兼容:SolidityCairo转译器Warp使得StarkNet语言级兼容EVM;用Cairo编写的zkEVMKakarot使得StarkNet字节码兼容EVM。STARK证明系统:纯粹依赖哈希和信息论,不依赖可信设置,抗量子攻击,比SNARK更安全;证明生成速度具备线性扩展性,验证时间和证明大小具备对数扩展性;缺点在于生成的证明尺寸更大;递归证明可将多个证明验证后合并,理论合并量上限达到6000万,也为L3奠定技术基础;STARK友好的哈希函数如Rescuehashfunction等相比以太坊keccak256有更高执行效率。Cairo虚拟机与语言:CairoVM是一个STARK友好的、图灵完备的CPU架构;CPU架构灵活性高,可通过软件编程无限接近ASIC性能,理论上可以复刻任意虚拟机;Cairo语言基于Cairo汇编和AIR,执行效率非常高,但开发体验类似Rust和C语言,指针内存大套餐使得学习难度中上;开发者可使用证明者一侧的提示(hints)来创建快捷方式并启用某些计算,降低了开发难度;Cairo支持通过字节码哈希加载程序,大大提高链上扩展性和隐私性,成为隐私方案的强力替代。 一、ZKRollup优越性 在以太坊上,每提交一笔交易都需要所有节点检查、验证并执行交易来验证计算正确性,并将计算后的状态变化在网络中广播。 https:ethereum。orgzhdevelopersdocsevm StarkNet仅在链下执行计算并生成一个ZK证明,然后在链上验证该证明的正确性,最后把多个L2交易打包为以太坊上的一笔交易。因此,StarkNet上发生的交易成本可以被同一打包批次的其他交易所均摊,就像拼车(拼多多)一样,交易越多,成本越低。 除此之外,相比以太坊让每个节点完整执行交易的方法,StarkNet为交易生成ZK证明的方法可以大大提高网络运行速度、减少链上通信量、增加网络吞吐,因此StarkNet相比以太坊具有更高TPS和更低Gas。 简而言之,将验证计算正确性比喻为老师需要检查同学们是不是掌握了知识。以太坊的方法是检查每个同学是否能背诵整本教科书,而StarkNet的方法是让同学们做卷子。后者的效率更高,成本更低,但仍然保证安全。 StarkNet工作流程 与大部分ZKRZK项目一样,StarkNet存在一类称之为证明者的角色来生成证明。验证者作为L1(以太坊)上的合约来验证证明,验证者合约代码都是相同的。 具体而言,StarkNet有五个组成部分,分别是在StarkNet上的Prover(证明者)、Sequencer(排序器)和全节点,以及部署在以太坊上的验证者(Verifier)和核心状态合约(StarkNetCore)。 系统架构如下图: https:davidbarreto。comstarknetsarchitecturereviewmore4602 StarkNet的工作流程如下: 1、当我们在StarkNet上发起一个交易,一个链下服务器排序器将会接收、排序、验证,并将它们打包到区块。执行交易,然后状态转换发送给StarkNetCore合约; 2、证明者将为交易生成证明,并发送给以太坊的验证者合约; 3、验证者将验证结果发送到以太坊上的StarkNetCore合约,并从StarkNetCore合约触发一组新的以太坊交易,以更新链上的全局状态以进行记录保存。状态事务作为calldata(EIP4844后为Blob)来发送,以节省L1事务gas。这些metadata可被StarkNet全节点解密。 全节点基本发挥存储功能。全节点存储状态改变、元数据、证明以及记录在StarkNet中的已被执行的所有事务,并跟踪系统的当前全局状态。在有必要的时候,全节点将解密metadata来重构StarkNet的历史。 工作流程方面的优越性结论可能需要等待其他ZKRValidityRollup工作流基本确定后,通过对比得出。 原生账户抽象 不同于以太坊EOACA的双账户设计,StarkNet实现了原生账户抽象,只有一种账户设计。 这对合约钱包以及更加低成本、安全、易开发的链上可编程打开了大门,这可以推动ECDSA以外的签名验证方式、多签管理、社会恢复、聚合签名、交易限制、隐私保护、gas优化、gas代付、异币gas、应用聚合、自动收益等各个方面的发展。 下图为StarkNet交易流程图(仍然借鉴了4337的设计思路): https:community。starknet。iotstarknetaccountabstractionmodelpart1781 而且StarkNet已经实现了手机硬钱包。 1。以太坊上的EOA仅支持Secp256k1椭圆曲线上的签名方案ECDSA 2。大部分的智能手机都不支持以太坊的椭圆曲线。 3。所以移动钱包需要依靠软件签署交易,移动钱包因此是热钱包。 4。StarkNet原生账户抽象,支持多种椭圆曲线,签名验证高度可编程,因此基于StarkNetCairo的手机钱包完全可以变成硬钱包。 StarkNet上原子化NFT协议Briq的开发者sylvechv在博客中也写到,在实现了原生账户抽象的StarkNet(编程语言为Cairo)上,可以授权一个mobilekey签署一定数额的交易,和或只为某些合同,和或只为某些功能(例如没有transfer()而只有play())。用户甚至可以在一定时间后撤销它。 在StarkNet中的合约钱包,授权手机签名的流程类似于 1)在手机上生成pubpriv密钥 2)使用管理员密钥在智能钱包上授权pubkey 二、EVM兼容 StarkNet网络本身不兼容EVM,而设计了另外一套ZK友好的CairoVM。 StarkNet没有针对以太坊操作码做ZK电路,而是自己做了一套更加ZK友好的汇编语言、AIR(代数中间表示)以及高级语言Cairo。 https:www。youtube。comwatch?vSEp5SFaYQHYt6s 不兼容EVM的弊端在于无法继承以太坊代码和工具链,因此,以太坊应用生态没有大规模移植到StarkNet的基础。且Cairo语言对开发者存在一定学习门槛,Cairo语言和STARK证明系统相关工具链和库也处于起步阶段。 但独立设计VM的好处在于,StarkNet的CairoVM更ZK友好,电路执行效率更高(代码更少),在未来将表现为TPS更高,Gas更低,抛弃EVM设计后还能实现许多以太坊不能完成的应用创新,如原生账户抽象的合约钱包。 StarkNet属于Vitalik定义的type4级别语言兼容的zkEVM(StarkNet由于定制了虚拟机严格来讲属于zkVM)。 https:vitalik。eth。limogeneral20220804zkevm。html 尽管StarkNet本身不兼容EVM,但StarkNet仍然可以通过其他方式兼容以太坊。 1、Warp:将Solidity转译为Cairo语言的转译器 Warp是一个SolidityCairo转译器,目前已经由以太坊著名基础设施团队Nethermind开发完成。Warp可以把Solidity代码转译为Cairo,但转译后的Cairo程序往往需要修改并增添Cairo特性(如调用内置函数,优化内存等)才能最大化执行效率。 2、Kakarot:一个用Cairo语言编写的zkEVM Kakarot是一个用Cairo写的zkEVM,是一个字节码等效EVM的zkEVM,目前处于测试阶段。以太坊应用可以通过部署到Kakarot的方式移植到StarkNet。 此前以太坊联创Vitalik和StarkWare联创EliBenSasson参与了Kakarot举办的TwitterSpace。 三、STARK证明系统 3。1简介 目前有许多不同的证明系统(生成和验证证明),如Halo、PLONK、Groth16、Groth09、Marlin、Plonky2等,它们都属于SNARK证明系统。证明系统存在一个证明者生成证明,一个验证者验证证明。而不同的ZK项目几乎都会使用不同的证明系统,StarkNet使用的STARK某种意义上属于一种特别的SNARK。 https:medium。comalliancedaozkpsinweb3nowandthefuture21b459348f29 SNARK全称SuccinctNoninteractiveArgumentofKnowledge(零知识简洁非交互论证),STARK全称ScalableTransparentArgumentofKnowledge(零知识可扩展透明知识论证)。 SATRK作为一种特殊而创新的SNARK,S的含义从简洁(Succinct)变为可扩展(Scalable),T代表透明,取代了非交互属性。 https:www。altoros。comblogzeroknowledgeproofimprovingprivacyforablockchain STARK相比SNARK有更多创新。它不需要和SNARK一样依赖可信设置。它还带有更简单的密码学假设,避免了对椭圆曲线、配对和指数知识假设的需要,纯粹依赖哈希和信息论,因此抗量子攻击。总体来讲STARK比SNARK更安全。 在扩展性方面,STARK的扩展性更强。证明生成速度具备线性扩展性,验证时间和证明大小具备对数扩展性。但缺点在于生成的证明尺寸更大。但随着证明规模增加,验证成本将会边际递减这意味证明越大,总成本越低。 https:research。thetie。iozeroknowledgestarkssnarks 3。2扩展性详解 3。2。1证明时间线性扩展:证明人花费的时间与哈希调用的数量呈近似线性关系。 在80比特的安全级,STARK每12288次哈希调用的证明者执行时间为1秒,得12288次S;而每98304次哈希调用需要10秒,得9830次S,因此,我们可以知道STARK的证明时间和哈希调用基本呈近似线性关系。如下图所示 ttps:eprint。iacr。org2021582。pdf(左图80比特安全性右图100比特安全性,y轴单位为秒) 3。2。2验证和证明大小对数扩展:验证时间(与证明大小)与哈希调用呈现对数关系。 如下图所示: https:eprint。iacr。org2021582。pdf(y轴单位为毫秒) 左图可以看出,当哈希调用从3072增加到49152,验证时间从40毫秒增加到60毫秒。而当哈希调用从49152增加到786432,验证时间仅从60毫秒增加到80毫秒。证明大小同理。因此,我们可得知,哈希调用次数越多,平均验证时间越短,平均证明大小也会更小。 上述试验的配置统一如下 1、操作系统:Linux5。3。051genericx8664。 2、CPU:英特尔(R)酷睿(TM)i77700K4。20GHz(4个核心,每个核心2个线程)。 3、内存:16GBDDR4(8GB2,速度:2667MHz) 4、证明者使用多线程,验证者被限制为单线程。 3。2。3递归证明 任何通用的、简洁的知识系统的证明论证(特别是STARKs)都可以用来递增地验证计算。这意味着一个计算可以产生一个证明,以证明该计算的前一个实例的正确性,这个概念被非正式地称为递归证明组合或者递归STARKs。 换句话说,一个递归STARK证明者可为一个陈述生成一个证明,即系统的状态可以从a移到a1。因为证明者已经验证了一个证实a的计算完整性的(递归)证明,并且忠实地执行了状态a的计算,达到了新的状态a1。简而言之,你可以理解该过程将a和a1两个证明合并为了一个证明。如下图所示: https:medium。comstarkwarerecursivestarks78f8dd401025 这些陈述各自被平行证明。然后,每对证明都由递归验证器语句(一个验证STARK证明的Cairo程序)进行验证,并为其生成一个证明。该声明断言两个证明已被验证是正确的。 接下来,这两个证明通过递归验证程序语句再次合并。这导出为证明所有四个原始陈述的一个证明。然后可以最终在链上提交该证明,由Solidity验证者智能合约进行验证。 递归证明为L3的发展奠定技术基础。类似于StarkNet作为L2在L1(以太坊)上工作的方式StarkNet将计算证明交给以太坊上用Solidity编写的验证者合约验证证明。L3可以在StarkNet上部署一个用Cairo编写的验证者合约以验证L3中的递归证明。 3。2。4递归证明历史线索 StarkWare在2020年8月31日发布的文章中提到,能够将30万笔交易在6分3秒内聚合为一个证明。 ZK友好的哈希函数 哈希函数在以太坊(以太坊使用keccak256)中常用于生成区块、交易、状态哈希,是区块链基础技术。 ZK友好的哈希函数的意义在于,EVM本身使用的keccak256ZK不友好,变成电路执行效率非常低(很多行),使用ZK友好的哈希函数转为电路的代码量更少,因此可以提高证明效率。 因此,StarkNet使用STARK友好的哈希函数(SFH)可以显著提高执行效率。 STARK友好的哈希(SFH)函数,如Rescuehashfunction(扩展性部分的Hash调用),特点包括以下三点 1、带有证明的算术化电路,能够将10万个哈希值(3。2MB的数据)压缩到200kB,有80比特的安全性。 2、证明者在四核CPU和16GB内存的配置下能够每秒压缩100个哈希值。 3、验证者在单核CPU和4GB内存的情况下,能够在10ms内对证明进行验证。 https:twitter。comIngozkstatus1573033153672921093 四、Cairo虚拟机和语言 4。1简介 CairoVM是一个是一个采用冯诺依曼架构的CPUVM,其编程语言也叫Cairo。整个CairoVM以及Cairo语言基于STARK设计。 Cairo是CPUAlgebraicIntermediateRepresentation(代数中间表达)的首字母缩写。CairoVM包含单个AIR来验证这个CPU的指令集。Cairo语言基于Cairo汇编,因此编译效率非常高。 Cairo语言的编程体验偏汇编(C和Rust,经常会用到指针),它具有以下特性:内存、函数调用、递归和分支条件。它还使用证明者一侧的提示(hints)来创建快捷方式并启用某些计算。 https:www。cairolang。orgdocshowcairoworksindex。htmlhowcairoworks(我捏) CairoVM和Cairo让我有一种Unix和C语言的感觉。 https:www。cairolang。orgdocshellocairoamm。html(AMM代码片段) 接下来将介绍Cairo的一些强大特性。 4。2启动加载:从哈希加载程序 程序可以将另一个程序字节码写入内存,并让ProgramCounter指向该内存段,然后运行该程序。 一个从哈希启动加载的用例是,一个被称为启动加载器的程序计算并输出另一个程序的字节码,然后像之前一样开始执行它。这样验证者只需要知道程序的哈希而非完整字节码。 这有两个好处:可扩展性,验证时间和程序大小呈现对数关系,正如STARK部分提到的。隐私性,验证者可以验证程序是否正确执行而无需知道计算。 4。3在同一个证明中运行不同程序 正如前文所述,启动加载器可以做一个扩展。比如执行好几个程序。输出每一个程序的字节码hash和程序的输出。而程序可以描述完全不同的计算。 因为proof的大小和验证时间都和计算的大小呈亚线性关系,因此可以使用一个加载器执行多个程序,然后生成一个证明来确保所有程序的有效性。 就像滴滴打车一样 验证的成本在这些程序之间被摊销了。随着更多程序加入批处理,最终的摊销验证成本将越来越接近于0。参考STARK部分的验证和证明大小对数扩展。 4。4高级优化:即时编译和字节码生成 在程序执行过程中,一些高级优化可以通过字节码的自动生成来实现。 比如,对于一个函数,不同于从内存中预取对应的值,你可以直接拷贝程序的字节码,然后在对应的指令上直接赋予对应的值;考虑一个指令从内存中读取x和c,然后计算xc,一旦c的值是已知的(此时用C表示),我们可以用更高效的指令去替代它,从内存中读取x,然后计算xC,C是指令的立即数。 因此,我们可以进一步提高执行效率 4。5增量可验证计算:很牛的递归证明 类似STARK的递归证明recursiveproof部分提到的。 基于从hash启动加载的概念,整个验证过程可以编码成一个hash,然后整个验证过程作为参数传递给自己(这也是生成递归证明的一个步骤)。 4。6其他重要优势 内置函数 开发者直接调用内置函数可以减少计算开销,而不需要代码转换。相当于ASIC芯片写好的电路或者数学中给定的、验证过的公式。 图灵完备 支持计算(或者验证,因为CairoVM本身不执行计算,仅验证计算正确性,计算在链下)一切可计算的问题。因此理论上能够复刻其他虚拟机,比如前面提到的用Cairo编写的zkEVM,理论上也可以复刻其他在未来可能开源的zkEVMzkVM如Scroll、Hermerz、zkSync、Miden、Zero等。 CPU架构 更加灵活,可以通过软件编程的方式无限接近AISC的性能(所以Cairo会做CPU?)。 提示:关于CPU架构、内存、Cairo语法等方面的更多特性我还在挖掘中(C语言没跑了)