跳转到内容

Dencun 升级 / EIP-4844

Dencun 升级 / EIP-4844

本页内容正在整理中,欢迎贡献

概述

2024 年 3 月 13 日,以太坊 Dencun 升级激活,其中最核心的改进是 EIP-4844(Proto-Danksharding),引入了 Blob 交易这一新的数据载体类型。这一升级将 Layer 2 Rollup 的数据发布成本降低了约 10 倍,标志着以太坊向 Full Danksharding 迈出了关键一步。

主要内容

EIP-4844 核心概念

Blob(Binary Large Object) 是附加在区块上的临时数据块:

特性说明
大小每个 Blob ~128 KB
数量每区块目标 3 个,最大 6 个(Pectra 后提升)
存储时间约 18 天(~4096 个 epoch),之后可被剪枝
访问方式合约内无法读取 Blob 内容,只能验证 KZG 承诺
费用市场独立于 calldata 的 EIP-1559 式费用市场(blob gas)

为什么对 L2 重要?

Rollup 的主要成本来自将交易数据发布到 L1:

合并前(calldata 方式):
每字节 calldata ≈ 16 gas
1 KB 数据 ≈ 16,384 gas @ $1/Mgas ≈ $0.016
Dencun 后(blob 方式):
1 Blob(128 KB)= 1 blob gas(独立计价)
正常情况下 blob gas price 极低(接近 0 Gwei)
→ L2 数据发布成本降低 ~10x

实际效果(Dencun 激活后):

  • Optimism、Arbitrum、Base、zkSync 等主流 L2 交易费用均大幅下降
  • 部分 L2 简单转账费用降至 $0.001 以下

技术实现

EIP-4844 新增两个操作码:

BLOBHASH(0x49): 获取当前交易的 blob 版本化哈希
BLOBBASEFEE(0x4a): 获取当前区块的 blob base fee

Rollup 发布 blob 的流程:

// L2 排序器发布 blob 交易(简化示意)
const blobData = encodeL2Transactions(transactions); // 压缩的 L2 交易数据
const commitment = computeKZGCommitment(blobData); // KZG 多项式承诺
// 发送 Type 3 交易(blob 交易)
const tx = {
type: 3,
to: L2_ROLLUP_CONTRACT,
data: "0x", // 合约只需验证 commitment
blobs: [blobData],
kzgCommitments: [commitment],
kzgProofs: [proof],
maxFeePerBlobGas: parseGwei("1"),
};

KZG 多项式承诺

EIP-4844 使用 KZG(Kate-Zaverucha-Goldberg)承诺方案

  • Blob 内容可表示为多项式
  • KZG 允许对任意位置的值进行高效证明(点证明)
  • 合约通过验证承诺来确认数据的完整性,而无需存储全部数据
  • 需要可信设置(Trusted Setup)——以太坊在 2022-2023 年进行了大规模 KZG 仪式,14 万+ 参与者

Dencun 包含的其他 EIP

EIP说明
EIP-1153瞬态存储(TSTORE/TLOAD),Gas 更便宜的临时存储
EIP-4788在 EVM 中访问信标链区块根
EIP-5656MCOPY 操作码,内存复制更高效
EIP-6780限制 SELFDESTRUCT,只允许在同笔交易中创建的合约调用
EIP-7044永久有效的签名退出
EIP-7045扩大证明包含窗口
EIP-7514限制最大 churn 限制

EIP-1153:瞬态存储

对开发者非常有用的新特性:

// TSTORE / TLOAD:只在当前交易有效的存储,比 SSTORE 便宜 ~20x
// 适用于:重入锁、跨函数临时数据传递
contract ReentrancyGuardTransient {
// transient 关键字(Solidity 0.8.25+)
bool transient private _locked;
modifier nonReentrant() {
require(!_locked, "Reentrant call");
_locked = true;
_;
_locked = false;
}
}

深入阅读