Writing
Storage Proofs: 实现跨时间和跨链的状态感知
on
October 17, 2023
| Click to read translation here:
Read Full Proposal
Read Blueprint

我们要感谢 Herodotus 的 Kacper Koziol 和 Tiago Neto,Brevis 的 Mo Dong,Lagrange Labs 的 Ismael Hishon-Rezaizadeh,Axiom 的 Yi Sun 以及 LongHash Ventures 的 Roy Lu 的审阅和宝贵反馈。

引言

如果你每小时都会失忆怎么办?你需要不断地询问别人你做了什么?这就是智能合约的当前状态。在像 Ethereum 这样的区块链上,智能合约无法直接访问超过 256 个区块之外的状态。在多链生态系统中,这个问题变得更加严重,因为跨不同执行层检索和验证数据更加困难。

2020年,Vitalik Buterin 和 Tomasz Stanczak 提出了一种跨时间访问数据的方法。虽然该 EIP 已经停滞,但在以卷叠为中心的多链世界中,这一需求已经重新浮现。如今,存储证明已经成为前沿技术,为智能合约提供感知和记忆能力。

访问链上数据

去中心化应用程序(dapps)可以通过多种方式访问数据和状态。所有这些方法都要求应用程序信任人类/实体、加密经济安全性或代码,并且都有一些权衡:

信任人类/实体:

  • 归档节点:运营商可以自己运行归档节点,或者依赖像 Alchemy 或 Infura 这样的归档节点服务提供商来访问自创世区块以来的所有数据。它们提供与完整节点相同的所有数据,但还包括整个区块链的所有历史状态数据。像 Etherscan 和 Dune Analytics 这样的链下服务使用归档节点来访问链上数据。链下参与者可以证明这些数据的有效性,而链上智能合约可以验证数据是由可信任的参与者/委员会签名的。底层数据的完整性没有被验证。这种方法要求 dapp 信任归档节点服务提供商正确运行基础设施,没有任何恶意意图。

信任加密经济安全性:

  • 索引器:索引协议组织区块链上的所有数据,允许开发者构建和发布应用程序可以查询的开放 API。个体索引器是质押代币以提供索引和查询处理服务的节点运营商。然而,当提供的数据不正确时,可能会发生争议,而仲裁过程可能需要时间。此外,来自像 The Graph 这样的索引器的数据无法直接被智能合约的业务逻辑利用,而是在基于 web2 的数据分析环境中使用。
  • 预言机:预言机服务提供商使用从许多独立节点运营商聚合的数据。这里的挑战是预言机提供的数据可能不会频繁更新,并且范围有限。像 Chainlink 这样的预言机通常只维护特定状态,如价格信息,对于应用程序特定的状态和历史,它们不可行。此外,这种方法也在数据中引入了一定程度的偏差,并且需要信任节点运营商。

信任代码:

  • 特殊变量和函数:像 Ethereum 这样的区块链有特殊的变量和函数,主要用于提供关于区块链的信息或是通用的工具函数。智能合约只能访问 256 个最近区块的区块哈希。由于可扩展性原因,并非所有区块的区块哈希都可用。访问历史区块哈希将会很有用,因为它可以允许针对它们验证证明。EVM 执行中没有操作码允许访问旧的区块内容或之前的交易内容或收据输出,所以节点可以安全地忘记这些东西,仍然能够处理新区块。这种方法也限于单一区块链。

鉴于这些解决方案的挑战和限制,明显需要在链上存储和提供区块哈希。这就是存储证明的用处。为了更好地理解存储证明,让我们快速了解一下区块链中的数据存储。

区块链中的数据存储

区块链是一个公共数据库,在网络中的许多计算机上更新和共享。数据和状态存储在称为区块的连续组中,每个区块通过存储前一个区块头的哈希值来加密引用其父区块。

