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,采用别的验证算法都无法达到很好的效果。
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。
这个opcode
为DATA_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在共识层和应用层的作用