1. 引言
Espressosy团队开发了一种去中心化隐私计算系统(Decentralized Private Computation,DPC)——VERI-ZEXE,其支持universal setup。具体见Alex Luoyuan Xiong 2022年论文《VERI-ZEXE: Decentralized Private Computation with Universal Setup》。
开源代码见:
为便于 与Aleo SnarkVM testnet2早期版本(不包含testnet3及之后的版本)之前的DPC模型 对比,2022年论文《VERI-ZEXE: Decentralized Private Computation with Universal Setup》第4章中,阐述了对SnarkVM的代码进行了修改,对比发现,VERI-ZEXE生成交易的速度比SnarkVM快约9倍,使用的内存少约2.6倍。
VERI-ZEXE将用于CAPE的后续版本中,在保持可配置资产隐私性的同时,可支持任意用户自定义资产策略。
2. ZEXE背景知识及不足
现有的智能合约系统,如以太坊和Solona,为Web3创新的绝佳温床。但是,这些系统均受限于隐私或(和)可扩展性。为确保公开可验证下,所有的 程序状态和状态变化都是公开透明的,牺牲了隐私,所有的(全)节点都需要重新执行所有的交易或计算,影响了扩展性。
2019年,Bowe等人提出了一种名为decentralized private computation(DPC,去中心化隐私计算)的方案:
- 用户可在链下执行任意计算,使用ZKP来向链上提交一笔交易以证明该计算的正确性。
为实例化该DPC方案,Bowe等人实现了名为ZEXE(zk-execution)的系统,可解决以上隐私性和扩展性的问题。大体上,ZEXE是“programmable ZCash”,由 单一应用系统 到 智能合约系统 过渡的同时,保留了隐私属性。
2.1 ZEXE VS. ZK-Rollup
ZEXE 链下计算、链上验证计算完整性证明,听起来与zk-rollup类似。
- ZEXE中的用户生成交易有效性证明,将交易直接发送到链上
- zk-rollup中的用户将交易发送给rollup validators,由rollup validators生成zk proof发送到链上。
从技术上说,ZEXE并不关心链下计算是如何完成的——是由单个用户,还是由多用户MPC协议,或者是以rollup-server形式完成的。为此,可认为ZEXE和zk-rollup是2种互补的方案。
2.2 ZEXE显著特性
ZEXE的显著特性有:
- 1)数据隐私以及函数隐私:ZEXE可隐藏所有函数状态,以及函数调用的输入/输出(数据隐私),以及每笔交易具体触发了哪个函数/程序(函数隐私)。即使后续有多种隐私智能合约方案,ZEXE仍是唯一可实现函数隐私的方案。
- 2)可编程性:ZEXE用户可为某record附加任意policies/predicates(所谓record,类似Bitcoin Script),record可指定相关程序状态的变更规则。Bowe等人还展示了如何在ZEXE模式下编程实现用户自定义资产、DEXes以及监管合规的稳定币。
- 3)简洁验证:链上validators无需重新执行该计算。相反,链上validators仅需验证该short transaction validity proof,无论链下计算多复杂,链上验证时间均为contant time。
现有的实现(SnarkVM testnet1 和 SnarkVM testnet2)除具有以上特性之外,还存在以下待改进之处:
- 1)circuit-specific setup:ZEXE(SnarkVM testnet1)使用类似GM17和Groth16的non-universal SNARK来证明合约执行的正确性,需要为每个应用/程序做一个trusted setup,几乎不具备实用性。
- 2)性能:具有universal SNARK的ZEXE(SnarkVM testnet2),其性能有大幅下降——由于通用SNARK验证逻辑的复杂性更高,以及ZEXE需为编码了SNARK校验逻辑的statement生成SNARK证明。
3. VERI-ZEXE: universal setup without performance loss
VERI-ZEXE:
- 在保持了原始ZEXE所有特性和属性的前提下,引入了一些优化措施,降低了universal SNARK verifier gadget的circuit复杂性。
首先,将VERI-ZEXE与ZEXE进行了对比,如以2-input-2-output交易为例,在AMD EPYC 7R13 at 2.65 GHz with 64 cores and 128 GB of RAM上的性能对比(交易生成时间(即Execute
算法执行时间)、内存使用情况、交易有效性证明size)为:【交易生成速度要快将近9倍,而内存使用改进了约2.6倍。】
其次,将VERI-ZEXE与SnarkVM testnet2进一步对比,outer circuit(用于depth-2 proof composition) size要小很多,使得prover time能快一个量级,从而具有更快的交易生成:
最后,espressosys团队实现了TurboPlonk和UltraPlonk约束系统,并将其作为基石用于VERI-ZEXE中,可大幅降低约束开销。
基于TurboPlonk设计,各主要密码学基石和代数运算的PLONK约束数为:
4. VERI-ZEXE + CAPE: customizable asset policy
ZEXE仍存在一些挑战,如:
- 并发问题(当多个用户试图同时变更某共享状态)
- 原子性组合能力(在ZEXE中实现类似Flashloan这样的应用需要名为“in-bundle accumulation”技术,需要对ZEXE的record nano-kernel(RNK)进行小调整)
- 在UTXO模式下进行predicate programming的难度(现有方案,如Chialisp)
由于ZEXE存在以上问题,其并不是隐私智能合约设计的银弹,对于用户间具有最小共享状态,并采用UTXO模式的情况下,采用ZEXE可具有高并发性和低交易依赖项的优势。CAPE就是一个很好的例子。
当前,CAPE协议中仅支持预定义的资产策略集合(如,启动minting、匿名转账、冻结公钥、委托查看策略等),而不是动态的、用户自定义的资产策略。假设你想创建一种新的“concert token”,总供应量为1000,只能对指定的地址付款后才能mint,这种关联新concert token的新minting策略,超过了当前CAPE的能力范围。而未来VERI-ZEXE可使其成为可编程性可能。
参考资料
[1] VERI-ZEXE: Decentralized Private Computation with Universal Setup
附录A. Aleo的SnarkVM
Aleo的SnarkVM经历过多轮迭代:
- 1)Aleo的testnet1为S&P19论文中ZEXE的忠实实现,其需要application-specific trusted setup。
- 2)Aleo的testnet2早期版本中:将生成brith/death predicates proof的证明系统由GM17转换为Marlin,不再是application-specific trusted setup,而成为了“universal” setup。
- 3)Aleo的testnet2后期及之后版本中:改变了其原有的DPC模型,通过简化模型但限制了其可编程性(如,不允许inter-program call)。
- 4)Aleo的testnet3:采用了简化并限制后的DPC模型。