那么,我们该怎么办呢?该问题的解决方案在于在块中引入冗余。总的来说,有大量关于编码理论的文献,特别是擦除编码,可以帮助我们解决这个问题。 简而言之,纠删码允许我们将任何 n 个数据块扩展为 2 个数据块,其中 2n 个数据块中的任何一个都足以重建原始数据块(参数是可调的,但为了简单起见,我们在这里考虑了这一点)。 如果我们强制区块生产者擦除交易 tx1、tx2、...、txn 的代码,然后隐藏单个交易,则需要隐藏 n+1 个交易,因为任何足以构建整个交易集的交易。在这种情况下,恒定数量的查询使轻客户端足以确信底层数据确实可用。 哇,原来如此?不。虽然这个简单的技巧使隐藏工作变得更加困难,但区块生产者仍有可能故意以错误的方式执行擦除编码。然而,一个完整的节点可以验证这个擦除编码是否正确完成,如果没有,它可以向轻客户端证明这一点。这被称为欺诈证明。有趣的是,轻客户端需要有一个诚实的全节点邻居才能确定如果编码错误,那么它将收到欺诈证明。这确保了轻客户端以极高的概率访问没有恶意交易的链。 但是存在一个问题!如果简单地实现,欺诈证明的大小可以按照块本身的大小排序。但我们对轻客户端的资源预设禁止我们使用这样的设计。通过使用多维擦除编码技术,可以在这方面有所改进,该技术以可接受的大小减少欺诈证明的大小。为简洁起见,我们不涉及这些,但该 文献 对其进行了详细分析。 基于欺诈证明的解决方案的问题在于,轻客户端永远无法完全确定尚未收到欺诈证明的任何块。此外,他们一直相信其全节点对等方是诚实的。还需要激励诚实的节点不断保持审计区块。 有没有办法避免欺诈证明?最近,向量承诺重新引起了区块链领域的关注。这些向量承诺,尤其是对多项式的恒定大小的 KZG/Kate 承诺,可用于设计简洁的 DA 方案,而无需欺诈证明。简而言之,Kate 承诺允许我们使用单个组元素提交多项式。此外,该方案支持我们证明在某个点 i 使用恒定大小的见证,多项式评估为(i)。承诺方案在计算上是隐藏和绑定的,也是同态的,使我们能够巧妙地避免欺诈证明。 我们强制块生产者获取原始交易数据并将其排列在大小为 n,m 的二维矩阵中。它使用多项式插值将大小为 n 的每一列扩展为大小为 2n 的列。对于这个扩展矩阵的每一行,它都会生成一个多项式承诺,并将这些承诺作为区块头的一部分发送。下面给出了该块的示意图。 轻客户端查询这个扩展矩阵的任何单元格以获得见证,这使它能够立即根据块头验证它。恒定大小的成员证明使抽样非常有效。承诺的同态性质确保只有在正确构造块的情况下才验证证明,并且多项式插值确保成功样本的恒定数量意味着数据以非常高的概率可用。 (责任编辑:admin) |