浅析数据可用性问题

新手1/2/2024, 1:53:31 PM
本文深入探讨了数据可用性问题及其如何影响以太坊的可扩展性。

区块链网络中的节点如何确保新提议的区块的所有数据均可用?为什么这一点很重要?

在这篇文章中,我们深入研究了数据可用性问题的细节以及它如何影响以太坊的扩展。

什么是数据可用性问题?

数据可用性(DA)问题:区块链网络中的节点如何确保新提议的区块的所有数据实际上都是可用的?如果数据不可用,则该区块可能包含被区块生产者隐藏的恶意交易。即使该区块包含的是非恶意交易,将它们隐藏也可能会损害系统的安全性。

举个例子,假设 Alice 是 ZK-Rollup (ZKR) 的运营者。她在以太坊上提交了一份经过验证的 ZK 证明。如果她没有提交以太坊上的所有交易数据,即使她的证明证明rollup中采取的所有状态转换都是有效的,但rollup的用户仍然可能对其当前帐户余额一无所知。由于其零知识性质,所提交的证明无法阐明当前状态。

Optimistic Rollup (OPR) 设置中存在类似的示例,其中 Alice 在以太坊上提交声明,但 OPR 的参与者都无法对其提出质疑,因为交易数据不可用,因此他们无法重新计算或质疑该声明。

为了应对上述情况,OPR 和 ZKR 的设计都要求运营者将以太坊上的所有交易详细信息作为“调用数据”提交。虽然这使他们在短期内避免了 DA 问题,但随着rollup内事务数量的增加,需要提交的数据量也会增加,从而限制了这些rollup可以提供的扩展量。

更糟糕的是,数据不可用并不是唯一可归因的错误。这意味着参与者无法向其他同行证明特定数据块丢失。这是因为Bob可以广播Alice提交的区块有缺失数据,但是当Charlie查询Alice时,她可能会向他提供数据。

DA对当今的区块链有何影响?

要回答这个问题,我们需要首先回顾一下类似以太坊的区块链的一般区块结构以及任何区块链网络上存在的客户端类型。

一个区块可以分为两个主要部分:

  • 块头:一个小块头包含与块中包含的交易相关的摘要和元数据。
  • 块体:包含所有交易数据,它构成了块大小的大部分。

在传统的区块链协议中,所有节点都被视为同步整个块并验证所有状态转换的完整节点。他们需要花费大量资源来检查交易的有效性并存储区块。从有利的一面来说,这些节点不能接受任何无效的交易。

可能还有另一类节点没有(或不想花费)资源来验证每笔交易。相反,他们主要想了解区块链的当前状态以及与他们相关的某些交易是否包含在链中。理想情况下,还应该保护这些轻客户端免于跟踪包含无效交易的链。这实际上可以使用所谓的欺诈证明来实现。这些是简洁的消息,表明特定的块体包含无效的交易。任何全节点都可以产生这样的防欺诈,因此轻客户端不必相信特定的全节点是诚实的。他们只需要确保自己与某一个gossip网络保持良好的连接状态,以确保受到区块头的防欺诈证明(若有)。

然而,该系统存在一个问题:如果区块生产者没有透露区块背后的全部数据怎么办?在这种情况下,全节点显然会拒绝该区块,因为在他们看来,如果它不带有块体,那么它甚至就不是一个块。然而,轻客户端可以看到标头链,但无法注意到数据丢失。同时,完整节点无法生成欺诈证明,因为它们会丢失创建欺诈证明所需的数据。

要解决这个问题,我们就需要一种轻客户端验证数据可用性的机制。这将确保隐藏数据的区块生产者无法通过说服轻客户端来逃脱。它还将迫使区块生产者披露部分数据,使整个网络能够以协作方式访问整个区块。

让我们通过一个示例来更深入地研究此问题。假设区块生产者 Alice 用交易 tx1、tx2、…、txn 构建了一个区块 B。假设 tx1 是一笔恶意交易。如果 tx1 被广播,任何全节点都可以验证它是恶意的,并将其发送到轻客户端作为防欺诈,轻客户端会立即知道该块是不可接受的。但是,如果 Alice 想要隐藏 tx1,她会显示块头和除 tx1 之外的所有交易数据。如此,全节点就无法验证tx1的正确性。

人们可能会认为这样一种简单方法可解决此问题:如果所有轻客户端只是随机对交易进行采样,并且如果他们发现样本可用,那么他们就可以确信该块是可用的。让轻节点均匀随机地查询任何一笔交易。轻客户端查询tx1的概率为1/n。因此,Alice 能够以压倒性的概率欺骗轻客户端接受恶意交易。换句话说,大多数轻客户端都会被愚弄。由于不可归属的性质,全节点无法以任何方式证明 tx1 不可用。不幸的是,增加样本数量并不能让情况变得更好。

那么,如何应对该问题呢?

解决这个问题的方法就是在块中引入冗余。关于编码理论,特别是纠删码,存在大量的文献,它们可以帮助我们解决这个问题。

简单来说,纠删码允许我们将任意的 n 块数据扩展为 2n 块数据,使得 2n 中的任意 n 块都足以重建原始数据(参数是可调的,但这里我们考虑为了简单起见使用这个)。

如果我们强制区块生产者对交易 tx1、tx2、…、txn 进行纠删码,那么,要隐藏单个交易,则需要隐藏 n+1 个数据块,因为任何 n 都足以构造整个交易集。在这种情况下,恒定数量的查询使轻客户端高度确信底层数据确实可用。

哇哦,原来就是这个解决方案?

这是行不通的。虽然这个简单的技巧使隐藏企图变得更加困难,但区块生产者仍然有可能故意以错误的方式执行纠删除码。然而,全节点可以验证这种纠删码是否正确完成,如果没有,它可以向轻客户端证明这一点。这是另一种类型的防欺诈,就像上面的恶意交易的情况一样。有趣的是,轻客户端需要有一个诚实的全节点邻节点,才能确定在该块为恶意时将收到防欺诈的信息。这保证了轻客户端能够以非常高的概率访问到没有恶意交易的链。

但是有一个问题!如果简单地完成,一些欺诈证明的大小可能与块本身的大小相同。我们对轻客户端的资源假设禁止我们使用这样的设计。通过使用多维纠删码技术,在这方面已经有了改进,该技术以承诺大小为代价减少了欺诈证明的大小。为了内容的简短起见,此处我们不讨论这些,但您可查看本文对其进行的详细分析。

基于防欺诈的解决方案的问题在于,轻客户端永远无法完全确定尚未收到防欺诈的任何块。此外,他们始终相信其全节点节点是诚实的。诚实的节点还需要受到激励来持续审计区块。

此处,我们着重看这样的系统:它能保证如果块编码无效,全节点可以检测到它并向轻客户端提供证据,以说服他们存在不当行为。但在下一节内容中,我们将研究块编码,它保证只有有效的编码才能提交到链中。这就无需证明编码错误的欺诈证明。这些基于有效性证明的解决方案使应用程序能够使用该系统,而无需等待来自全节点的此类欺诈证明。

那么这些解决方案如何发挥作用呢?

最近,多项式承诺重新点燃了区块链领域的兴趣。这些多项式承诺,特别是对多项式的恒定大小的 KZG/Kate 承诺,可以用来设计一个简洁的 DA 方案,而不需要欺诈证明。简而言之,KZG 承诺允许我们使用单个椭圆曲线群元素来承诺多项式。此外,该方案支持我们证明在某个点 i,多项式 φ 使用恒定大小的见证计算为 φ(i)。承诺方案具有计算约束力并且是同态的,使我们能够巧妙地避免欺诈证明。

我们迫使区块生产者获取原始交易数据并将其排列在大小为 n x m 的二维矩阵中。它使用多项式插值,将大小为 n 的每列扩展为大小为 2n 的列。该扩展矩阵的每一行都会生成一个多项式承诺,并将这些承诺作为块头的一部分发送。下面给出了该块的示意图。

轻客户端查询此扩展矩阵的任何单元以获得见证,这使其能够立即根据块头对其进行验证。恒定大小的成员资格证明使得采样极其高效。承诺的同态性质确保只有在正确构建块的情况下才能验证证明,并且多项式插值确保恒定数量的成功样本意味着数据有非常高可用概率。

区块的示意图

该方案的更详细信息以及进一步的优化和成本估算不在本文做详细介绍。但是,我们想指出的是,虽然我们在这里讨论二维方案,但一维方案也可以提供类似的保证,一维方案具有较小的块头大小,但代价是提供效率较低额并行性和轻客户端采样。我们将在后续文章中对这一点进行更深入的探讨。

还有哪些其他替代方案?下一步如何计划?

高维纠删码和 KZG 承诺并不是解决 DA 问题的唯一方法。我们在这里跳过了其他方法,例如编码默克尔树编码交错树FRI 和基于 STARK 的方法,但每种方法都有其利弊。

在 Avail,我们一直致力于使用 KZG 承诺开发数据可用性解决方案。在后续的文章中,我们将介绍实现细节、在今天如何使用它以及我们的目标是如何转变 DA 问题空间。有关 Avail 的更多信息,请在 Twitter 上关注我们并加入我们的 Discord 社群

声明:

  1. 本文转载自[Avail Team],著作权归属原作者[Avail Team],如对转载有异议,请联系Gate Learn团队,团队会根据相关流程尽速处理。

  2. 免责声明:本文所表达的观点和意见仅代表作者个人观点,不构成任何投资建议。

  3. 文章其他语言版本由Gate Learn团队翻译, 在未提及[Gate.io]的情况下不得复制、传播或抄袭经翻译文章。

浅析数据可用性问题

新手1/2/2024, 1:53:31 PM
本文深入探讨了数据可用性问题及其如何影响以太坊的可扩展性。

区块链网络中的节点如何确保新提议的区块的所有数据均可用?为什么这一点很重要?

在这篇文章中,我们深入研究了数据可用性问题的细节以及它如何影响以太坊的扩展。

什么是数据可用性问题?

数据可用性(DA)问题:区块链网络中的节点如何确保新提议的区块的所有数据实际上都是可用的?如果数据不可用,则该区块可能包含被区块生产者隐藏的恶意交易。即使该区块包含的是非恶意交易,将它们隐藏也可能会损害系统的安全性。

举个例子,假设 Alice 是 ZK-Rollup (ZKR) 的运营者。她在以太坊上提交了一份经过验证的 ZK 证明。如果她没有提交以太坊上的所有交易数据,即使她的证明证明rollup中采取的所有状态转换都是有效的,但rollup的用户仍然可能对其当前帐户余额一无所知。由于其零知识性质,所提交的证明无法阐明当前状态。

Optimistic Rollup (OPR) 设置中存在类似的示例,其中 Alice 在以太坊上提交声明,但 OPR 的参与者都无法对其提出质疑,因为交易数据不可用,因此他们无法重新计算或质疑该声明。

为了应对上述情况,OPR 和 ZKR 的设计都要求运营者将以太坊上的所有交易详细信息作为“调用数据”提交。虽然这使他们在短期内避免了 DA 问题,但随着rollup内事务数量的增加,需要提交的数据量也会增加,从而限制了这些rollup可以提供的扩展量。

更糟糕的是,数据不可用并不是唯一可归因的错误。这意味着参与者无法向其他同行证明特定数据块丢失。这是因为Bob可以广播Alice提交的区块有缺失数据,但是当Charlie查询Alice时,她可能会向他提供数据。

DA对当今的区块链有何影响?

