随着时间的推移,模块化区块链可能会在性能和成本方面更好地满足人们的期望,并反过来引导其他公链拥抱模块化。
原文标题:《How the Data Availability Layer can Shape the Future of Blockchain》
撰文:Huobi Research
编译:Evelyn,W3.Hitchhiker
摘要
随着区块链生态系统的发展,使用 Ethereum 的成本一直居高不下。扩容解决方案,Rollup,需要将压缩的交易数据上传到 Ethereum 主网,以获得数据可用性(DA),这导致链上存储成本仍然高于理想水平。为了满足 Rollup 数据可用性和降低成本的需求,已经有人试图建立一个独立的 DA 网络。
DA 网络在 Ethereum 验证者和自己的全节点的监督下,确保 Rollup 的交易数据与它的网络中的数据一致。它还通过轻节点采样验证确认这些数据在其网络中发布,并使用数据可用性证明来说服以太坊相信 DA 网络已经存储和发布了这些数据。
虽然 DA 层在短期内会同 EIP-4488 和 EIP-4844 竞争,但由于其强大的可扩展性,它的普及和产生相对稳定的现金流的能力在长期看来是可行的。
从更广泛的角度来看,数据可用性层是区块链模块化进程中的最新一步,它形成了「共识层 – 执行层 – 数据可用性层 」相互分离的结构。由于区块链的三难问题,在保证高度去中心化和安全的前提下,提高可扩展性的最佳方式是减少主网的任务,接入额外的执行层,然后再接入独立的 DA 层。
这样做的好处是,通过分工,使整体的性能大于各部分的总和。随着时间的推移,模块化区块链可能会在性能和成本方面更好地满足人们的期望,并反过来引导其他公链拥抱模块化。
1 什么是数据可用性?
1.1 数据可用性的定义和含义
随着区块链生态系统(尤其是以太坊)在过去两年中变得更加发达,对于一个交易量在不断增加的网络来说,扩容已经成为一个十分关键的优先事项。扩容的一种方法是链下扩容,这意味着其他情况下,计算是在链下进行的,只有链下的状态根和其他必要的信息才会同步到链上。由于大量的计算是在链下进行的,它减少了以太坊主网的工作量,实现了在同一时间处理更多交易的目标。最受欢迎的解决方案是 Rollup,它是最有希望实现链下扩展的方案,它涉及到将压缩的交易数据上传到主网,以确保其状态可以得到以太坊网络的保护,并增强安全性。
随着 Rollups 规模的增长,需要上传的数据量也在同步上升。一方面,这增加了以太坊的负担,而另一方面,它也提高了 Rollups 的成本。为了降低 Rollups 的成本和 Ethereum 的压力,一个新的想法是创建一个独立的网络,以较低的成本专门存储 Rollup 的交易数据。确保交易数据发布到这个网络上,同时允许以太坊轻松访问,这就引出了本文的主题:数据可用性问题。
数据可用性是指节点对区块链网络中交易数据进行查看和下载的需求。它要求在一定时间段内产生的所有交易数据都能被整个网络获取并见证。反之,它意味着不存在已经执行但没有公布的交易数据。数据可用性的问题适用于节点如何监控新区块的生成,以确保该区块的所有数据都被发布到网络上,并且区块生成者没有隐藏或歪曲信息。
数据可用性最初并不是一个问题,因为在区块链网络中,数据是自然可用的。只是在扩容跨越了一定的门槛之后,数据可用性才成为一个不可避免的话题。只有确保所有交易数据可以被访问和下载,以太坊才能跟踪和重建 Rollup 上的状态,也只有这样,才有可能将 Rollup 的交易数据存储在一个独立的数据网络中,降低 Rollup 的存储成本,进一步促进扩容。
此外,数据的可用性与 Rollup 的安全性密不可分。在数据遗漏和记录不规范的情况下,从 Ethereum 的角度看,Rollup 的状态将无法辨别。在这种情况下,鉴于 Rollup 有可能不能完全继承 Ethereum 的安全设置,尽管性能良好,但用户会对 layer 2 保持警惕。
1.2 数据可用性与存储的区别
数据可用性涉及到数据的存储和检索,但这个问题与存储不一样,两者的重点领域不同。存储需要在较长的时间内保持数据随时可供检索,在此期间,数据是有意义的。数据可用性需要确保主区块链网络产生的最新交易数据被发布到网络上(可能是自己的网络以外的网络),并易于访问。
这里的存储是指存储区块链本身和链上应用产生的数据,不包括额外的数据,如存储来自其他地方的图像、文件等。只有当这两个任务由不同的网络分别承担时,存储和数据可用性之间的区别和联系才值得讨论。如果一个主网络要完成计算、存储和数据可用性验证的所有任务,那么这个话题就显得多余了。
一般的存储不适合 DA 网络,因为存储的对象往往是大文件,而在每个以太坊区块区间内获得所有 Rollups 的数据可用性所需的数据量往往甚至小于 2MB。DA 网络可以设计成非常精细的数据采样验证和检索过程,但存储网络不能这样设计,否则处理大量的数据就不可行了。
以太坊是一个状态机,交易驱动状态变化。换句话说,无数的交易塑造了当前的状态。每当一个状态被改变和确认,新的状态本质上就包含了以前的交易,这些交易被认为已经完成了它们的历史使命。只有在需要追溯时才有必要访问其数据。
数据可用性是存储的先决条件。只有在网络中完全公布并经过验证的交易数据才能支持执行,从而推动状态变化,使其值得存储。存储是数据可用性的支柱,DA 网络本身会产生大量的数据,这些数据可以存在于一个独立的存储网络中,便于 DA 节点减轻负荷,减少操作负担。
2 数据可用性的发展和实施路径
数据可用性最初被包含在区块链网络中,然后逐渐从一体机(all-in-one)网络中分离出来。现在,一个独立的 DA 层即将出现。下一节将探讨数据可用性的演变,并评估当前代表性项目如何实现数据可用性层。
2.1 逐步分离数据可用性
先回忆一下这里的原则。区块链网络中有 2 种类型的节点,全节点和轻节点。全节点存储区块的所有内容,包括区块头和交易数据。他们通过验证、包装交易和竞争出块权(block-out rights)来参与区块的生产。轻节点只接受区块头,但不存储交易数据或参与区块生成。当轻节点需要使用交易数据时,它们会向全节点请求数据。以下是对数据可用性演变的逐步解释。
在第一阶段,从比特币网络开始(包括以太坊和其他公链网络),数据的可用性被自然地嵌入到网络中。全节点随着时间的推移而收集和验证交易数据,并对交易进行良好的分类和打包,然后以某种方式竞争性地获得出块权,将打包好的交易数据放入区块,并向整个网络发布。其他全节点需要验证交易数据是否正确,以及该节点是否有权利出块。如果验证成功,它就会改变自己的账本并执行交易。在这种模式下,执行交易、发布和保存交易数据都是由全节点完成的,可以执行的交易被发布,并且必须让网络中的所有节点都能访问。
在第二阶段,以 Plasma 技术为代表,数据可用性被移交给链下运营商,而以太坊本身并不存储 Plasma 用户的交易数据。这是第一次将数据可用性与主网络分离的尝试。Plasma 将数据可用性置于以太坊之外。为了实现无需信任,确保用户可以顺利地从 Plasma 取钱,或者解决争端,用户需要存储一部分自己的数据,以证明他们的交易行为和资产所有权。现在回想起来,这种设计使用起来太不方便了。同样,由于 Plasma 上的提款有 1 周的挑战期,而且用户体验和资金周转率都很差,所以它没有成为主流技术。
在第三阶段,以 Rollup 技术为代表,数据可用性回到以太坊。Rollup 在链下执行交易,并在压缩后将交易数据上传到以太坊的 calldata。Calldata 是 EVM 中一个只可读且不可修改的区域,存储了所有传入函数的执行数据,包括函数参数。这样的设计让 Rollup 继承了以太坊的安全性,实现了链下扩容的效果,使 Rollup 成为 layer 2 扩容的主流技术。 除了 Rollup,这个阶段还有一项技术叫 Validium,可以看作是第三阶段向第四阶段的过渡。它在其他方面与 ZK Rollup 相似,不同之处在于将交易数据存储在由多个机构组成的链下数据可用性委员会(DAC)。这种设计是将数据可用性从以太坊中分离出来的另一种尝试,其好处是减少存储在以太坊中的数据量,从而减少成本。缺点是,它引入了信任假设,用户必须相信 DAC 中至少有一个诚实的机构存在。
第四阶段,以 Celestia 和 Polygon Avail 为代表,看到数据可用性再次从以太坊中分离出来。他们试图在自己的网络上存储和发布 Rollup 本来会上传到以太坊的交易数据,并组织节点来验证这些数据是否完全发布在网络上。他们的目标是成为一个独立的数据可用性层(DA 层),这可以被视为 DAC 的高级版本。
2.2 如何实现独立的数据可用性层
Celestia 和 Polygon Avail 的想法大致相同,所以我们先以 Celestia 为例来说明整体思路。
实现一个独立的数据可用性层需要 3 个主要步骤:Rollup 将所有交易数据传递给 Celestia,Celestia 在其网络上发布所有这些数据,以太坊确认 Celestia 已经存储和发布了这些数据,并且可以随时访问这些数据。
2.2.1 如何确保 Rollup 的交易数据被如实上传到 Celestia
两个目标之间存在着一致性:Rollup 需要通过更便宜的网络获得数据可用性,而 Celestia 则需要通过托管 Rollup 的交易数据获得收入。Rollup 如实提供数据和 Celestia 如实发布和验证数据对双方都有利。从经济利益的角度来看,他们会诚实经营,除非他们不想要保证金了。
那么,有没有一种技术方法能够避免弊端呢?
如果 Rollup 将所有数据交给 Celestia,但后者不在其网络上公布,它需要依靠网络中至少一个诚实的全节点提供欺诈证明来揭露它,这将在后面讨论。这里有一个 「1/N 」的信任假设,但这是一个弱信任假设,相对容易实现。如果你完全不愿意信任网络,Rollup 可以自己作为一个全节点并监控网络的状态。
如果 Rollup 没有给 Celestia 正确的交易数据,Celestia 仍然会把这个数据发布到 DA 网络上。以太坊上的验证者可以请求这个交易数据,并将通过它计算出来的状态根与 Rollup 上传到主网的状态根进行比较,揭露欺诈行为并获得奖励。如果是 OP Rollup 被挑战,它也需要发布一个欺诈证明,与挑战者进行比较。这确保了在 Rollup 上执行交易的数据和交付给 Celestia 的数据是来自同一批次。
证明欺诈的总体思路是显示状态根,包括起点、终点、中间状态和促使状态改变的交易。第三方仲裁者必须在场,从某个状态执行某个或某些交易,并将计算出的状态根与之前公布的状态根进行比较。两者之间的任何不一致都表明运营商有欺诈行为。
2.2.2 如何验证 Celestia 的全节点是否发布了数据
在全节点接受了交易数据后,下一步就是验证它是否在网络上发布了所有这些数据。根据一般的想法,应该由 Celestia 网络中的其他全节点进行验证。随着需要验证的数据量的增加,这增加了全节点的存储和计算能力,这也需要更先进的硬件设备,加剧了网络的中心化。
Celestia 的想法是让许多轻节点来分担这一任务。通过把一批数据分成几块,每个轻节点只需要下载少量的数据,就能以极高的概率验证这块数据是否可用。这样一来,轻节点的力量被调动起来,共同维护数据可用性网络。此外,由于每个轻节点只需要验证少量的数据,那么轻节点的数量越大,可以验证并成为网络可用的数据就越多。当然,这也需要网络上有足够数量的轻节点,否则将因缺乏样本而无法完成验证。
轻节点验证数据可用性的步骤如下:
1、将交易数据扩展为纠删码。Celestia 全节点将交易按顺序排列成数据 Merkle 树,每个叶子节点称为一个份额,假设有 k 个份额。Celestia 将把这些数据扩展为二维 Reed-Solomon 纠删码,变成一个有 2k 行和列的扩展矩阵。纠删码(Erasure Code)是一种数据保护方法,它将数据分割成片段,把冗余的数据块扩展,编码,并将其存储在不同的位置。这个扩展矩阵不仅包括交易数据,还包括由这些数据产生的奇偶校验数据。二维纠删码有一个重要的特性:只需要任何 (k+1)2 个元素就能恢复包含 (2k)2 个元素的扩展矩阵。纠删码被存储在区块体中。
2、计算扩展矩阵的行 / 列根和数据根。全节点为这个扩展矩阵的每一行和每一列计算一个 Merkle 根,这里称为行 / 列根,之后为所有行 / 列根计算几个总 Merkle 根,称为数据根。数据根和所有的行根和列根都需要上传到 Celestia 区块的块头中。
3、轻节点整体验证。在收到块头后,Celestia 的轻节点首先使用行 / 列根计算 Merkle 根,并将其与块头中包含的数据根进行比较。如果不匹配,它直接确定数据无效;如果同意,它就进入下一步。
4、轻节点用采样的方式进行本地验证。轻节点在扩展矩阵中随机选择一些份额,例如,第 3 行和第 5 列的数据,并向全节点请求这些份额(share)的数据。全节点发送这些数据,同时还要证明这个份额属于第 3 行或第 5 列的 Merkle 树,即它可以提供一个路径,通过这个路径可以计算出这个行或列的 Merkle 根。在轻节点计算并与区块头中包含的行根和列根进行比较后,若匹配则意味着采样的交易数据是可用的。如果全节点只公布了区块头而没有公布交易数据,那么通过这一步就可以很容易地进行验证。在让所有 (k+1)2 份额验证成功后,可以判断整个扩展矩阵是有效的。
5、广播验证信息。轻节点采样验证后,它告诉与之相连的全节点它所采样的份额和通过验证的行 / 列根。全节点也将此信息广播给所有全节点。这就是网络上的信息共享过程。一旦有足够多的轻节点完成了多次采样,网络上就会形成一个关于特定区块中交易数据可用性的共识。
纠删码已经包含了所有的交易数据,这些数据被储存在 Celestia 区块链中。正如我们将在后面解释的那样,这个数据量并没有使 Celestia 变得臃肿。
纠删码和这套复杂的流程不是让轻节点组直接验证原始数据,而是设计成即使在网络故障的情况下,如所有节点大规模故障,甚至许多轻节点瘫痪,多个轻节点保存的零散数据也可以从扩展矩阵中恢复,以确保交易数据仍然可以被访问。
另一个原因是,由于纠删码可以通过部分数据来恢复完整的数据,所以一个全节点仅仅隐藏一个份额是无法掩盖数据的。如果全节点真的有恶意,它必须隐藏 (k+1)2 个份额,这将导致矩阵的实质性变化,只需几个样本就能被轻节点发现。
如果某个全节点故意发出错误的纠删码,只需要一个诚实的全节点站出来,发出欺诈证明,指出应该根据证明中的数据计算出另一个数据根。它还需要重新发布一个正确的区块,并重复上述过程来重新验证它。
2.2.3 以太坊如何验证数据可用性
在 Celestia 网络内,就存储在区块中的数据可用性达成共识后,Celestia 要求官方法定节点(a quorum of nodes)共同签署数据根(交易数据的 Merkle 根)以生成数据可用性证明,表明他们已经在网络上存储并发布了这批数据。部署在以太坊主网上的量子引力桥合约会验证节点的签名,如果通过,数据就被认为在 Celestia 上可用。
因为单独的数据可用性层是为了减少上传到以太坊主网的数据而设置的,所以以太坊不需要直接验证数据可用性,而更像是一个最高裁决者,验证 DA 层是否完成了它的工作。
如果 Ethereum 需要调用数据,它可以从 Celestia 网络中请求,在那里所有节点都有 Rollup 的交易数据,Ethereum 可以很容易地访问。
2.2.4 Polygon Avail 的设计方法
Avail 的思路与 Celestia 基本相同,不同之处在于如何生成扩展矩阵以及轻节点如何验证数据。
Avail 将数据组织成 n 行 m 列的矩阵后,为每一行构造一个多项式,然后为每个多项式计算一个 KZG 多项式承诺,最后将多项式和承诺都展开成 2n 行,并将这批承诺存储在区块头中。当轻节点被采样验证时,某项承诺与原始信息(即交易数据)之间的对应关系得到验证,就可以知道全节点是否发布了相应的数据。根据 KZG 多项式承诺的性质,轻节点只需要接受一个由原始数据生成的多项式和一个简短的证明就可以完成验证,而不需要下载原始数据。如果一个轻节点采样的多个数据块刚好在同一行,它只需要接受一个多项式承诺,这就减轻了轻节点的带宽要求。此外,由于承诺是绑定的,即一旦计算完成就不能改变,全节点不能篡改原始数据,从而保证了验证的有效性。
Avail 和 Celestia 都有其优势和劣势。Celestia 实现起来比较简单,但由于其纠删码和轻节点采样数据的规模较大,因此需要的通信带宽略高。Avail 涉及相对复杂的加密实现,难度稍大。它的优点是纠删码规模小,轻节点采样数据量小,带宽要求低。两者都还没有测试网络上线,技术上还有发展空间,所以我们需要等待测试更新。在这条赛道上可能还有其他竞争者,而成功属于能够以较低的成本存储和验证交易数据的项目——这体现在访问它的 Rollup 用户的低成本,以及 DA 网络节点的低运行成本。
2.3 独立的数据可用性层的两个竞争对手
为了降低 Rollups 的成本,缓解 Ethereum 的压力,一个独立的数据可用性层正在孵化。反过来说,以太坊本身也在不断发展,出现了两个能解决这个问题的 EIP 提案:EIP-4488 和 EIP-4844。那么,它们会对数据可用性产生什么影响?
EIP-4488 提议将 calldata 的 Gas 消耗量从每字节 16 减少到 3,这将使 Rollup 的链上存储成本立即下降到原来的 20%。为了防止区块空间的上限增加太多,把以太坊 p2p 网络层推到前所未有的压力水平,这个提案还设计了一个 calldata 占用的上限,大约为 1.4MB。
EIP-4488 可以立即降低 Rollups 的成本,这使目前需要的变化最小化。但 Rollups 会继续增长,而且不可能无限期地增加 calldata 的空间,因为这会给以太坊网络带来安全风险。这也决定了它是一个短期的权宜之计。
EIP-4844 建议引入一种新的交易格式,称为 「blob 携带交易(blob-carrying transactions,blob: binary large objects)」。blob 包含大量的数据,成本比 calldata 低得多。EVM 不访问这些数据,只关心这些数据的承诺。验证一个 blob 只需要验证其可用性。这种交易格式与未来的全分片交易格式完全兼容。blob 存储在信标链上,其中存储数据和交易所用的 gas 是单独计算上限和定价的。
EIP-4844 是一个积极的过渡计划,它也是由以太坊主网提供的数据可用性。然而,它不能简单地等同于现有的计划。blob 是一个独立的数据可用性层的原型,在技术上和经济上都为独立的 DA 空间做了准备。当全分片实现后,blob 可以迁移到分片链上,这时需要对信标链做一些改动,但 Rollups 需要的改动很小。可以说,分片之后,以太坊将实现自己相对独立的数据可用性层,类似于 Celestia 和 Avail。
毫无疑问,这两个提案都降低了 Rollups 的成本,都可能使其他数据可用层项目显得成本优势不大,导致采用率低。尤其是 EIP-4488,它没有很多新的技术要求,易于实施,也可能抢占先机。这样看来,独立的 DA 层在短期内可能面临比较大的压力。当数据分片尚未实现时,由于网络的可扩展性更强,DA 层可能会承载更多的数据,吸引一部分 Rollups 使用它来接收数据的可用性。
2.4 数据可用性层的经济模型和市场潜力
由于 Celestia 和 Avail 都还处于相对早期的阶段,协议的经济模型还没有公布,包括奖惩机制、协议如何盈利、是否发行代币以及如何分配。
在此,我们对奖励和惩罚机制以及盈利模式进行了猜测。
DA 层网络中的全节点需要抵押一些资产作为保证金。如果一个全节点故意不公布完整的交易数据,那么它的保证金会被罚没。同时,这部分资产也可以作为参与共识的筹码,押注资产数量多的节点有更大的概率获得出块权力,并得到一定的奖励和手续费收入。
轻节点不被质押,不参与手续费收入分成。这样一来,轻节点的数量会更少,而每个轻节点采样的数据量也会稍大。轻节点可能主要由访问 Rollup 或在其上运行的 dApp 组成,它们是直接的利益方,有动力去验证 DA 网络。轻节点抵押少量的资产也是可以接受的。如果采样完成得好,他们参与手续费收入和奖励分成,如果多次采样的质量没有得到验证,则罚没押金。由于轻节点数量众多,奖励需要定期积累和分配,以减少网络压力。
如果数据可用性层被认为是数据的临时存储库,那么网络中所有的节点(全节点和轻节点)应该为数据存储付费。以太坊 calldata 的成本是 DA 层收入的上限。
另外,由于大量的数据被存储在 DA 层中,这会给区块链网络带来严重的负担。全节点可能需要定期将一些长存的数据转移到其他存储平台,并指示存储平台在一段时间后删除数据。这可能会产生一些成本。这个成本相对容易估计,Vitalik 曾经在一篇文章中估计,EIP-4488⁄4844 的实现每年会给以太坊增加约 2.5TB 的数据。假设这些数据需要保存 1 年,按照目前主流云存储的价格,全节点每年存储这些数据的成本不到 50 美元,这些成本几乎可以忽略不计。即使 DA 层完全接管了以太坊 calldata 的任务,甚至存储更多的数据,这个成本仍然很低。因此,如果不考虑网络运行的其他成本,DA 网络的利润率主要取决于它能提供多少数据。
因为从长远来看,每单位存储空间的收入似乎不会有太大变化,所以 DA 层必须增加销售,以提高收入,这意味着要吸引更多的 Rollups 到网络里来。在这里,项目组的业务发展能力非常关键,这也是谁能成功的关键因素。
最后,估计一下 DA 层作为一个整体每年能产生多少收入。下表是根据公开数据对 Rollup 的存储成本做的粗略估计。以太坊目前每天在整个网络中消耗 100G gas,其中每天有 1G 用于 layer 2 来上传证明和解决争端。由于 Rollup 已经成为 layer2 的主流技术,这个数据可以直接用在这里。Calldata 消耗了多少 gas 很难估计,本文假设其消耗的 Gas 是证明 / 解决争端的 5 倍。假设一年中 ETH 的平均价格为 2500 美元,Gas 的平均价格为 80 Gwei,计算出每天 Rollup 的 DA 成本约为 100 万美元。如果在实现 EIP-4488 后,calldata 的单位 Gas 消耗量变为原来的 1/5,由于成本较低,将会吸引更多的用户使用 Rollups。假设证明和解决争端的 Gas 消耗量增加一倍,根据比例关系计算,Rollup 每天的 DA 成本仍为 40 万美元左右,一年下来可能有 1.46 亿美元的市场。这是一个由以太坊和 DA 层共享的市场,如果 DA 层的价格比以太坊略微有利,假设它得到一半的份额,它每年可以产生大约 5000 万美元的相对稳定的现金流。这都是基于 Rollups 仍处于相对早期的事实而做出的保守估计。
如果 Rollup 实现更大的增长,成为真正「以 Rollup 为中心」的局面,Rollup 在以太坊上的证明上传和争端解决所消耗的 Gas 可能达到每天 10G。换句话说,这意味着以太坊网络 10% 的 gas 被 Rollup 的证明 / 争端所消耗,这是完全可能的。由于技术进步,Rollup 将使用更先进的方法来减少证明的 gas 消耗量,假设减少到 50%,那么 calldata 的 gas 消耗量需要变成原来增长比例的两倍。此外,ETH 的价格也将上升,假设平均价格在 3500U,gas 费用保持在 80Gwei。估计 DA 层的消费可以达到每年 20 亿美元。此外,如果其他区块链也开发 Rollup 技术,DA 层也可以为这些链服务,进一步增加收入。
以上估计非常粗略,只提供了一个视觉参考。
3 区块链的数据可用性和模块化
3.1 区块链正在模块化
纵观数据可用性与主网络逐步分离的历程,我们还可以发现另一个趋势,那就是区块链的模块化。这是一个更大的长期趋势,而独立的 DA 层是这个最新浪潮长期趋势的一部分。
区块链诞生之初,网络是单片的,它承担了共识、计算、结算、数据存储等所有任务。当时,链上生态刚刚起步,区块链的处理能力大于需求,成本也不高。
计算层或执行层是与区块链分离的第一个模块。随着区块链生态系统的发展,使用区块链的成本越来越高,因此,出现了扩容解决方案。链下扩容包含各种技术路线,其理念是将计算与结算分离。将计算移到链下,不必在区块链上重新计算 n 次,并且可以节省区块链的计算资源,从而使费用减少。虽然在链下完成计算也能实现结算功能,但最后的结算必须由区块链主网来完成。
数据可用性层是与区块链分离的第二个模块。目前链下扩容仍无法将使用成本降低到公众满意的程度,原因之一是数据可用性仍需要消耗区块链上的宝贵存储资源。设置独立的 DA 层可以大大减少这种资源消耗,也可以进一步降低链上应用的使用成本,吸引更多用户参与。以太坊的数据分片也是一种模块化的 DA 层,实现了同样的功能。
将以上两部分分开,区块链主网络唯一需要承担的就是共识。主网需要对执行的结果和执行的依据,也就是数据的可用性达成共识。当然,结算功能也包含在共识模块中,因为共识中最重要的部分是网络应该同意什么样的结算结果。至此,一个「共识 – 执行 – 数据可用性」的结构就形成了,这个结构是相互独立的。
3.2 模块化是区块链的自然结果
区块链三难问题告诉我们,区块链有三个基本属性:去中心化、安全和可扩展性,由于技术上的限制,只能同时优化其中的两个属性,剩下的一个必须要牺牲掉。以太坊选择了高度去中心化和安全,所以可扩展性成为要妥协的属性。
去中心化是区块链的核心所在。正是因为去中心化的特性,区块链上的任何机构都没有权力任意修改或消除用户的资产;链上资产是有价值的,为这些资产产生的代币发行、资产交换、借贷等是有意义的。如果没有其去中心化的属性,区块链可能可以说是不需要存在的。而安全又是分布式系统的命脉,所以去中心化和安全应该是这个三难问题中需要优先考虑的两点。
确保去中心化需要许多节点达成共识,每个全节点执行相同的操作和备份相同的数据。但这是一个非常低效的过程,导致了低吞吐量和高交易费用。在这种情况下,提高可扩展性的方法是减少主网需要执行的任务,让其他模块承担更多的任务 —— 因此,出现了模块化。
模块化渴望通过分工使整体比各部分的简单总和更有能力,这符合事物发展的一般经验法则。分开的 Rollup 和 DA 网络可以分别专注于执行和数据的可用性,并且可以在各自的领域自由发展,没有任何取舍。以太坊主网只需要验证他们的证明,而 「世界计算机 」已经成为 「整个网络的最高法院」。 这让人相信进一步降低成本的想法。Rollup 最小化了证明的规模和生成证明所需的资源消耗,DA 层提高了编码和验证的效率,也减少了上传到主网的断言(assertions)的大小。经过一段时间的发展,模块化区块链完全有可能在性能和成本方面达到其他高性能公链的水平。
一些区块链为了实现更高的性能,在去中心化的程度上做出了妥协,但随着发展和进化,总会出现性能跟不上需求的情况。目前,如果通过技术升级,形成更强大的新网络,无疑是一种积极的情况;而在现有的技术条件下,通过更多的分工和协作,更合理地配置资源,也不失为一种好办法。 未来一段时间,以以太坊等为代表的去中心化程度高但性能低的公链很可能会坚定地推进模块化进程;而其他一些公链也会学习以太坊的成功经验,尝试实施外部模块。在经历了分工合作的成功后,区块链的模块化可能会成为一种新的模式。