EthStorage:通过 L2 和 DA 扩展以太坊存储

EthStorage中文
8 min readDec 15, 2022

--

背景及动机

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

例如,一个强烈的存储需求来自于链上 NFTs,其目的不仅 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 和数据可用性技术,我们相信我们可以极大的扩容以太坊存储并实现以下目标:

  • Increase the capacity to PB or more assuming that each node has a few TB disks
  • Reduce the storage cost to 1/100x or 1/1000x vs SSTORE
  • Similar KV CRUD semantics as SSTORE (a few limitations will apply, see below)
  • Reuse Ethereum mainnet security on block re-organization, storage cost settlement, and censorship-resistant
  • 将网络的存储容量增加到 PB 或更多(假设每个节点有几 TB 硬盘空间)
  • 与 SSTORE 相比,将存储成本降低到它的 1/100 甚至是 1/1000
  • 与 SSTORE 类似的 KV CRUD 语义(这里将有一些限制,详见下文)
  • 在区块重组、存储支付结算和抗审查方面复用以太坊主网安全

解决方案

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

  • 上传成本(calldata)
  • 存储成本(SSTORE)

对于上传成本,通过数据可用技术(DA),尤其是danksharding,我们预计上传成本在不久的将来将会大幅降低 — — 例如,当前的 EIP-4844 草案每字节将有 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)。 基于一些众所周知的存储成本假设(例如,对标 ETH 价格,存储成本每年都在不断下降),EthStorage 有望永久存储数据。 此外,EthStorage 可以提供链上完整的 KV CRUD 语义(注意,读取仅限于数据节点)。
  • Q:读取存储在 EthStorage 的数据的访问协议是什么(类似于 ipfs://)?
  • A:数据可以通过在数据节点上调用 eth_call 来获得。数据节点将在二层网络中搜索和检索相应的 BLOB。 此外,从终端用户的角度来看,我们将使用 web3:// URL访问协议来浏览智能合约托管的动态 BLOB 数据

关于 EthStorage

EthStorage 是基于以太坊数据可用(Data Availability)的基础上提供可编程的动态存储的二层解决方案(L2)。EthStorage 将会大大降低以太坊上大量数据的存储开销,节省 100 到 1000 倍成本,更好的支持未来完全去中心化的网络。EthStorage 与 EVM 高度整合,并完全兼容 Solidity、Remix、Hardhat 和 MetaMask 等以太坊工具。团队获得了以太坊基金会官方对于数据可用(Data Availability)研究的资助。

官网:https://ethstorage.io/

Twitter:https://twitter.com/EthStorage

关注我们:

--

--

EthStorage中文
EthStorage中文

Written by EthStorage中文

EthStorage 是基于以太坊数据可用(Data Availability)的基础上提供可编程的动态存储的二层解决方案。团队获得以太坊基金会官方对于数据可用(Data Availability)研究的资助。

No responses yet