挑战的机会 (即提交一条签名消息,表示“我不同意,输出应该是Z”)。只有当存在挑战时,所有节点才会运行计算。双方中的任何一方错了,将失去自己的存款,且所有依赖于该计算结果的计算都将被重新计算。
基于欺诈证明的计算是可扩展的,因为“在正常情况下”,你可以通过验证单个签名来代替运行复杂的计算。也有例外的情况,即由于有人发起了挑战,你必须在链上验证计算,但这种例外情况非常罕见,因为触发这种情况的成本非常昂贵 (最初的证明者或者发起挑战者,其中一方将损失一大笔存款)。 ZK-SNAKRs 在概念上更简单 -- 它们只是用更便宜的证明验证代替了计算 -- 但其工作原理背后的数学运算要复杂得多。 当前,有一类半扩展 (semi-scalable) 的 Layer 2 系统,它仅仅以可扩展的方式 (即使用欺诈证明或者 ZK-SNARKs) 验证计算,同时仍然要求每个节点对所有数据进行验证。通过使用一套压缩技巧可以非常有效地实现这一点。这就是 rollups[4]。 2. 可扩展的数据可用性验证要更加困难 欺诈证明不能用于验证数据的可用性。计算的欺诈证明依赖于这样一个事实,即计算的输入在最初的证明被提交的那一刻就发布在链上,因此如果有人发起挑战,那么挑战的执行与最初证明的执行是完全发生在同一个“环境”中的。但在检查数据可用性时,你不能这么做,因为问题恰恰在于,有太多的数据需要检查,不能全部发布到链上。因此,针对数据可用性的欺诈证明方案遇到了一个关键问题:某人可以声称“数据 X 是可用的”而不公布该数据,等待被挑战,然后才会在链上公布数据 X,从而使发起挑战者被网络上的其它人视为不正确。 这在「渔夫的困境」[5] 中到了进一步的阐述: ![]() 「渔夫的困境」的核心概念是存在两个“世界”:一个世界中,V1 是个邪恶的数据发布者,V2 是个诚实的挑战者;另一个世界中,V1 是个诚实的数据发布者,V2 是个邪恶的挑战者。对于当时没有试图下载这一特定数据的人来说,是无法对此进行区分的。当然,在一个可扩展的去中心化区块链中,每个单独的节点可以只下载一小部分数据,因此,除了存在分歧这一事实之外,只有一小部分节点可以看到发生了什么。 (责任编辑:admin) |