Graph
用于充满活力的去中心化未来的 API
Graph 是一种用于查询以太坊和 IPFS 等网络的索引协议。
任何人都可以构建和发布称为子图的开放 API,使数据易于访问。
About The Graph
图表是什么
The Graph 是一种去中心化协议,用于从以太坊开始索引和查询来自区块链的数据。它使查询难以直接查询的数据成为可能。
Uniswap 等具有复杂智能合约的项目和 Bored Ape Yacht Club 等 NFT 计划将数据存储在以太坊区块链上,这使得直接从区块链中读取除基本数据之外的任何内容非常困难。
在 Bored Ape Yacht Club 的情况下,我们可以对合约执行基本的读取操作,例如获取某个 Ape 的所有者,根据 Ape 的 ID 或总供应量获取 Ape 的内容 URI,因为这些读取操作是经过编程的直接进入智能合约,但更高级的现实世界查询和操作,如聚合、搜索、关系和非平凡过滤是不可能的。
例如,如果我们想查询某个地址拥有的猿类,并按其特征之一进行过滤,我们将无法通过直接与合约本身交互来获取该信息。
要获取此数据,您必须处理曾经发出的每个传输事件,使用令牌 ID 和 IPFS 哈希从 IPFS 读取元数据,然后聚合它。
即使对于这些类型的相对简单的问题,在浏览器中运行的去中心化应用程序(dapp)也需要数小时甚至数天才能得到答案。
您还可以构建自己的服务器,在那里处理事务,将它们保存到数据库中,并在其之上构建 API 端点以查询数据。但是,此选项占用大量资源,需要维护,存在单点故障,并破坏了分散化所需的重要安全属性。
索引区块链数据非常非常困难。
最终性、链重组或未处理的块等区块链属性使这一过程进一步复杂化,不仅耗时而且在概念上难以从区块链数据中检索正确的查询结果。
The Graph 通过一个去中心化协议解决了这个问题,该协议索引并支持对区块链数据的高性能和高效查询。
然后可以使用标准 GraphQL API 查询这些 API(索引的“子图”)。
今天,有一个托管服务以及一个具有相同功能的去中心化协议。
两者都由 Graph Node 的开源实现提供支持。
图表是如何工作的
Graph 根据子图描述(称为子图清单)学习什么以及如何索引以太坊数据。
子图描述定义了子图感兴趣的智能合约,这些合约中要关注的事件,以及如何将事件数据映射到 The Graph 将存储在其数据库中的数据。
编写子图清单后,您可以使用 Graph CLI 将定义存储在 IPFS 中,并告诉索引器开始索引该子图的数据。
此图提供了有关部署子图清单后数据流的更多详细信息,以处理以太坊事务:
该流程遵循以下步骤:
-
去中心化应用程序通过智能合约上的交易将数据添加到以太坊。
-
智能合约在处理交易时发出一个或多个事件。
-
Graph Node 不断地扫描以太坊以寻找新的块以及它们可能包含的子图的数据。
-
Graph Node 在这些块中为您的子图查找 Ethereum 事件并运行您提供的映射处理程序。映射是一个 WASM 模块,它创建或更新 Graph Node 存储的数据实体以响应以太坊事件。
-
去中心化应用程序使用节点的 GraphQL 端点查询 Graph 节点以获取从区块链索引的数据。
Graph 节点反过来将 GraphQL 查询转换为对其底层数据存储的查询,以便利用存储的索引功能获取此数据。
去中心化应用程序在丰富的 UI 中为最终用户显示这些数据,他们使用这些数据在以太坊上发布新交易。循环重复。
后续步骤
在以下部分中,我们将更详细地介绍如何定义子图、如何部署它们以及如何从 Graph Node 构建的索引中查询数据。
在开始编写自己的子图之前,您可能需要查看 Graph Explorer 并探索一些已经部署的子图。
每个子图的页面都包含一个游乐场,可让您使用 GraphQL 查询该子图的数据。
参考资料
http://thegraph.com/en/
https://thegraph.com/docs/en/about/