简述

Blob交易是专门为Rollups而设计的特殊交易。
它从 EVM 执行环境中分离出来,并以状态最小化的方式,来促进rollup机制原生嵌入以太坊网络中的实施(包括 optimistic 和 zk)的方式大幅增加交易吞吐量。
大白话就是,为了省钱(手续费)专门设计的一种交易类型。

第一阶段

EIP4844 主要即为第一个阶段所要完成的工作。主要包括:

1.新增一种交易类型,该交易类型新增了一种字段:blob,为该字段设置单独的gas收费标准,且收费较低,rollup 可采用该字段存储数据

2.新增blob会增大区块数据量,新增历史数据清理功能,超过30天的blob数据可以从节点移除,或迁移至第三方去中心化存储

3.blob与 tx 存储分离,并通过一个 commitment 来进行关联,commitment采用 KZG 算法来实现,KZG 算法可以看做类似 merkle 树的证明算法

4.KZG 在 sharding 中扮演着重要的角色,Rollup 校验中除了 KZG,采用别的验证算法都无法达到很好的效果。

数据结构

BLOB Transaction

1.消息与签名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class SignedBlobTransaction(Container):
message: BlobTransaction
signature: ECDSASignature

class BlobTransaction(Container):
chain_id: uint256
nonce: uint64
max_priority_fee_per_gas: uint256
max_fee_per_gas: uint256
gas: uint64
to: Union[None, Address] # Address = Bytes20
value: uint256
data: ByteList[MAX_CALLDATA_SIZE]
access_list: List[AccessTuple, MAX_ACCESS_LIST_SIZE]
max_fee_per_data_gas: uint256
blob_versioned_hashes: List[VersionedHash, MAX_OBJECT_LIST_SIZE]

从上面可以看出,BlobTransaction除了新增了blob_versioned_hashes字段和max_fee_per_data_gas字段外,其余字段基本与eip1559里面交易类型是一样的。
blob_versioned_hashes:首先 将blob数据转化为kzg多项式点。然后将kzg多项式电转换为versioned hash。之所以使用VersionedHash 而不是 KZG 是为了向前兼容,以后可以方便更换为STARK。

2.增加了一种新的OPCODE

这个opcodeDATA_HASH,其对应的值为HASH_OPCODE_BYTE。表示这个opcode的gas成本。

一些问题

1.blob存储和数据结构
Blob数据持久化到共识层,而不是在执行层。
2.blob数据内容是什么
Blob的数据是 L2 里的交易集合或者状态变更,由 Rollup 决定。
3.blob如何和合约交互,
在 L1 的 EVM 里不能访问Blob数据。
但是可以通过versioned hash获取Blob,然后校验kzg,以及versioned hash。
4.blob交易中proof存储在哪
5.blob在共识层和应用层的作用

KZG多项式承诺
EIP4844