ETHconomics Research Space 近期主要关注和研究 4844 引入的 blob 交易专用的数据型 gas 费用市场以及不同 rollup 选择的应对策略。在此之前,我们先梳理了一遍以太坊的历史和当前主流的费用模型,为之后对 blob 交易的定义理解以及进一步探索做准备。
感谢 Jason (@0xbbbb_eth) 对本文提供的帮助和校正!
引入Dencun 升级已于 2024 年 1 月 17 日在 Goerli 测试网激活,接下来会相继在 Sepolia、Holesky 测试网以及主网激活。这次升级中,最受社区关注的莫过于 EIP-4844 —— 为以太坊协议引入了新的交易类型“携带 blob 的交易” (以下简称 blob 交易),以及其专用的数据型 gas 费用市场。
这意味着什么呢?blob 的费用机制和当前以太坊的费用机制有什么关联?这对需要发送数据到以太坊基础层的 rollup 来说,它们的开销和定价有什么影响?如何对新引入的区块空间资源定价,制定最有效的策略以实现最优的成本控制?
在搞清楚新的 blob 交易如何定价之前,我们需要了解历史交易类型和费用机制的演变,才能更好地理解 4844 与 1559 费用机制的联系与区别。
介绍 gas 机制以及 type 0 交易费用的计算方式在以太坊虚拟机 (EVM) 中,每项具体操作都有特定的开销,用以计量其消耗的计算资源。Gas 就是这些开销的计量单位。就像我们开车前需要估算需要多少升油才能行驶多少公里一样,我们也可以预先估计发送一笔交易需要消耗多少 gas 单位。
cr: ethereum.org, 不同种交易的 gas 开销那么 gas 开销是怎么定价的呢?我们需要搞清楚这个问题,因为 gas 开销本身并不代表我们需要为某笔交易支付的费用。在 1559 上线之前,计算交易费用的公式很简单,只需将“已消耗的 gas 数量” 乘以 “当前的 gas price”:
transaction fee = units of gas used * gas price per unit
(注:1559 上线后,gas_price_per_gas 细分了,引入了新的参数 base fee 和 priority fee,具体的费用机制将在下文提及)
Gas price 的计量单位是 gwei,1 gwei = 0.000000001 ETH。(注:Geth 客户端的默认值是 1 Gwei 最低值) 大家可以把把 gwei 类比成美分,把 ETH 类比为美元。当运用到实际计算中,假设当前的 gas price 为 100 gwei,如果我们发送一笔 ETH 交易,我们需要付的 gas fee 为 21,000 gas * 100 gwei/gas = 2,100,000 gwei = 0.0021 ETH。
为什么需要 gas?
看到这里读者们可能会感到疑惑,既然我们最终实际支付的还是 ETH,为什么需要一个独立的单位来衡量 EVM 上执行操作所需的计算工作量?主要有这些目的:
将执行交易的开销与加密货币的波动性解耦,这有助于使交易开销稳定。Gas price 是动态变化的,它根据网络的使用需求波动,独立于 ETH 的市场价格。
Gas 是以太坊网络上用以分配资源的机制,确保用户为其消耗的计算资源合理支付,防止网络被滥用。Gas limit 更高的交易可以执行更复杂的操作或处理更多数据。
用户可以指定他们愿意为交易支付的 gas price,矿工会优先处理 gas price 更高的交易。这为用户根据他们的紧急程度和支付意愿提供了灵活性。
Gas 系统有助于防止智能合约中出现死循环等问题。每笔交易都需要指定 gas limit,即交易可以消耗的最大 gas 量。如果交易期间 gas 消耗量超过 gas limit,交易就会失败。这种机制确保了有缺陷或恶意的合约不能无限地消耗资源。
如何定价 gas?
本节描述的是以太坊最初的交易类型:type 0 交易。在 type 0 交易中,费用模型是价高者得的简单拍卖机制,也称作 "first-price auction"。(在第一价格拍卖中,各参与者提交他们愿意支付的最高价格,而这个价格是私密的,其他参与者不知道。当拍卖结束时,出价最高的参与者赢得拍卖品,并支付他们所出的价格。第一价格拍卖的一个特点是参与者需要在出价时权衡,既要高于其他出价以赢得拍卖,又要避免支付过多超过实际价值的金额。)
简单来说,用户提交一笔交易之后,这笔交易会在 mempool 中等候被矿工处理。而由于每一个区块有着固定 gas limit,对于矿工来说,构建一个区块以及塞满一个区块有着同等的工作量,为了从中获取最大的利益,矿工会优先打包 gas price 更高的交易。
在这个过程中,用户不断为自己的交易可以优先被打包进下一个区块而竞价,从而抬高了 gas price。在这样的机制下,gas price 基于网络交互情况而波动,换句话说, 是由区块空间的供需曲线来决定的。
然而,该简单拍卖模型具有以下缺点:
first-price auction 中的定价是一个很复杂的问题,赢者诅咒会导致大多数用户都为他们的交易支付高于市场出清值的费用。
用户无法对当前网络费用有着收敛的预期,导致 gas price 波动很大。
以太坊上的 Dapp 和钱包服务要通过复杂的模型帮助用户设定 gas price。
type2 交易采用了 EIP-1559 改善了上述问题,也是当前的主流交易类型。
EIP-1559 和 type 2 交易的费用机制在 2021 年 8 月,伦敦升级在主网激活之后,以太坊协议引入了新的费用机制。EIP-1559 引入了 type 2 交易,即当前的主流交易类型,gas fee 的计算方式为:
units of gas used * (base fee + priority fee)
Base fee
这是用户需要为其交易支付的最低费用,由网络动态设定。值得注意的是 baseFee 会被销毁而非给予节点运行者 (矿工/共识验证者)。每个区块都会有一个 base fee,用以定价网络的拥堵情况。
Priority fee
这是用户可选设定的一个小费,用以激励节点运行者打包其交易。但需要注意的是,如果不添加 priority fee,节点运行者可能会宁愿构建空块,因为同样会获得区块奖励。
引入了新的可变大小的区块
在 1559 上线之前,区块的 gas limit 为 1500 万;1559 上线之后,gas limit 提高到 3000 万,并引入了新的参数 target gas 为 1500 万。虽然区块的 gas 上限变大了,但协议会基于历史区块消耗的 gas 数量,调整 base fee,从而锚定 target,使得区块平均在 1500 gas。
Base fee 的计算则是由上一个区块的使用率决定的。比如上一个区块中已使用的 gas 量超过 1500 万 gas,则当前区块的 base fee 相应地提高;如果低于 1500 万 gas,则减少。因而,在这种机制下,base fee 的变化是由网络需求决定的。并且,为了防止节点的合谋操纵 baseFee 价格得利,每创建一个区块,base fee 就会被销毁。
计算 base fee 增长/减少比例的公式:
gas_used_delta/parent_gas_target/BASE_FEE_MAX_CHANGE_DENOMINATOR
BASE_FEE_MAX_CHANGE_DENOMINATOR = 8
cr: ethereum.org在上面的表格中,当 block 2 超过了 1500 万 gas 的使用量且触及了最大的 gas limit,block 3 的 base fee 上涨了 12.5%,变成 112.5 gwei。(注:每一个区块之间 base fee 最多可以上涨或下降 12.5%)
通过这种方式,使得用户的交易费用更加可预测以及减少交易确认的延迟。
EIP-1559 改善了 type 0 交易存在的问题:
不直接使用用户的竞标价收取手续费,缓解了赢者诅咒。用户设置的最高费用相当于竞标价,然而手续费并非直接收取用户的设置的最高费用,而是主要基于网络根据拥堵程度设置的 baseFee 的收取,即用户只需支付公允价格。
基于网络根据拥堵程度设置的 baseFee 使得用户对网络费用有着共同的预期,使得用户出价更加合理,从而 gas price 的波动性会降低。
以太坊上的 Dapp 和钱包服务只需要根据以太坊当前的 baseFee 就可以帮助用户设定好 gas price,而无需通过复杂的数学模型。同时,由于区块间 baseFee 的波动被限制在 -12.5% ~ 12.5% 以内,容易设置出能被下个区块打包的交易,大大提升了用户体验。
EIP-4844 和 Dencun 升级?在下一篇文章中,我们将会看到对于 4844 引入了专用的数据型 gas 费用市场会有哪些关键参数;它与 1559 的费用机制有什么相关联的地方。