现有的 Indexing 协议和 Keeper 网络都不是完全 trustless 的, 而是 trusted, 或者看似 trustless. 开发者和用户需要以 “Trust, Not Verify” 的方式来信任这些产品不会作恶.
原文作者:msfew
原文来源:Foresight Research
现有的 Indexing 协议和 Keeper 网络都不是完全 trustless 的, 而是 trusted, 或者看似 trustless. 开发者和用户需要以 “Trust, Not Verify” 的方式来信任这些产品不会作恶.
它们都是上一代的基础设施, 在当时可能确实没有太好的解决方案, 所以用了 Fisherman 机制或者 DAO 治理 (Social Consensus…), 来保证数据的可信和协议的安全运行.
在当前, 各个 zk 方案已经进入性能优化的收尾阶段, 这些前朝的剑, 就不能再来斩本朝的官了. 通过 zk, 可以实现 Web3 中间件的所有革新, 确保安全性, 去中心化, 和性能被同时满足, 就如同 Optimistic Rollup 在未来很可能会被 zk Rollup 抢走 Layer2 的主导地位一样.
我们首先需要了解为什么需要 Web3 特制的索引协议:
对于这几点, 如果你在 DApp 的开发中, 硬是要自己来进行索引, 那么每当去提取合约中的特定数据, 需要非常大的前端代码量, 以下是一个例子, 真的要建立一套服务的话需要无数个不同的函数:
于是在我们之前的 DApp 架构图中, 前端要使用和获取智能合约的数据时, 就必备一个通用的 Indexing 协议作为中间层, 来让智能合约的数据能被前端所轻松使用.
我们需要一个 Indexing 协议作为中间层, 那么这个协议该如何选型呢 (The Graph 19 年有讲过 Web3 为什么要用 GraphQL, 但是感觉说得不太清楚)? 我们有四个潜在选择.
首先, 排除 SOAP. 因为它的采用率非常少, 学习曲线也非常陡峭. 甚至有人说 “REST is king, and SOAP is trash”.
其次, 排除 RPC. RPC 是客户端对区块链, 或者 Web2 服务与服务之间的常用调用规范, 以操作 (动词) 为核心, 接口的更新更加麻烦一些, 适合客户端与区块链网络的通信. 但对于我们的智能合约开发场景来说, 太重, 不是最适合, 性能也因为请求数量多, 和需要依赖正在运行的程序, 而导致不太好.
接着, 排除 REST. REST 风格算是以资源 (名词) 为核心来操作的规范. 但是 Web3 应用中, 对任何资源进行更新操作的动作都需要用户或者其他方授权触发, 我们在索引协议中的请求全部是 GET 请求, 那就没必要 REST 了.
最后, 选择了 GraphQL:
除此之外, 我并不认为我们需要花非常多的时间去开发新的存储网络的 GraphQL 协议和 Query 协议 (当然这些索引的聚合是有意义的):
当我们讨论索引协议的时候, 默认的都是从前端直接获取区块链智能合约的数据, 这是因为我们在前文中就阐述过, 消除后端服务器对 Web3 Crypto-native 可信 DApp 的意义.
硬要加上针对智能合约链的后端的话反而徒增架构复杂度和暴露更多的不可信因素 (目前有 zk-sql 等项目在专注于相关问题, 但无法完全解决; 也有 Sqlidity 这样有趣的链上 SQLite 方案), 当然对于基于存储协议的 DApp 来说, SQL 化的语句对开发熟悉度和流程来说是有必要的.
索引协议需要关注的结构应该是前端能直接使用的 GraphQL 结构.
现有的 Indexing Protocol 的龙头必然是去中心化的 The Graph 和 Pocket Network 和中心化的 Alchemy. 无论是中心化还是去中心化, 它们都各有各的问题:
对于安全性的问题, Fisherman 机制在 Optimistic Rollup 中的体现与 Indexing Protocol 所不同, Optimistic Rollup 的数据是链上的, 更大的群体可以通过执行轻松验证, 而 Indexing 的过程是链下的, 如果并非 Subgraph 的 indexer 的话, 很难去对错误数据进行挑战. 这就导致信任模型更不稳固.
这几个缺陷结合在一起, 就导致了大的 DeFi 应用因为性能和安全性而很少使用这些索引协议, 这个市场有着巨大的空缺.
ZK 其实是个非常好的解决方案, 任何的 Optimistic 机制的问题都可以通过转为 ZK 来解决, 比如 Rollup 这个最显著的领域.
ZK 化之后的索引协议兼具了中心化和去中心化协议的所有优点, 包括高可用性和抗审查 (多个节点保证 uptime), 性能极佳 (因为 ZK 的存在所以可以选用中心化高性能节点), 安全性 (ZK 的数学密码学很好地保证安全性)
对于一个索引协议来说, ZK 的方案:
The Graph 自己也意识到了自己的机制安全性的不足, 正在琢磨 Shellproof.
但是我认为 The Graph 目前的研究和开发进度还是慢, 不知道 Shellproofs 是否能支持全部 subgraph 的运行. 而且 The Graph 已经在现有的机制上花了这么多功夫, 去替换这个机制的难度甚至比重新建立一套还要高.
一个真正实现了 zk 化的 The Graph 的应用可以构建出新的应用与开发范式:
通过这样的思路, 我们可以理解 zk 化的 The Graph 实际上是一个去中心化 RPC, 这远比 The Graph 的叙事宏大, 而是真正能实现 Infura 所在追求的去中心化.
在之前 Crypto-Native 应用架构的文章中, 我们提到过 Keeper.
它本质上就是, 一个链下定时器到了特定时间就触发智能合约的某个功能, 类似:
它的用处具体包括:
然而, 和我们之前提到的 The Graph 类似, 它的安全性机制是很落后的, 甚至还不是 The Graph 这样的链上治理, 而是链下通过 DAO 和 Social Consensus 的举报机制人工检举揭发非法节点. 比如下图中, Gelato 的架构图, 整体功能很清晰, 但每个组件都没有体现出有任何安全性的保证.
以两个典型的 Keeper Network 为例, 它们的安全性机制是:
就像我们刚才提到的 Indexing 协议一样, Keeper 也完全可以通过 zk 化来解决安全性的问题, 同时甚至可以 Gelato 的 off-chain resolver 也是用 GraphQL 定义的一个 subgraph, 但和 The Graph 没有安全性保证. 这两个问题就可以被一起解决了.
这样一个带可信 off-chain resolver 的 zk 化 Keeper 可以解锁无数新的应用场景:
在 zkEVM 和通用 zkVM 的最底层 infra 成熟的过程中, 我们已经可以尝试去基于和使用它们来建立开发者可以直接使用的 infra, 包括我们构想中的这些 zk 化中间件.
ZK 作为一个典型方案, 是像 AMM 一样的创新驱动重要因素. ZK 和 AMM 分别解锁了比 Optimistic 和 Order Book 机制更自动化和更可信的应用运转, 让安全性在链上完全透明公开可验证, 同时也分别解锁了证明外包和 Swap 聚合器的额外赛道, 解锁了无数新的应用.
除了扩容/跨链轻节点/隐私/机器学习以外, ZK 作为完全适合区块链场景 (网络全体做验证, 极其自动化, 甚至比网络共识更强的安全性) 的密码学方案, 在 Indexing 协议与 Keeper 网络这些中间件赛道中也大有可为. 我们也将持续关注 ZK 在更多领域中的应用.
责任编辑:MK