如果你每小时都失去记忆怎么办?而且你需要不断地请别人告诉你你做了什么?这就是智能合约的现状。在以太坊等区块链上,智能合约无法直接访问超过256个区块的状态。这个问题在多链生态系统中进一步加剧,使系统中跨不同执行层的数据检索和验证更加困难。
2020年,Vitalik Buterin 和 Tomasz Stanczak 提出了一种跨时间访问数据的方法。虽然 EIP 已经停滞不前,但它的需求在以 Roll-up 为中心的多链世界中重新出现。如今,存储证明已经成为一个前沿领域,能为智能合约提供意识和记忆。
Aapp 可以通过多种方式访问数据和状态。所有方法都要求应用程序信任人类/实体或加密经济安全或代码,并进行一些权衡:
考虑到这些解决方案具有的挑战和局限性,显然需要在链上存储并提供块哈希。这就是存储证明发挥作用的地方。为了更好地理解存储证明,让我们先快速了解一下区块链中的数据存储。
区块链是一个公共数据库,可以在网络中的许多计算机之间更新和共享。数据和状态存储在称为块的连续组中,每个区块通过存储前一个块头的哈希值以加密方式引用其父块。
我们以以太坊区块为例。以太坊利用一种特殊类型的 Merkle 树,称为“Merkle Patricia 树”(MPT)。以太坊区块头包含四种不同 Merkle-Patricia 树的根,即状态树、存储树、收据树和交易树。这四种尝试对包含所有以太坊数据的映射进行编码。Merkle 树因其具有数据存储效率而被使用。使用递归哈希,最终只需要存储根哈希,节省了大量空间。它们允许任何人通过证明对节点进行递归哈希会导致相同的根哈希这一事实来证明树中元素的存在。Merkle 证明允许以太坊上的轻客户端获得以下问题的答案:
“轻客户端”只能下载区块头链并使用 Merkle 证明验证信息,而不是下载每笔交易和每个区块。因此,整个过程非常高效。请参阅本博客中 Vitalik 和 Maven11 的这篇研究博文,以更好地了解与 Merkle树相关的实现、优点和挑战。
存储证明使我们能够证明某些内容已在数据库中提交,并且使用加密承诺也是有效的。如果我们能够提供这样的证据,那么区块链上发生的事情就是可验证的。
存储证明有两个主要功能:
非常高级别的存储证明负责检查特定块是否是区块链规范历史的一部分,然后验证请求的特定数据是否是该区块的一部分。这可以通过以下方式实现:
采用这种方法的一些项目有 Herodotus、Lagrange、Axiom、Hyper Oracle、Brevis Network 和 nil Foundation。尽管人们正在努力使应用程序跨多个区块链进行状态感知,但 IBC(区块链间通信)作为互操作性标准脱颖而出,支持 ICQ(链间查询)和 ICA(链间账户)等应用程序。ICQ 使链 A 上的应用程序能够通过将查询包含在简单的 IBC 数据包中来查询链 B 的状态,而 ICA 允许一个区块链安全地控制另一个区块链上的帐户。将它们组合起来就能实现值得期待的跨链用例。Saga 等 RaaS 提供商默认使用 IBC 向其所有应用程序链提供这些功能。
可通过多种方式优化存储证明,以找到内存消耗、证明时间、验证时间、计算效率和开发人员体验之间的适当平衡。整个流程大致可以分为3个主要分步骤。
数据访问:在此分步中,服务提供者在执行层本地或通过维护链上缓存来访问源链的块头。对于跨链数据访问,需要在目的链上验证源链共识。正在采用的一些方法和优化包括:
除了访问数据之外,智能合约还应该能够在数据之上进行任意计算。虽然某些用例可能不需要计算,但对于许多其他用例来说,它是一项重要的增值服务。许多服务提供商都可以对数据进行计算,因为可以在链上生成并提供计算的 zk 证明以确保有效性。由于 Axelar、LayerZero、Polyhedra Network 等现有 AMP 解决方案可能用于数据访问,因此数据处理可能成为存储证明服务提供商的区分因素。
例如,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 可以提供折扣或特权来留住有经验的交易者或用户,并为新手用户提供精简的用户体验。
最后两个用例将要求每次将新区块添加到源链时更新证明。
意识使科技公司能够更好地服务客户。从用户身份到购买行为再到社交图谱,科技公司利用意识来开启精准定位、客户细分和病毒式营销等功能。传统科技公司需要获得用户的明确许可,并且在管理用户数据时必须小心谨慎。然而,非许可的区块链上的所有用户数据都是公开的,不一定会泄露用户身份。智能合约应该能够利用公开的数据来更好地服务用户。随着更专业的生态系统的开发和采用,将愈发需要解决跨时间和区块链的状态意问题。存储证明可以使以太坊成为身份和资产所有权层以及结算层。用户可以在以太坊上维护自己的身份和重要资产,这些资产可以在多个区块链上使用,而无需一直桥接资产。我们将持续期待在未来将解锁的新可能性和用例。
如果你每小时都失去记忆怎么办?而且你需要不断地请别人告诉你你做了什么?这就是智能合约的现状。在以太坊等区块链上,智能合约无法直接访问超过256个区块的状态。这个问题在多链生态系统中进一步加剧,使系统中跨不同执行层的数据检索和验证更加困难。
2020年,Vitalik Buterin 和 Tomasz Stanczak 提出了一种跨时间访问数据的方法。虽然 EIP 已经停滞不前,但它的需求在以 Roll-up 为中心的多链世界中重新出现。如今,存储证明已经成为一个前沿领域,能为智能合约提供意识和记忆。
Aapp 可以通过多种方式访问数据和状态。所有方法都要求应用程序信任人类/实体或加密经济安全或代码,并进行一些权衡:
考虑到这些解决方案具有的挑战和局限性,显然需要在链上存储并提供块哈希。这就是存储证明发挥作用的地方。为了更好地理解存储证明,让我们先快速了解一下区块链中的数据存储。
区块链是一个公共数据库,可以在网络中的许多计算机之间更新和共享。数据和状态存储在称为块的连续组中,每个区块通过存储前一个块头的哈希值以加密方式引用其父块。
我们以以太坊区块为例。以太坊利用一种特殊类型的 Merkle 树,称为“Merkle Patricia 树”(MPT)。以太坊区块头包含四种不同 Merkle-Patricia 树的根,即状态树、存储树、收据树和交易树。这四种尝试对包含所有以太坊数据的映射进行编码。Merkle 树因其具有数据存储效率而被使用。使用递归哈希,最终只需要存储根哈希,节省了大量空间。它们允许任何人通过证明对节点进行递归哈希会导致相同的根哈希这一事实来证明树中元素的存在。Merkle 证明允许以太坊上的轻客户端获得以下问题的答案:
“轻客户端”只能下载区块头链并使用 Merkle 证明验证信息,而不是下载每笔交易和每个区块。因此,整个过程非常高效。请参阅本博客中 Vitalik 和 Maven11 的这篇研究博文,以更好地了解与 Merkle树相关的实现、优点和挑战。
存储证明使我们能够证明某些内容已在数据库中提交,并且使用加密承诺也是有效的。如果我们能够提供这样的证据,那么区块链上发生的事情就是可验证的。
存储证明有两个主要功能:
非常高级别的存储证明负责检查特定块是否是区块链规范历史的一部分,然后验证请求的特定数据是否是该区块的一部分。这可以通过以下方式实现:
采用这种方法的一些项目有 Herodotus、Lagrange、Axiom、Hyper Oracle、Brevis Network 和 nil Foundation。尽管人们正在努力使应用程序跨多个区块链进行状态感知,但 IBC(区块链间通信)作为互操作性标准脱颖而出,支持 ICQ(链间查询)和 ICA(链间账户)等应用程序。ICQ 使链 A 上的应用程序能够通过将查询包含在简单的 IBC 数据包中来查询链 B 的状态,而 ICA 允许一个区块链安全地控制另一个区块链上的帐户。将它们组合起来就能实现值得期待的跨链用例。Saga 等 RaaS 提供商默认使用 IBC 向其所有应用程序链提供这些功能。
可通过多种方式优化存储证明,以找到内存消耗、证明时间、验证时间、计算效率和开发人员体验之间的适当平衡。整个流程大致可以分为3个主要分步骤。
数据访问:在此分步中,服务提供者在执行层本地或通过维护链上缓存来访问源链的块头。对于跨链数据访问,需要在目的链上验证源链共识。正在采用的一些方法和优化包括:
除了访问数据之外,智能合约还应该能够在数据之上进行任意计算。虽然某些用例可能不需要计算,但对于许多其他用例来说,它是一项重要的增值服务。许多服务提供商都可以对数据进行计算,因为可以在链上生成并提供计算的 zk 证明以确保有效性。由于 Axelar、LayerZero、Polyhedra Network 等现有 AMP 解决方案可能用于数据访问,因此数据处理可能成为存储证明服务提供商的区分因素。
例如,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 可以提供折扣或特权来留住有经验的交易者或用户,并为新手用户提供精简的用户体验。
最后两个用例将要求每次将新区块添加到源链时更新证明。
意识使科技公司能够更好地服务客户。从用户身份到购买行为再到社交图谱,科技公司利用意识来开启精准定位、客户细分和病毒式营销等功能。传统科技公司需要获得用户的明确许可,并且在管理用户数据时必须小心谨慎。然而,非许可的区块链上的所有用户数据都是公开的,不一定会泄露用户身份。智能合约应该能够利用公开的数据来更好地服务用户。随着更专业的生态系统的开发和采用,将愈发需要解决跨时间和区块链的状态意问题。存储证明可以使以太坊成为身份和资产所有权层以及结算层。用户可以在以太坊上维护自己的身份和重要资产,这些资产可以在多个区块链上使用,而无需一直桥接资产。我们将持续期待在未来将解锁的新可能性和用例。