兼容EVM又高效安全的zkSync有何潜力?
zkSync是Matter Labs 开发的Layer 2扩容方案,基于零知识证明运行,同时强调一流的用户及开发者体验。目前,计划中的V2版本zkSync能够兼容EVM,并很快就会开始公测。尽管还需优化才能上线,但zkSync已经展现着强劲的发展势头。
Zinc——zkSync官方打造的编程语言:
Zinc是zkSync创建的,专门为基于零知识证明的智能合约而设计的安全、简单且高效的编程框架和基于虚拟机的运行环境。与Solidity、Starkware的Cairo等类似,是用来编写基于底层的一般应用;零知识语言如Noir等针对的是隐私智能合约,代码中不包括那些执行代码的惯用函数,写的是能验证承诺的判断式,使用的是完全不同的范式。如果需要构建隐私智能合约,就必须使用零知识语言,切实理解它们的原理。如果只想写Layer2的可扩展智能合约,可直接用Solidity或者用Zinc、Cairo等语言进行。
已经在以太坊(无论Layer1还是Layer2)上的应用,可以直接用Solidity的代码正常在zkSync运行。除非代码里包含特殊设置,否则不用修改任何代码。
如果要开发新的应用,Rust这些更高级的函数语言会有帮助。Zinc就是Rust的子语言,它们面对各种情况都更稳定,再加上各种函数性质,句法上更简明,容易审计,降低随机错误概率。Zinc VM搭建于LVM编译器之上,可以处理正常的Rust代码,把它转换编译到虚拟机上。
如果从零开发针对某一Layer2平台的程序(比如zkSync),可以直接用Zinc代码进行部署。或者应用的部分代码是用Rust写的,而开发者恰好想保留这部分,Zinc的机制非常有利,但大部分用户用Solidity就可以。
zkRollup & zkPorter:
在 zkSync 2.0 中, L2 状态将会分成两个部分:数据可用性在链上的 zkRollup 和数据可用性在链下的 zkPorter。从zkSync的角度看,两者是一模一样的系统,只不过有两个不同类型的账户而已。用户可以调取不同地址的多个智能合约,然后与ZKRollup和ZKPorter的账户互动。这些过程除了手续费略有不同没有其他区别。用户可以自行决定使用哪个:
愿意为最高的安全性多支付一些的交易费,可以选择zkSync Rollup账户;
看重侧链上低廉的交易费,并愿意为此承担一定的安全风险。可以选择zkPorter账户,单笔交易费仅一美分;
之后官方会专门出份指南帮助用户在zkPorter上搭建智能合约,降低交易费。但这完全取决于用户选择,用户如果直接用Solidity,zkPorter依然可以顺利运行,无需修改或重新审计。
zkRollup和zkPorter的用户选择:
用户选择主要取决于gas费用。总体上以太坊和区块链的应用在逐渐扩大,一旦更多人可以负担得起在该系统上交易,就会迎来数以百万的新用户纷涌而至。广泛接触DeFi、NFT和类似产品,最终大幅抬高交易费用。可以举例的是:我们如何使用银行卡账户?有储蓄账户和现金账户的话,大家是不是都会把大部分资金存入储蓄账户,同时在活期账户留些可用资金来保障日常交易?尽管面临相应的诈骗风险,毕竟信用卡有可能被盗,但好在卡上额度并不高。这与zkSync的账户类型相似:
大额资产会被放置在zkRollup账户内保管,就像巨鲸们、大型基金、大额交易员们以及大部分用户一样,把黄金资产储存在安全的账户里;
同时用相对费用低廉的zkPorter完成其他日常活动。
预期TPS(Transaction PerSecond,每秒系统处理的数量)
关于TPS,zkRollup会受到以太坊的限制,和其他Rollup共享以太坊区块空间,所有Rollup都会抢这个空间。
如果zkSync用上以太坊所有的区块空间,可以达到每秒两千或三千笔交易。这取决于交易类型,比如不是所有交易都是转账,有些涉及到DeFi的交易需要对存储进行更多检查、调取更多数据,所以吞吐量也会降低。但zkSync不可能占用所有空间,毕竟还有其他应用和其他以太坊用户。
现实中,zkSync可以做到每秒数百笔或上千笔交易。对于去中心化验证者是有限制的。在Layer2需要运行另一个共识,决定放什么到区块里。因为把这些交易做成去中心化,而不是由中央服务器运作是很重要的,这和一些最好的共识机制类似。总的来说,尽管TPS的天花板很高,但还是会有极限。
兼容EVM(Ethereum Virtual Machine,以太坊虚拟机)
以太坊上的EVM可以把Solidity智能合约编译成EVM字节码,而zkSync可以将Solidity代码编译到zkSync字节码。这个虚拟机的字节码是不同的字节码,和Optimism的原理很相似,Optimism有虚拟机,把Solidity编译到它的字节码。但对于开发者来说并没有不同,所做的都是把代码编译到字节码,然后在系统中部署。zkSync的字节码经优化可在零知识证明中有效运行,但依然有着同样的功能,与Solidity通过了同样的测试等等。
潜在风险 & 防御策略
如果出现黑天鹅事件,无论出现在生态系统哪个地方,所有Layer2都会受到影响。代码错误、智能合约漏洞导致受到攻击,或者共识或服务器出了问题、系统临时崩溃,都会减少对技术的信任。zkSync V1运行了一年,期间崩溃了几次,却没有发生安全事件。但尾部风险依然会持续存在,对此,zkSync 有多层次的防御策略:
双重认证:在一笔交易被放到区块里之前,首先要经过服务器和验证者的验证。只有在交易验证有效后才会产生知识证明,智能合约会验证此证明。
升级机制:如果系统出现问题,官方会升级系统和修复问题。
时间锁定:如果团队出现了恶意情况,试图通过升级盗取用户资金,破坏状态或任何非法行为。用户总有抽身的时间窗口,而且时间窗口较长。
安全理事会:由15名成员组成,邀请社区声望高的人担任,在出现问题的时候,可以加速升级,程度要看有多少位安全理事会成员为升级担保。平均耗时会降到一两周甚至三天,修复问题的应对时间也会相应缩短。
zkRollup VS 其他Layer2方案
zkRollup可能会是从长期来看将占领领先位置的解决方案:
一方面,zkRollup是Layer2技术里面唯一具备拓展性的,像zkPorter或者Validium一样,可以在同系统中既有Rollup也有侧链,而且自动可组合,没有其他Layer2可以做到一点。我们看到了币安链和Polygon的崛起,这清楚地表明存在着有一大批用户在乎交易费用高低,他们更在乎的不是安全而是低费用。
另一方面,大多数交易仍然发生在以太坊上进行,意味着又有一波用户不在乎高昂的费用,他们会优先考虑绝对高度的安全。当然,前提是它必须可用。有不同的系统针对不同的用例进行优化,而zkRollup是唯一能将它们组合在一起的技术。
设想以太坊将实现极度互操作,来自Polygon或币安链的用户可以在同一笔交易中在以太坊上的Uniswap交互。他们可以进行交易,使用Uniswap和Aave以及其他协议交互然后所有资金回到自己账户上,他们只需支付Polygon上的低费用,目前这不太现实。对于两种系统,用户要先把资金转移,需要一些时间才可以进行交易,交易很贵,然后要把资金移回来(也很贵且还需要耗费时间)。但用上zkSync就有可能:用户可以在zkPorter有账户且超级便宜,在zkRollup网站上有账户,它们就像以太坊本身一样可靠,有最高级别的安全措施且完全透明。
因此我们相信,zkRollup有较大概率成为主流。Starkware等及其他更新的项目也正在研究zkRollup技术,大家都任重而道远。