主页 > 安卓版imtoken下载 > Vitalik:以太坊的“未选择的道路”
Vitalik:以太坊的“未选择的道路”
作者:Vitalik Buterin,以太坊联合创始人
编译:Mary Ma@吴说区块链
以太坊开发社区在以太坊早期做出了许多决定,对项目的发展轨迹产生了巨大影响。 在某些情况下,以太坊开发人员有意识地决定改进我们认为比特币存在问题的地方。 在其他地方,我们正在创造一些全新的东西,我们只需要想出一些东西来填补空白,但有很多选择。 还有一些地方我们需要在更复杂的东西和更简单的东西之间做出权衡。 有时我们选择更简单的东西,但有时我们选择更复杂的东西。
这篇文章将着眼于我记得的以太坊路线中的这些分叉。 其中许多功能已在核心开发圈中得到认真讨论; 有些几乎没有被考虑,但也许真的应该考虑。 但即便如此,还是值得看看一个不同的以太坊会是什么样子,以及我们可以从中学到什么。
我们应该采用更简单的 PoS 机制吗?
以太坊即将纳入的Gasper PoS机制是一个复杂的系统,但也是一个非常强大的系统。 它的一些属性包括:
非常强的单块确认:一旦一笔交易被包含在一个块中,通常在几秒钟内,该块就被最终确定,除非很大比例的节点是不诚实的,或者存在极端的网络延迟 无法逆转。
经济终结性:一旦一个区块被最终确定,它就不能被逆转,除非攻击者能够承受数百万 ETH 的损失并被罚款。
非常可预测的奖励:验证者每个时期(6.4 分钟)都会得到可靠的奖励。
支持非常高的验证器数量:与具有上述属性的大多数其他链不同,以太坊信标链支持数十万个验证器(例如:Tendermint 提供比以太坊更快的最终性,但它只支持数百个验证器)
但是创建具有这些属性的系统很困难。 它需要多年的研究,多年失败的实验,通常需要付出很多努力,最终输出相当复杂。
如果我们研究人员不必那么担心共识并有更多空闲时间思考,那么也许,只是也许,rollups 可以在 2016 年发明。这让我们思考:我们真的应该为我们的研究要求如此高的标准吗?权益证明? 因为即使是更简单、更弱的 PoS 也会比 PoW 现状有巨大的改进。
很多人误以为 PoS 本身很复杂,但实际上有很多 PoS 算法几乎和中本聪 PoW 共识一样简单。 NXT 的 PoS 自 2013 年以来一直存在,本来是一个现成的候选者; 虽然它有一些问题,但这些问题很容易修补,我们可以从 2017 年甚至一开始就拥有一个合理可行的 PoS。 Gasper 比这些算法更复杂,仅仅是因为它试图做的比它们多得多。 但如果我们一开始就没有设定太高的目标,我们可以从专注于实现一组更有限的目标开始。
在我看来,从一开始就实施 PoS 是一个错误; PoW 将有助于扩大初始发行分布并使以太坊更易于访问并鼓励爱好者社区。 但在 2017 年,甚至可能是 2020 年,转向更简单的 PoS 可能会导致更少的环境破坏(以及由于环境破坏而产生的反加密货币心态),以及更多的研究人才可以自由思考扩展问题。 我们最终是否会不得不花费大量资源来制作更好的 PoS? 我认为它会,但似乎我们最终还是要这样做。
分片去复杂化
自 2014 年开始研究以来,以太坊分片一直在朝着越来越不复杂的方向发展。首先,我们拥有内置执行和跨分片交易的复杂分片; 然后,我们通过将更多的责任转移给用户来简化协议,其中用户必须分别为两个分片支付 gas; 然后我们切换到以 Rollup 为中心的路线图,从协议的角度来看,分片只是数据分片。 最后通过danksharding,将分片手续费市场合并为一个整体,最终的设计看起来是一条非分片链,但是这里,数据可用性抽样实现了分片验证。
但如果我们走相反的路呢? 实际上有一些以太坊研究人员深入研究了一个更复杂的分片系统:分片将充当链,会有分叉选择规则,其中子链依赖于父链,跨分片消息将由协议路由,验证器将在分片之间轮换,甚至 DApp 也会自动在分片之间实现负载平衡。
这种方法的问题在于,这些分片形式主要是想法和数学模型,而 Danksharding 是一个完整的、几乎可以实现的规范。 因此,鉴于以太坊的情况和局限性,分片简化和消歧在我看来绝对是正确的做法。 也就是说,更雄心勃勃的研究也起着非常重要的作用:它确定了有前途的研究方向,而且即使是非常复杂的想法也经常有“相当简单”的版本,这些版本仍然提供很多好处并且非常有用。 它可能会极大地影响未来几年以太坊(甚至是第二层协议)的发展。
EVM 中的功能选择
事实上,除了安全审计,EVM规范基本可以在2014年年中推出。 然而,在随后的几个月里,我们继续积极探索我们认为可能对去中心化区块链真正重要的新功能。 有些功能已添加到 EVM,有些则没有。
我们考虑过添加 POST 操作码,但最终决定不这样做。 POST 操作码进行异步调用并在事务完成后执行。
我们考虑过添加一个 ALARM 操作码,但最终决定不这样做。 ALARM 的功能类似于 POST,除了它在未来的某个块执行异步调用,允许合约安排操作。
我们添加了日志,它允许合约输出不涉及状态的记录,但可以被 DApp 接口和钱包解释。 值得注意的是,我们还考虑过让 ETH 转账发出日志,但决定不这样做,理由是“人们很快就会转向智能合约钱包”。
我们考虑过扩展 SSTORE 以支持字节数组,但由于复杂性和安全问题而决定不这样做。
我们添加了预编译,这是使用本机实现来执行专门加密操作的合约,比在 EVM 中执行它们便宜得多。
自上线以来的几个月里,我们仔细考虑了州租金,但从未包括在内。 这太复杂了。 今天正在积极探索更好的状态过期方案,尽管无状态验证和提议者/构建者分离 (PBS) 意味着它现在的优先级要低得多。
今天,大多数不添加功能的决定被证明是非常好的决定。 没有明显的理由添加 POST 操作码。 ALARM 操作码实际上很难安全地实现:如果块 1...9999 中的每个人都设置一个 ALARM,并在块 100,000 处执行大量代码,会发生什么情况? 该区块需要数小时才能处理吗? 一些预定的操作会被推到后面的区块吗? 但如果发生这种情况,ALARM 保留什么保证? 字节数组的 SSTORE 很难安全地执行,并且会大大扩展最坏情况下的见证大小。
状态租金问题更具挑战性:如果我们从第一天起就真正实现了某种状态租金,以太坊并不总是需要围绕持久状态的规范化假设发展。 以太坊将更难构建,但它可能更具可扩展性和可持续性。 与此同时,我们当时的状态到期计划确实比现在糟糕得多。 有时,好的想法需要数年时间才能实现,而且没有更好的方法。
日志的替代品
LOG 可以通过两种不同的方式完成。
我们可以让 ETH 转账自动发送 LOG。 这将为交易所和许多其他用户节省大量精力和软件错误问题,并将加速大家对 LOG 的依赖,这将有助于智能合约钱包的采用。
我们完全可以不用LOG操作码,把它变成一个ERC:会有一个标准合约,它有一个submitLog函数,使用以太坊存款合约的技术来计算区块中所有日志的Merkle根。 EIP-2929 或块范围的存储(相当于 TSTORE,但在块后被清除)将使它更便宜。
我们强烈考虑了第一个选项,但拒绝了它。 主要原因是日志记录仅来自 LOG 操作码,这更容易。 我们还非常错误地期望大多数用户会迅速迁移到智能合约钱包,智能合约钱包可以明确使用操作码来记录转账。
我们没有考虑第二个选项,但现在回想起来,它其实是一个选项。 第二种方法的主要缺点是缺少用于快速扫描日志的布隆过滤器机制(Bloom filter)。 但事实证明Bloom filter机制太慢,对DApps不友好,所以现在越来越多的人使用TheGraph进行查询。
总的来说,这些方法中的任何一种都有可能优于现状。 不在 LOG 中会使事情变得更简单,但如果在 LOG 中,自动记录所有 ETH 转移会更有用。
今天,我可能赞成最终消除 EVM 的 LOG 操作码。
如果当前的 EVM 采取完全不同的路径怎么办?
一开始,EVM 有两条截然不同的路径可供选择:
使 EVM 成为更高级的语言以太坊早期挖矿产出,具有变量、if 语句、循环等内置结构。
使 EVM 成为某个现有虚拟机(LLVM、WASM 等)的副本。
第一条路径从未真正被考虑过。 这条路径的吸引力在于它可以让编译器变得更简单,让更多的开发者可以直接在 EVM 中编码。 它还可以使 ZK-EVM 的结构更简单。 这种方法的弱点在于它使 EVM 代码在结构上更加复杂:它不再是简单的操作码列表,而是必须以某种方式存储的更复杂的数据结构。 也就是说,我们错过了一个两全其美的机会:一些 EVM 更改可以给我们带来很多好处,同时保持基本的 EVM 结构不变:禁用动态跳转,添加一些旨在支持子例程的操作码(否则请参阅:EIP -2315),只允许在 32 字节字边界上进行内存访问,等等。
第二条路径已被多次建议和拒绝。 支持它的论点通常是它允许将程序从现有语言(C、Rust 等)编译到 EVM 中。 反对意见一直是,考虑到以太坊的独特局限性,它实际上并没有提供任何好处:
现有高级语言的编译器通常不关心总代码大小,而区块链代码必须大量优化以减少每个字节的代码大小。
我们需要虚拟机的多个实现,并且严格要求没有两个实现以不同方式处理相同的代码。 对我们没有编写的代码进行安全审计和验证更加困难。
如果 VM 规范发生变化,以太坊将不得不始终随之更新,或者变得越来越不同步。
因此,EVM 可能永远不会有与我们今天所拥有的完全不同的可行路径,尽管有许多更小的细节(跳转、64 位与 256 位等),如果它们可以以不同的方式完成,将会带来更好的结果。
ETH 供应应该以不同方式分配吗?
ETH 的当前供应量可以大致用 Etherscan 的这张图表示:
目前大约一半的 ETH 在以太坊公开发售中出售,任何人都可以将 BTC 发送到比特币地址,并且初始 ETH 供应分配是通过开源脚本计算的。 其余大部分基本上也已开采。 黑色标记为“其他”的 1200 万个 ETH 实际上是预挖部分,是在以太坊基金会和大约 100 个以太坊协议早期贡献者之间分配的数量。
这个过程有两个主要的批评:
无论是预挖还是负责公募的以太坊基金都没有可信的中立性。 一些收件人地址是通过封闭过程手动选择的,必须信任以太坊基金会不会通过贷款进一步利用公开销售收益来获得更多的 ETH(我们没有,也没有人声称我们有,但即使是被信任的要求也被冒犯了有些人)。
Premine 对早期贡献者的奖励太多,给后来的贡献者留下的太少。 75%的预挖用于奖励贡献者上线前的工作,上线后以太坊基金会只剩下300万个ETH。 在 6 个月的时间里,为了生存而出售的需要将库存减少到大约 100 万个 ETH。
在某种程度上,这些问题是相关的:最小化中心化感知的愿望促成了更小的预挖,但更小的预挖消耗得更快。
这不是唯一的解决方案。 Zcash 采用不同的方法:将固定的 20% 的区块奖励分配给协议中的一组硬编码接收者,该协议每四年重新协商一次(到目前为止,这种情况发生过一次)。 这会更可持续,但会因为过于中心化而受到更严厉的批评(Zcash 社区似乎比以太坊社区更公开地接受更多技术专家的领导)。
一种可能的替代路径类似于当今一些 DeFi 项目中流行的“从第一天开始的 DAO”路径。 这是一个可能的稻草人提议:
我们同意从每个区块奖励中分配 2 ETH 给开发基金,为期 2 年。
任何在以太坊公开发售中购买 ETH 的人都可以投票选出他们喜欢的开发基金分配(例如:“每个区块奖励 1 ETH 给以太坊基金会,0.4 ETH 给 Consensys 研究团队,0.2 ETH 给 Vlad Zamfir ... ")
被投票的接受者获得发展基金份额等于每个人投票的中位数,按比例分配总共等于每个区块 2ETH(中位数是为了防止自我交易:如果你为自己投票,你得到的不会少于,除非你得到至少一半的其他买家提到你)。
公开发售可以由一个法律实体经营,该实体承诺按照与 ETH 发展基金相同的比例分配公开发售期间收到的比特币(或者销毁它们,如果我们真的想让比特币持有者高兴的话)。 这可能会为以太坊基金会带来大量资金,并为非以太坊基金会团体带来大量资金(导致生态系统更加去中心化),所有这些都不会丝毫破坏可信的中立性。 当然,主要的缺点是代币投票真的很糟糕,但从务实的角度来看,我们可以意识到 2014 年仍然是一个早期和理想化的时间,代币投票最糟糕的缺点是在公开发售结束很久之后才出现。 将开始工作。
这样做不是更好的主意并树立更好的先例吗? 或许! 不过,从现实的角度来看,那些今天对以太坊矿工大喊大叫的人可能会在 DAO 分叉开始时加倍大喊大叫,即使开发基金是完全可信的中立的。
我们可以从这一切中学到什么?
总的来说,有时我觉得以太坊最大的挑战来自于平衡两个愿景:一个重视安全性和简单性的区块链,以及一个用于构建高级应用程序的高性能和功能性平台。 上面的许多例子只是一个方面:我们更像比特币但功能更少,还是我们对开发人员更友好但功能更多? 我们是否担心让开发资金变得更中性,更像比特币,或者我们是否担心确保开发人员获得足够的奖励以首先让以太坊变得更好?
我个人的梦想是尝试同时实现这两个愿景。 一个基础层,其规范每年都比前一年小,以及一个以第 2 层协议为中心的对开发人员友好的高级应用程序的强大生态系统。 也就是说,到达这样一个理想的世界需要很长时间,如果我们能更清楚地认识到这需要时间,需要一步一步地考虑路线规划,或许会有很大的帮助。
今天,有很多事情我们无法改变,但也有很多事情我们仍然可以改变,并且仍然有改进功能和简化的坚实途径。 有时路径是曲折的:我们需要先增加一些复杂性以启用分片,这反过来又在其之上启用了很多第 2 层可扩展性。 也就是说,降低复杂性是可能的,以太坊的历史已经证明了这一点。
EIP-150 使调用堆栈深度限制变得无关紧要,从而减少了合约开发人员的安全顾虑。
EIP-161 将“空账户”的概念与字段为零的账户分开。
EIP-3529 移除了一些退款机制,使得 Gas 代币不再可行。
管道中的想法,例如 Verkle 树以太坊早期挖矿产出,可以进一步降低复杂性。 但未来如何更好地平衡这两种愿景,是我们应该开始更积极思考的问题。