-
Notifications
You must be signed in to change notification settings - Fork 0
Fraud Proof vs Validity Proof
Layer2 扩容的思路简而言之是将许多笔交易用一个证明所取代以节省 Layer1 的资源,相应的,这个应该可以证明对应的多笔交易的有效性。自然地,证明的方式可以分为两种:
-
欺诈证明,提出证据以证明链上的状态转换并不正确;
-
有效性证明,提出证据以证明链上的状态转换正确。
欺诈证明
欺诈证明对应的 Layer2 扩容方案乐观地假设链下交易均真实有效,直到某方提出证据证明其存在错误。多数我们熟悉的扩容方案都属于欺诈证明类方案,其中包括状态通道(State Channel)、Plasma、Optimistic Rollup 等,这些方案在作恶者为少数的系统中非常高效,因为多数交易无需证明即被乐观地认为是真实有效的,证明这些交易真实有效所需要的开销被节省了。
但为了避免恶意交易成为漏网之鱼,采用欺诈证明的系统必须留出足够的「容错时间」或者说「质疑时间」来接收欺诈证明以证明某些交易并不真正有效而将之取消。在质疑时间之内,Layer2 上的交易仍然有被修改的可能,关联账户的余额在 Layer1 上仍将被锁定,无法退出。同时,这种机制的有效建立在被害者有能力在「质疑时间」内认识到系统的错误并提交欺诈证明以纠正的「在线假设」(Liveness Assumption)基础之上。在这一假设中,对错误的沉默等同于对错误的默许。攻击者常常通过各种手段阻止利益相关方在质疑时间之内提交欺诈证明而完成攻击。欺诈证明类方案必须在质疑时间的长短上做出取舍。
有效性证明
有效性证明类方案,如 ZK Rollup 与 Validium 等,相比欺诈证明稳重许多,系统每次在 Layer1 上进行状态转换时都提交足以证明其转换真实有效的证明供 Layer1 节点验证。有效性证明因此无需设置质疑时间,从 Layer2 退出无额外延迟。如何节约生产证明的开销是有效性证明类扩容方案的艺术。
零知识证明是一种精巧有效性证明方式,它使得 Layer1 的验证节点无需获取链下交易的全部信息并进行重复计算即可证明其有效性。零知识证明算法的研究一直处在密码学领域的前沿,由于涉及复杂的数学和安全性证明,零知识证明的研究进展相较应用技术缓慢许多。目前主流的零知识证明算法包括 zk-SNARK、zk-STARK、PLONK 和 SONIC 等。好的零知识证明算法应该是验证开销低、生产快的。值得注意的是,目前实用的零知识证明算法生成证明的时间大约在 1~10 分钟,这是额外的无法消除的交易确认延迟。另外,由于零知识证明的生产需要大量计算,开发者通常通过开发电路(由低级语言编写的特定逻辑运行程序)减少计算时间,这使得零知识证明更倾向于运算格式一致的交易,也因此更适用于去中心交易所等需要处理的交易类型固定、合约简单的应用。