zkRollup vs Validium(StarkEx)

zkRollup 是时下最热门也是被认为较去中心化的一类区块链二层扩容方案,使用了零知识证明zk-SNARKs 的密码学技术实现了较高的安全性。StarkEx则将简洁零知识证明STARKs应用在交易所安全性升级,而用户的资金仍会面临被冻结、查封或盗走的风险。
DeversiFi最近推出了基于StarkEx交易引擎的新版交易所。这一不可思议的技术成就提高了加密交易所的安全级别,同时带来了历史的拐点:这是史上第一次在生产系统中应用STARKs,简洁的零知识证明,无需可信性设置(trusted setup)。
背景信息
StarkEx是一种第二层扩容解决方案“Validium”,其所有交易的有效性都是通过零知识证明实现,而数据可用性仍在链外。这样可以避免Validium中的资金被盗,因为账户里的每一次价值转移,都必须经过用户授权。
Validium的机制与zkRollup非常相似,唯一的区别是zkRollup中的数据可用性是在链上的,而Validium则是在链外。因此,Validium获得了更高的吞吐量,但也是有代价的:
StarkEx Validium的运营者可以冻结用户的资金。
“要想摧毁某项事物的人,会先去控制它。”——Frank Herbert,《沙丘》
没有zkRollup的数据可用性作保障,Validium的运营者,或更准确地说,数据可用性管理者能够拒绝任何用户转移资金。

其原理是这样:运营商对Merklized状态进行了微小调整,从而无需告知用户。由于缺乏这些信息,用户无法为自己的账户创建Merkle所有权证明。

