问题之一是 以太坊,或任何区块链,其规模都会随着时间的推移而增长。这意味着代码复杂性和存储要求的增加。
区块链必须保留其历史记录中的所有数据,这些数据需要由所有客户端存储并由新客户端下载。这会导致客户端负载和同步时间不断增加。
此外,代码复杂性随着时间的推移而增加,因为“添加新功能比删除旧功能更容易”。 维塔利克·布特林 写在他的 博客。
因此,Buterin 认为开发人员必须积极努力遏制这些增长趋势,同时保持以太坊的持久性。因此,Buterin 提出了“清除”计划,该计划由三个部分组成,旨在简化区块链并减少其数据负载。
第 1 部分:历史到期
目前,完全同步的以太坊节点需要大约 1.1 TB 的存储空间用于执行客户端。共识客户端还需要几百 GB 的空间。根据 Buterin 的说法,这些数据大部分都是历史数据,例如有关历史区块、交易和收据的数据,其中许多都是几年前的数据。为了存储所有这些历史记录,所需的磁盘空间每年不断增加数百GB。
Buterin 认为这个问题可以通过历史过期来解决。
区块链上的每个块都通过哈希链接指向前一个块。这意味着对当前区块的共识表明对历史的共识。
Buterin 表示,只要网络对当前区块达成共识,任何相关历史数据都可以由单个参与者通过 Merkle 证明提供,这使得任何人都可以验证其完整性。这意味着每个节点可以存储一小部分数据,而不是让每个节点存储所有数据,从而减少存储需求。
Buterin 基本上建议采用 torrent 网络的运营模式,其中每个参与者仅存储和分发网络存储和分发的数据的一小部分。
以太坊已经采取措施减少存储需求——某些信息现在有有效期。例如,共识块存储六个月,blob 存储 18 天。
EIP-4444 是朝这个方向迈出的又一步——它的目标是将历史区块和收据的存储期限限制为一年。然而,长期目标是有一个固定的期限,比如 18 天,在此期间每个节点都必须存储所有内容,然后将旧数据以分布式方式存储在对等网络上。
第 2 部分:状态到期
Buterin 认为,消除客户端存储整个历史记录的需要并不能完全解决存储需求膨胀的问题。这是因为,由于“状态的持续增长:账户余额和随机数、合约代码和合约存储”,客户每年必须增加约 50GB 的存储容量。
可以通过三种方式创建新的状态对象:创建新帐户、将 ETH 发送到新帐户以及设置先前休眠的存储槽。状态对象一旦创建,就永远处于该状态。
Buterin 认为随着时间的推移自动使状态对象过期的解决方案需要高效、用户友好和开发人员友好。这意味着该解决方案不应该需要大量的计算,如果用户多年来不碰他们的代币,也不应该失去对其代币的访问权,并且开发人员在此过程中不会造成很大的不便。
Buterin 建议两种类型的“已知最不糟糕的解决方案”:
- 部分状态过期解决方案
- 基于地址周期的状态到期建议。
部分状态到期
部分状态到期提案的工作原理是将状态分为“块”。这将要求每个人都存储“顶级映射”,其中的块永远为空或不为空。仅当最近访问过块中的数据时才会存储它们。 “复活”机制允许任何人通过提供数据内容证明来恢复未存储的数据块。
基于地址周期的状态到期
基于地址周期的状态到期建议拥有一个不断增长的状态树列表,而不是仅仅存储整个状态。任何读取或写入的状态都会更新到最新的状态树中。每个时期(可能是一年)添加一次新的空状态树。
在这种情况下,较旧的状态树被冻结,全节点只需要存储最新的两棵树。如果状态对象成为过期树的一部分,则可以读取或写入它,但交易需要 Merkle 证明。交易完成后,将被添加回最新的树中。
特征清理
随着时间的推移,所有协议都会变得复杂,无论它们一开始多么简单。
布特林写道:
“如果我们不希望以太坊陷入日益复杂的黑洞,我们需要做以下两件事之一:(i)停止做出改变并 僵化协议(ii) 能够实际上 消除 特点和 减少 复杂”。
根据 Buterin 的说法,清理以太坊的复杂性需要进行一些小修复,例如删除 SELFDESTRUCT 操作码、删除旧的交易类型和信标链委员会、改革 LOG 等等。 Buterin 还建议简化气体力学、消除气体可观测性以及改进静态分析。