关于 Graph

本页将解释什么是 Graph,以及你将如何开始。

什么是Graph?

链到本节

Graph 是一个去中心化的协议,用于索引和查询区块链的数据。 它使查询那些难以直接查询的数据成为可能。

Uniswap这样具有复杂智能合约的项目,以及像 Bored Ape Yacht Club 这样的 NFTs 倡议,都在以太坊区块链上存储数据,因此,除了直接从区块链上读取基本数据外,真的很难。

在 Bored Ape Yacht Club 的案例中,我们可以对 合约进行基本的读取操作,比如获得某个 Ape 的所有者,根据他们的 ID 获得某个 Ape 的内容 URI,或者总供应量,因为这些读取操作是直接编入智能合约的,但是更高级的现实世界的查询和操作,比如聚合、搜索、关系和非粗略的过滤是不可能的。 例如,如果我们想查询某个地址所拥有的 apes,并通过它的某个特征进行过滤,我们将无法通过直接与合约本身进行交互来获得该信息。

为了获得这些数据,你必须处理曾经发出的每一个 传输 事件,使用 Token ID 和 IPFS 的hash值从 IPFS 读取元数据,然后将其汇总。 即使是这些类型的相对简单的问题,在浏览器中运行的去中心化应用程序(dapp)也需要几个小时甚至几天 才能得到答案。

你也可以建立你自己的服务器,在那里处理交易,把它们保存到数据库,并在上面建立一个 API 终端,以便查询数据。 然而,这种选择是资源密集型的,需要维护,会出现单点故障,并破坏了去中心化化所需的重要安全属性。

为区块链数据编制索引真的非常非常难。

区块链的属性,如最终性、链重组或未封闭的区块,使这一过程进一步复杂化,并使从区块链数据中检索出正确查询结果不仅耗时,而且在概念上也很难。

Graph 通过一个去中心化的协议解决了这一问题,该协议可以对区块链数据进行索引并实现高性能和高效率的查询。 这些 API(索引的 "子图")然后可以用标准的 GraphQL API 进行查询。 今天,有一个托管服务,也有一个具有相同功能的分布式去中心化协议。 两者都由 Graph点的开源实现支持。

Graph 是如何工作的

链到本节

Graph基于子图描述(称为子图清单)学习如何索引以太坊数据。子图描述定义了子图感兴趣的智能合约、要注意的合约中的事件,以及如何将事件数据映射到Graph将存储在其数据库中的数据。

一旦编写了子图清单,就可以使用Graph CLI将定义存储在IPFS中,并告诉索引人开始为该子图的数据编制索引。

此图提供了部署子图清单后用于处理以太坊交易的数据流的更多细节

一图解释Graph如何使用Graph节点向数据消费者提供查询的图形

流程遵循这些步骤:

  1. 一个去中心化的应用程序通过智能合约上的交易向以太坊添加数据。
  2. 智能合约在处理交易时,会发出一个或多个事件。
  3. Graph 节点不断扫描以太坊的新区块和它们可能包含的子图的数据。
  4. Graph 节点在这些区块中为你的子图找到以太坊事件并运行你提供的映射处理程序。 映射是一个 WASM 模块,它创建或更新 Graph 节点存储的数据实体,以响应以太坊事件。
  5. 去中心化的应用程序使用Graph节点的GraphQL 端点,从区块链的索引中查询 Graph 节点的数据。 Graph 节点反过来将 GraphQL 查询转化为对其底层数据存储的查询,以便利用存储的索引功能来获取这些数据。 去中心化的应用程序在一个丰富的用户界面中为终端用户显示这些数据,他们用这些数据在以太坊上发行新的交易。 就这样周而复始。

下一步

链到本节

在下面的部分中,我们将详细介绍如何定义子图、如何部署子图以及如何从Graph节点构建的索引中查询数据。

在开始编写自己的子图之前,您可能需要查看Graph浏览器并探索一些已经部署的子图。每个子图的页面都包含一个操作面板,允许您使用GraphQL查询该子图的数据。

编辑

上页
开始
下页
概述
编辑