以太坊区块为例。Ethereum 利用一种特殊类型的默克尔树,称为"默克尔帕特里夏树"(MPT)。Ethereum 区块头包含四种不同默克尔帕特里夏树的根:状态树、存储树、收据树和交易树。这四棵树编码了包含所有 Ethereum 数据的映射。由于默克尔树在数据存储方面的效率,所以使用它们。使用递归哈希,最终只需要存储根哈希,节省了大量空间。它们允许任何人通过证明递归哈希节点会导致相同的根哈希来证明树中元素的存在。默克尔证明允许 Ethereum 上的轻客户端获得对以下问题的答案:

  • 这个交易是否存在于特定区块中?
  • 我的账户当前余额是多少?
  • 这个账户是否存在?

"轻客户端"不需要下载每笔交易和每个区块,只需要下载区块头链,并使用默克尔证明验证信息。这使整个过程非常高效。参考 Vitalik 的这篇博客和 Maven11 研究文章,更好地理解与默克尔树相关的实现、优势和挑战。

存储证明

存储证明允许我们证明某些东西已提交到数据库中,并且使用加密承诺也是有效的。如果我们能提供这样的证明,那么这是一个可验证的声明,即某事在区块链上发生了。

存储证明能实现什么?

存储证明允许两个主要功能:

  1. 访问超过最后 256 个区块之外的历史链上数据,一直回溯到创世区块
  2. 在另一个区块链上访问一个区块链的链上数据(历史和当前),通过共识验证的帮助或 L2 情况下的 L1-L2 桥接

存储证明如何运作?

存储证明在很高的层面上检查特定区块是否是区块链规范历史的一部分,然后验证请求的特定数据是否是该区块的一部分。这可以通过以下方式实现:

  • 链上处理:dapps 可以采用初始可信区块,将区块作为调用数据传递以访问上一个区块,并一直回溯到创世区块。这需要链上大量计算和大量调用数据。由于需要链上大量计算,这种方法在实际上根本不可行。Aragon 在 2018 年尝试使用链上方法,但由于链上成本高而不可行。

  • 使用 ZK 证明:该方法类似于链上处理,除了使用 ZK 证明者将复杂计算移至链下。


    • 访问同一链上的数据:ZK 证明可以用来断言任意历史区块头是执行环境内可访问的 256 个最近区块头之一的祖先。另一种方法是索引源链的整个历史并生成相同的 ZK 证明,以证明索引正确发生。随着新区块添加到源链,这个证明会定期更新。
    • 跨链访问数据:提供者在目标链上收集源链的区块头,并使用 ZK 共识证明证明这些区块头的有效性。还可以使用现有的 AMP 解决方案如 Axelar、Celer 或 LayerZero 来查询区块头。

源链区块头哈希的缓存,或链下区块哈希累加器的根哈希,在目标链上维护。这个缓存定期更新,用于有效地在链上证明给定区块存在,并与可从状态访问的最近区块哈希有加密链接。这个过程被称为证明链的连续性。也可以使用专用区块链来存储所有源链的区块头。

历史数据/区块从链下索引数据或链上缓存(取决于请求的复杂性)按目标链上 dapp 的请求访问。虽然区块头哈希的缓存在链上维护,但实际数据可能存储在链下。

通过默克尔包含证明检查指定区块中数据的存在,并为此生成 zk 证明。这个证明与正确索引的 zk 证明或 ZK 共识证明相结合,然后在链上提供以进行无信任验证。

然后 dapps 可以在链上验证这个证明,并使用数据执行所需的操作。与验证 ZK 证明一起,像区块号和区块哈希这样的公共参数会根据链上维护的区块头缓存进行检查。

采用这种方法的一些项目包括 Herodotus、Lagrange、Axiom、Hyper Oracle、Brevis Network 和 nil foundation。虽然正在做出重大努力使应用程序在多个区块链上具有状态感知能力,但 IBC(跨区块链通信)作为一种互操作性标准脱颖而出,它支持像 ICQ(跨链查询)和 ICA(跨链账户)这样的应用。ICQ 使 A 链上的应用程序能够通过在简单的 IBC 数据包中包含查询来查询 B 链的状态,而 ICA 允许一个区块链安全地控制另一个区块链上的账户。结合它们可以实现有趣的跨链用例。像 Saga 这样的 RaaS 提供商通过使用 IBC 默认为所有应用链提供这些功能。

存储证明可以通过多种方式进行优化,以找到内存消耗、证明时间、验证时间、计算效率和开发者体验之间的正确平衡。整个过程大致可分为 3 个主要子过程:

  1. 数据访问
  2. 数据处理
  3. 数据访问和处理的 ZK 证明生成

数据访问:

在这个子过程中,服务提供商在执行层本地访问源链的区块头,或通过维护链上缓存进行访问。对于跨链数据访问,需要在目标链上验证源链共识。一些正在采用的方法和优化包括:

  • 现有以太坊区块链:可以使用以太坊区块链的现有结构,通过 ZKP 证明任何历史存储槽相对于当前区块头的值。这可以被视为一个大型包含证明。它证明,给定最近的区块头 X 位于高度 b,存在区块头 Y,它是 X 在高度 b-k 的祖先。它基于以太坊共识的安全性,并需要快速证明系统以提高效率。这是 Lagrange 使用的方法。
  • 链上默克尔山脉(MMR)缓存:默克尔山脉可以看作是默克尔树的列表,当两棵树达到相同大小时,单个默克尔树就会合并。通过向树的先前根添加父节点来合并 MMR 中的单个默克尔树。MMR 是一种类似于默克尔树的数据结构,具有一些额外的好处,如高效附加元素和高效数据查询,特别是从大型数据集读取顺序数据时。通过默克尔树附加新头部将需要在每个级别传递所有姐妹节点。为了高效地附加数据,Axiom 使用 MMR 在链上维护区块头哈希的缓存。Herodotus 在链上存储 MMR 区块哈希累加器的根哈希。这允许他们通过包含证明检查获取的数据与这些区块头哈希。这种方法需要定期更新缓存,如果不去中心化,会带来活性问题。

    Herodotus 维护两个不同的 MMR。根据特定的区块链或层,累加器可以定制使用不同的哈希函数,优化效率和计算成本。对于在 Starknet 上证明,可能会使用 poseidon 哈希,但对于 EVM 链,可能会使用 Keccack 哈希。
  • 链下 MMR 缓存:Herodotus 维护先前获取的查询和结果的链下缓存,以便在再次请求数据时更快地获取。这需要额外的基础设施,而不仅仅是运行归档节点。链下基础设施的优化可能会降低最终用户的成本。
  • 专用存储区块链:Brevis 依赖专用 ZK 卷叠(聚合层)来存储他们证明的所有链的所有区块头。如果没有这个聚合层,每个链都需要存储其他每个链的区块头,导致 N 个区块链的 O(N²) "连接"。通过引入聚合层,每个区块链只需要存储卷叠的状态根,减少总体连接到 O(N)。这一层还用于聚合区块头/查询结果的多个证明,并且可以在每个连接的区块链上提交单个验证证明。
  • L1-L2 消息传递:在 L2 的情况下可以避免源链共识验证,因为 L2 支持用于更新 L1 上 L2 合约的原生消息传递。缓存可以在 Ethereum 上更新,L1-L2 消息传递可用于将区块哈希或链下编译的树的根发送到其他 L2。Herodotus 正在采用这种方法,但这对替代 L1 不可行。

数据处理:

除了访问数据外,智能合约还应该能够对数据进行任意计算。虽然某些用例可能不需要计算,但对于许多其他用例来说,这是一个重要的增值服务。许多服务提供商支持对数据进行计算,因为可以生成计算的 zk 证明并在链上提供有效性。由于可能使用现有的 AMP 解决方案如 Axelar、LayerZero、Polyhedra Network 进行数据访问,数据处理可能成为存储证明服务提供商的差异化因素。

