原文作者:Biteye 核心贡献者 Fishery Isla
原文编辑:Biteye 核心贡献者 Crush
原文来源:@BiteyeCN
以太坊网络升级 Dencun 测试网版本在 2024 年 1 月 17 日上线了 Goerli 测试网, 1 月 30 日成功上线了 Sepolia 测试网,Dencun 升级离我们越来越近。
再经历一次 2 月 7 日的 Holesky 测试网升级之后,就会是主网升级,目前坎昆升级主网上线已经正式确定在 3 月 13 日。 每次以太坊升级几乎都会伴有一波主题行情,追溯以太坊的上一次还是 2023 年 4 月 12 日的上海升级,POS 相关的项目都受到了市场的追捧。 如果按照先前经验,本次 Dencun 升级也会有提前布局的机会。 而由于 Dencun 升级背后涉及的技术内容比较晦涩,并不能像 Shanghai 升级那样用一句话“以太坊从 PoW 转向 PoS”一言以蔽,难以抓住布局的重点。 因此,本文将用通俗易懂的语言去解释 Dencun 升级的技术细节,为读者梳理本次升级与数据可用性 DA 和 Layer 2 等赛道之间的脉络。 EIP-4844 是本次 Dencun 升级中最重要的提案,标志着以太坊在以去中心化方式扩展的道路上迈出了切实而重要的一步。 通俗来讲,目前以太坊二层需要将二层发生的交易提交到以太坊主网的 calldata 之中,供节点验证二层网络出块的有效性。 这样做带来的问题是,虽然交易数据已经被尽可能的压缩,但二层庞大的交易量再乘以以太坊主网高昂储存成本基数,对于二层节点和二层用户来讲依旧是一笔不小得开销。光是价格因素,就会让二层失去大量用户,流向侧链。 而 EIP 4484 建立了一个更为便宜的新型的储存区域 BLOB(Binary Large Object ,二进制大型对象),并用一种可以指向 BLOB 存储空间的名为"BLOB-Carrying Transaction" 的新交易类型来替代升级之前需要存入 calldata 的交易数据,帮助以太坊生态二层实现节约 Gas 成本。 众所周知便宜是要付出代价的,BLOB 数据比类似大小的普通以太坊 Calldata 成本更低的原因是,以太坊执行层(EL, EVM)实际上无法访问 BLOB 数据本身。 相反,EL 只能访问 BLOB 数据的引用,而 BLOB 本身的数据只能由以太坊的共识层(CL,又称信标节点)下载和存储,存储起来耗费的内存与计算量远小于普通以太坊 Calldata 。 而且 BLOB 还有一个特性,只能存储有限的一段时间(通常为约 18 天),并不会像以太坊账本大小那样无限膨胀。 与区块链永久的账本相反,BLOB 是暂时的存储,其可用时间为 4096 个纪元,即大约 18 天。 过期后,大多数共识客户端将无法检索 BLOB 中的特定数据。但是,它之前存在的证据将以 KZG 承诺的形式保留在主网上,并且永久存储在以太坊主网上。 为什么选择 18 天?这是在衡量储存成本和有效性之间的折衷方案。 首先要考虑此次升级最直观的受益对象 Optimistic Rollups(如:Arbitrum 和 Optimism,),因为根据 Optimistic Rollups 的设定,有 7 天的故障证明(Fruad Proof)的时间窗口。 而 blob 中所存储的交易数据,正是 Optimistic Rollups 发起挑战的时候所需要的资料。 因此,Blob 的有效期必须要保证 Optimistic Rollups 故障证明可以访问,为了简单起见,以太坊社区选择了 2 的 12 次幂(4096 个纪元由 2 ^ 12 推导而来,一个纪元大概 6.4 分钟)。 理解这两者之间的关系,对于理解 BLOB 在数据可用性(DA)方面的作用十分重要。 前者是 EIP-4484 提案的整体,是一种新型交易,而后者可以理解成一种针对 layer 2 临时存储交易的位置。 两者关系可以理解为,前者中的大部分数据(layer 2 交易数据)存储在后者之中。而剩下的数据也就是 BLOB 数据的承诺(Commitment)则会存在主网的 calldata 之中。也就是说,承诺是可以被 EVM 读取的。 可以将 Commitment 想象为将 BLOB 中的所有交易构建成一个 Merkle 树,然后只有 Merkle 根也就是 Commitment 可以被合约访问。 如此做可以巧妙的实现:虽然 EVM 无法得知 BLOB 的具体内容,但 EVM 合约可以通过知晓 Commitment 进而可以验证交易数据的真实性的目的。 Rollup 技术通过将数据上传到以太坊主网来实现数据可用性(DA),但这并不是为了让 L1 的智能合约直接读取或验证这些上传的数据。 上传交易数据到 L1 的目的,仅仅是为了让所有参与者都可以查看这些数据。 在 Dencun 升级以前,如上文所述,Op-rollup 会将交易数据作为 Calldata 发布到以太坊。所以任何人都可以使用这些交易信息来复现状态,验证二层网络的正确性。 不难看出,Rollup 交易数据需要便宜+公开透明,Calldata 并不是为二层专门存放交易数据的好地方,而 BLOB-Carrying Transaction 才正是为 Rollup 量身定制的。 读到这里,可能大家心里有个疑问,这种交易数据看起来并不重要,它有什么用? 其实,交易数据只有在少数情况才会用到: 对于 Optimistic Rollup,基于信任假设,有一定可能会出现不诚信问题,此时 Rollup 上传的交易记录才派上用场,用户可以利用这个数据发起交易挑战( Fraud proof); 对于 ZK Rollup,零知识证明已经证明状态更新是正确的,上传数据只是为让用户自己计算出完整状态,在二层节点无法正确运转时启用逃生舱机制(Escape Hatch,需要完整的 L2 状态树,最后一节会讲到)。 这意味着,交易数据被合约实际使用的场景非常有限。即使在 Optimistic Rollup 的交易挑战中也只需要当场提交证明交易数据“存在过”的证据(状态),而不需要那一笔交易详情事先就储存在主网。 所以如果我们把交易数据放在 BLOB 元素中,虽然合约无法访问,但主网合约可以存储这个 BLOB 的 Commitment。 将来如果挑战机制需要某一笔交易,我们只需提供该笔交易的数据,只要能对应上。这就能说服合约,并将交易数据提供给挑战机制使用。 这样既利用了交易数据的公开透明性,也规避了把所有数据提前录入合约的巨大 gas 成本。 通过仅记录 Commitment,达成交易数据可验证性的同时又极大优化了成本。这是 Rollup 技术上传交易数据的一个巧妙且高效的解决方案。EIP 4484
BLOB 存储便宜的原因
BLOB 的存储有效期
BLOB-Carrying Transaction 与 BLOB
BLOB 与 Layer 2 的关系