在Validium中是否有防止数据预扣攻击的方法?自2016年Plasma概念被提出以来,这一问题一直被广泛讨论,而zkRollup就是解决问题的研究成果。非rollup尝试以无需信任的方式确保了数据可用性,导致Validium丧失了其大部分竞争优势。
虽然这一问题还未完全解决,但StarkEx通过引入有权限的数据可用性委员会(DAC)缓解了此问题。DAC必须通过法定人数的成员签署对每次状态更新,以确认已接收到数据。在StarkEx中,DAC由8位参与者组成(太多成员会危害系统的活性),而这些参与方也都是声誉很高的组织。他们不太可能会滥用自己的权力。
但矛盾的是,知名度高、声誉好、位于强大的司法管辖区,恰恰是使它们脆弱的原因。可能出现的情况是:运营商必须执行KYC/AML法规,并有义务冻结交易历史超过1万美元账户里的所有资金。
随着我们深入研究,问题也变得更加有趣。StarkEx执行了校验人合约升级机制(Verifier Contract Upgrade),允许运营商无任何延迟地将新项目添加到校验人的合约链中。这样做不能使任何旧逻辑失效——例如:不能删除用户签名检查。反而可添加额外的约束(就Solidity而言,可以将约束视为`require()`语句)。
这是一个很好的安全特性:如果在StarkEx的STARK简短逻辑中发现任何丢失的限制,可以在不引入任何新漏洞的情况下进行快速修复。然而,这一功能在理论上也可被用作隐藏的审查后门。简而言之,StarkEx运营商总是可以将扩展部署至合约逻辑中,从而引入黑名单,且无需事先警告用户。根据他们的文档来看,目前尚不完全清楚,但是看起来执行新规则不需要获得DAC的同意。
如果把StarkEx视为完全去中心化的交易所协议,那么这就没有多大意义。想象一下,Vitalik Buterin有一个可立即冻结任何以太坊账户的开关。另一方面,如果把StarkEx视为是加密交易所的安全增强功能(其创建者肯定希望如此),那么这就是完全有意义的。
StarkEx Validium的运营商可以没收用户的资金
让我们拓展下思维。假如由于某些原因(很可能是由于运营商无法控制的情况),现在大量用户的资产被冻结了。那么问题来了,用户在StarkEx上的资金可能被没收吗?
事实上,是可能的。
StarkEx与很多其它加密项目一样,实现了最先进的升级机制。用户在新版本部署前28天会得到通知,任何不满意的人都可以选择退出。
但是,那些资金被冻结的人,却没有办法退出。
宽限期结束后,可以部署新的合约逻辑,将冻结的资金转移到指定的托管钱包中。不幸的是,任何受影响的用户,都无法对此采取行动。
此外,还有一些合理的担忧,即升级通知期限本身,可能不足以让每位不同意更改的用户退出(即所谓的“大规模退出”场景)。但这个问题是通用合约可升级性的问题,不是Validium独有的。
2020年6月7日更新:Justin Drake描述了针对Validium的加密经济攻击。
在后续讨论中,Justin Drake指出,Validium的数据可用性方法可能意外派生了一个攻击路线:如果数据可用性委员会法定人数的签名密钥遭到破坏(并且这些密钥一直在线,因而难以对其提供保护),攻击者可以将Validium转换成只有他们知道的状态,从而冻结所有资产,然后进行勒索。
从理论上讲,合约升级机制能够应对这种攻击。Validium的运营商部署新版本,在28天的升级通知期后,状态会恢复成最新的已知版本。资金会被锁定一个月(这当然会产生相当大的成本),但是如果DAC拒绝谈判,攻击者一分钱也拿不到。
然而,事实证明,攻击者可以通过一种方法迫使运营商要么选择失去一切,要么选择让攻击者进行双重支付(double-spend)攻击。以下示例可以进行说明:
想象一下,你侵入了ATM,在提款完成后,可以擦除整个银行数据库。但是,你只能从自己的账户中提款,不过当数据库消失时,所有的操作信息也会一并消失。
银行员工需要用一个月的时间恢复复杂的数据库。但是,由于他们不知道提款的人是谁,所以在恢复至上一个检查点时,你的账户也会恢复——这样你取走的钱又回来了!
当然,这笔双重支付不会超出攻击者账户中的金额。但是,构建一个无需信任的合约并从暗网的恶棍手里借用所需的资本是一件很容易的事情。这个练习就留给你们吧。
这种攻击表明了Validium的安全模型与PoA网络的安全模型相对类似。实际上,一个有20个节点和51%门限签名的PoA网络可能比有8个节点和100%门限签名的Validium更安全。
zkRollup的数据可用性可保护用户的资金免遭没收、审查和盗取,但是牺牲了本就较低的吞吐量。
只要有一个以太坊全节点处于在线状态,zkRollup用户就可以访问rollup的状态。
工作原理:对于每个zkRollup区块,重构状态变更所需的信息,必须作为以太坊交易的调用数据提交,否则zkRollup智能合约将拒绝进行状态转换。zkRollup上的状态变更会导致每次交易产生少量的燃料费(gas cost),此成本会随交易数呈线性增长。
有了Merkle树数据,被审查的用户能够直接通过主网上的zkRollup合约,领回其资金。他们只需要提供一份账户所有权的Merkle证明。因此,链上数据可用性可以保证任何(包括zkRollup运营商)都无法冻结或获取用户的资金。
不过,数据可用性存储在链上限制了吞吐量——zkRollup 在当前以太坊主网上有严格的使用上限——每秒2000笔交易(TPS),而StarkEx Validium则是9000笔。这种差异可能会决定这两种技术的应用领域和使用场景。例如,zkRollup非常适合扩展去中心化的加密支付(VISA全球范围总共只有2000 TPS),以及严格要求去信任的不可变智能合约。另一方面,Validium可能更适合传统的高频交易或信任要求更低的博弈。
结论
我们已经证明了zkRollup和Validium(StarkEx)在运作原理上有些相似,其主要区别在于数据是链上可用还是链下可用,这是理解它们及其应用范围的关键。这一差异意味着,zkRollup是一个无需信任的去中心化扩展协议,而Validium则展示了托管PoA系统的更多属性,无论是吞吐量还是风险特征,还有安全性大幅提高了。
每一次为了减少信任,并为用户提供对其资产更多控制权的技术发展,都是朝着增强个人能力迈出的一步。为了继续前进,我们总是需要做出权衡。
尽管如此,加密社区越来越一致地认为,技术已经迈过了“不作恶”的阶段,现在是“无法作恶”的时代。我们可通过自我托管、审查抵制、隐私及消灭单点故障来实现这一目的。这些想法构成了我们在打造系统时的基本价值观。
完全去信任扩容的时代即将来临,Matter Labs的大事件宣告倒计时也已开启,敬请期待。
在此特别感谢Lasse Clausen、Christopher Heymann、James Prestwich、John Adler、Haseeb Qureshi、Alex Evans及Howard Wu对本文的评价及宝贵意见。
Matter Labs正在努力加速公共区块链的大规模采用。目前,我们正在建设zkSync,这是一种适用于以太坊的可扩展性引擎,具有安全性高、速度快的特点。
您可以可通过邮箱[email protected]、Twitter及Telegram联系Matter Labs