例如,Hyper Oracle 允许开发者使用 JavaScript 定义自定义链下计算。Brevis 设计了一个开放的 ZK 查询引擎市场,接受来自 dApp 的数据查询,并使用证明的区块头处理它们。智能合约发送数据查询,由市场中的证明者接收。证明者根据查询输入、相关区块头(来自 Brevis 聚合层)和结果生成证明。Lagrange 引入了 ZK Big Data Stack 来证明分布式编程模型如 SQL、MapReduce 和 Spark/RDD。这些证明是模块化的,可以从现有跨链桥和 AMP 协议产生的任何区块头生成。ZK MapReduce 是 Lagrange ZK BigData 堆栈中的第一个产品,是一个分布式计算引擎(基于众所周知的 MapReduce 编程模型),用于证明涉及大量多链数据的计算结果。例如,单个 ZKMR 证明可用于证明部署在 4-5 条链上的 DEX 在指定时间窗口内的流动性变化。对于相对简单的查询,计算也可以直接在链上进行,就像 Herodotus 目前正在做的那样。

证明生成:

  • 可更新证明:当需要计算证明并在移动的区块流上有效维护时,可以使用可更新证明。当 dapp 希望为合约变量(如代币价格)的移动平均值维护证明时,随着新区块的创建,无需从头重新计算新证明,可以有效地更新现有证明。为了证明链上状态的动态数据并行计算,Lagrange 在 MPT 的一部分之上构建了一个批量向量承诺,称为 Recproof,即时更新它,并动态地计算它。通过在 MPT 之上递归创建 Verkle 树,Lagrange 能够有效地计算大量动态链上状态数据。

  • Verkle 树:与默克尔树不同,在默克尔树中我们需要提供所有共享父节点的节点,Verkle 树只需要提供到根的路径。与默克尔树中所有姐妹节点相比,这条路径要小得多。Ethereum 也在探索在未来版本中使用 Verkle 树,以最小化 Ethereum 完整节点需要持有的状态量。Brevis 利用 Verkle 树在聚合层中存储证明的区块头和查询结果。它显著减少了数据包含证明的大小,特别是当树包含大量元素时,并且还支持一批数据的高效包含证明。
  • 内存池监控以加快证明生成:Herodotus 最近宣布了 turbo,它允许开发者在他们的智能合约代码中添加几行代码来指定数据查询。Herodotus 监控与 turbo 合约交互的智能合约交易的内存池。当交易在内存池中时,证明生成过程就开始了。一旦证明在链上生成和验证,结果将写入链上的 turbo 交换合约。结果只有在通过存储证明进行身份验证后才能写入 turbo 交换合约。一旦发生这种情况,部分交易费用将与排序器或区块构建者共享,激励他们等待更长时间以收取费用。对于简单的数据查询,有可能在用户的交易包含在区块中之前,请求的数据就已经在链上可用。

状态/存储证明的应用

状态和存储证明可以为应用、中间件和基础设施层的智能合约解锁许多新用例。其中一些是:

应用层:

治理

  • 跨链投票:链上投票协议可以允许 B 链上的用户证明他们在 A 链上拥有资产的所有权。用户不必桥接他们的资产来获得新链上的投票权。例如:Herodotus 上的 SnapshotX
  • 治理代币分配:应用程序可以向活跃用户或早期采用者分配更多治理代币。例如:Lagrange 上的 RetroPGF

身份和声誉

  • 所有权证明:用户可以提供在 A 链上拥有某些 NFT、SBT 或资产的证明,使他们能够在 B 链上执行某些操作。例如,游戏应用链可能决定在具有现有流动性的另一条链上如 Ethereum 或任何 L2 上推出其 NFT 集合。这将允许游戏利用其他地方存在的流动性,并在不实际需要桥接 NFT 的情况下桥接 NFT 实用性。
  • 使用证明:用户可以根据他们历史使用平台的情况获得折扣或高级功能(证明用户在 Uniswap 上交易了 X 量)
  • OG 证明:用户可以证明他/她拥有一个活跃超过 X 天的账户
  • 链上信用评分:多链信用评分平台可以聚合单个用户的多个账户数据来生成信用评分

