文章探讨了区块链资源计量和定价的替代方案,提出了直接定价和中介定价两种模式,以及交易级别计量和区块级别计量两种计量方式。文章核心观点是区块级别计量通常能实现更好的资源分配,并且更容易与中介定价相结合,从而解锁可扩展性改进。文章还讨论了四个案例,涉及状态预热、EIP-7623 gas消耗、区块级别基本费用和区块级别数据可用性。
非常感谢 Ansgar Dietrichs、Matt “Lightclients”、Toni Wahrstätter、Thomas Thiery、Davide Crapis、Dankrad Feist、Julian Ma、Vitalik Buterin 以及其他人在这些想法上的讨论和评论。错误仍由我承担。
在这篇文章中,我们考虑了用于metering和pricing区块链资源的其他提案。许多这些提案之前已经讨论过(有时是广泛的),我们的目标是提供一个统一的方法来考虑它们的机会和权衡。这是更大探索的第一步,这将要求我们精确地阐述下面提出的论点,但我们希望说服读者,这个框架是有用的,并暗示它的一些特征和实例化。
费用市场会让用户和协议通过定价机制达成某种资源分配。这些资源由节点提供,节点在生成区块或接收、执行和/或验证区块内容的过程中消耗这些资源。我们可以区分获得费用市场的两种方法:
从初步来看,中介的观点感觉绝对更糟:如果我们有权访问直接定价,为什么要费心让第三方来中介用户和协议之间的交互?为了理解这一点,我们考虑两种不同的meter协议提供给用户的资源的方法:
请注意,我们可以比上面提出的两个计量级别更精细或更粗略,但为了本文的目的,我们只关注这两个级别。
计量和定价在不同的级别上运作。首先,我们必须确保我们对交易或区块所使用的资源有正确的度量,因为这告诉我们通过将测量的资源与我们可用的资源预算进行比较,我们可以对网络节点施加多少负载。计量过程输出以 gas、bytes、blobs 或任何其他此类数量表示的度量。
一旦资源被计量,就应该对它们进行定价,即用户应该为这些资源的使用付费,要么是为了在节点提供这些资源时报酬节点(们),要么是为了表明当多个用户竞争这些稀缺资源时,获取这些稀缺资源的更高意愿,或者两者兼而有之(大致来说,这就是优先级费用和基本费用分别表示的)。
在本文中,我们提出了四个案例研究,并讨论了三个声明:
加粗声明 1: 区块级别计量通常能获得更好的资源分配。
我们的意思是,通过使用整个区块中消耗的资源的信息,区块级别计量放宽了用户和区块生产者面临的预算约束,从而允许我们的资源发挥更大的作用。这听起来很棒,那么我们如何才能基本免费地获得区块级别计量呢?
加粗声明 2: 区块级别计量很容易与资源的中介定价配对。
通过引入一个负责从协议“批量”购买资源的 broker,并让 broker 找出能够最大程度发挥其资源的分配方案,协议无需关心直接定价资源。这为我们提供了一种通过区块级别计量来解锁可扩展性改进的通用方法。
加粗声明 3: 一些通过区块级别计量解锁的理想分配无法通过资源的直接定价令人满意地获得。
第三个声明是一个悬而未决的问题。区块级别计量增加了我们资源分配的可行空间,即可能允许创建比交易级别计量原本允许的更多的区块。直接定价意味着协议有能力执行公平定价,即考虑整个区块的资源分配背景,回扣并在所有使用该分配的用户之间合理地分配成本。我们是否总是能有效地找到一个公平的定价规则?在某些情况下,我们将在下面讨论,这看起来相当简单。是否存在并非如此的情况?
在建立一些形式之后,我们将继续讨论与我们在此处提出的加粗声明相关的 4 个案例研究。
Resonance 论文(Bahrani, Durvasula, 2024)为我们提供了一个很好的基础来回顾一些已经存在一段时间的想法,并将它们组织在一个连贯的框架下,因此我们在这里借用了一些符号。在论文中,定义了一个抽象的成本函数,它确定了节点使用的计量方法。在这篇文章中,我们稍微展开了这个抽象,以便比较应用于同一台机器的不同成本函数。
我们假设有一台机器,它具有一些资源模型,例如,它提供计算、带宽和存储。一组交易 T 从这台机器请求资源。当交易的某个子集 X \subset T(为本文的目的假定为有序的)在这台机器上运行时,这台机器会产生费用 c(X),我们可以假定该费用属于某个多维资源空间。本文的高层论点是,通过将积极的外部性暴露给它的成本模型 c,这台机器能够利用这些外部性来为其用户提供更好的定价。
例如,正如我们将在下一节中介绍的那样,假设有两台相同的机器 A 和 B,它们配备了不同的成本模型 c_A 和 c_B。假设 c_A 编码了机器 A 计量对某个交易中的一块状态的访问,而不考虑是否在同一区块内的先前交易中访问过这块状态。假设 c_B 确实在其计量中编码了这一点,即当一块状态第二次被访问时,即使在不同交易的上下文中,也会收取较低的 gas 量。那么,尽管机器 A 与机器 B 相同,可以在整个区块的执行过程中缓存一块状态,但机器 A 并未meter为如此,因此认为它的成本明显比机器 B 的成本更糟,机器 B 正确地计量了其缓存能力。当成本明显更糟时,机器 A 必须告知其用户,他们所做的操作应导致更高的资源消耗,并且必须以此定价。
我们可以引入类似于成本模型拓扑的概念。引入拓扑是为了考虑集合的子集,较粗糙的拓扑对集合中包含的点的“邻域”的区分不那么精确。使用较粗糙的拓扑,机器成本模型可以掩盖当执行两个相似但不同的操作时的行为差异,例如,它可以认为在两个不同的交易中两次加载同一块状态具有与在两个不同的交易中加载两块不同的状态相同的属性和成本。具有更高区分能力的成本模型可以更准确地为操作序列定价,能够区分对机器产生不同成本的两种情况。
在我们的文章中,我们假设无论何时我们有更精细的成本模型,我们都只能改进我们的计量并锁定节省。我们调用一个成本模型 c_1 比其他模型 c_2 更粗糙,只要对于所有可能的分配 X,c_1(X) \geq c_2(X),即只要 c_1(X) 弱 Pareto 支配 c_2(X),即只要 c_1 计量的资源使用量等于或高于 c_2。
加粗声明 1: 区块级别计量通常能获得更好的资源分配。
请注意,我们的资源约束通常有两种形式:
在任何一种情况下,但在突发约束的情况下可能更是如此,这些限制约束了我们机器的已选择成本模型,例如,告诉我们不能使用超过 g 量的 gas。如果当前的 gas 计量计划编码的成本模型比它需要的更粗糙,即如果网络上的机器实际上能够实现更精细的成本模型,那么我们立即可以访问更大的可能分配空间。
实际上,假设交易级别计量 c^t 比区块级别计量 c^b 更粗糙,那么对于任何分配 X,如果 X 在 c^t 下是可行的,我们有 L \geq c^t(X),其中 L 是资源限制向量。这意味着 X 在 c^b 下也是可行的,因为 L \geq c^t(X) \geq c^b(X)。
为了证明加粗声明 1,我们应该证明区块级别计量比交易级别计量更精细。当然,这取决于我们如何设置 c^b,但我们可以将注意力限制在满足某些属性的计量计划上,例如:
后者非常同义反复,因为我们有 c^t(X) = \sum_{x \in X} c^t([x]),假设交易级别计量仅使用单个交易上下文中的信息来计量成本。因此,我们只是设计了一个定义,它为我们提供了加粗声明 1 的证明。
我们真正想要表达的是,在最坏的情况下,区块级别计量不会使事情变糟,但在最好的情况下,会有所改进。换句话说,区块级别计量可能会捕捉到一些积极的外部性,但永远不会捕捉到任何消极的外部性。如果某个交易中发生的事情提高了未来交易中发生的事情的边际成本,则会发生消极的外部性。实际上,可能存在一些非常微弱的消极外部性。向状态添加一个新条目可能会提高在未来交易中访问另一块状态的成本,因为状态的大小在此期间已增长,但这是一种微不足道的增加,可以忽略不计。此外,今天访问状态的 gas 成本已固定为某个值,并且本身不会随着状态的总体大小而增加。
请注意,我们也没有在加粗声明 1 中定义“更好”是什么意思,但即使是一个简单的模型,例如假设每个用户都有其交易被处理的价值,也会告诉我们,在 c^b 下有更多的分配 X 可供选择,这意味着我们可以找到比在 c^t 下更有效的分配,即实现更大价值的分配。
每当机器的资源模型受益于同一区块内执行的交易之间的交互时,区块级别计量都是合理的。例如,如果节点的资源模型在当前区块的执行期间缓存当前区块中访问的任何状态,那么在状态本身的定价中反映这一点是有意义的。
以太坊已经具有这种能力。在访问一块状态之前,它是“冷的”。访问一块冷状态会花费用户 2100 gas 来进行此访问,在这种情况下是读取该状态的值。如果在同一交易中再次访问该状态,则其成本仅为 100 gas,因为该状态现在是“热的”。
然而,一旦交易完成执行,此状态就会重置,并且如果在下一个交易中访问同一块状态,则首先以“冷”状态访问。这不能很好地映射到节点的实际资源模型,节点通常确实会将一块状态在缓存中保留到整个区块执行期间,如果不是更长的时间。通过准确地定价在下一个交易中再次访问该状态时该状态确实是“热的”这一事实(如果机器可以有效地执行缓存),则可以立即节省 gas!
我们将为这部分和其余部分引入一些符号。交易由 t 给出,来自用户生成的交易集合 T。节点执行 X \subseteq T,这是来自可用交易集合的有序交易子集。然后,节点会产生(机器)成本 c(X),我们可以将其视为节点可用的最优化资源模型中的某些物理的、真实的成本,例如,在整个区块的过程中缓存热状态,而不是在每个交易之后重置缓存。
假设我们有两个访问相同状态的交易 t_1 和 t_2。通常,无论何时我们有两个交易在同一上下文中与其在不同上下文中单独执行相比产生更小的成本,我们就有机会节省成本:
c([t_1, t_2]) < c([t_1]) + c([t_2])
在这里,我们只是简单地意味着在访问 t_2 之前在 t_1 中预热状态(同时进行缓存)比在 t_1 中预热状态并再次预热它以执行 t_2 给节点带来的成本更低。
在这种情况下,对于交易执行的区块级别计量,直接定价相当简单。我们可以简单地在两个用户之间分摊成本,产生:
\pi_1 = \frac{c([t_1, t_2])}{2}
\pi_2 = \frac{c([t_1, t_2])}{2}
其中 \pi_1 和 \pi_2 是用户支付。在这种情况下,由于总成本是 2100 + 100,因此每个用户将支付 1100 gas(2200 除以 2)。
最后,过去也讨论过“区块级别访问列表”的想法(例如,此处 和 此处)。在此模型中,区块生产者负责在例如区块头中提供一个访问列表,该列表声明该区块执行将触及的所有状态。如果在区块执行期间触及了未声明的状态,则该区块被视为无效。此元数据有助于机器事先批量加载相关状态,并且可以向区块生产者收取机器在此初始加载期间执行的所有“冷”访问费用。
现在我们来看一个案例,其中交易级别定价会产生一种短视的激励,即利用交易的语义来从在该交易上下文中发生的节省中获益。
由 Toni Wahrstätter 和 Vitalik Buterin 提出的 EIP-7623:增加 calldata 成本 的目的是为 calldata(以太坊交易消耗的资源之一)提供不同的定价规则。设置的定价规则是,在 EIP-7623 下的最坏情况下,交易包含的 calldata 比今天最坏情况包含的 calldata 要少得多。这是通过提高超过某个点的 calldata 的 gas 成本来实现的。然而,认识到 calldata 繁重的交易不会对添加进一步的执行产生危害(calldata 的存储和执行是两个在某种程度上正交的资源提供方式),因此定价规则忽略了交易在 calldata“最大化”后执行的边际执行。确切地说,定价规则由下式给出:
tx.gasUsed = {
21000
+
max (
STANDARD_TOKEN_COST * tokens_in_calldata
+ evm_gas_used
+ isContractCreation * (32000 + InitCodeWordGas * words(calldata)),
TOTAL_COST_FLOOR_PER_TOKEN * tokens_in_calldata
)
从这段代码中,读者或许可以推断出,一旦max
函数中的第二项超过第一项,定价规则就会仅根据 calldata 中的 token 数量(即,大致根据 calldata 的长度)来对交易收费。相反,如果第一项仍然是两者中最高的,则交易不仅根据 calldata token 的数量收费,而且还根据其 evm_gas_used
收费。换句话说,一旦对交易收取了足够的 calldata 费用,交易就会“最大化”,并且在该交易框架内执行的执行不会被收费。
正如 wjmelements 在 Ethereum Magicians 线程中 为 EIP 指出的那样,这允许进行“gas 避难”。也就是说,假设 Alice 需要大量的 calldata,而 Bob 希望支付一些 gas 费用。在某些情况下,Alice 可能会发现通过将两个交易“捆绑”到一个元交易中来“庇护”Bob 的交易是有利可图的。
形式上,假设某些成本模型 c^t 配备了 EIP-7623。然后我们会发现,如果 Alice 的交易是 t_A,而 Bob 的交易是 t_B,并且它们连接成一个元交易是 t_A || t_B,
c^t([t_A||t_B]) < c^t([t_A, t_B])
换句话说,机器奖励 Alice 和 Bob 将他们的交易合并为一个交易,对整体执行的收费低于在同一区块中分别执行的两个交易。
gas 避难是一个问题吗?如果成本模型是合理的,即如果确实允许一个 calldata 最大化的交易以零边际成本执行,那么允许用户从这种节省中获益并不是很好的 UX,正如 wjmelements 指出的那样。另一方面,对于这个特定案例,Toni (Nerolation) 认为最大化应该是一个足够罕见的案例,以至于不必太担心 gas 避难变得普遍。
gas 避难可以被视为中介分配的一个特定实例化,其中某些用户必须发出元交易,该元交易合并来自其他不同用户的意图或交易。如果这是我们最终的归宿,我们不妨完全倾向于此,并消除元交易固有的一些问题。首先,对于协议而言,元交易只是一个交易,协议无法区分是单个用户在做事还是一个捆绑包代表更多用户在做事。这意味着,如果捆绑的用户希望从节省成本中获益,他们将任由捆绑者的摆布。相反,如果可以在保持捆绑用户交易的实际交易的同时实现成本模型,则用户可以立即从包含列表中受益,以防止他们的审查。
在这里,区块级别计量也很有价值。我们可以这样做,即如果区块中的任何交易最大化了 calldata,那么一些执行就会被免费解锁,即结束后在统计所有成本时不会向 broker 收费。在此成本模型 c^b 下:
c^b([t_A, t_B]) = c^t([t_A||t_B]) < c^t([t_A, t_B])
与没有 EIP-7623 的成本模型相比,这会产生一个更精细的成本模型,同时消除了 gas 避难的 UX 难题。请注意,无论这些可能的 UX 问题如何,EIP-7623 仍然实现了其限制执行和 calldata 维度上最大 gas 使用量的目标。在存在捆绑者(他们捆绑 ERC-4337 UserOp 并寻求通过摊销来节省此类成本)的环境中,UX 问题也不是很重要。有关帐户抽象和区块级别费用市场之间关系的更多讨论,请参见结论。
另请注意 Ben Adams 提出的 EIP-7778:防止区块 gas 走私,它解决了一个相关但不同的问题。当交易因某些操作(例如,将帐户的值设置为零或设置为原始值)而获得 gas 退款时,就会发生 gas 走私。某些操作会导致节点资源方面的直接成本降低,而另一些操作则会在将来提供缓解,例如,将存储插槽设置为零会减少状态大小,从而使将来的访问更便宜。如果一个交易将许多插槽设置为零,则现在会因将其写入状态而产生费用,并且将来会获得收益,这允许发送者现在从退款中使用更多 gas,从而放宽了突发资源约束。
EIP-7778 对 gas 市场的影响取决于其实现的更多细节,即 EIP-1559 更新规则是使用 EIP-7778 计量的“突发 gas”(即,不计算未来获得的收益的退款)还是今天计量的“全 gas”。如果使用突发 gas,则 EIP-1559 将“更快地填满”。例如,假设我们的一半需求来自仅使用突发资源的交易,即“突发 gas”计量等于“全 gas”计量的交易。假设我们另一半的需求是交易以退款形式获得一半的成本,即它们的“突发 gas”度量是它们的“全 gas”度量的两倍。
仅突发需求 | 突发 + 退款需求 |
---|---|
需求 750 万突发 gas | 需求 750 万全 gas = 1500 万突发 gas - 750 万 gas 退款 |
这不像前面的示例中那样是在机器的资源模型中移动东西,而是放宽了对虚拟机器的资源模型提供的资源的约束。作为历史花絮,具有区块级别基本费用的 EIP-1559 的区块级别版本是最先提交到规范的。如果我没记错的话,最终决定改为发布交易级别 EIP-1559 而不是区块级别 EIP-1559,因为区块级别版本感觉像是交易级别 EIP-1559 的附加功能,因此被认为应该有自己的单独 EIP,但从未实现。
那么有什么区别呢?今天,为了使其有效包含在区块中,交易必须声明大于区块引用的baseFeePerGas
值的maxFeePerGas
值。换句话说,如果交易不愿意支付至少基本费用才能进入区块,那么它根本无法被包含在内。这消除了无 gas 交易(其中新帐户可以在余额中没有任何资产的情况下进行交易)的用例。在 Mike Ippolito 和 Hasu 录制的 Bell Curve 播客中,Hayden Adams (Uniswap) 最近指出了这一点。[1]
但是,可以对 gas 执行区块级别计量,要求在整个区块消耗的所有 gas 的区块结束时汇总支付基本费用,并“修复”此用例。在区块结束时,如果区块使用的 gas 量为 g(X),并且现行的基本费用为 p,那么我们向区块生产者收取 g(X) \cdot p 的费用。由他们在区块执行终止时找出一种方法,使其余额中至少有 g(X) \cdot p。
将其与交易级别基本费用进行比较,交易级别基本费用的约束是,如果用户交易消耗了 g(t) gas,那么必须从用户的余额中至少收取 g(t) \cdot p(不考虑支付给区块生产者的优先级费用)。将约束放宽到基于区块的约可以恢复 broker 随意包含交易的代理权,只要他们可以支付其协议的资源成本即可。协议的成本是 c(X),协议的价格为 g(X) \cdot p。
在 Maryam Bahrani 今年在 Devcon 上的演讲中定义了“代理权”。虽然 EIP-1559 使我们离“代理”谱系更远,但基于区块的基本费用取而代之的是介于代理端和 EIP-1559 之间,不像完全不受约束,但比 vanilla 版本(交易级别版本)的 EIP-1559 受到的约束更少。
那么,EIP-1559 是否会失去其作为用户市场价格预言机的某些显着性,因为在基于区块的基本费用规则下,用户可以在不实际从自己的口袋里支付基本费用的情况下进入?在某种意义上是的。当区块中有足够的空间容纳所有支付基本费用的交易以及 broker 希望自费包含的交易时,就不会有问题。但是,当拥塞严重时,声明他们愿意支付至少基本费用的交易者可能会被对 broker 更有价值的交易“挤出”。
总的来说,基于区块的基本费用无助于我们增加 gas 限制或 gas 生产力,但可能是一个简单的改进,可以允许区块生产者进行更大的控制,同时保留一个相当不错的拥塞预言机。好吧,“简单”可能并不完全正确。正如我 12 月初从 Lightclients 先生那里学到的那样,考虑到 CL 和 EL 的分离(参见脚注 [2]),这里面有很多东西超出表面所见。
在 Vitalik 的“使 EIP-1559 更像 AMM 曲线”文章中讨论了一种中介定价。正如 Vitalik 指出的那样:
请注意,由于销毁的非线性,需要调整 EIP 1559。有几种选择:
- 提案者支付销毁费用,并且来自交易的全部费用(包括基本费用组成部分)归提案者所有。请注意,这仍然需要一种算法来确定在以
basefee + tip
形式指定其 gas 价格的交易中,basefee
被认为有多高。 [Barnabé 的注释:这是具有区块级别基本费用的中介定价!]- 交易发起者支付等于其可以支付的最大值(即,在
excess_gas_issued + TARGET * SLACK_COEFFICIENT
时的基本费用)的基本费用,然后在区块执行结束时,每个人都获得退款,以便最终结果是每个人都支付了隐含的平均基本费用(“隐含的平均基本费用”是(eth_qty(excess_gas_issued + gas_in_block) - eth_qty(excess_gas_issued)) / gas_in_block
;退款是最初支付的基本费用和此金额之间的差额)[Barnabé 的注释:这是具有交易级别基本费用的直接定价!]
正如我在回复中辩称的那样,协议执行直接定价会给区块生产者带来一个更棘手的区块构建问题:
对于平均隐含基本费用支付(或可能任何取决于区块中包含的交易数量的基本费用确定规则),由于交易
tip = min(premium, fee cap - basefee)
和交易fee cap
之间的交互,矿工需要解决一个重要的优化问题。例如,与低溢价但高费用上限的交易相比,高溢价但低费用上限的交易可能在更大的区块(具有更高的隐含基本费用)中变得不那么有价值。之前已经注意到,要找出在 EIP-1559 下如何重新排序和访问交易池。可能存在围绕此问题的良好启发式方法,实际上可能与交易池将使用的启发式方法相同。
我们的最后一个案例研究与社区在多个地方讨论过的想法有关,包括 Dankrad Feist 在“在可执行信标链上提交预状态而不是后状态”中提出的想法。对于受过协议文献训练的读者来说,“免费 DA 问题”似乎困扰着许多最有吸引力的修复各种问题的提案。特别是,区块共同创建(多个参与者同时在区块的副本上进行操作)已被认为是一件有价值的事情。然而,允许许多(希望是不协调的)参与者将交易输入到账本中,并输出一个从所有输入合并后有效的账本之间存在内在的紧张关系。
例如,两个参与者可能会各自添加相同的交易,或者两个参与者可能会添加冲突的交易,例如,来自同一用户的两个具有相同 nonce 的不同交易。如果这些交易被写入链上,一个理性的参与者可能会希望发布一个无效交易,该交易在未执行的情况下,由于共识是在交易内容上形成的,因此获得了数据可用性。由于其余额可能已被来自同一用户的先前(有效)交易耗尽,因此无效交易可能无法支付其数据的占用空间。更一般地,当链执行异步执行时,这会成为一个问题,即在节点稍后执行交易数据之前,将交易数据提交到副本。
存在一些部分解决方案,例如,从不在链上写入无效的交易。在 FOCIL 中,包含列表 (IL) 中包含的交易永远不会写入链上,直到它们在区块中交付。为了确保区块的有效性和区块对列表的满足,运行包含在列表但未包含在区块中的交易,以确定它们可能已被有效包含。因此,永远不会在链上写入无效的交易。问题解决了。
但是,FOCIL 模型明确是由分叉选择驱动的,这有其自身的权衡,并且人们可能更喜欢一种所有由不协调的参与者生成的“微型区块”都写入链上,然后再由接收到它们的节点执行的模型。例如,如果决定根据协议中 FOCIL 委员会成员生成好的 IL 来奖励他们,那么这对于此情况将非常重要。在这种情况下,微型区块中的无效交易会消耗数据可用性,并且应该为此付费。[3]
存在更强大的解决方案,例如 Monad 的 运输成本(carriage cost)。在此模型中,用户会留出一些余额来支付交易的包含费用,然后再执行该交易并确定其稍后是否有效(一种异步执行模型)。尽管此解决方案更接近直接定价,但它代表了与当前以太坊帐户模型的相当大的背离,因此在这里中介定价也可以提供帮助。
我们在这里比较两个成本模型:
然后,对于包含无效交易的 X,我们有 c^b(X) < c^t(X),即 c^b 比 c^t 更精细。通过获得一个允许将无效交易包含在副本中的成本模型(仅仅是因为它没有完全排除这些交易),我们还可以让自己考虑可能依赖于包含无效交易的区块构建机制。
当 broker 被收取包含在区块中的无效交易的成本时,尤其是当没有一个 broker 负责确定交易和资源的分配时,这并不能告诉我们中介定价的 UX 是什么样的。我们在此提供一些想法,但显然需要对这些问题进行更多的工作。
[1] 虽然以太坊具有作为无需许可结算层的属性,但这以一定的成本为代价,即今天的零售链最终比许可链贵,而许可链以更便宜的价格提供几乎相同的结算保证。
[2] 轻客户注意到,如果 EL 认为 L1 共识存在 gas 限制问题,他们可以简单地通过仅验证 CL 证明来避免区块生产者的潜在违规行为。
[3] 也就是说,与包含列表相关的经济性应该为链中的参与者提供有意义的价值,例如以奖励给那些通过他们的包含列表支持安全性的参与者的方式。如果奖励没有材料化,我们就需要确保共识不被破坏。
希望上面的四个部分能让你信服两件事:
有了这些,我们可以着眼于更难获得的东西,例如适用于并行执行的费用市场(例如,参见 2017 年的这个帖子)。确保将交易正确分配给线程是一个难题,但我们可以将其外包给经纪人,让他们为协议找出这一点。然后,协议只需要根据一个足够简单的模型来计量成本,该模型考虑了并行性,例如,计量一个区块在一个线程上达到最大值的最坏情况,与计量一个在两个不同线程上执行更多操作的区块的较少成本,即更好地利用协议公开的资源。
甚至尝试区块级别计量也存在反驳的论点。有些人可能会争辩说,随着账户抽象的兴起,我们可能很快就会看到一个区块实际上变成一个大的交易,因此交易级别的计量和区块级别的计量变得相同,只要成本模型(例如,考虑状态缓存或对无效交易的数据收费)是这样,上述大多数观点都会变得毫无意义。事实上,正如我们之前关于“嵌入式费用市场“的文章所论证的那样,我们在这里讨论的一些问题与账户抽象的设置相关。
对中介定价也有反对的论点。是的,我们已经有了一个复杂的区块生产供应链,但是否明智地进一步增加它的责任?这里有一些想法:只要包含列表继续确保用户良好的包含属性,经纪人就没有太多方法可以滥用其资源分配者的地位。有人可能会争辩说,构建者已经在执行此功能,通过权衡某些交易与其他交易,例如,MEV 交易与更重的 blobs。即使这些成本可能不像某些理想化的直接定价那样公平地重新分配,利用他们对竞争的精明来实现减少向用户收取的总成本的目标,考虑到搜索者在这些指标上的竞争历史,仍然可能让我们感到足够满意。我们希望看到足够的竞争来确保经纪人不会垄断通过更智能的资源分配解锁的盈余,但我们也会期望最有效的资源分配很快就会成为基本要求,因为搜索者在这些指标上的竞争历史悠久。
[1] 请注意,存在一种通过使用第三方协调器从所需的无资金账户发起交易来规避此问题的方法,方法是事先私下资助协调器。阅读更多关于 Toni 的“Gas Ticketing - A Backstage Pass to Ethereum Blocks”提案。
[2] 区块提议者(一个 CL 账户)将 feeRecipient
变量设置为他们的 EL 地址,假设 block.coinbase
角色。如果允许区块级别的基础费用,block.coinbase
可能会被迫支付 baseFeePerGas * block.gasUsed
与从区块中包含的交易中收到的优先费用之和之间的差额,如果他们希望赞助交易。在这种情况下,如果没有更复杂的机制,区块提议者可以设置一个任意的 feeRecipient
来让一些 EL 账户(区块提议者可能无法自己控制)来支付这个差额。我们需要一些类似于来自声明的 feeRecipient
地址的签名来“同意”被扣除。
[3] 尽管如此,检查未包含的交易是否确实无效的成本很高,而且这种成本仍然没有得到充分的收费。
[4] 随着并发提议者数量的增加而增加的支付或抵押品锁定与 Jonah Burian 提出的“Censorship Insurance Markets for BRAID”具有相似的味道。这可以被认为是中介定价的一个案例,其中审查风险直接从用户付费转移到协议,转移到“审查保险公司”,从而放宽了个人用户的约束,转而支持由保险公司承担的总体约束。
- 原文链接: ethresear.ch/t/block-lev...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!