正如我关于资源定价的旧文章里详细讨论的那样,以太坊的 gas 实践上是为三种不同的资源付费。

  • 带宽 (事务中有必要被下载的数据)

  • 核算 (验证和履行事务所需时刻)

  •  (历史记载,但更重要的是状况,例如账户余额、nonces、合约代码和合约存储)

存储不同于其他两项开支。带宽和核算耗费的都是时刻短开支,它触碰到时刻短存储边界是这样的状况:一个节点在一个区块内能做多少核算或数据下载是有极限的,一旦该区块被打包了,下载和验证该区块的开支基本上都会消失 (未来只要少量同步节点需要处理它)。另一方面,存储则是一项永久的开支。假如一个区块的状况巨细添加 100 MB,这个区块在当下被处理没有问题,但当一系列这样的区块继续生成一个月后,整个以太坊会变得不行用。一时严峻的状况增加带来的突发影响是能够忽略不计的,但长时刻的影响则是最严峻的,由于每生成一个状况都永久地添加网络的负荷。

采用了 state expiry 和弱无状况计划后,长时刻来说状况的影响肯定会大大削减:状况不再永久成为网络的负担,一个状况将只会在一年内添加网络负荷,并且即使在那一年里,也只要少量节点需要实践存储该状况。但即使如此,这个长时刻开支仍是会存在的,且依然需要被定价。

存储巨细的一般状况 vs 最坏状况

无论是在当前的协议 (遍及认为是不行继续的),仍是有 state expiry 的改进计划,对状况建模的一个缺点是状况膨胀的一般与最坏状况间有巨大差异。想想当前的协议。当前状况的总容量是大约 5.5 亿个目标,或约 32 GB (不包括 trie 的开支)。假如咱们把在前一年没有被触及的状况都拿走,状况总容量很容易下降一半。

那最坏的状况是什么?创立合约代码按每字节 200 gas 来收费,假如咱们把一个区块分为三个事务,每个事务创立一个合约,咱们能够用 "12334800 gas + 3 * 55000 gas" 作为合约创立开支来创立三个 20558 字节的合约。假设均匀出块时刻是 13.1 秒,那么每年会出31556925 / 13.1 = 2408925 个区块,因而,一年的状况巨细增加是~61800 * 2408925 = 148871600381.67938字节,或大约 138 GB。

这接近 10 倍的差异是非常明显的!并且 16 GB 特别契合现实消费者的硬件 RAM (假如不行,咱们能够修改 gas 价格或状况失活期使其可行),但 138 GB 是办不到的。假如咱们能够使最坏的状况更接近于一般状况,那就更好了。

基于 EIP 1559 的两个计划

处理这个问题的一个天然办法是,用 EIP-1559 对时刻短和永久开支定价,但使调整期 (adjustment period) 不相同。关于时刻短的开支,在单个区块里会有 10% 的变化幅度。但是关于永久的开支,咱们会让价格调整得更慢。假如咱们以 AMM 开支曲线机制作为基础,关于存储,咱们能够考虑有一个条曲线代表每个月的目标比率是 1 GB,开支增加取决于咱们比目标高出多少。例如,每超出目标 1 GB,存储开支或许翻倍。在这个参数里,最坏状况区块的存储价格或许需要大约 3 天时刻才会翻倍。假如存储增加超过目标 10 GB,存储开支会比正常状况下高出 1000 倍,使得进一步填充存储在经济上变得不行行。

实现这点有两个办法:

  • 用 gas 购买存储。也就是说,用 SSTORE 创立一个新的存储槽,这会像今天相同耗费 gas,但耗费 gas 的数量是会变的。这有一个缺点,即保留了时刻点的过错鼓励 (用户会选择在周末 gas 价格低的时候添加存储,虽然这样对网络并没有优点)。

  • ETH 购买存储。事务 (和调用) 会需要提供 gas 以外的另一种资源 (咱们会称之为 mana ????),这种资源除了用不同的参数,会以与 gas 类似的机制进行收费。这个办法的缺点是它使调用规则变得复杂,且要求新增一个操作码 CALL。

还有两个混合选项:

  • 咱们能够用 ETH 来定价存储,但以 gas 来收费。(因而,假如基本费用上涨 2 倍,然后填充一个存储槽所需的 gas 会自动折半)。咱们能够把用来扩大存储的 ETH 从 EIP-1559 的 gas 价格更新规则、甚至区块 gas limit 里扫除出去。

  • 对 gas 进行更全面的变革,把它拆分为三个概念:gas、履行点、和存储点。1 gas = 1 wei;一个分配 gas 的事务只意味着它把一些 wei 转化为一种特别方法,可用于付出各种资源。在它如何在调用和子调用间的传递方法上,这种方法的运作方法与 gas 相同。但是,现在有两种开支是由 AMM 来管理的:履行点的开支和存储点的开支。不同于履行处理一个操作码现在耗费的是 N gas,它耗费的是 N 履行点,意味着对N * execution_point_costgas 收费。填充一个存储槽耗费 1 个存储点,因而storage_point_costgas 会被收费。

还需留意的是,state expiry 的路线图是包括移除 gas 返还的。这是由于技能原因,存储槽不能“变空”然后可用于返还;它们只能被设为 0,而 0 的记载有必要保留在状况里,直到该 epoch 结束且该状况失活。这大大削减了以前存储租金计划测验的困扰。

视野开拓

邓恩已经明白,利用行业自身的营销策略比什么都有用。他运用了20年以来在可口可乐公司学到的所有策略。在那里,他学会了加工食品最重要的规则之即:食品销售的重要性绝对不亚于食品本身。#2328-《盐糖脂》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注