可扩展的计算验证 我们可以将抗51%攻击的可扩展验证问题分为两种情况: 验证计算:检查某些计算是否正确完成,假设您拥有该计算的所有输入验证数据可用性:检查计算本身的输入是否以某种形式存储,如果确实需要,可以下载它们;执行此检查时,请不要实际下载所有输入本身(因为数据可能太大,无法每个区块都下载)验证区块链中的区块涉及计算和数据可用性检查:您需要确信区块中的交易有效,并且区块中声明的新状态根哈希是执行这些交易的正确结果,但是您还需要需要确信来自该区块的足够数据实际上已经发布,以便下载该数据的用户可以计算状态并继续处理区块链。第二部分是一个非常微妙但重要的概念,称为数据可用性问题。稍后再讨论。 扩展验证计算相对容易;有两种技术:欺诈证明(fraud proofs)和ZK-SNARK。 欺诈证明是一种可扩展地验证计算的方法。 这两种技术可以简单地描述,如下: 欺诈证明是一个接受计算结果的系统,您需要有进行过质押的人签署以下形式的消息:“我证明,如果使用输入X进行计算C,则会得到输出Y”。您默认情况下会信任这些消息,但是会给进行过质押的其他人提供挑战结果的机会(他们可以签名消息,说“我不同意,输出结果应该为Z,而不是Y”)。仅当有人挑战结果时,所有节点才运行计算。这两方中的任何一方出错都会失去其质押,并且将重新计算所有依赖于该计算结果的计算。ZK-SNARK是一种加密证明形式,可以直接证明“在输入X上执行计算C会给出输出Y”的主张。该证明在密码上是“合理的”:如果C(x)不等于Y,则在计算上不可能做出有效的证明。即使运行C本身花费大量时间,该证明也可以很快地进行验证。有关ZK-SNARK的更多数学详细信息,请参见此文章。基于欺诈证明的计算是可扩展的,因为在“通常情况下”,您将通过验证单个签名来代替运行复杂的计算。在特殊情况下,由于存在挑战,您必须在链上验证计算,但是在特殊情况下却很少见,因为触发它的代价非常昂贵(最初的声明者或挑战者都会可能失去大量保证金)。 ZK-SNARK在概念上更简单——它们只是用便宜得多的证明验证来代替计算——但其工作原理背后的数学却要复杂得多。 有一种半可扩展系统,它只能扩展地验证计算,同时仍然需要每个节点验证所有数据。通过使用一组压缩技巧将大部分数据替换为计算,可以使此方法非常有效。这是Rollup的领域。 数据可用性的可扩展验证更加困难 欺诈证明不能用于验证数据的可用性。计算的欺诈证明依赖于这样的事实,即计算的输入在最初声明者提交后即在链上发布,因此,如果有人挑战,则挑战执行将在与原始执行完全相同的“环境”中进行。在检查数据可用性的情况下,您不能执行此操作,因为问题恰恰是存在太多数据需要检查才能在链上发布的事实。因此,用于数据可用性的防欺诈方案遇到了一个关键问题:有人可以声称“数据X可用”但并不发布它,等待受到挑战,然后只有在挑战者出现在网络的其余部分并且错误的时候才发布数据X。 (责任编辑:admin) |