EthStorage:通过 L2 和 DA 扩展以太坊存储
Web3Buidler.Tech
2022-12-14 11:51
订阅此专栏
收藏此文章

背景及动机

以太坊二层解决方案(L2)的主要目标有两个:一是复用以太坊主网安全,二是增强以太坊的可扩展性。大多数现有的二层解决方案(例如 rollups)都专注于扩展以太坊的计算能力,即提升 TPS(每秒交易数)。但同时,随着 NFT/DeFi 等 dApp 的普及,存储大量数据并且复用以太坊主网安全的需求急剧增长。

例如,一个强烈的存储需求来自于链上 NFTshttps://hackmd.io/@snakajima/HJva6n-Jj),其目的不仅 NFT 合约的代币归用户所有,而且 NFT 的链上图片也归用户所有。相比之下,将 NFT 图片存储在第三方(例如 ipfs 或中心化服务器)需要引入额外的信任。而这种信任很容易且经常被破坏(例如,许多使用 ipfs 的老 NFT 项目的图片现在已经不可用了)。

另一个需求是 dApps 的前端,它们大多由中心化的服务器(加上 DNS)托管。这意味着网站可以很容易地被审查(正在发生在 Tornado Cash 上)。另外,其他中心化的问题也经常发生,包括 DNS 劫持、网站黑客攻击、以及服务器崩溃等。
通过复用以太坊主网安全,上述所有问题都可以立即得到解决。但是,如果一切都存储在链上,成本将会非常高——例如,使用 SSTORE 存储 1GB 数据将花费 1GB / 32(每个 SSTORE 的字节数目)* 20000(gas 每个 SSTORE)* 10e9(gas price)/ 1e18( Gwei 到 ETH)* 1500(ETH 价格)= 1000 万美元!即使使用合约代码可以将成本降低至 1/3 ,但仍然比其他存储解决方案(比如 S3/FILECOIN/AR/ 等)贵得多。

目标

借助 L2 和数据可用性技术,我们相信我们可以极大的扩容以太坊存储并实现以下目标:
  • 将网络的存储容量增加到 PB 或更多(假设每个节点有几 TB 硬盘空间)

  • 与 SSTORE 相比,将存储成本降低到它的 1/100 甚至是 1/1000 

  • 与 SSTORE 类似的 KV CRUD 语义(这里将有一些限制,详见下文)

  • 在区块重组、存储支付结算和抗审查方面复用以太坊主网安全

解决方案

具体要怎么做呢?当前,以太坊主网上存储大量数据的成本分为两部分:

  • 上传成本(calldata)

  • 存储成本(SSTORE)

对于上传成本,通过数据可用技术(DA),尤其是 danksharding,我们预计上传成本在不久的将来将会大幅降低——例如,当前的 EIP-4844https://eips.ethereum.org/EIPS/eip-4844#gas-price-of-blobs-simplified-version) 草案每字节将有 1 gas(其中 BLOB 大小为 ~128KB,即每个 BLOB ~128KB 的 gas),最小 gas price 为 1。通过 danksharding 可以将上传吞吐量进一步提高到 10 倍左右,这应该会更加降低上传数据的成本。

对于存储成本,我们的解决方案是构建一个无需许可的二层数据保存网络。这个二层网络包含以下组件:

  • 一个部署在以太坊主网上的存储合约,除了 verify() 之外,它还提供 put()/get()*/delete() 等 KV CURD 语义。存储合约不存储 KV 的值——仅存储值承诺(例如,BLOB 的 KZG 承诺),而由于数据可用(DA)机制,其对应的数据仍然可用(即可以下载)。存储合约还将接受存储证明(Proof of Storage),并有效地验证数据是否存储在二层数据保存网络的数据节点中。(get()* 仅在数据节点中可用,详见下文)
  • 数据节点将运行一个以太坊的特殊客户端(Geth 和共识客户端的修改版本)。它会同步以太坊的最新状态(比如 KV 的值的所有承诺)。此外,数据节点还提供以下额外的功能,如:
      • 配置保存那部分的 BLOB 数据(即分片)

      • 通过加入二层数据网络来同步感兴趣的 BLOB 到本地

      • 如果存储合约中的相应承诺被更新 / 添加,则从以太坊主网数据可用(DA)网络下载 BLOB 到本地

      • 生成存储证明,提交到以太坊主网,收取相应的存储费

      • 在 JSON-RPC eth_call() 方法中服务 storage_contract.put()

