币趣网报道:

来源:极客 Web3

摘要:

· 自EIP-4844之后,以太坊网络的数据吞吐量与存储压力日益增长,不断增长的存储需求为以太坊节点带来了巨大挑战。为了降低存储压力,部分以太坊客户端对本地存放的以太坊历史数据进行删剪,不同的全节点在存储行为上的一致性被逐渐瓦解。

· 为了确保所有以太坊客户端能在行为上达成一致,EIP-4444 EIP-4844 将历史数据删减行为进行了标准化,将在未来成为以太坊节点的标配。

· 因此,如果要重放历史数据来还原最新的 Layer1 或 Layer2 状态,要依赖于中心化的、以太坊协议外的服务设施,这促使人们探索更去中心化的、与以太坊相一致的存储解决方案

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

· EthStorage 是一个针对 EIP-4844 BLOBs数据的激励模块化存储网络。为了存储BLOB,用户可以调用 L1上的 存储合约,以ETH作为存储手续费,在链上记录下BLOB的哈希值 。随着时间的推移,存储费用将逐渐分配给提供链下 BLOB 存储证明的存储服务商。

·  目前EthStorage 测试网正在以太坊 Sepolia 测试网上运行,多名社区参与者已成功证明了他们的本地存储状况。未来的计划包括开发一个去中心化的以太坊状态网络、实现动态大小数据的存储证明,并可以直接从浏览器以去中心化的方式访问EthStorage网络。

致谢:感谢来自以太坊基金会的 Piper Merriam、Polychain 的 Karthik Raju、EthStorage 的 Qiang Zhu 对本文提供的反馈。

背景:

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

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

节点删除掉以太坊主网历史数据,也会导致以太坊 L2出现问题,即新加入的Layer2节点,无法通过重放 Layer2全部历史数据的方法,同步至当前的最新状态。此外,由于 L1 节点不维护 L2 状态,L2 的“snap sync”方法无法根据Layer1区块直接派生出最新的 Layer2 状态,这违反了Layer2继承以太坊安全所需的重要假设。

预计的解决方案将依赖 Infura / Etherscan / L2 项目本身的第三方服务来存储Layer2历史数据或状态副本,这是通过协议外、间接激励实现的中心化解决方案。

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

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

  • 是否有可能找到给予节点直接激励、得到以太坊网络本身保障(例如,靠L1合约实现)的解决方案?

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

解决方案

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

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

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

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

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