未选择的路

本文探讨了以太坊协议开发过程中一些关键决策的替代方案,包括权益证明的简化、分片技术的复杂化、EVM功能的增减以及ETH供应分配的不同方式,并反思了这些决策对以太坊发展的影响。

未被选择的道路

以太坊协议开发社区在以太坊的早期阶段做出了许多决策,这些决策对项目的发展轨迹产生了重大影响。在某些情况下,以太坊开发者有意识地做出了一些改进,以修正我们认为比特币出错的地方。在其他地方,我们正在完全创造一些新东西,我们不得不想出一些东西来填补空白——但有许多选择可供挑选。而在其他地方,我们在更复杂的东西和更简单的东西之间进行了权衡。有时,我们选择了更简单的东西,但有时,我们也选择了更复杂的东西。

这篇文章将回顾一些我记得的这些分岔路口。其中许多特性在核心开发圈内进行了认真的讨论;其他一些几乎没有被考虑过,但也许真的应该被考虑。但即便如此,看看一个不同的以太坊可能会是什么样子,以及我们从中可以学到什么,仍然是有价值的。

我们是否应该采用一个更简单的权益证明版本?

以太坊即将合并的 Gasper 权益证明是一个复杂的系统,但也是一个非常强大的系统。它的一些特性包括:

  • 非常强的单块确认 —— 一旦一笔交易被包含在一个区块中,通常在几秒钟内,该区块就会被固化到无法回滚的程度,除非有大量节点不诚实或存在极端的网络延迟。
  • 经济最终性 —— 一旦一个区块被最终化,除非攻击者愿意损失数百万 ETH 被罚没,否则无法回滚。
  • 非常可预测的奖励 —— 验证者每个周期(6.4 分钟)都能可靠地获得奖励,减少了池化的动机。
  • 支持非常高的验证者数量 —— 与大多数具有上述特性的其他链不同,以太坊信标链支持数十万个验证者(例如,Tendermint 提供比以太坊更快的最终性,但它只支持几百个验证者)。

但构建一个具有这些特性的系统很难。它花了多年的研究、多年的失败 实验,并且总体上付出了巨大的努力。最终的输出也相当复杂。

如果我们的研究人员不必如此担心共识问题,并且有更多的脑力周期可用,那么也许,仅仅是也许,rollups 可能在 2016 年就被发明了。这让我们面临一个问题:我们是否真的应该对我们的权益证明有如此高的标准,即使是一个更简单、更弱的权益证明版本也比工作量证明现状有很大的改进?

许多人有一个误解,认为权益证明本质上是复杂的,但实际上有许多权益证明算法几乎与 Nakamoto PoW 一样简单。NXT 权益证明自 2013 年以来就存在,并且是一个自然的候选者;它有问题,但这些问题很容易被修补,我们本可以在 2017 年,甚至从一开始就拥有一个相当好用的权益证明。Gasper 比这些算法更复杂的原因仅仅是它试图实现比它们更多的目标。但如果我们在开始时更谦虚,我们本可以首先专注于实现更有限的目标。

在我看来,从一开始就采用权益证明会是一个错误;PoW 在扩大初始发行分布和使以太坊易于访问方面很有帮助,同时也鼓励了一个业余爱好者社区。但在 2017 年,甚至 2020 年切换到更简单的权益证明,可能会减少很多环境损害(以及由于环境损害而产生的反加密情绪),并且让更多的研究人才自由地思考扩展问题。我们最终是否必须花费大量资源来制作一个更好的权益证明?是的。但看起来我们最终无论如何都会这样做

分片的去复杂化

自从 2014 年开始研究分片概念以来,以太坊分片一直朝着越来越不复杂的方向发展。首先,我们有了内置执行和跨分片交易的复杂分片。然后,我们通过将更多责任转移给用户来简化协议(例如,在跨分片交易中,用户必须分别在两个分片上支付 gas)。然后,我们转向了以 rollup 为中心的路线图,从协议的角度来看,分片只是数据块。最后,随着danksharding的出现,分片费用市场合并为一个,最终的设计看起来像是一个非分片链,但在幕后发生了一些数据可用性采样的魔法,使得分片验证成为可能。

2015 年的分片 2022 年的分片

但如果我们走了相反的道路呢?实际上,有一些以太坊研究人员深入探索了一个更加复杂的分片系统:分片将是链,会有分叉选择规则,子链依赖于父链,跨分片消息将由协议路由,验证者将在分片之间轮换,甚至应用程序也会在分片之间自动负载均衡!

这种方法的问题在于:这些形式的分片在很大程度上只是想法和数学模型,而 Danksharding 是一个完整的、几乎可以实施的规范。因此,考虑到以太坊的情况和限制,我认为分片的简化和去雄心化绝对是一个正确的举措。也就是说,更有雄心的研究也扮演着非常重要的角色:它确定了有前途的研究方向,即使是非常复杂的想法通常也有“相对简单”的版本,这些版本仍然提供了很多好处,而且它很可能会在未来几年显著影响以太坊的协议开发(甚至第二层协议)。

EVM 中更多还是更少的功能?

实际上,EVM 的规范基本上在 2014 年年中就已经可以发布了,除了安全审计。然而,在接下来的几个月里,我们继续积极探索新功能,我们认为这些功能对于去中心化应用区块链可能非常重要。有些没有加入,有些加入了。

  • 我们考虑过添加一个 POST 操作码,但决定不这样做。 POST 操作码会进行一个异步调用,该调用将在交易的其余部分完成后执行。
  • 我们考虑过添加一个 ALARM 操作码,但决定不这样做。 ALARM 的功能类似于 POST,只不过是在未来的某个区块中执行异步调用,允许合约安排操作。
  • 我们添加了日志,它允许合约输出不触及状态的记录,但可以被 dapp 界面和钱包解释。值得注意的是,我们还考虑过让 ETH 转账发出日志,但决定不这样做——理由是“人们很快就会切换到智能合约钱包”。
  • 我们考虑过扩展SSTORE 以支持字节数组,但决定不这样做,因为担心复杂性和安全性。
  • 我们添加了预编译合约,这些合约以原生实现执行专门的加密操作,其 gas 成本比在 EVM 中执行要低得多。
  • 在发布后的几个月里,状态租金被反复考虑 再次再次,但从未被包含。它太复杂了。今天,有更好的状态到期方案正在积极探索,尽管无状态验证提议者/构建者分离意味着它现在是一个低得多的优先级。

今天来看,大多数添加更多功能的决定被证明是非常好的决定。没有明显的理由添加 POST 操作码。ALARM 操作码实际上很难安全地实现:如果区块 1...99999 中的每个人都设置了一个 ALARM 在区块 100000 执行大量代码会发生什么?该区块是否需要几个小时来处理?一些预定的操作是否会被推迟到后面的区块?但如果发生这种情况,那么 ALARM 甚至保留了什么保证?字节数组的 SSTORE 很难安全地实现,并且会大大扩展最坏情况下的见证大小。

状态租金问题更具挑战性:如果我们从一开始就实现了某种状态租金,我们就不会有一个围绕持久状态的标准化假设发展的智能合约生态系统。以太坊会变得更难构建,但它可能会更具可扩展性和可持续性。与此同时,我们当时的状态到期方案确实比我们现在拥有的差得多。有时,好主意需要多年才能想到,没有更好的办法。

LOG 的替代路径

LOG 可以以两种不同的方式完成:

  1. 我们可以让 ETH 转账自动发出一个 LOG。这将为交易所和许多其他用户节省大量精力和软件错误问题,并且会加速每个人对日志的依赖,这反而会帮助智能合约钱包的采用。
  2. 我们本可以不必费心去实现 LOG 操作码,而是将其作为一个 ERC:会有一个标准合约,它有一个 submitLog 函数,并使用以太坊存款合约的技术来计算该区块中所有日志的 Merkle 根。无论是 EIP-2929 还是区块范围的存储(相当于 TSTORE,但在区块后被清除)都会使这变得便宜。

我们强烈考虑过(1),但拒绝了。主要原因是简单性:日志只来自 LOG 操作码更容易。我们还(非常错误地!)期望大多数用户会迅速迁移到智能合约钱包,这些钱包可以使用操作码明确记录转账。

  1. 没有被考虑过,但事后看来,它一直是一个选项。(2)的主要缺点是没有 Bloom 过滤机制来快速扫描日志。但事实证明,Bloom 过滤机制对于 dapp 来说太慢了,无法对用户友好,因此现在越来越多的人使用 TheGraph 进行查询。

总的来说,似乎这两种方法中的任何一种都可能比现状更好。将 LOG 保留在协议之外会使事情更简单,但如果它在协议内自动记录所有 ETH 转账,它会更有用

今天,我可能会赞成最终从 EVM 中废除 LOG 操作码。

如果 EVM 是完全不同的东西呢?

EVM 可能有两条非常不同的自然路径:

  1. 使 EVM 成为一种高级语言,内置变量、if 语句、循环等结构。
  2. 使 EVM 成为现有 VM 的副本(LLVM、WASM 等)。

第一条路径从未真正被考虑过。这条路径的吸引力在于它可以使编译器更简单,并允许更多开发者直接编写 EVM 代码。它还可以使 ZK-EVM 结构更简单。这条路径的弱点在于它会使 EVM 代码在结构上更加复杂:它不再是一系列简单的操作码,而是一个更复杂的数据结构,必须以某种方式存储。也就是说,有一个两全其美的机会被错过了:一些 EVM 变化可以给我们带来很多好处,同时保持基本的 EVM 结构大致不变:禁止动态跳转并添加一些旨在支持子程序的操作码(另见:EIP-2315),只允许在 32 字节字边界上进行内存访问等。

第二条路径被多次提出,也被多次拒绝。通常的论点是它允许程序从现有语言(C、Rust 等)编译到 EVM。反对的论点一直是,考虑到以太坊的独特限制,它实际上不会提供任何好处:

  • 从高级语言到现有编译器的编译往往不关心总代码大小,而区块链代码必须进行大量优化以减少每个字节的代码大小。
  • 我们需要 VM 的多个实现,并且有一个硬性要求,即两个实现永远不会以不同的方式处理相同的代码。对我们没有编写的代码进行安全审计和验证会更加困难。
  • 如果 VM 规范发生变化,以太坊将不得不要么始终与之同步更新,要么越来越不同步。

因此,可能从来没有一条可行的路径让 EVM 与我们现在拥有的截然不同,尽管有许多较小的细节(跳转、64 位与 256 位等)如果以不同的方式处理,可能会导致更好的结果。

ETH 供应是否应该以不同的方式分配?

当前的 ETH 供应大致由这张来自 Etherscan 的图表表示:

今天存在的大约一半的 ETH 是在一个开放的公共以太坊销售中出售的,任何人都可以发送 BTC 到一个标准化的比特币地址,初始的 ETH 供应分配是由一个开源脚本计算的,该脚本扫描比特币区块链以查找发送到该地址的交易。其余的大部分是通过挖矿获得的。底部的部分,标记为“其他”的 1200 万 ETH,是“预挖矿”——分配给以太坊基金会和约 100 名以太坊协议的早期贡献者的一部分。

对这一过程有两个主要的批评:

  • 预挖矿,以及以太坊基金会获得了销售资金的事实,并不是可信中立的。一些接收地址是通过封闭过程手动挑选的,以太坊基金会必须被信任不会贷款将销售期间收到的资金循环回销售中以获得更多 ETH(我们没有这样做,也没有人认真声称我们这样做了,但即使需要被信任也会冒犯一些人)。
  • 预挖矿过度奖励了非常早期的贡献者,而给后来的贡献者留下了太少。75% 的预挖矿用于奖励发布前的工作贡献者,发布后以太坊基金会只剩下 300 万 ETH。在 6 个月内,为了财务生存而出售的需求使其减少到约 100 万 ETH。

在某种程度上,问题是相关的:最小化中心化感知的愿望导致了更小的预挖矿,而更小的预挖矿更快地被耗尽。

这并不是唯一可以做的事情。Zcash 有不同的方法:恒定的 20% 的区块奖励分配给协议中硬编码的一组接收者,并且每 4 年重新协商一次接收者组(到目前为止这已经发生了一次)。这会更加可持续,但它会受到更严厉的批评,认为这是中心化的(Zcash 社区似乎比以太坊社区更公开地接受更多的技术官僚领导)。

一个可能的替代路径类似于今天一些 defi 项目中流行的“从第一天开始的 DAO”路线。以下是一个可能的稻草人提案:

  • 我们同意在 2 年内,每块2 ETH 的区块奖励进入开发者基金。
  • 任何在以太坊销售中购买 ETH 的人都可以指定他们偏好的开发者基金分配的投票(例如,“每块 1 ETH 给以太坊基金会,0.4 ETH 给 Consensys 研究团队,0.2 ETH 给 Vlad Zamfir...”)。
  • 获得投票的接收者从开发者基金中获得与每个人投票的中位数成比例的份额,按比例缩放,使总数等于每块 2 ETH(中位数是为了防止自我交易:如果你投票给自己,除非你得到至少一半的其他购买者提到你,否则你什么也得不到)。

销售可以由一个法律实体运行,该实体承诺按照与 ETH 开发者基金相同的比例分配销售期间收到的比特币(或者如果我们真的想让比特币持有者高兴,可以烧掉)。这可能会让以太坊基金会获得大量资金,非 EF 团体也获得大量资金(导致更多的生态系统去中心化),而不会破坏可信中立性。主要的缺点是代币投票真的很糟糕,但务实地说,我们可以意识到 2014 年仍然是一个早期和理想化的时代,代币投票的最严重缺点只会在销售结束很久后才会开始显现。

这会是一个更好的想法,并树立一个更好的先例吗?也许!尽管实际上即使开发者基金完全可信中立,今天对以太坊预挖矿大喊大叫的人可能只是开始对 DAO 分叉大喊大叫。

我们能从这一切中学到什么?

总的来说,有时我觉得以太坊最大的挑战来自于在两个愿景之间取得平衡——一个纯粹而简单的区块链,重视安全性和简单性,以及一个高性能和功能强大的平台,用于构建高级应用程序。上面的许多例子只是其中的一些方面:我们是拥有更少的功能,更像比特币,还是拥有更多的功能,对开发者

  • 原文链接: vitalik.eth.limo/general...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Vitalik Buterin
Vitalik Buterin
https://vitalik.ca/