详解储存证明:如何提升预言机性能?
原文:《
翻译及校对:「Starknet 中文社区」
Starknet 上无需信任的跨链信息访问
介绍
存储证明是一种跟踪区块链信息的加密方式,可以跨链共享。与预言机类似,存储证明提供信息真实性的证明。然而与预言机的区别在于,存储证明不需要第三方来证明。相反,有了存储证明,信任就建立在存储中。
在某些情况下,存储证明可以替代预言机。而在另一些情况下,存储证明可以增强预言机,甚至开辟一些全新的区块链用例。
本文将详细探讨存储证明的定义、工作原理、使用案例以及如何增强或替代预言机。
什么是存储证明?
存储证明允许公开状态的加密承诺,还可以通过与 SNARK/STARK 技术结合来进行优化。有效性证明可以证实特定状态在历史某个特定区块中是存在且有效的。
本质上来说,区块链是包含使用 Merkle 树、Merkle Patricia 树和 Verkle 树等以加密方式提交数据的数据库。由于所有数据都已提交,可以证明某些信息已封装在给定的状态中。然而,对于简单的承诺方案,随着它囊括的数据规模越来越大,这个证明的规模也会愈加变大。在链上验证此类证明变得过于昂贵而不实用。
另一方面,当与 STARK 或 SNARK 技术结合使用时,存储证明可以变得相对较小,并可以在特定时间点和任意域上验证特定状态,且无需信任第三方。存储证明不依赖第三方,而是依赖底层链本身的安全性。
存储证明为何如此重要?如今的以太坊已不再是简单的单片链(L1)。随着 L2 解决方案的出现,数据现在分布在多条链上。
无法再对链的状态进行同步假设。许多共享数据的解决方案已经上线,例如 L1 → L2 消息系统、跨链桥和预言机。但这些解决方案的问题在于,需要信任中继器、多重签名器、委员会这些第三方。存储证明允许在无需信任第三方的情况下使用加密承诺在任何时间点验证区块链的状态。
存储证明的用例
由于存储证明可以有效地「压缩」区块链并传送数据到其它地方,所以出现了不少应用。负担得起的验证成本是存储证明的一个整体属性,让证明可以在目的链上得到验证,最大限度地减少了开发跨链信息传递系统的需要。
潜在用例包括:
- 关于区块链上的状态和交易的通用信息访问。
- 简化的跨链投票系统。经常有用户在缓慢但更安全的 A 链上持有资产,但一些基于代币的投票会选择在交易成本更低的 B 链上进行。这就迫使用户要么跳过投票,要么支付巨额交易费用,将资产从 A 跨链到 B 上,投票后再将资产转回 A 链。在这种情况下,存储证明让用户可以证明他们在某个给定区块的 A 链上的代币余额,并在 B 链上无缝进行投票。
- 跨链桥的替代方案。目前,跨链桥因通常涉及中介,都假定对第三方有一定程度的信任,例如托管人或去中心化自治组织(DAO)。该中介负责确保中介在源链上收到一定数量的代币,并负责持有源链上的资产。之后,在目标链上铸造相应的代币。存储证明可以实现无需信任的跨链桥接,因为目的链上的智能合约应用可以验证资产转移到源链上的跨链智能合约交易,并铸造跨链资产。然而,在多数情况下,由于另一条链上的资产所有权可以简单地用存储证明来证实,所以在链之间转移资产的需求也可能不复存在。
- 增强帐户抽象(AA)用例的用户体验。帐户抽象已在不同的链上实施,公认为是将第一批十亿用户引入区块链的关键创新。有了存储证明,钱包可以新增其他功能。例如钱包长时间没有转账,可以恢复存取权限。还可以强制使用来自其它链的数据进行额外检查。
存储证明示例
在 EVM 兼容链上生成存储证明非常简单。例如,Web3.js 库具有 getProof 函数,可以生成以太坊(以及其他 EVM 兼容链,如 Polygon 或 BSC)上合约状态的证明。必须将合约地址和合约的存储槽传递给函数。
在以太坊中,智能合约使用键值存储将数据存储在其存储器中。每条数据都存储在称为「存储槽」的特定位置。存储槽是合约存储中的内存位置,由唯一索引标识。来看下示例的智能合约 0xcc…da8b,其代码如下,部署在以太坊主网。
其中 owner 变量存储在 0 号槽。现在,要生成该合约的 owner 是地址 A 的证明,可以使用 getProof 函数,如下所示:
上面的代码输出:
返回的 stotageProof 包含 owener 变量的存储证明。由于以太坊使用 Merkle Patricia 树将帐户状态及其存储提交给以太坊状态,因此生成的存储可以用于证明存储槽(或帐户状态)。然而,如前所述,这些证明的可扩展性不足以讨论跨链消息传输。在此之上使用复杂的零知识数学可以减少验证证明所需的计算。
存储证明如何与预言机之比较
按照设计,区块链无法检索链下数据。这让区块链有无需信任的优势,但也限制了智能合约根据现实世界事件做出决策的能力。因直接获取历史区块链信息非常具有挑战性,且很容易出错,预言机常用于获取这些信息。
为解决这个问题,创建了名为预言机的特殊实体来检索链下数据(或检索一些繁重的链下计算结果)。目前,预言机需要第三方(例如机构或节点运营商的去中心化网络)提交链上数据,这些数据对用户和智能合约公开。这种信任假设目前是无法避免的,有几个团队正在努力最小化这种信任要求,如 Pragma,但并不理想。
Chainlink 就是区块链预言机的一个例子,它提供各种现实世界的数据(股票价格、天气数据等)和链下计算服务来降低链上繁重计算的成本,以及读写不同链上信息的跨链服务。
由于智能合约除了使用预言机之外,没有其他方式可以了解现实世界中发生的事情,因此预言机成为了区块链生态系统中不可或缺的一部分。
Starknet 上的预言机
在 Starknet 测试网上,前面提到的 Chainlink 目前为七对加密货币提供价格数据,并与 StarkWare 团队合作来「进一步加速 Starknet 生态系统的应用程序开发和总体增长」。Chainlink 通过去中心化的节点网络最大限度地减少信任假设,这些节点网络提供来自链下的数据,数据汇总也在链下进行。
Pragma 和 Stork Network 是 Starknet 上最大的两家预言机提供商,在主网和测试网上均有运营。除了多个加密货币交易对价格外,Pragma 在主网上实现可验证的随机性喂价,允许协议请求链上的安全随机性。Pragma 上的价格源基于大型机构和做市商提供的价格,价格聚合利用高效的零知识技术在链上进行。
存储证明如何替代或者改进预言机?
在某些情况下,存储证明可以替代预言机。
实际上并非预言机提供的所有数据都需要第三方来提供。在某些情况下,预言机提供的数据已经在链上可用(以链上存储或交易的形式),并且可用通过查看区块链的历史状态来检索。在这些情况下,存储证明可以取代第三方和预言机的信任,并允许智能合约完全依赖加密承诺的安全性。
在其它情况下,存储证明并不能完全取代预言机,但仍然可以通过额外的功能来增强预言机,例如:
- 预言机将信息从数据提供商传输到数据消费者。然而并不是所有的数据消费者都在同一条链上。借助存储证明,可以在一条链上完成来自不同来源的数据计算,并将结果导出到其他链。
- 这类数据的首选计算成本较低的源链,而验证证明可以在其它目的链上以低成本完成。
- Herodotus 是该领域的研究领军者,使用存储证明和零知识数学提供跨不同以太坊链的跨域数据访问。Pragma 还与 Herodotus 合作,不久将启用跨链预言机支持。
- 存储证明可以统一多个 Rollup 链的状态,甚至可以在以太坊层之间同步读取。
- 另一个增强功能是对发布在链上的历史数据进行无需信任的检索。以太坊、Starknet 等有状态区块链通过 Merkle/Verkle 树和 Merkle Patricia 树专门的数据结构,来记录和加密保存其状态。证明包含存储在这些结构中的任何数据也就有了可行性。因此,任何在链上发布的历史数据也可以被信任、检索并用于其他应用程序(甚至不一定在同一条链上)。这些存储证明允许智能合约访问,甚至可以追溯到创世区块的信息。
- Pragma 正在研究在 Starknet 上开发一个作为 L3 预言机的可行性,可以将数据「拉」到其他链上并使用存储证明进行验证。在像 Starknet 这样计算成本低廉的网络上的不同域中使用预言机的好处包括:
- 由于 L3 是一条高度可定制的链,可以调整各种参数以更快地在区块上达成共识,从而大大降低预言机的数据延迟。
- 结合存储证明,在源链上达成共识后,低延迟数据可以异步传递到其他链上。
- 通过在 L3 中开发内置系统来加强对数据的信任,惩罚不诚实的数据提供商。如果给予适当激励,L3 上的数据提供商可以抵押他们的资产作为发布正确数据的保障。由于在其他链可以使用数据之前,需要整个网络在 L3 上达成共识,因此预言机提供的数据可以被认为是由验证器在 L3 上的质押来保证的。
结论
过去的几个月,以太坊上 L2 实现飞速增长,也让我们对行业的未来有了更清晰的认识。Starknet、Optimism 和 Arbitrum 等网络的 L2 叙事越来越受关注。实施去中心化的跨链消息传递系统是其发展的主要支持。尽管现在还处于初期阶段,但存储证明有望对这一问题做出显著的改进。
特别鸣谢 Marcello Bardus 和 Kacper Koziol 审阅本文。