跳到主要内容

eip4844

Blob 交易与 KZG(EIP-4844, Proto-danksharding)

EIP-4844 为扩容引入“blob 数据”与独立的 blob gas 市场。交易类型 0x03 携带“版本化哈希(versioned hashes)”,实际 blob 数据以“sidecar”随网络传播;链上仅存承诺与费用信息。

交易主体(type 0x03)关键字段

  • 与 1559 类似字段:chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, accessList
  • 新增:maxFeePerBlobGasblobVersionedHashes[]
  • 签名:y-parity, r, s(链 ID 在主体中)

注意:执行层不可直接读取 blob 内容;EVM 逻辑看不到 blob 数据本身。

Blob 与承诺

  • 每个 blob 约 125–128 KB(场大小固定的编码单元)
  • 使用 KZG 承诺(BLS12-381)保证 blob 内容完整性;随交易提供点评估证明
  • 版本化哈希用于 EL 识别 blob(含版本字节 + 承诺哈希),链上写入 blobVersionedHashes

Blob gas 市场与 BaseFee

  • 独立于执行 gas 的市场:
    • 目标 blob 数量(主网):≈ 3/块
    • 上限 blob 数量:≈ 6/块
    • blobBaseFee 按 1559 公式随块需求调节(步长上限 1/8)
  • 用户为 blob 数据另行设置 maxFeePerBlobGas;实际支付 min(maxFeePerBlobGas, blobBaseFee + priority)(通常无 priority)
  • blobBaseFee 被销毁(burn),不属于提议者奖励

相关改动与接口

  • EVM 可用 BLOBBASEFEE(EIP-7516)获取当前 blob base fee
  • RPC:eth_blobBaseFee 获取当前 blob base fee 建议
  • 打包器需同时传播/校验“交易 + blob sidecar + 证明”;节点可独立裁剪过期 blob 数据

使用建议

  • L2 rollup 将 calldata 迁移到 blob,显著降低数据可用性成本
  • 估算费用时同时考虑执行层 baseFee 与 blobBaseFee;分别设置上限避免拒绝
  • 观察网络目标/上限:高峰期 blob 稀缺会推高 blobBaseFee

Go 伪代码(构造 0x03)

tx := &BlobTx{
ChainID: cid,
Nonce: n,
MaxPriorityFeePerGas: tip,
MaxFeePerGas: maxFee,
Gas: gas,
To: &to,
Value: val,
Data: input,
AccessList: al,
MaxFeePerBlobGas: maxBlobFee,
BlobVersionedHashes: hashes, // 来自 KZG 承诺
}
sig := SignTx(tx, priv)
raw := EncodeTyped(0x03, tx, sig)

参考:EIP-4844、KZG 可信设置说明、客户端实现文档(geth/reth/nethermind)