数据可用性(Data Availability)主要存在于轻客户端节点相对全节点的语境下。对于轻客户端节点的数据可用性问题,行业内已经达成共识——采用纠删码(erasure codes)来解决。
不仅轻客户端节点有数据可用性问题,Layer1+Layer2 的叙事也好,Modular Blockchain 的叙事也罢,都会存在数据可用性问题。
目前来看,行业里针对数据可用性问题,主要有以下三个方面的方案:
以太坊用 Rollup 扩容时做一笔交易,主要有三类费用:执行费用(网络中所有节点执行交易并且验证其有效性的费用)、存储/状态费用(更新新状态的费用)、数据可用性费用(将数据发布到 L1 的费用)。其中,数据可用性费用占大头。
目前 Rollup 上传数据到 L1 是以 Calldata 的形式,这种方式非常贵。所以提出了 EIP-4488,可以将每个非 0 字节的 Calldata 成本从 16Gas 降低到 3Gas,但其实这个费用仍然挺高的。
然后,又提出了 EIP-4844 提案,即 Proto-Danksharding。引入了一种称为 Blob carrying Transactions 的交易格式。这种交易格式与普通的交易格式相比,多了一个 Blob 的位置可以用来存放 L2 的数据。而且,Blob 数据在一个月后会被节点删除,从而大幅节省了存储空间。
Blob 这种交易格式能够提供比 Calldata 更廉价的数据可用性。主要有两方面原因:一方面,Callda 存在于 Execution Payload 中,而 Blob 数据存储于 Prysm 节点或者 Lighthouse 节点中(而不是在 Geth 中),相比而言 Calldata 需要被合约读取时所消耗的资源要多很多;另一方面,Blob 数据是短期存储,一个月后节点会删除 Blob 数据。