以太坊下一个里程碑升级?V神详解EIP-4844究竟是什么

作者:Vitalik Buterin以太坊创始人Vitalik Buterin近日针对与Proto-danksharding(又名 EIP-4844)有关的疑问近了解答。Danksharding为以太坊提出的新分片设计,这种技术究竟能带来什么?Danksharding 是为以太坊提出的新分片设计,与之前的设计相比,它引入了一些显着的简化。自 2020 年以来的所有最近的以太坊分片提案(包括 Danksharding 和之前的 Danksharding)与大多数非以太坊分片提案的主要区别在于以太坊以汇总(Rollup)为中心的路线图:以太坊分片没有为交易提供更多空间,而是为数据提供,以太坊协议本身不会尝试解释。验证 blob 只需检查 blob 是否可用,即是否可以从网络下载。这些 blob 中的数据空间预计将由支持高吞吐量事务的第 2 层(Layer2)Rollup协议使用。Danksharding 引入的主要创新是合并费用市场:不再有固定数量的分片,每个分片都有不同的区块和不同的区块提议者,在 Danksharding 中,只有一个提议者选择进入该槽的所有交易和所有数据.为避免这种设计对验证者提出高系统要求,我们引入了提议者/构建者分离 (PBS):称为区块构建者的一类特殊参与者竞标选择slot的权利,提议者只需要选择出价最高的有效header即可。只有区块构建者需要处理整个区块(在这里,也可以使用第三方去中心化预言机协议来实现分布式区块构建者);所有其他验证者和用户都可以通过数据可用性采样非常有效地验证区块(请记住:区块的“大”部分只是数据)。Proto-danksharding(又名 EIP-4844)是一个以太坊改进提议(EIP),用于实现构成完整 Danksharding 规范的大部分逻辑和“脚手架”(例如交易格式、验证规则),但尚未实际实现任何分片。在 proto-danksharding 实现中,所有验证者和用户仍然必须直接验证完整数据的可用性。proto-danksharding 引入的主要特征是新的交易类型,我们称之为一种带有 blob 的交易。带有 blob 的交易与常规交易类似,不同之处在于它还携带称为 blob 的额外数据。 Blob 非常大(~125 kB),并且比类似数量的calldata便宜得多。但是,EVM 执行无法访问 blob 数据; EVM 只能查看对 blob 的承诺。因为验证者和客户端仍然需要下载完整的 blob 内容,所以 proto-danksharding 中的数据带宽目标为每个插槽 1 MB,而不是完整的 16 MB。然而,由于这些数据没有与现有以太坊交易的 gas 使用量竞争,因此仍然有很大的可扩展性好处。这与平均负载和最坏情况负载之间的差异有关。今天,我们已经遇到了平均块大小约为 90 kB 的情况,但理论上可能的最大块大小(如果块中的所有 30M gas 都用于调用数据)约为 1.8 MB。以太坊网络过去处理的区块接近最大值。但是,如果我们简单地将 calldata gas 成本降低 10 倍,那么尽管平均区块大小会增加到仍然可以接受的水平,但最坏的情况会变成 18 MB,这对于以太坊网络来说实在是太多了。当前的 gas 定价方案无法将这两个因素分开:平均负载与最坏情况负载之间的比率取决于用户在 calldata 与其他资源上花费多少 gas 的选择,这意味着 gas 价格必须是根据最坏情况的可能性设置,导致平均负载不必要地低于系统可以处理的负载。但是,如果我们改变 gas 定价以更明确地创建一个多维费用市场,我们可以避免平均情况/最坏情况负载不匹配,并在每个区块中包含接近我们可以安全处理的最大数据量的数据。 Proto-danksharding 和 EIP-4488 就是这样做的两个提议。以太坊下一个里程碑升级?V神详解EIP-4844究竟是什么EIP-4488 是解决相同平均情况/最坏情况负载不匹配问题的较早且更简单的尝试。 EIP-4488 使用两个简单的规则来做到这一点:硬限制是确保平均情况负载的较大增加不会导致最坏情况负载增加的最简单方法。天然气成本的降低将大大增加汇总的使用,可能会将平均块大小增加到数百 KB,但硬限制将直接阻止包含 10 MB 的单个块的最坏情况可能性。事实上,最坏情况下的块大小会比现在小(1.4 MB 对 1.8 MB)。Proto-danksharding 而是创建了一种单独的事务类型,可以在大型固定大小的 blob 中保存更便宜的数据,并限制每个块可以包含多少 blob。这些 blob 无法从 EVM 访问(只有对 blob 的承诺),并且 blob 由共识层(信标链)而不是执行层存储。EIP-4488 和 proto-danksharding 之间的主要实际区别在于 EIP-4488 试图最小化今天所需的更改,而 proto-danksharding 今天进行了大量更改,因此将来升级到完全分片需要很少的更改。 尽管实现全分片(使用数据可用性采样等)是一项复杂的任务,并且在proto-danksharding 之后仍然是一项复杂的任务,但这种复杂性包含在共识层中。 一旦 proto-danksharding 推出,执行层客户端团队、rollup开发人员和用户不需要做进一步的工作来完成向全分片的过渡。请注意,两者之间的选择不是非此即彼的:我们可以尽快实施 EIP-4488,然后在半年后使用 proto-danksharding 跟进它。引用 EIP-4844:请注意,所有剩余工作都是共识层更改,不需要执行客户端团队、用户或Rollup开发人员的任何额外工作。EIP-4488 和 proto-danksharding 都导致每个插槽(12 秒)的长期最大使用量约为 1 MB。 这相当于每年大约 2.5 TB,远高于以太坊今天所需的增长率。在 EIP-4488 的情况下,解决此问题需要历史记录到期方案 (EIP-4444‌),其中不再需要客户端存储超过某个时间段的历史记录(已提出从 1 个月到 1 年的持续时间)。在 proto-danksharding 的情况下,无论是否实施 EIP-4444,共识层都可以实施单独的逻辑以在一段时间(例如 30 天)后自动删除 blob 数据。 但是,无论采用何种短期数据扩展解决方案,都强烈建议尽快实施 EIP-4444。这两种策略都将共识客户端的额外磁盘负载限制在最多几百 GB。 从长远来看,采用一些历史过期机制本质上是强制性的:完整分片每年会增加大约 40 TB 的历史 blob 数据,因此用户实际上只能将其中的一小部分存储一段时间。 因此,值得尽早设定对此的期望。以太坊共识协议的目的不是保证所有历史数据的永久存储。相反,目的是提供一个高度安全的实时公告板,并为其他去中心化协议留出空间进行更长期的存储。公告板的存在是为了确保在公告板上发布的数据可用时间足够长,以便任何想要该数据的用户或任何备份数据的长期协议都有足够的时间来获取数据并将其导入到他们的其他应用程序或协议中。一般来说,长期历史存储很容易。虽然每年 2.5 TB 对常规节点的要求太大,但对于专用用户来说非常易于管理:您可以以每 TB 约 20 美元的价格购买非常大的硬盘驱动器,这完全可以满足业余爱好者的需求。与具有 N/2-of-N 信任模型的共识不同,历史存储具有 1-of-N 信任模型:您只需要其中一个数据存储者是诚实的。因此,每条历史数据只需要存储数百次,而不是完整的数千个正在做实时共识验证的节点。存储完整历史记录并使其易于访问的一些实用方法包括:在更高级别的历史存储(例如每年 500 TB)下,一些数据被遗忘的风险会变得更高(此外,数据可用性验证系统会变得更加紧张)。这可能是分片区块链可扩展性的真正极限。然而,目前所有提出的参数都距离这一点非常远。一个 blob 是一个包含 4096 个字段元素的向量,范围内的数字:0 <= x < 52435875175126190479447740508185965837690552500527637822603658699938581184513blob 在数学上被视为表示具有上述模数的有限域上的次数 < 4096 多项式,其中 blob 中位置 i 处的场元素是对该多项式在 wi 处的评估。 w 是满足 w=1 的常数。对 blob 的承诺是 KZG 承诺对该多项式的一个哈希。 然而,从实现的角度来看,关注多项式的数学细节并不重要。 相反,只会有一个椭圆曲线点的向量(基于拉格朗日的可信设置),而 KZG 对 blob 的承诺将只是一个线性组合。 引用 EIP-4844 的代码:def blob_to_kzg(blob: Vector[BLSFieldElement, 4096]) -> KZGCommitment: computed_kzg = bls.Z1 for value, point_kzg in zip(tx.blob, KZG_SETUP_LAGRANGE): assert value < BLS_MODULUS computed_kzg = bls.add( computed_kzg, bls.multiply(point_kzg, value) ) return computed_kzgBLS_MODULUS 是上述模数,而 KZG_SETUP_LAGRANGE 是椭圆曲线点的向量,它是基于拉格朗日的可信设置。 对于实现者来说,现在将其简单地视为一个黑盒专用哈希函数是合理的。EIP-4844 没有使用 KZG 直接表示 blob,而是使用版本化哈希:单个 0x01 字节(表示这个版本)后跟 KZG 的 SHA256 哈希的最后 31 个字节。这样做是为了 EVM 兼容性和未来兼容性:KZG 承诺是 48 字节,而 EVM 更自然地使用 32 字节值,如果我们从 KZG 切换到其他东西(例如,出于量子抗性的原因),KZG承诺可以继续为 32 字节。Proto-danksharding 引入了两种预编译:blob 验证预编译点评估预编译。Blob 验证预编译是不言自明的:它将版本化哈希和 Blob 作为输入,并验证提供的版本化散列实际上是 Blob 的有效版本化哈希。 此预编译旨在供Optimistic Rollup使用。 引用 EIP-4844:点评估预编译将版本化哈希、x 坐标、y 坐标和证明(blob 的 KZG 承诺和 KZG 评估证明)作为输入。它验证证明以检查 P(x) = y,其中 P 是由具有给定版本化哈希的 blob 表示的多项式。此预编译旨在供 ZK Rollup使用。引用 EIP-4844:请注意,大多数主要的Optimistic Rollup设计都使用多轮防欺诈方案,其中最后一轮只需要少量数据。因此,可以想象,Optimistic Rollup也可以使用点评估预编译而不是 blob 验证预编译,而且这样做会更便宜。看:https://vitalik.ca/general/2022/03/14/trustedsetup.html对 powers-of-tau 可信设置如何工作的一般描述https://github.com/ethereum/research/blob/master/trusted_setup/trusted_setup.py所有重要的可信设置相关计算的示例实现特别是在我们的例子中,当前的计划是并行运行四个大小(n1=4096,n2=16),(n1=8192,n2=16),(n1=16834,n2=16)和(n1=32768,n2=16)的仪式(具有不同的秘密)。理论上,只需要第一个,但是运行更多的更大的尺寸,通过允许我们增加 blob 来提高未来的适用性尺寸。我们不能只是有一个更大的设置,因为我们希望能够对可以有效提交的多项式次数有一个硬限制,这个限制等于 blob 大小。可能的实用方法是从 Filecoin 设置开始,然后运行一个仪式来扩展它。包括浏览器实现在内的多种实现将允许许多人参与。不幸的是,使用 KZG 以外的任何东西(例如 IPA 或 SHA256)会使分片路线图变得更加困难。这有几个原因:因此,不幸的是,使用除 KZG 之外的任何东西的功能损失和复杂性增加远大于 KZG 本身的风险。此外,任何与 KZG 相关的风险都包含在内:一个KZG 故障只会影响Rollup和其他依赖于 blob 数据的应用程序,而不会影响系统的其余部分。KZG 承诺是在 2010 年的一篇论文‌中介绍的,并且自 2019 年以来已广泛用于 PLONK类型的 ZK-SNARK 协议中。然而,KZG 承诺的基础数学是椭圆曲线运算和配对的基础数学之上的一个相对简单的算术。使用的特定曲线是 BLS12-381‌,它是由 Barreto-Lynn-Scott在 2002 年发明的。椭圆曲线配对是验证 KZG 承诺所必需的,是非常复杂的数学,但它们是在 1940 年代发明并自 1990 年代以来应用于密码学。到 2001 年,提出了许多使用配对的加密算法。从实现复杂性的角度来看,KZG 并不比 IPA 更难实现:计算承诺的函数(见上文)与 IPA 的情况完全相同,只是使用了一组不同的椭圆曲线点常数。点验证预编译更复杂,因为它涉及配对评估,但数学与 EIP-2537(BLS12-381 预编译)实现中已经完成的部分相同,并且非常类似于 bn128 配对预编译(另请参阅:优化的 Python 实现)。因此,实现 KZG 验证不需要复杂的“新工作”有四个主要组成部分:1. 执行层共识发生更改(详见 EIP):2.共识层共识更改(请参阅 repo 中的此文件夹):3.内存池4.区块构建逻辑请注意,对于最小的实现,我们根本不需要内存池(我们可以依赖第二层交易捆绑市场),我们只需要一个客户端来实现区块构建逻辑。 只有执行层和共识层的共识变更需要进行广泛的共识测试,相对轻量级。 在这样的最小实现和所有客户端都支持区块生产和内存池的“完整”部署之间的任何事情都是可能的。Proto-danksharding 引入了一个多维的 EIP-1559 费用市场,其中有两种资源,gas 和 blob,具有单独的浮动 gas 价格和单独的限制。也就是说,有两个变量和四个常量:以太坊下一个里程碑升级?V神详解EIP-4844究竟是什么blob 费用以 gas 收取,但它是可变数量的 gas,它会进行调整,以便从长远来看,每个区块的平均 blob 数量实际上等于目标数量。二维性质意味着区块构建者将面临一个更难的问题:与其简单地接受具有最高优先级费用的交易,直到它们用完交易或达到区块gas限制,他们将不得不同时避免达到两个不同的限制。这是一个例子。假设 gas 限制为 70,blob 限制为 40。mempool 有很多交易,足以填满区块,有两种类型(tx gas 包括 per-blob gas):遵循幼稚的“降低优先费用”算法的矿工将用第一种类型的 10 笔交易(40 gas)填充整个区块,并获得 5 * 40 = 200 gas的收入。因为这 10 笔交易填满了 blob完全限制,他们将无法包含更多交易。但最优策略是采取第一种类型的 3 笔交易和第二种类型的 28 笔交易。这为您提供了一个包含 40 blob 和 68 gas的块,以及 5 * 12 + 3 * 56 = 228 的收入。以太坊下一个里程碑升级?V神详解EIP-4844究竟是什么执行客户端现在是否必须实施复杂的多维背包问题算法来优化他们的区块生产?不,有几个原因:由于这些原因,更复杂的费用市场动态不会大大增加中心化或风险; 事实上,更广泛应用的原则‌实际上可以降低DoS攻击的风险!今天的 EIP-1559 调整基础费用 b 以达到特定的目标gas使用水平 t,如下所示:以太坊下一个里程碑升级?V神详解EIP-4844究竟是什么其中 b(n) 是当前区块的基本费用,b(n+1) 是下一个区块的基本费用,t 是目标,u 是使用的gas。这种机制的一个大问题是它实际上并不针对t。 假设我们得到两个区块,第一个 u=0,下一个 u=2t。 我们得到:以太坊下一个里程碑升级?V神详解EIP-4844究竟是什么尽管平均使用量等于 t,但基本费用下降了63/64。所以basefee只有在使用率略高于t时才会稳定; 在实践中显然高出约 3%,尽管确切的数字取决于方差。一个更好的公式是指数调整:以太坊下一个里程碑升级?V神详解EIP-4844究竟是什么exp(x) 是指数函数 e^x,其中 e≈2.71828。 在 x 值较小时,exp(x)≈1+x。 但是,它具有与交易置换无关的便利特性:多步调整以太坊下一个里程碑升级?V神详解EIP-4844究竟是什么仅取决于总和 u1+...+u/n,而不取决于分布。 要了解原因,我们可以进行数学运算:以太坊下一个里程碑升级?V神详解EIP-4844究竟是什么因此,包含的相同交易将导致相同的最终基础费用,无论它们如何在不同区块之间分配。上面的最后一个公式也有一个自然的数学解释:术语 (u1+u2+...+u/n-nt) 可以看作是多余的:实际使用的总gas与打算使用的总gas之间的差异。当前基本费等于以太坊下一个里程碑升级?V神详解EIP-4844究竟是什么的事实清楚地表明,超出部分不能超出一个非常窄的范围:如果超过 8t∗60,那么basefee变为 e^60,高得离谱,没有人可以支付 它,如果它低于 0,则资源基本上是免费的,并且链将被垃圾邮件发送,直到超出部分回到零以上。调整机制完全按照这些术语工作:它跟踪实际总计 (u1+u2+...+u/n) 并计算目标总计 (nt),并将价格计算为差异的指数。 为了使计算更简单,我们不使用 e^x,而是使用 2^x; 事实上,我们使用了 2^x 的近似值:EIP 中的 fake_exponential 函数。 假指数几乎总是在实际值的 0.3% 以内。为了防止长时间的未充分使用导致长时间的 2倍完整区块,我们添加了一个额外的功能:我们不会让多余的区块低于零。 如果actual_total 低于targeted_total,我们只需将actual_total 设置为等于targeted_total。 在极端情况下(blob gas 一直下降到零),这确实破坏了交易顺序的不变性,但增加的安全性使得这是一个可接受的折衷方案。还要注意这个多维市场的一个有趣的结果:当最初引入 proto-danksharding 时,最初可能只有很少的用户,因此在一段时间内,一个 blob 的成本几乎肯定会非常便宜,即使是“常规的” 以太坊区块链活动仍然很昂贵。作者认为这种费用调整机制比目前的方法更好,因此最终 EIP-1559 费用市场的所有部分都应该转向使用它。有关更长更详细的解释,请参阅 Dankrad 的帖子‌。为方便起见,这里是 fake_exponential 的代码:def fake_exponential(numerator: int, denominator: int) -> int: cofactor = 2 ** (numerator // denominator) fractional = numerator % denominator return cofactor + ( fractional * cofactor * 2 + (fractional ** 2 * cofactor) // denominator ) // (denominator * 3)这里是用数学重新表达的核心机制,去掉了四舍五入:以太坊下一个里程碑升级?V神详解EIP-4844究竟是什么目标是将(QX)的许多实例拼接在一起,其中一个为每个 [2^k,2^(k+1)] 范围适当地移动和放大。 Q(x) 本身是 0≤x≤1 的 2^x 的近似值,选择用于以下属性:最后三个要求给出三个未知系数的三个线性方程,上面给出的 Q(x) 给出了唯一的解。近似值出奇地好; 对于除最小输入之外的所有输入,fake_exponential 给出的答案在 2^x 实际值的 0.3% 范围内:以太坊下一个里程碑升级?V神详解EIP-4844究竟是什么注意:此部分很容易过时。不要相信它会就任何特定问题给出最新的想法。

版权声明:
作者:春分财经
链接:http://www.mingyouwang.cn/yxlm/18871.html
来源:
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码