首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

以太坊存储路线图:挑战与机遇

撰文:EthStorage

摘要

不断增长的存储需求为以太坊节点带来了巨大挑战。

由于存储限制,一些客户端已经开始对历史数据进行删剪,导致网络中全节点之间的存储行为不一致。

为了确保所有客户端的一致性,历史数据删剪正在 EIP-4444 EIP-4844 中被标准化。

因此,通过重播历史数据来恢复最新的 L1 或 L2 状态需要中心化的、协议外的服务,促使人们探索更加去中心化的、与以太坊一致的解决方案

以太坊 Portal 网络是一个轻量级、去中心化的 P2P 网络,适用于包括历史数据在内的所有类型的以太坊数据。它专为资源受限的设备而设计,并提供以太坊 JSON-RPC 服务。历史网络和信标链网络几乎已经准备就绪。

EthStorage 网络是一个针对 EIP-4844 BLOBs 数据的激励模块化存储网络。为了存储 BLOB,用户调用 L1 存储合约 put() 方法,提供 ETH 作为存储费用,并在链上记录 BLOB 哈希值 。随着时间的推移,存储费用将逐渐分配给提交链下 BLOB 存储证明的存储提供商。EthStorage 测试网正在以太坊 Sepolia 测试网上运行,多名社区参与者已成功证明了他们的本地存储。

未来的计划包括开发一个去中心化的以太坊状态网络、实现动态大小数据的存储证明,以及直接从浏览器进行去中心化访问。

致谢:感谢来自 EF 的 Piper Merriam、Polychain 的 Karthik Raju、EthStorage 的 Qiang 对本文提供的反馈。

背景

2023 年 10 月 22 日,著名的 Go-Ethereum(Geth)开发负责人 Péter Szilágyi 在 Twitter 上表达了他的深切担忧。他指出,虽然 Geth 客户端保留了所有历史数据,但 Nethermind 和 Besu 等其他以太坊客户端可以配置删除某些历史以太坊数据(例如历史区块和块头)。这使得所有客户端的行为不一致,并对 Geth 不公平。这引发了围绕以太坊路线图中以太坊存储问题的激烈讨论和辩论。

存储的挑战

为什么 Nethermind 和 Besu 选择停止存储历史数据? 这一决定背后的问题是什么? 从我们的角度来看,有两个主要原因:

以太坊客户端的存储要求变得越来越高

存储以太坊历史数据没有任何协议内的激励或惩罚

第一个原因源于运行以太坊客户端不断上升的存储需求。 为了深入了解具体需求,下面的饼图展示了截至 2023 年 12 月 13 日第 18,779,761 块时一个新 Geth 节点的存储分布情况。

如图所示:

总存储大小:925.39 GB

历史数据(区块 / 交易收据):约 628.69 GB

Merkle Patricia Trie (MPT) 中的状态数据:约 269.74 GB

第二个原因是缺乏存储历史区块的协议内激励或惩罚。 虽然该协议要求节点存储所有历史数据,但却未能提供任何机制来鼓励存储或惩罚违规的行为。 节点存储和共享历史数据变得纯粹出于利他主义,客户端运行者可以自由地删除或修改所有历史数据,而不会受到任何惩罚。 相比之下,Validator 节点必须在本地维护并更新完整的状态,以防止因提议 / 投票支持无效区块而导致的 Slash。

因此,当存储成本成为节点的重大负担时,一些节点运营商选择删除历史数据就不足为奇。 在没有历史数据的情况下,节点客户端可以显著降低存储成本,将其从大约 1TB 减少到 300GB 左右。

图示:Nethermined 配置运行没有历史区块的节点 — 目前可节省约 460GB 的存储成本

随着即将到来的以太坊数据可用性(DA)升级,存储挑战将会加剧。 全面扩容以太坊 DA 的道路始于 DenCun 升级中的 EIP-4844,它引入了一个固定大小的二进制大对象 (BLOB) ,和一个被称为 blobGasPrice 的独立费用模型。 每个 BLOB 设置为 128KB,EIP-4844 允许每个区块最多包含 6 个 BLOB。 为了对数据吞吐量进行扩容,以太坊计划采用 1D Reed-Solomon 代码,最初允许每个区块有 32 个 BLOB,并在完全扩容时达到每个区块 256 个 BLOB。

