随着越来越多的用户、活动和数据上链,像 Axiom 这样的工具将对在不牺牲安全性的前提下创建丰富的用户体验至关重要。
原文作者:camiinthisthang
原文标题:Coprocessors & Data-rich Applications
原文来源:mirror
编译:深潮 TechFlow
“把所有东西都放在链上”对我来说一直感觉有点牵强。没有理由把许多东西放在链上,因为除了永久存储之外,你没法对这些数据做太多事情。虽然 The Graph 和类似的协议通过 GraphQL 实现了查询链上数据以用于前端集成的功能,包括全文搜索和过滤,但这些操作都是在客户端层面完成的。这意味着你实际上无法在智能合约层面利用这些数据来基于这些数据编写逻辑。这种限制导致 Web3 应用平面化和单一化——它们可以利用的唯一数据只是与用户交互的实时数据,如账户余额、当前区块号等。
传统应用程序通过利用用户在线活动来策划个性化和沉浸式的体验而蓬勃发展。不幸的是,Web3 的体验还没有办法做到这一点,这很大程度上导致了人们普遍认为 Web3 难以提供与用户产生共鸣的有意义的应用程序。
塑造数字格局的著名应用程序——Instagram、TikTok、Spotify、YouTube 等在它们的用户界面中展示用户过去的活动,并利用这些数据制定推荐算法、投放个性化广告以及将用户与符合其偏好的创作者连接起来,这种动态的设计空间在 Web3 中明显缺失。
之所以 Web3 做不到这一点,是因为我们没有可以在智能合约层面信任地访问链上数据的工具。虽然可能令人惊讶,智能合约没有办法从存档节点读取数据——比如特定区块高度的历史 NFT 所有权或账户余额等信息——并利用这些数据驱动其操作中的条件逻辑。允许这种类型的数据在智能合约中被访问有一系列涉及安全性和成本的不同折衷方案:
最近几个月,几个高性能的 ZK 团队的出现为以太坊生态系统开辟了新的可能性时代。其中包括 Axiom,这是一个 zk 项目,旨在解决由于缺乏不可靠的数据访问和计算而导致的 web3 应用程序乏善可陈的挑战。目前 alpha 版本已经在以太坊主网上线。
开发者可以向 Axiom 提交查询,通过存储证明信任地访问以太坊整个历史上的任何区块头、账户或存储值。Axiom 使用 zk 为所有查询结果生成有效性证明,并在链上进行验证,这意味着智能合约可以直接对这些结果进行操作,而无需额外的信任假设。
Axiom 抽象了许多与 zk 相关的特定于数学的知识,这在历史上一直是使用 zk 所必需的。关于 Axiom 最激动人心的事情是它允许开发者用 Solidity 编写智能合约,通过查询 Axiom 的合约然后开发者验证它们收到的响应,在自己的智能合约中使用这些数据。
Axiom 为开发者提供了 TS SDK 和他们的 AxiomV1Query 智能合约,让开发者可以在链上创建和提交查询,然后在他们的智能合约中使用经过验证的响应。交互如下所示:
在我的心智模型中,使用 Axiom 有两个主要组件:
第一步是使用 TS SDK 从 Node/Nextjs 项目向 Axiom 合约发送查询:
开发者可以使用四种方法创建并发送查询:
一旦 Prover 生成 ZK 证明,它将写出该查询的“keccakQueryResponse”已被满足,并会触发“QueryFulfilled”事件。 开发者从 Axiom 合约存储中读取响应,并使用这些 SDK 方法在链上验证结果:
一旦你验证响应有效,你就可以将此响应作为参数传递给任何智能合约函数,该函数将根据此过程对账户施加限制,并在函数调用中传递经过验证的有效证明。
你现在不仅可以生成存储证明并在智能合约中使用它们根据历史链上活动来编写逻辑限制操作,而且你可以首次使用这些历史数据创建丰富的体验,类似于 Web2 中的体验。
随着越来越多的用户、活动和数据上链,像 Axiom 这样的工具将对在不牺牲安全性的前提下创建丰富的用户体验至关重要。
一些启发项目的想法,摘自 Axiom 的博文: