零点课堂 | 数据可用性问题对以太坊的影响(1)

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

什么是数据可用性问题?

数据可用性(DA)问题:区块链网络中的节点如何确保新提议区块的所有数据实际上是可用的?如果数据不可用,则该块可能包含被块生产者隐藏的恶意交易。

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

Optimistic Rollup (OPR) 设置中有一个类似的例子,Alice 在以太坊上提交了一个断言,但 OPR 的任何参与者都不能挑战它,因为交易数据不可用,因此他们无法重新计算或挑战该断言 .

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

这对如今的区块链有何影响?

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

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

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

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

可能还有另一类节点没有(或不想花费)资源来验证每笔交易。相反,他们主要对了解区块链的当前状态以及与他们相关的某些交易是否包含在链中感兴趣。这些轻客户端依靠全节点来检查所有交易是否有效。因此,在安全性方面,它们依赖于可信的全节点。

但是如果区块生产者没有透露区块背后的全部数据呢?这可以防止全节点验证所有交易。这反过来又阻止了轻节点绝对确定它所看到的由所有合法交易支持的区块头。

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

让我们借助一个例子更深入地探讨这个问题。假设区块生产者 Alice 用交易 tx1、tx2、……、txn 构造了一个区块 B。让我们假设 tx1 是恶意交易。如果 tx1 被广播,任何完整节点都可以验证它是恶意的,并将其发送给轻客户端,轻客户端会立即知道该块是不可接受的。但是,如果 Alice 想隐藏 tx1,她会显示标头和除 tx1 之外的所有交易数据。全节点无法验证 tx1 的正确性。让轻节点查询任意一笔交易,均匀随机。轻客户端查询 tx1 的概率为 1n。因此,Alice 能够以压倒性的可能性欺骗轻客户端接受恶意交易。由于不可归因的性质,全节点无法以任何方式证明 tx1 不可用。

那么,我们该怎么办呢?

该问题的解决方案在于在块中引入冗余。总的来说,有大量关于编码理论的文献,特别是擦除编码,可以帮助我们解决这个问题。

简而言之,纠删码允许我们将任何 n 个数据块扩展为 2 个数据块,其中 2n 个数据块中的任何一个都足以重建原始数据块(参数是可调的,但为了简单起见,我们在这里考虑了这一点)。

如果我们强制区块生产者擦除交易 tx1、tx2、...、txn 的代码,然后隐藏单个交易,则需要隐藏 n+1 个交易,因为任何足以构建整个交易集的交易。在这种情况下,恒定数量的查询使轻客户端足以确信底层数据确实可用。

 

声明:本文由 Polygon撰写,零点财经收录,观点仅代表作者本人,绝不代表零点财经赞同其观点或证实其描述。

本文由 零点财经 作者:tao 发表,其版权均为 零点财经 所有,文章内容系作者个人观点,不代表 零点财经 对观点赞同或支持。如需转载,请注明文章来源。
分享生成图片
75

发表回复

零点课堂 | 数据可用性问题对以太坊的影响(1)

2021-07-01 14:27:35

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

什么是数据可用性问题?

数据可用性(DA)问题:区块链网络中的节点如何确保新提议区块的所有数据实际上是可用的?如果数据不可用,则该块可能包含被块生产者隐藏的恶意交易。

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

Optimistic Rollup (OPR) 设置中有一个类似的例子,Alice 在以太坊上提交了一个断言,但 OPR 的任何参与者都不能挑战它,因为交易数据不可用,因此他们无法重新计算或挑战该断言 .

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

这对如今的区块链有何影响?

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

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

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

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

可能还有另一类节点没有(或不想花费)资源来验证每笔交易。相反,他们主要对了解区块链的当前状态以及与他们相关的某些交易是否包含在链中感兴趣。这些轻客户端依靠全节点来检查所有交易是否有效。因此,在安全性方面,它们依赖于可信的全节点。

但是如果区块生产者没有透露区块背后的全部数据呢?这可以防止全节点验证所有交易。这反过来又阻止了轻节点绝对确定它所看到的由所有合法交易支持的区块头。

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

让我们借助一个例子更深入地探讨这个问题。假设区块生产者 Alice 用交易 tx1、tx2、……、txn 构造了一个区块 B。让我们假设 tx1 是恶意交易。如果 tx1 被广播,任何完整节点都可以验证它是恶意的,并将其发送给轻客户端,轻客户端会立即知道该块是不可接受的。但是,如果 Alice 想隐藏 tx1,她会显示标头和除 tx1 之外的所有交易数据。全节点无法验证 tx1 的正确性。让轻节点查询任意一笔交易,均匀随机。轻客户端查询 tx1 的概率为 1n。因此,Alice 能够以压倒性的可能性欺骗轻客户端接受恶意交易。由于不可归因的性质,全节点无法以任何方式证明 tx1 不可用。

那么,我们该怎么办呢?

该问题的解决方案在于在块中引入冗余。总的来说,有大量关于编码理论的文献,特别是擦除编码,可以帮助我们解决这个问题。

简而言之,纠删码允许我们将任何 n 个数据块扩展为 2 个数据块,其中 2n 个数据块中的任何一个都足以重建原始数据块(参数是可调的,但为了简单起见,我们在这里考虑了这一点)。

如果我们强制区块生产者擦除交易 tx1、tx2、...、txn 的代码,然后隐藏单个交易,则需要隐藏 n+1 个交易,因为任何足以构建整个交易集的交易。在这种情况下,恒定数量的查询使轻客户端足以确信底层数据确实可用。

 

声明:本文由 Polygon撰写,零点财经收录,观点仅代表作者本人,绝不代表零点财经赞同其观点或证实其描述。