以上所有证明都可以用来为用户提供定制化体验。Dapps 可以为经验丰富的交易者或用户提供折扣或特权以留住他们,并为新手用户提供简化的用户体验。

Defi

  • 跨链借贷:用户可以在 A 链上锁定资产,在 B 链上获取贷款,而不是桥接代币
  • 链上保险:可以通过访问历史链上数据确定失败,并且保险可以完全在链上结算。
  • 资产在池中的 TWAP:应用程序可以计算并获取指定时间段内 AMM 池中资产的平均价格。例如:使用 Axiom 的 Uniswap TWAP Oracle
  • 期权定价:链上期权协议可能使用资产在去中心化交易所过去 n 个区块上的波动性为期权定价。

最后两个用例将需要每次向源链添加新区块时更新证明。

中间件:

  • 意图:存储证明将允许用户更清晰地表达他们的意图。虽然执行必要步骤来满足用户意图是解决者的工作,但用户可以更清楚地指定基于链上数据和参数的条件。解决者还可以证明用于寻找最佳解决方案的链上数据的有效性。
  • 账户抽象:用户可以通过存储证明依赖来自其他链的数据,通过账户抽象设置规则。例如:每个钱包都有一个 nonce。我们可以证明一年前,nonce 是特定数字,目前 nonce 是相同的。这可以用来证明这个钱包根本没有被使用,然后可以将钱包的访问权委托给另一个钱包。
  • 链上自动化:智能合约可以根据依赖于链上数据的预定义条件自动执行某些操作。自动化程序需要在某些间隔调用智能合约,以维持 AMM 的最佳价格流或通过避免坏账保持借贷协议健康。Hyper Oracle 除了访问链上数据外,还支持自动化。

基础设施:

  • 无信任链上预言机:去中心化预言机网络在预言机网络内聚合来自众多单个预言机节点的响应。预言机网络可以消除这种冗余,并利用加密安全性获取链上数据。预言机网络可以将数据从多个链(L1s、L2s 和替代 L1s)摄取到单个链上,并简单地使用存储证明证明其他地方的存在。具有显著吸引力的 DeFi 解决方案也可以使用自定义解决方案。例如,最大的流动性质押提供商 Lido Finance 与 Nil Foundation 合作,资助 zkOracle 的开发。该解决方案将使无信任访问 EVM 内历史数据成为可能,并保护 Lido Finance 150 亿美元的质押以太坊流动性。
  • AMP 协议:现有的 AMP 解决方案可以通过与存储证明服务提供商合作来增加其消息的表达能力。这是 Lagrange 在其模块化论文文章中建议的方法。

结论

意识使技术公司能够更好地服务于他们的客户。从用户身份到购买行为到社交图谱,技术公司利用意识来解锁精确定位、客户细分和病毒式营销等能力。传统技术公司需要用户的明确许可,并且在管理用户数据时必须小心。然而,无许可区块链上的所有用户数据都是公开可用的,不必透露用户身份。智能合约应该能够利用公开可用的数据更好地服务用户。更专业化生态系统的发展和采用将使跨时间和区块链的状态感知成为一个越来越重要的问题需要解决。存储证明可以使 Ethereum 成为身份和资产所有权层以及结算层。用户可以在 Ethereum 上维护他们的身份和关键资产,这些可以在多个区块链上使用,而不必一直桥接资产。我们继续对未来将解锁的新可能性和用例保持兴奋。

______________________

LongHash 是自 2017 年以来的加密原生风险投资公司。我们投资并与有远见的创始人一起构建开放经济的下一次演进。关注 Raghav (x.com/@0xRaghav) 和 Shikhai Wei (https://x.com/theshikhai) 获取更多关于存储证明的研究。

______________________

来源: