Subgraphs - OpenZeppelin 文档

本文介绍了OpenZeppelin Subgraphs,它是一组用于轻松索引OpenZeppelin合约活动的模块。通过组合不同的模块和数据源,用户可以构建复杂的查询,以获取链上活动的信息,而无需编写大部分索引逻辑。文章还提供了关于如何构建manifest和组装schema的指导,并列出了可用的模块,如erc20、erc721、ownable等。

Subgraphs

用于轻松索引 OpenZeppelin Contracts 活动的模块。

从 npm 安装为 @openzeppelin/subgraphs

在 GitHub 上浏览 OpenZeppelin/openzeppelin-subgraphs

用法

Subgraph 使用三个组件描述:

  • graphql schema,通常命名为 schema.graphql,它描述了数据库实体和链接。

  • subgraph manifest,通常命名为 subgraph.yaml,它描述了应该监听的活动(合约地址、事件处理程序、函数处理程序)。

  • 索引逻辑,用 assembly script 编写,它将处理区块链活动并相应地更新数据库。

OpenZeppelin Subgraphs 提供 schema 描述,以及相应的索引逻辑和用于构建 subgraph manifest 的模板。

类似于 OpenZeppelin Contracts 如何提供包含可以组合以简化应用程序构建的功能集的 solidity 代码,OpenZeppelin subgraphs 提供了专门用于索引与这些功能相对应的活动的模块。这些模块可以组合起来索引复杂的链上活动,而无需实际为大多数功能编写索引逻辑。

构建你的 manifest

你可以使用为每个模块提供的模板为你的应用程序构建 manifest。这些模板在 src/datasource/<module-name>.yaml 中可用。对于每个 datasource,你将必须填写合约的名称、网络、地址和 startBlock。如果一个合约实现了多个模块,你将需要多个 datasources 监听相同的地址(每个模块一个)。

注意: 为了使索引逻辑起作用,对于使用的每个模块,你必须使用模块的名称命名你的一个 datasource。

@amxx/graphprotocol-utils 提供了 自动化生成 manifests 的工具。

组装你的 schema

根据你使用的模块,你的 schema 必须包含相应的实体。组装 schema 可能很困难,因为 graphql schema 本身不支持导入和合并操作。我们为 generated/<module-name>.schema.graphql 中的每个模块提供预编译的 schema。我们还提供一个 schema,其中包含 generated/all.schema.graphql 中所有模块的所有实体。

与 manifest 类似,@amxx/graphprotocol-utils 提供了 自动化生成 schemas 的工具。

模块

模块名称 可用性
erc20
erc20votes 计划中
erc721
erc777 计划中
erc1155
erc1967upgrade
ownable
accesscontrol
pausable
timelock
governor

使用示例

通过在 subgraph 中组合多个模块和 datasources,你可以构建如下查询,该查询 检查具有 AccessControl 的 ERC20 token 的详细信息,并返回管理员的余额。

{
  erc20Contract(id: "<erc20-with-accesscontrol-address-in-lowercase>") {
    name
    symbol
    decimals
    totalSupply { value }
    asAccount {
      asAccessControl {
        admins: roles(where: { role: "0x0000000000000000000000000000000000000000000000000000000000000000" }) {
          members {
            account {
              address: id
              balance: ERC20balances(where: { contract: "<erc20-with-accesscontrol-address-in-lowercase>" }) {
                value
              }
            }
          }
        }
      }
    }
  }
}

自动生成 →

  • 原文链接: docs.openzeppelin.com/su...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
OpenZeppelin
OpenZeppelin
江湖只有他的大名,没有他的介绍。