我们要感谢 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)可以通过多种方式访问数据和状态。所有这些方法都要求应用程序信任人类/实体、加密经济安全性或代码,并且都有一些权衡:
鉴于这些解决方案的挑战和限制,明显需要在链上存储和提供区块哈希。这就是存储证明的用处。为了更好地理解存储证明,让我们快速了解一下区块链中的数据存储。
区块链是一个公共数据库,在网络中的许多计算机上更新和共享。数据和状态存储在称为区块的连续组中,每个区块通过存储前一个区块头的哈希值来加密引用其父区块。
以太坊区块为例。Ethereum 利用一种特殊类型的默克尔树,称为"默克尔帕特里夏树"(MPT)。Ethereum 区块头包含四种不同默克尔帕特里夏树的根:状态树、存储树、收据树和交易树。这四棵树编码了包含所有 Ethereum 数据的映射。由于默克尔树在数据存储方面的效率,所以使用它们。使用递归哈希,最终只需要存储根哈希,节省了大量空间。它们允许任何人通过证明递归哈希节点会导致相同的根哈希来证明树中元素的存在。默克尔证明允许 Ethereum 上的轻客户端获得对以下问题的答案:
"轻客户端"不需要下载每笔交易和每个区块,只需要下载区块头链,并使用默克尔证明验证信息。这使整个过程非常高效。参考 Vitalik 的这篇博客和 Maven11 研究文章,更好地理解与默克尔树相关的实现、优势和挑战。
存储证明允许我们证明某些东西已提交到数据库中,并且使用加密承诺也是有效的。如果我们能提供这样的证明,那么这是一个可验证的声明,即某事在区块链上发生了。
存储证明允许两个主要功能:
存储证明在很高的层面上检查特定区块是否是区块链规范历史的一部分,然后验证请求的特定数据是否是该区块的一部分。这可以通过以下方式实现:
源链区块头哈希的缓存,或链下区块哈希累加器的根哈希,在目标链上维护。这个缓存定期更新,用于有效地在链上证明给定区块存在,并与可从状态访问的最近区块哈希有加密链接。这个过程被称为证明链的连续性。也可以使用专用区块链来存储所有源链的区块头。
历史数据/区块从链下索引数据或链上缓存(取决于请求的复杂性)按目标链上 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 个主要子过程:
在这个子过程中,服务提供商在执行层本地访问源链的区块头,或通过维护链上缓存进行访问。对于跨链数据访问,需要在目标链上验证源链共识。一些正在采用的方法和优化包括:
除了访问数据外,智能合约还应该能够对数据进行任意计算。虽然某些用例可能不需要计算,但对于许多其他用例来说,这是一个重要的增值服务。许多服务提供商支持对数据进行计算,因为可以生成计算的 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 目前正在做的那样。
状态和存储证明可以为应用、中间件和基础设施层的智能合约解锁许多新用例。其中一些是:
治理:
身份和声誉:
以上所有证明都可以用来为用户提供定制化体验。Dapps 可以为经验丰富的交易者或用户提供折扣或特权以留住他们,并为新手用户提供简化的用户体验。
Defi:
最后两个用例将需要每次向源链添加新区块时更新证明。
意识使技术公司能够更好地服务于他们的客户。从用户身份到购买行为到社交图谱,技术公司利用意识来解锁精确定位、客户细分和病毒式营销等能力。传统技术公司需要用户的明确许可,并且在管理用户数据时必须小心。然而,无许可区块链上的所有用户数据都是公开可用的,不必透露用户身份。智能合约应该能够利用公开可用的数据更好地服务用户。更专业化生态系统的发展和采用将使跨时间和区块链的状态感知成为一个越来越重要的问题需要解决。存储证明可以使 Ethereum 成为身份和资产所有权层以及结算层。用户可以在 Ethereum 上维护他们的身份和关键资产,这些可以在多个区块链上使用,而不必一直桥接资产。我们继续对未来将解锁的新可能性和用例保持兴奋。
______________________
LongHash 是自 2017 年以来的加密原生风险投资公司。我们投资并与有远见的创始人一起构建开放经济的下一次演进。关注 Raghav (x.com/@0xRaghav) 和 Shikhai Wei (https://x.com/theshikhai) 获取更多关于存储证明的研究。
______________________
来源: