当前位置:主页 > 列表页 > 正文

深入解读存储证明:实现跨时间、跨链的区块链状态感知

2023-10-13 10:56 | 出处: odaily

原文作者:LongHash Ventures

原文编译:深潮 TechFlow

如果你每小时都失去记忆,需要不停询问别人告诉你做过什么事怎么办?这就是智能合约目前所处的状态。在以太坊这样的区块链上,智能合约无法直接访问超过 256 个区块之外的状态。这个问题在多链生态系统中更加严重,跨不同执行层检索和验证数据甚至更加困难。

2020 年,Vitalik Buterin 和 Tomasz Stanczak 提出了一种跨时间访问数据的方法。虽然这一 EIP 方案陷入了停滞,但它的需求在以 Roll-up 为中心的多链世界中重新出现。如今,存储证明已经成为前沿领域,以赋予智能合约意识和记忆。

访问链上数据的方式

Dapp 可以通过多种方式访问数据和状态。所有这些方法都需要应用程序对人类/实体、加密经济安全性或代码进行一定程度的信任,并都存在一定的权衡取舍:

信任人类/实体:

存档节点:操作者可以自己运行存档节点,或者依赖 Alchemy、Infura 等存档节点服务提供商,访问从创世块开始的所有数据。它们提供与全节点相同的数据,还包括整个区块链的所有历史状态数据。链下服务如 EtherscanDune Analytics 使用存档节点访问链上数据。链下参与者可以证明这些数据的有效性,链上智能合约可以验证数据是由可信参与者/委员会签名的。但是底层数据的完整性无法被验证。这种方法需要 Dapp 信任存档节点服务提供商以正确的方式运行基础设施,没有任何恶意意图。

信任加密经济安全性:

信任代码:

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

鉴于这些解决方案的挑战和局限性,显然存在对链上存储和提供区块哈希的明确需求。这就是存储证明的用武之地。为了更好地理解存储证明,我们快速看一下区块链中的数据存储。

区块链中的数据存储

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

以以太坊区块为例。以太坊使用一种特殊的 Merkle 树,称为“Merkle Patricia Tree”(MPT)。以太坊区块头包含四个不同的 Merkle -Patricia 树的根,即状态树、存储树、收据树和交易树。这四棵树对包含所有以太坊数据的映射进行编码。使用 Merkle 树是由于其在数据存储中的高效性。通过递归哈希,最终只需要存储根哈希,节省了大量空间。它们允许任何人通过证明递归哈希节点导致相同的根哈希,来证明树中元素的存在。Merkle 证明允许以太坊上的轻客户端通过回答以下问题来获取答案:

与下载每个交易和每个区块不同,“轻客户端”只能下载区块头链,并使用 Merkle 证明来验证信息。这使整个过程非常高效。

请参阅 Vitalik 和 Maven 11 的这篇博客研究文章,更好地理解与 Merkle 树相关的实现、优点和挑战。

存储证明

存储证明允许我们使用加密证明来证明某件事被记录在数据库中且有效。如果我们能提供这样的证明,那就是一个可验证的声明,证明某件事发生在区块链上。

存储证明可以实现什么?

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

存储证明的工作原理是什么?

简单来说,存储证明检查特定区块是否是区块链的规范历史的一部分,然后验证所请求的特定数据是否是区块的一部分。这可以通过以下方式实现:

访问同一链的数据:可以使用零知识证明断言任意历史区块头是执行环境中可访问的最近 256 个区块头的祖先之一。另一种方法是索引源链的全部历史并生成零知识证明以证明索引正确完成。该证明会随源链的新区块添加而定期更新。

采用这种方法的项目有 HerodotusLagrangeAxiom、HyperOracle、Brevis Network 和 nil 基金会。尽管正为使应用程序跨多个区块链具有状态意识而做出重大努力,但 IBC(链间通信)作为一种互操作性标准脱颖而出,支持应用程序使用如 ICQ(跨链查询)和 ICA(跨链帐户)。 ICQ 使 Chain A 上的应用程序可以通过在简单的 IBC 数据包中包含查询来查询 Chain B 的状态,ICA 允许一个区块链安全控制另一个区块链上的账户。将它们组合在一起可以支持有趣的跨链用例。像 Saga 这样的 RaaS 提供商会默认使用 IBC 为所有应用链提供这些功能。

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

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

数据处理:

除了访问数据,智能合约还应该能够对数据进行任意计算。虽然一些用例可能不需要计算,但对许多其他用例来说,这是一个重要的增值服务。许多服务提供商支持以零知识证明的形式对数据进行计算,并在链上提供该证明以验证其有效性。因为现有的跨链消息传递解决方案如 Axelar、LayerZero、Polyhedra Network 可能被用于数据访问,因此数据处理可能会成为存储证明服务提供商的一个差异化点。

例如,HyperOracle 允许开发者使用 JavaScript 定义自定义的链下计算。Brevis 设计了一个开放的零知识查询引擎市场,接受来自 Dapp 的数据查询,并使用证明过的区块头对其进行处理。智能合约发送数据查询,由市场上的证明者获取。证明者基于查询输入、相关的区块头(来自 Brevis 聚合层)和结果生成证明。Lagrange 引入了零知识大数据技术栈,用于证明分布式编程模型如 SQL、MapReduce 和 Spark/RDD。这些证明是模块化的,可以由来自现有跨链桥接和跨链消息传递协议的任何区块头生成。Lagrange 零知识大数据技术栈的第一个产品是零知识 MapReduce,这是一个用于证明涉及大量多链数据计算结果的分布式计算引擎(基于著名的 MapReduce 编程模型)。例如,单个零知识 MapReduce 证明可以证明部署在 4-5 条链上的 DEX 在指定时间窗口内的流动性变化。对于相对简单的查询,计算也可以像 Herodotus 目前所做的那样直接在链上完成。

证明生成:

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

应用层:

治理:

身份和声誉:

上述所有证明都可以用于向用户提供定制体验。Dapp 可以提供折扣或特权来保留有经验的交易员或用户,并为新手用户提供简化的用户体验。

Defi:

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

中间件:

基础设施

结论

意识让科技公司能够更好地为客户服务。 从用户身份到购买行为再到社交关系,科技公司利用认知来解锁精准定位、客户细分和病毒营销等功能。传统的科技公司需要用户的明确许可,在管理用户数据时必须谨慎行事。但是,许可区块链上的所有用户数据都是公开的,不一定会泄露用户身份。智能合约应该能够利用公开可用的数据来更好地为用户服务。更专业生态系统的发展和采用,将使跨时间和跨链的状态意识成为一个越来越重要的问题。存储证明可以使以太坊作为身份和资产所有权层出现,而不仅仅是一个结算层。用户可以在以太坊上维护自己的身份和关键资产,这可以在多个区块链中使用,而不需要始终桥接资产。我们对未来会解锁的新可能性和用例保持兴奋。

您可能感兴趣的文章:

相关文章