如果以太坊 DA 以全容量运行(每个块 256 个 BLOB),以太坊 DA 网络预计一年将接收大约 80 TB 的 DA 数据,该数字远远超出大多数节点的存储能力。

以太坊存储路线图及其后果

Vitalik 发布的以太坊路线图推文,提到了 Purge 主要涉及存储方面的内容

不断上升的存储成本引起了以太坊生态研究人员的关注。 为了解决这个问题并确保所有客户端的一致性,研究人员正在制定一些提案来明确删除历史的存储。 两个主要提案是:

EIP-4444:限制执行客户端中的历史数据:该提案允许客户端删除超过一年的历史区块。 假设平均区块大小为 100K,历史块数据上限约为 250 GB(100K * (3600 * 24 * 365) / 12,假设区块时间 = 12 秒)。

EIP-4844:分片 BLOB 交易:EIP-4844 丢弃超过 18 天的 BLOB。 与 EIP-4444 相比,这是一种更激进的方法,将历史 BLOB 大小限制在 100 GB 左右((18 * 3600 * 24) * 128K * 6 / 12,假设区块时间 = 12 秒)。

删除所有客户端的历史数据会产生什么后果? 主要的一个问题是新节点无法通过「full sync」模式来同步到最新状态,「full sync」是一种将交易从创世区块执行到最新区块的同步。 相应地,我们必须采取「snap sync」或「state sync」来直接同步来自以太坊节点的最新状态。 这种方法已在 Geth 中实现,并作为默认同步运行。

同样地,这个后果也适用于所有 L2,即 L2 的新节点无法通过重放 L2 创世到最新的 L2 区块,来完全同步以太坊 L2 创世的最新状态。 此外,由于 L1 节点不维护 L2 状态,L2 的「snap sync」方法无法从 L1 中派生出最新的 L2 状态,这违反了继承以太坊安全保证的重要 L2 假设。 预计的解决方案将依赖 Infura / Etherscan / L2 项目本身等第三方服务来存储历史 L2 数据或状态副本。这是通过协议外、间接激励实现的中心化的解决方案。

我们要探讨的核心问题是:

我们能否在存储和访问方面找到更好的去中心化解决方案?

是否有可能通过直接激励机制的、与以太坊一致的(例如,在 L1 合约之上)的解决方案?

在这一切的基础上,我们是否可以为以太坊存储路线提供一种完全去中心化的、协议内直接激励的解决方案?

解决方案

解决方案 1:以太坊 Portal 网络

以太坊 Portal 网络是一个轻量级、去中心化的访问网络,用于连接到以太坊协议。它提供例如 eth_call,eth_getBlockByNumber 等以太坊 JSON-RPC 接口,它将 JSON-RPC 请求转换为对分布式哈希表(DHT) 的 P2P 请求,类似于 IPFS 网络。 与允许存储任何数据类型且容易受到垃圾数据影响的 IPFS 不同,Portal P2P 网络专门托管以太坊数据,如历史区块头和区块交易数据。 这是通过 Portal 网络内置的轻客户端验证技术来实现的。

Portal 网络的一个重要特性是其轻量级运行设计以及与资源受限设备的兼容性。 它可以运行在具有几兆存储空间和低内存的节点之上,从而促进去中心化。 即使是手机或 Raspberry Pi 设备也有可能加入网络并有为以太坊数据的可用性做出贡献。

Portal 网络的开发与以太坊客户端多样性理念相一致,客户端采用 Rust、JavaScript 和 Nim 编写。 信标网络和历史网络已可供使用,而状态网络正在积极开发中。 值得注意的是,Portal 网络并不为数据存储提供直接激励 — — 网络中的所有节点都是利他的方式运行的。

图示:具有 100MB 存储限制的 Portal 网络 Rust 客户端 (Trin) 在运行中

解决方案 2:EthStorage 网络

EthStorage 网络是一个去中心化的激励存储网络,专门用于存储 EIP-4844 BLOB,并获得 ESP 项目的资助。

最小信任:与需要中心化数据桥的现有解决方案不同,EthStorage 依赖于以太坊的共识和无需许可的 EthStorage 存储节点的 1/m 信任模型。 存储 BLOB 的过程是这样的:用户签署一个携带 BLOB 的交易,调用存储合约的put(key, blob_idx)方法。 然后,存储合约将记录 BLOB 哈希在链上。 之后存储提供商将直接从以太坊 DA 网络下载并存储 BLOB,从而绕过数据桥问题。

存储成本与激励相一致:当调用put()方法时,交易必须发送存储费(通过 msg.value)并存入合约中。 在成功链下存储节点提交并验证存储证明后,这个存储费用将随着时间的推移逐渐分配给存储节点。 与现有的向出快者 (proposer) 支付一次性存储费的以太坊存储费模型相比,随着时间的推移支付的存储费遵循贴现现金流模型 — — 假设随着时间的推移,存储成本将相对于 ETH 价格而降低。 EthStorage 引入的这一重大创新使得费用和存储节点的存储贡献保持一致

存储证明:存储证明是受到数据可用性抽样的启发,而 EthStorage 中的采样是针对一段时间内的保存的 BLOB。 为了有效地验证链上采样,EthStorage 充分利用了智能合约和最新的 SNARK 技术发展。

无许可操作:EthStorage 中的任何存储节点只要存储数据并定期在链上提交存储证明,都可以获得报酬。

从模块化区块链的角度来看,EthStorage 充当以太坊存储 L2,但它收取的是存储费而不是交易费。 通过在链上索引 BLOB 哈希,EthStorage 是一个以太坊模块化存储层,提升存储可扩展性及降低成本(目标约为 1000 倍)。

在开发方面,EthStorage 已经与以太坊 Sepolia 测试网上的 EIP-4844 集成。我们已对 EthStorage 和以太坊 Sepolia 测试网进行压力测试,包括将大约数百 GB 的 BLOB 写入 EthStorage。 超过 100 名社区参与者加入网络并成功证明了他们的本地存储。

EthStorage 网络的主要优势在于在以太坊之上提供去中心化的直接激励 — — 就我们目前的知识而言,这是一项开创性的功能。 然而,该网络的局限性在于它是专门为固定大小的 BLOB 而设计的。

EthStorage 上以太坊 Sepolia 测试网的看板

展望未来

尽管以太坊存储还未受到主要关注,但其在以太坊生态系统中具有重要意义。 随着以太坊网络的快速增长,以太坊数据的存储和可访问性成为关键挑战。 Portal 网络和 EthStorage 网络还处于早期阶段,还有很多重要的长期的发展方向需要关注:

去中心化低延迟访问的以太坊状态数据网络。 以去中心化且可验证的方式访问以太坊状态是一项关键但具有挑战性的任务。 使用传统的 DHT 网络模型,查询帐户信息通常需要对存储在不同 P2P 节点中的内部 trie 节点进行多次查询。 这往往会导致相当长时间的延迟。 如何利用状态树的结构来加速访问是关键所在。以太坊 Portal 网络即将推出的状态网络,正是旨在解决这个问题。

Portal 网络与 EthStorage 网络的集成:Portal 网络可以无缝扩展以支持 BLOB 数据。EthStorage 团队已部分实现了这个功能。下一步进展,是将这些网络统一起来,提供一个去中心化 JSON-RPC 网络,能够通过合约来对 BLOBs 可编程访问 。通过将合约中的应用逻辑与 EthStorage 提供的规模化 BLOB 存储相结合,我们可以在以太坊上启用新的 dApps,例如动态的去中心化网站(例如去中心化的 Twitter/YouTube/Wikipedia 等)。

浏览器的去中心化访问:与访问 IPFS 网络中的数据的 ipfs:// 协议类似,web3 行业需要一个以太坊原生访问协议的来支持浏览器直接访问,以释放以太坊丰富数据的巨大潜力。 这些数据涵盖了广泛的领域,从代币所有权和账户余额到 NFT 图像和动态去中心化网站,所有这些都得益于智能合约和未来以太坊存储的功能所实现。 在这个领域,ERC-4804/6860 定义的 web3:// 协议目前正在积极开发和推广,以实现这一目标。

动态大小数据的高级存储证明:除了固定 BLOB 之外,探索高级存储证明对于解决动态大小数据(例如历史区块甚至状态对象等)也势在必行。 开发复杂的算法可以增强存储解决方案的适应性。

在我们的追求中,我们希望通过这些努力,共同为以太坊路线图做出贡献,为未来以太坊生态系统的去中心化存储解决方案奠定基础。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/ON3WHlRq8wwYnr1g1_kJ2CNg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券