Jason @0xbbbb_eth
Account Abstraction Developer
MEV Researcher
Core Contributor of Panta Rhei
TDLR
使用 blob 的主流应用为 rollup 应用,占比约为 87%。非 rollup 应用主要是 Blobscriptions 以及用户自定义 type 3 交易
rollup 应用会根据自身情况选择不同使用 blob 的策略:选定 type 3 交易携带的 blob 数量,blob 的利用率以及 blob 提交的频率,从而权衡可用性数据的手续费成本与延迟成本。
非 rollup 应用可以通过 type 3 交易携带的 blob 数量,blob 的利用率以及 blob 提交的频率三个特征进行刻画并区别于 rollup 应用。这些特征有助于识别 blob 滥用的场景,进而可以设计出相应的 blob 防滥用机制。
应用选择 blob 作为数据可用方案在绝大部分情况下手续费成本都是低于 calldata 的。然而,仍然存在少量选择 calldata 手续费更低的场景:blob gas price 飙升以及 blob 利用率极低。
blob gas price 的短期波动主要受非 rollup 应用的需求影响。rollup 应用对 blob 的需求较为刚性,因此对 blob gas price 的短期波动影响不大。
目前 rollup 应用似乎没有把 blob gas price 作为使用 blob 的策略的参考因素
含 type 3 交易的区块发生重组的概率极低。同时,携带更多的 blob 并不会导致区块重组的概率提升。然而,含 type 3 交易的区块发生重组在区块高度上出现聚集现象。
简介
本报告对以太坊 Decun 升级以来至 2024 年 5 月 22 日间用于携带 blob 的 type 3 交易进行深入分析。本报告主要研究 rollup 应用以及非 rollup 应用在使用 blob 上使用的策略。本报告的数据集,数据处理程序以及可视化代码都已开源,详细见 数据集合
一节。
关于 EIP-4844 费用机制以及 rollup 数据可用策略可以参见笔者的两篇文章:
Type 3 交易与 Blob 在不同应用中的分布
本报告共分析了 348,121 笔被主链区块打包的 type 3 交易,统计其中不同应用的交易占比与 blob 占比,得到图 1 与图 2。
由于 Rollup 应用与非 Rollup 应用(图中的 Others)有着明显不同的特征,因而进行分类讨论。
Rollup 应用
通过观察图 1 与 图 2 可以发现,约 69% 的 type 3 交易以及约 86% 的 blob 为 rollup 所发布,表明 EIP-4844 达到其设计的目的:使用 blob 替代 calldata 作为 rollup 的数据可用方案。
通过观察图 1 中 type 3 交易占比可以发现
base, scroll, linea, starknet 属于相同的量级,拥有最高的交易占比
arbitrum, optimism, zksync 属于相同的量级,拥有次高的交易占比。
该现象似乎违背了直觉:arbitrum, optimism 有着比 scroll, linear, starknet 更高的 tps,理应拥有更高的 type 3 交易占比。实际上对比图 2 可以发现根源在于 rollup 在 type 3 交易携带的 blob 数量上采用了不同的策略。
通过观察图 2 中 blob 占比可以发现
base 是独一档的,拥有最高的 blob 占比
arbitrum, optimism 属于相同量级,拥有次高的 blob 占比
scroll, linear, starknet, zksync 属于相同量级,拥有中等的 blob 占比
该现象更加符合我们直觉:blob 直接与 rollup 的可用性数据规模相关,因而 blob 占比会与 rollup tps 正相关。
💡 各 Rollup 的实时 tps 见此处。
图 1 与 图 2 中各个 rollup 占比的差异说明了 rollup 在 type 3 交易携带的 blob 数量上采用不同的策略。例如,arbitrum, optimism 的 type 3 交易上比 scroll, linear, starknet 携带更多的 blob。
值得思考的是:既然携带 blob 越多越能分摊 type 3 交易的固定成本,某些 rollup 为何不携带更多的 blob?
重要原因之一可能是 rollup 除了要考虑可用性方案的手续费成本以外,还需要考虑其延迟成本。延迟成本是隐性的,主要影响用户体验,某些去中心化应用的安全模型,以及某些去中心化应用的活性。
对于 base, arbitrum, optimism 此类高 tps 的 rollup 而言,rollup 的可用性数据能够在短时间内填充完 6 个 blob,达到区块上限。此类 rollup 在拥有低延迟成本的同时可以追求最低的手续费成本。
对于 scroll, linear, starknet, zksync 此类 tps 次高的 rollup 而言,rollup 的可用性数据无法在短时间内填充完 6 个 blob。此类 rollup 为了拥有可接受的延迟成本而无法追求最低手续费成本,即其 typ3 交易只能携带少于 6 个blob。
💡 另一个重要原因可能是某些 rollup 的有效性证明/欺诈证明目前无法在多 blob 的场景中使用。
非 Rollup 应用
除了预期中的 rollup 应用,实际上存在着大量非 rollup 应用。由图 1 与 图 2 可以发现,约 31% 的 type 3 交易以及约 14% 的 blob 为非 rollup 应用(图中的 Others)所发布。
典型的非 Rollup 应用如下:
通过非 rollup 应用 type 3 交易占比(31%)与 blob 占比(14%)的差异可以发现,非 Rollup 应用与 rollup 应用有着不同的需求。
rollup 应用实际上是 toB 的生意,目标是填充细粒度的 Layer 2 交易的可用性数据,因此其 type 3 交易不限于只携带 1 个 blob。
非 rollup 应用实际上是 toC 的生意,目标是上传完整的一段文字/一张图片等,因此其 type 3 交易通常只携带 1 个 blob 即可满足需求。
深入 Rollup 应用的 Blob 策略
通过上文的初步分析可以发现,不同 rollup 在使用 blob 的策略上进行了颇为复杂的权衡。本节会对 rollup 使用 blob 的策略建模,然后基于真实的 rollup 数据(type 3 交易携带的 blob 数量,blob 利用率以及 blob 提交间隔)进行实证分析,深入不同 rollup 使用 blob 的策略。
Rollup 策略模型
已知 rollup 的 tps
以及其 blob 提交的间隔 blobInterval
,得到 rollup 提交的可用数据规模 data(1)
:
k1
: 常数
已知 rollup 的 type 3 交易携带的 blob 数量 blobNumber
以及 blob 利用率 blobUtilization
(blob 中非空字节的占比),同样得到 rollup 提交的可用数据规模 data(2)
:
k2
: 常数
结合公式(1)(2)可以得到 (3)
k
: 常数
rollup 单笔交易的手续费成本表示如下 (4)
fixedCost
为 type 3 交易的固定费用blobCost
为单个 blob 的费用
结合公式(3)(4)可以得到 (5)
rollup 单笔交易的延迟成本表示如下 (6)
F
为单调递增函数blobInterval
越大,rollup 单笔交易的延迟成本delayCost
越大。
结合公式(3)(6)可以得到 (7)
blobUtilization
越大,延迟成本delayCost
越大blobNumber
越大,延迟成本delayCost
越大tps
越大,延迟成本delayCost
越小
实证分析 1: Rollup 的 Type 3 交易携带的 Blob 数量 blobNumber
分布
基于 rollup 策略模型可以发现,rollup 在选择 type 3 交易携带的 Blob 数量上存在着权衡:
由公式(5)可以得知,type 3 交易携带更多的 blob 意味着更低的手续费成本。
由公式 (7) 可以得知,type 3 交易携带更多的 blob 意味着更低的手续费成本。
报告统计了 rollup 的 type 3 交易携带 blob 数量的分布(见图 5),从而分析不同 rollup 的策略偏好。
通过图 5 可以发现,绝大部 rollup 倾向于在 type 3 交易携带固定数量的 blob:
实证分析 2: Rollup 的 Blob 利用率 blobUtilization
分布
基于 rollup 策略模型可以发现,rollup 在 blob 利用率上存在着权衡:
由公式(5)可以得知,blob 利用率越高意味着更低的手续费成本。
相比提高 type 3 交易携带 blob 数量,提高 blob 利用率降低手续费的作用更佳,因为其同时作用于固定费用的分摊成本和 blob 费用的分摊成本
由公式 (7) 可以得知,blob 利用率越高意味着更低的手续费成本。
报告统计了 rollup 的 blob 利用率分布(见图 6),从而分析不同 rollup 的策略偏好。
通过图 6 可以发现,所有 rollup 应用的 blob 利用率皆高于 20%。同时,不同的 rollup 有着不同的 blob 利用率倾向:
实证分析 3: Rollup 的 Blob 提交间隔blobInterval
分布
基于公式(5)可以得知,手续费成本可以通过 rollup 主动调整 type 3 交易携带 blob 数量 blobNumber
以及 blob 利用率 blobUtilization
的方式控制。
基于公式 (7)可以得知,延迟成本可以通过 rollup 基于自身 tps
主动调整 type 3 交易携带 blob 数量 blobNumber
以及 blob 利用率 blobUtilization
的方式控制。
报告统计了 rollup 的 blob 提交间隔(见图 7),从而分析不同 rollup 的策略得到的延迟成本。
通过图 7 可以发现,不同的 rollup 有着不同的延迟成本倾向:
Rollup 策略分析
综合上述实证分析,可以对 rollup 策略进行归类分析:
深入非 Rollup 应用的 Blob 策略
Rollup 应用是 toB 的应用,而非 rollup 应用是 toC 的应用。因此,非 rollup 应用区别于 rollup 策略模型。对于非 rollup 应用而言:
type 3 交易携带的 blob 数量取决于使用 Blob 存储的资料(图片/文字)大小
blob 利用率取决于使用 blob 存储的资料(图片/文字)大小
blob 提交间隔取决于 C 端用户对 blob 即时需求,不存在延迟成本
根据图 5 中的 Others 可以得知,1 个 blob 能满足绝大多数非 rollup 应用的需求。
根据图 6 中的 Others 可以得知,blob 的利用率集中在 20%-40%之间,即非 rollup 应用上传的资料一般无法把 blob 填满,因此大小主要集中在 25.6 k - 51.2 k 之间。
根据图 7 中的 Others 可以得知,约 83% 的 blob 的提交间隔小于 1 分钟,即非 rollup 应用的用户需求频率较高。
综上可见,非 rollup 应用的 type 3 交易的画像:高频的携带 1 个超低利用率 blob 的 type 3 交易。该画像的本质在于:相对于 rollup 应用,非 rollup 应用是即时需求,且不在乎单位数据字节的手续费成本。通过该画像可以把非 rollup 应用甄别出来,进而可以设计机制对非 rollup 应用的 blob 滥用行为进行限制。
Blob 一定比 Calldata 划算?
在 EIP-4844 前,应用主要使用 calldata 作为数据可用方案。在 EIP-4844 后,应用切换使用 blob 作为数据可用方案。然而,使用 blob 一定比 calldata 划算吗?实际上,对于某些应用而言,blob 采用的集装箱收费模型在某些情况下比 calldata 采用的按量收费模型更加昂贵。
引入 feeRatio
衡量两种方案的优劣 (8)
当
feeRatio
≥ 1 时,代表 blob 作为数据可用方案不差于 calldata当
feeRatio
< 1 时,代表 blob 作为数据可用方案差于 calldata
报告统计了每笔 type 3 交易的 feeRatio,得到图 8:
通过图 8 可以发现,在绝大多数情况下 blob 比 calldata 更划算,即 feeRatio
> 1。同时,实际效果很惊人,feeRatio
主要位于 ≥ 1e6
的区间,即成本削减了 1 百万倍。该惊人效果主要归功于长期处于 1 的 blobBaseFee
。
通过图 8 还可以发现少量 feeRatio
< 1 (红色)的情况,意味着 calldata 比 blob 更划算:
大量位于非 Rollup 应用(Others)
非 Rollup 应用在大部份情况下并不在乎 blob 和 calldata 的成本差异,其在乎的是使用 blob 这件事情本身,如 Blobscriptions。
少量位于 metal
rollup 应用 metal 在策略上似乎没有考虑在 blob 和 calldata 间切换,导致在某些极端情况下选择了次优的策略。
极端情况主要是因为 metal 本身 blob 利用率较低(见图 6)并遇上 blob gas price 暴涨。
然而,考虑到极端场景比较少以及维护两套数据可用方案成本较高,metal 在极端场景下选择了次优的策略似乎是可以接受的。
注意本节的 blob 方案与 calldata 方案的分析只考虑费用成本,未考虑延迟成本。在考虑延迟成本的前提下,calldata 实际上更有优势。
Blob Gas Price 与应用的 Blob 策略
Blob Gas Price 波动原因分析
本报告统计了在不同 blob gas price 下,type 3 交易及 Blob 中各个应用的占比:
通过图 9 与图 10 可以发现,在高 blob gas price(> 10)的场景下,非 rollup 应用(Others)的占比相对于低 blob gas price(< 10)高了许多。
从而得知,blob gas price 的飙升主要是由非 rollup 应用的需求驱动的,而非来自 rollup 应用。否则,rollup 应用与非 rollup 应用间的比例理应维持稳定。
Rollup 如何应对 Blob Gas Price 波动
另外,在图 9 与图 10,读者可能会发现某些 rollup 应用似乎会对高 blob gas price 进行响应。
例如,scroll 在低 blob gas price(< 10)的情况下占比较高,但似乎在高 blob gas price(> 10)的情况下占比为 0。scroll 似乎会在高 blob gas price 的情况下暂停发布 blob。
然而,该结论并不正确。原因在于并不是所有的 rollup 在 EIP-4844 上线后立即使用 blob。
本报告统计了不同应用的 type 3 交易的区块高度分布(见图 11),发现 scroll 在高 blob gas price(> 10)的情况下占比为 0 主要是因为其在高 blob gas price 区间后才使用 blob。
只保留在 EIP-4844 升级后立即使用 blob 的 rollup(见图 12 与图 13),观察这些 rollup 的 type 3 交易以及 blob 的占比,从而了解 rollup 在不同 blob gas price 下的应对方式。
通过图 12 与图 13 可以发现,各 rollup 占比在不同的 blob gas price 下保持稳定。rollup 似乎对 blob gas price 并不敏感,可能是因为 rollup 的可用性需求比较刚性。
另一种可能性是所有 rollup 在高 blob gas price 的情况下都降低发布 blob 的频率。由于所有 rollup 都要步调一致以维持占比的稳定,该情况的可能性不大。
应用在不同 Blob Gas Price 下 Type 3 交易携带的 Blob 数量
假设:blob gas price 越高,为了降低手续费成本,应用在 type 3 交易理应携带更多的 blob,即 blob 数量应与 blob gas price 呈正相关。
通过图 14 可以发现,假设不成立。应用的 type 3 交易携带 blob 数量与 blob gas price 无关,即当前应用在 type 3 交易中携带 blob 数量的选择上并无考虑 blob gas price。
不同应用在不同 blob gas price 下的 blob 利用率
假设:blob gas price 越高,为了降低手续费成本,应用理应提高 blob 利用率,即 blob 利用率应与 blob gas price 呈正相关。
通过图 15 可以发现,假设不成立。应用的 blob 利用率与 blob gas price 无关,即当前应用在 blob 利用率的选择上并无考虑 blob gas price。
不同应用在不同 blob gas price 下的 blob 提交间隔
假设:blob gas price 越高,为了降低手续费成本,应用理应延迟提交 blob,即 blob 提交间隔应与 blob gas price 呈正相关。
通过图 16 可以发现,假设不成立。应用的 blob 提交间隔与 blob gas price 无关,即当前应用在 blob 提交间隔的选择上并无考虑 blob gas price。
Blob 与区块重组
经过统计,Decun 升级至 5 月 22 日间包含在分叉区块的 type 3 交易共 171 笔,而包含在主链区块的 type 3 交易共 348,121 笔。因此,type 3 交易被分叉的比例约为 0.049%(= 171 / (171+348121))。本节主要是对区块重组与 blob 的关系进行探索。
主链/分叉区块中的 blob 数量分布
本报告统计了主链区块与分叉区块中 blob 数量分布(见图 17),试图从两者的分布差异得到一些信息。
假设:更多的 blob 会导致区块重组的概率提升
若假设成立,那么应该满足一下不等式 (9)
根据贝叶斯公式,得到公式(9)的等价公式(10)
校验实际数据是否满足公式(10),得到下面的表格
由上面的表格可以得知,公式(10)并非对所有的 n 都成立。因此,假设不成立,即更多的 blob 与区块重组关系不大。
由于包含在分叉区块的 type 3 交易占比极低,P(blob=n)可以利用P(blob=n|normal) 近似,其中 normal 指的是包含在主链区块。
分叉区块中的 type 3 交易与 blob 的应用分布
本报告统计了主链区块与分叉区块中 type 3 交易与 blob 的应用分布(见图 18 与图 19),试图从两者的分布差异得到一些信息。
假设:应用与区块重组无关,则对于重组区块而言,其应用分布应该与主链区块的分布近似。
通过图 18 和图 19 可以得知,zksync 和 scroll 在分叉区块中的 type 3 交易 / blob 占比明显比主链区块要高,假设不成立。
公式 (11) (12)
应用似乎与区块重组有着某种联系,猜测与应用使用 blob 的策略差异有关
zksync 和 scroll 在提交 type 3 交易的时机选择上不如其他 rollup,即选中重组区块高度。
zksync 和 scroll 的 type 3 交易具有独特性,使得包含的区块更容易发生重组
区块重组的聚集现象
本报告统计了主链区块与分叉区块中各应用的 type 3 交易分布(见图 20),试图从两者的分布差异得到一些信息。
若每个区块发生重组的概率相同,分叉区块理应均匀分布在区块高度区间内。然而,根据图 20 可以发现,分叉区块在区块高度上会出现聚集现象,猜测与网络状态有关。
除此以外,区块重组出现的聚集现象似乎与提交 blob 的应用有着某种联系。例如,非 rollup 应用的 type 3 交易只在区块 19,500,000 - 19,600,000 间被分叉区块打包 。
数据集
本报告通过 blobscan 收集了区块高度在 19426589 和 19922944 间 type 3 交易的数据,其中被主链区块打包的 type 3 交易 348,121 笔,被分叉区块打包的 type 3 交易 171 笔。
💡 Decun 升级激活高度 19426589 区块高度在 19426589 至 19922944 对应 Mar-13-2024 01:55:59 PM +UTC 至 May-22-2024 04:07:23 AM +UTC
数据源:blobscan
数据处理脚本: https://github.com/doublespending/EIP-4844-Data-Analysis/tree/main/fetch-and-handle-data
处理后数据:https://github.com/doublespending/EIP-4844-Data-Analysis/tree/main/data
数据统计与可视化: https://github.com/doublespending/EIP-4844-Data-Analysis/tree/main/anaysis
报告使用的基本数据
报告使用的数据经过编写的脚本进行处理,得到
{
"hash" : "0x000001bc628a7415eff93e5cb296b0f02a163e24e60453dce163f18113ada54f",
"blockNumber" : 19850392,
"blockHash" : "0x6b6e089b6cb192b38b637592d5eda052e38c0b187df4f25d5119cae3d5c965ae",
"blobCount" : 6,
"rollup" : "optimism",
"blobGasPrice" : 1,
"blobInterval" : 22,
"gasRatio" : 15.559494018554688,
"feeRatio" : 80990325270.61229,
}
hash
: type 3 交易的哈希blobNumber
: type 3 交易所在的区块高度blockHash
: type 3 交易所在的区块哈希blobCount
: type 3 交易携带的 blob 数量rollup
: type 3 交易的发起应用,含 rollup 以及非 rollup 应用(用 Others 标识)blobGasPrice
: type 3 交易为 blob data gas 支付的 blob gas priceblobInterval
: 距离上笔来自该应用的 type 3 交易的区块距离。基于每个 slot 间隔 12 s,我们可以推算出应用提交 type 3 交易的时间间隔。(注:精确推算需要考虑 miss slot 的情况)gasRatio
: 转用 calldata 消耗的 gas 与当前 blob 消耗的 data gas 的比例,即blobAsCalldataGasUsed / blobGasUsed
。通过gasRatio
可以近似推算出 blob 的利用率。feeRatio
: 转用 calldata 的手续费与当前 blob 的手续费的比例,即blobAsCalldataFee / blobFee
若
feeRatio
< 1,则代表 calldata 相对 blob 更加划算,而实际上该交易选择了 blob若
feeRatio
> 1,则代表 blob 相对 calldata 更为划算,该交易选择了 blob
Blob 利用率计算
我们可以基于 gasRatio
巧妙地推算出 blob 利用率 blobUtilization
我们看公式(13)(14)(15)(16)
基于公式(13)(14)(15)(16)可以得到 (17)
其中,k 指的是可用性数据中非零字节的占比
对具体应用而言,k 一般而言比较稳定
一般而言,零字节的占比远低于非零字节,k 可以近似为 1
总结
应用使用 blob 的策略具有个性化,复杂度高的特点。本报告试图抽象出这些策略的共性并规范化并进行实证分析。
对于 rollup 应用而言,根据自身与以太坊网络情况采用何种策略在手续费成本与延迟成本间权衡尤其重要。对于非 rollup 应用而言,识别 blob 滥用的场景尤其重要,保证 blob 生态的可持续。对于协议层而言,分析应用使用 type 3 交易的情况对研究 blob 对协议层的影响有着很大的参考价值,如区块重组,更好的 blob 费用机制以及防止 blob 滥用的机制。