要回答这个问题,我们需要首先回顾一下类似以太坊的区块链的一般区块结构以及任何区块链网络上存在的客户端类型。

一个区块可以分为两个主要部分:

  • 块头:一个小块头包含与块中包含的交易相关的摘要和元数据。
  • 块体:包含所有交易数据,它构成了块大小的大部分。

在传统的区块链协议中,所有节点都被视为同步整个块并验证所有状态转换的完整节点。他们需要花费大量资源来检查交易的有效性并存储区块。从有利的一面来说,这些节点不能接受任何无效的交易。

可能还有另一类节点没有(或不想花费)资源来验证每笔交易。相反,他们主要想了解区块链的当前状态以及与他们相关的某些交易是否包含在链中。理想情况下,还应该保护这些轻客户端免于跟踪包含无效交易的链。这实际上可以使用所谓的欺诈证明来实现。这些是简洁的消息,表明特定的块体包含无效的交易。任何全节点都可以产生这样的防欺诈,因此轻客户端不必相信特定的全节点是诚实的。他们只需要确保自己与某一个gossip网络保持良好的连接状态,以确保受到区块头的防欺诈证明(若有)。

然而,该系统存在一个问题:如果区块生产者没有透露区块背后的全部数据怎么办?在这种情况下,全节点显然会拒绝该区块,因为在他们看来,如果它不带有块体,那么它甚至就不是一个块。然而,轻客户端可以看到标头链,但无法注意到数据丢失。同时,完整节点无法生成欺诈证明,因为它们会丢失创建欺诈证明所需的数据。

要解决这个问题,我们就需要一种轻客户端验证数据可用性的机制。这将确保隐藏数据的区块生产者无法通过说服轻客户端来逃脱。它还将迫使区块生产者披露部分数据,使整个网络能够以协作方式访问整个区块。

让我们通过一个示例来更深入地研究此问题。假设区块生产者 Alice 用交易 tx1、tx2、…、txn 构建了一个区块 B。假设 tx1 是一笔恶意交易。如果 tx1 被广播,任何全节点都可以验证它是恶意的,并将其发送到轻客户端作为防欺诈,轻客户端会立即知道该块是不可接受的。但是,如果 Alice 想要隐藏 tx1,她会显示块头和除 tx1 之外的所有交易数据。如此,全节点就无法验证tx1的正确性。

人们可能会认为这样一种简单方法可解决此问题:如果所有轻客户端只是随机对交易进行采样,并且如果他们发现样本可用,那么他们就可以确信该块是可用的。让轻节点均匀随机地查询任何一笔交易。轻客户端查询tx1的概率为1/n。因此,Alice 能够以压倒性的概率欺骗轻客户端接受恶意交易。换句话说,大多数轻客户端都会被愚弄。由于不可归属的性质,全节点无法以任何方式证明 tx1 不可用。不幸的是,增加样本数量并不能让情况变得更好。

那么,如何应对该问题呢?

解决这个问题的方法就是在块中引入冗余。关于编码理论,特别是纠删码,存在大量的文献,它们可以帮助我们解决这个问题。

简单来说,纠删码允许我们将任意的 n 块数据扩展为 2n 块数据,使得 2n 中的任意 n 块都足以重建原始数据(参数是可调的,但这里我们考虑为了简单起见使用这个)。

如果我们强制区块生产者对交易 tx1、tx2、…、txn 进行纠删码,那么,要隐藏单个交易,则需要隐藏 n+1 个数据块,因为任何 n 都足以构造整个交易集。在这种情况下,恒定数量的查询使轻客户端高度确信底层数据确实可用。

哇哦,原来就是这个解决方案?

这是行不通的。虽然这个简单的技巧使隐藏企图变得更加困难,但区块生产者仍然有可能故意以错误的方式执行纠删除码。然而,全节点可以验证这种纠删码是否正确完成,如果没有,它可以向轻客户端证明这一点。这是另一种类型的防欺诈,就像上面的恶意交易的情况一样。有趣的是,轻客户端需要有一个诚实的全节点邻节点,才能确定在该块为恶意时将收到防欺诈的信息。这保证了轻客户端能够以非常高的概率访问到没有恶意交易的链。

