零点课堂 | 什么是“数据可得性?”(1)
“数据可得性(data availability)”和“数据可得性问题”指的是一些区块链扩容方案所面临一个问题。具体来说,就是当新的区块创建时,节点如何确保该区块中的所有数据都已发布到网络上?困难之处在于,如果区块生产者没有公布区块中的所有数据,就没人能发现该区块中是否隐藏了恶意交易。
区块链节点是如何运行的?
区块链上的每个区块都由两部分组成:
区块头,即,区块的元数据,由一些关于区块内容的基本信息组成,包括交易的默克尔根。交易数据,即,区块的主要组成部分,由实际的交易数据组成。
区块链网络中主要有两类节点:
全节点(又称完全验证节点)。这类节点会下载区块链中的每笔交易并验证其有效性。这需要消耗大量资源和数百 GB 的磁盘空间,但是这些节点的安全性最高,因为它们不会接受包含无效交易的区块。轻客户端。如果你的计算机没有足够的资源来运行全节点,你可以运行轻客户端。轻客户端不需要下载或验证任何交易。它们只下载区块头,并认定区块中包含的交易都是有效的。因此,轻客户端的安全性低于全节点。
幸运的是,有一种方法可以让轻客户端间接检查区块中的所有交易是否有效。轻客户端可以依赖全节点向其发送关于无效交易的 欺诈证明,无需自己检查交易的有效性。欺诈证明是一个很小的证明,可以证明区块中的某个交易是无效的。关于欺诈证明的运作原理,本文不做具体介绍,请阅读这篇文章。
这里只有一个问题:全节点如果要为某个区块生成欺诈证明,需要知道该区块的交易数据。如果区块生产者只公布区块头,没有公布交易数据的话,全节点就无法验证交易的有效性,并针对无效交易生成欺诈证明了。这就要求区块生产者公布区块的所有数据,但是我们需要找到一种方法来强制实行。
为了解决这个问题,轻客户端需要找到某种方法来检查区块的交易数据是否真的发布到了网络上,以便全节点进行验证。然而,我们又要避免让轻客户端下载整个区块,因为这会使得轻客户端丧失存在的意义。
我们该如何解决这一问题?首先,我们先来讨论数据可得性问题的相关性,以及如何采取解决措施。
数据可得性问题与哪些方案有关
增加区块大小
在比特币等区块链中,绝大部分一般的手提电脑都能运行全节点并验证整条链,因为存在人为规定的区块大小上限,来防止区块链变得过大。
分片
提高区块链吞吐量的一种方法是,将区块链分成多条链,即,分片。这些分片都有自己的区块生产者,而且可以相互通信,以便在分片之间转移代币。分片的意义在于,将网络中的区块生产者分组,这样就不需要每个区块生产者处理每个交易,只需将他们分散到不同的分片上即可。每个分片只需处理部分交易。
通常来说,在分片式区块链上,验证者只需要为一个或少数几个分片运行全节点,并为其它分片运行轻客户端。毕竟,如果每个验证者都要为每个分片运行一个全节点,就无法实现分片的目的 —— 将网络的开销分割给不同节点。然而,这种方法本身存在缺陷。如果分片上的区块生产者作恶,开始接受无效交易怎么办?相比非分片式系统,分片式系统更有可能发生这种情况,因为后者的每个分片上只有少量区块生产者,攻击起来更容易。请记住,区块生产者会被不断分配到不同的分片上。
为便于察觉是否存在分片接受无效交易的情况,我们必须确保分片中的所有数据都是公开可得的,以便使用欺诈证明来证明所有无效交易。
本文由旖旖撰写,零点财经收录,观点仅代表作者本人,绝不代表零点财经赞同其观点或证实其描述。