注意,运行数据节点是完全无需许可的——只要数据提供者有足够的硬盘空间,它就可以运行一个节点,并且从二层网络同步 BLOB。如果 L1 上的承诺发生变化,则从数据可用(DA)复制 BLOB,并证明保留到主网。

相比现有解决方案优势

除了复用以太坊主网安全之外,EthStorage 还拥有以下优势:

  • 丰富的存储语义(KV CRUD)。FILECOIN/AR 主要适用于静态文件,缺乏高效的更新 / 删除操作——即,用户必须支付两次费用才能更新现有数据。而得益于数据可用(DA)和智能合约,EthStorage 可以提供类似于 SSTORE 的完整 KV CRUD 语义。

  • 可编程性。存储可以通过智能合约进行编程,这便可以很容易的启用新功能,例如多用户访问控制或数据可组合性。

  • 实现应用逻辑和存储逻辑的原子性。目前使用 ENS 的去中心化网站(dweb)通常需要两个步骤:1、将数据上传到外部存储网络;2、将内容哈希(contenthash)存储到 ENS 上。借助数据可用(DA)和 EVM,EthStoage 可以在一次交易中同时完成应用逻辑和存储逻辑,对用户更加友好(这也广泛存在于 Web2 应用中,例如 Twitter/FB/ 等)。

  • 零学习成本。EthStorage 建立在以太坊之上,存储成本也由 ETH 支付,因此,存储操作可以通过 Metamask 这类 ETH 钱包完成——用户无需学习新的代币 / 钱包 / 地址。

亟待解决的关键问题
  • 针对大型动态数据集,生产数据有足够的冗余的存储证明:以去中心化的方式保证数据冗余是一个关键挑战,尤其是在数据集不断变化的情况下。

  • 高效的定期的存储支付:提交有效的链上存储证明需要奖励证明者(或数据提供者)存储费(以 ETH 计)。我们需要一个高效的存储租用 / 支付模型来计算,并且保证网络有足够数据冗余,以确保永久的存储数据。

  • 稀有数据发现和通过代币激励以鼓励稀缺数据自动重新复制:当部分数据节点关闭时,我们需要鼓励其他节点加入数据保存网络并复制稀缺数据

  • 高效的链上验证:我们将探索一些技术,特别是零知识证明(zk)来降低验证成本。

其他问题

  • Q:EthStorage 跟数据可用(DA)有什么区别?

  • A:当前的以太坊数据可用技术会在几周或几个月内丢弃数据(参见 Proto-Danksharding FAQ 3:
    https://notes.ethereum.org/@vbuterin/proto_danksharding_faq#What-about-disk-space-requirements-blowing-up-from-all-these-really-big-blocks)。基于一些众所周知的存储成本假设(例如,对标 ETH 价格,存储成本每年都在不断下降),EthStorage 有望永久存储数据。此外,EthStorage 可以提供链上完整的 KV CRUD 语义(注意,读取仅限于数据节点)。
  • Q:读取存储在 EthStorage 的数据的访问协议是什么(类似于 ipfs://)?

  • A:数据可以通过在数据节点上调用 eth_call 来获得。数据节点将在二层网络中搜索和检索相应的 BLOB。此外,从终端用户的角度来看,我们将使用 web3:// URLhttps://eips.ethereum.org/EIPS/eip-4804)访问协议来浏览智能合约托管的动态 BLOB 数据。

Web3 行研会分享合集 / 渠道:

  • Twitter:https://twitter.com/Web3BuidlGroup

  • B 站:https://space.bilibili.com/1203944704

  • YouTube:https://www.youtube.com/channel/UCW1B_fh0FHf33T1HEtZEYOQ

  • Twitter:https://twitter.com/Web3BuidlGroup

关注我们:

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

Web3Buidler.Tech
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开