但是有一个问题!如果简单地完成,一些欺诈证明的大小可能与块本身的大小相同。我们对轻客户端的资源假设禁止我们使用这样的设计。通过使用多维纠删码技术,在这方面已经有了改进,该技术以承诺大小为代价减少了欺诈证明的大小。为了内容的简短起见,此处我们不讨论这些,但您可查看本文对其进行的详细分析。

基于防欺诈的解决方案的问题在于,轻客户端永远无法完全确定尚未收到防欺诈的任何块。此外,他们始终相信其全节点节点是诚实的。诚实的节点还需要受到激励来持续审计区块。

此处,我们着重看这样的系统:它能保证如果块编码无效,全节点可以检测到它并向轻客户端提供证据,以说服他们存在不当行为。但在下一节内容中,我们将研究块编码,它保证只有有效的编码才能提交到链中。这就无需证明编码错误的欺诈证明。这些基于有效性证明的解决方案使应用程序能够使用该系统,而无需等待来自全节点的此类欺诈证明。

那么这些解决方案如何发挥作用呢?

最近,多项式承诺重新点燃了区块链领域的兴趣。这些多项式承诺,特别是对多项式的恒定大小的 KZG/Kate 承诺,可以用来设计一个简洁的 DA 方案,而不需要欺诈证明。简而言之,KZG 承诺允许我们使用单个椭圆曲线群元素来承诺多项式。此外,该方案支持我们证明在某个点 i,多项式 φ 使用恒定大小的见证计算为 φ(i)。承诺方案具有计算约束力并且是同态的,使我们能够巧妙地避免欺诈证明。

我们迫使区块生产者获取原始交易数据并将其排列在大小为 n x m 的二维矩阵中。它使用多项式插值,将大小为 n 的每列扩展为大小为 2n 的列。该扩展矩阵的每一行都会生成一个多项式承诺,并将这些承诺作为块头的一部分发送。下面给出了该块的示意图。

轻客户端查询此扩展矩阵的任何单元以获得见证,这使其能够立即根据块头对其进行验证。恒定大小的成员资格证明使得采样极其高效。承诺的同态性质确保只有在正确构建块的情况下才能验证证明,并且多项式插值确保恒定数量的成功样本意味着数据有非常高可用概率。

区块的示意图

该方案的更详细信息以及进一步的优化和成本估算不在本文做详细介绍。但是,我们想指出的是,虽然我们在这里讨论二维方案,但一维方案也可以提供类似的保证,一维方案具有较小的块头大小,但代价是提供效率较低额并行性和轻客户端采样。我们将在后续文章中对这一点进行更深入的探讨。

还有哪些其他替代方案?下一步如何计划?

高维纠删码和 KZG 承诺并不是解决 DA 问题的唯一方法。我们在这里跳过了其他方法,例如编码默克尔树编码交错树FRI 和基于 STARK 的方法,但每种方法都有其利弊。

在 Avail,我们一直致力于使用 KZG 承诺开发数据可用性解决方案。在后续的文章中,我们将介绍实现细节、在今天如何使用它以及我们的目标是如何转变 DA 问题空间。有关 Avail 的更多信息,请在 Twitter 上关注我们并加入我们的 Discord 社群

声明:

  1. 本文转载自[Avail Team],著作权归属原作者[Avail Team],如对转载有异议,请联系Gate Learn团队,团队会根据相关流程尽速处理。

  2. 免责声明:本文所表达的观点和意见仅代表作者个人观点,不构成任何投资建议。

  3. 文章其他语言版本由Gate Learn团队翻译, 在未提及[Gate.io]的情况下不得复制、传播或抄袭经翻译文章。

เริ่มตอนนี้
สมัครและรับรางวัล
$100