注册
关闭
琥珀财经

琥珀财经

发布于 2021-09-22 阅读量 4350

纯粹、简单、完美、无暇

SubQuery开发者指南丨清单文件(Manifest File)

Manifest project.yaml 文件可以被看作是项目的入口,它定义了关于 SubQuery 如何索引和转换链数据的大部分细节。

 

Manifest 可以是 YAML 或 JSON 格式。 在本文档中,我们将在所有示例中使用 YAML格式。 以下是一个基本 project.yaml 的标准示例。

 

specVersion: “0.0.1”

description: “”

repository: “https://github.com/subquery/subql-starter”

schema: “./schema.graphql”

network:

endpoint: “wss://polkadot.api.onfinality.io/public-ws” # Optionally provide the HTTP endpoint of a full chain dictionary to speed up processing

dictionary: “https://api.subquery.network/sq/subquery/dictionary-polkadot”

dataSources:

– name: main

kind: substrate/Runtime

startBlock: 1

mapping:

handlers:

– handler: handleBlock

kind: substrate/BlockHandler

– handler: handleEvent

kind: substrate/EventHandler

filter: #Filter is optional but suggested to speed up event processing

module: balances

method: Deposit

– handler: handleCall

kind: substrate/CallHandler

 

• network.endpoint 定义了要编入索引的区块链的 wss 或 ws 端点——这必须是一个完整的存档节点。

 

• network.dictionary 选择性地提供完整链字典的 HTTP 端点以加快处理速度 – 点击链接: 查看 SubQuery 字典的工作原理。

 

• dataSources 定义了将被过滤和提取的数据,以及要应用的数据转换的映射函数处理程序的位置。

 

◦ Kind 目前只支持 substrate/Runtime

 

◦ startBlock 详细说明了开始索引的块高度。

 

◦ filter 将根据网络端点规范名称过滤要执行的数据源,请参阅网络过滤器:

 

◦ mapping.handlers 将列出所有映射函数及其相应的处理程序类型(),以及额外的映射过滤器()。

 

网络过滤器(Network Filters)

 

通常用户会创建一个 SubQuery 项目,并希望在他们的测试网和主网环境(例如 Polkadot 和 Kusama)中重复使用它。 在网络之间,各种选项可能不同(例如索引起始块)。 因此,我们允许用户为每个数据源定义不同的细节,这意味着一个 SubQuery 项目仍然可以跨多个网络使用。

 

用户可以在 dataSources 命令上添加 filter 命令来决定在网络上运行哪个数据源。

 

下面的示例显示了 Polkadot 和 Kusama 网络的不同数据源。

 

network:

endpoint: “wss://polkadot.api.onfinality.io/public-ws”

#Create a template to avoid redundancy

definitions:

mapping: &mymapping

handlers:

– handler: handleBlock

kind: substrate/BlockHandler

dataSources:

– name: polkadotRuntime

kind: substrate/Runtime

filter: #Optional

specName: polkadot

startBlock: 1000

mapping: *mymapping #use template here

– name: kusamaRuntime

kind: substrate/Runtime

filter:

specName: kusama

startBlock: 12000

mapping: *mymapping # can reuse or change

 

映射过滤器(Mapping Filters)

 

Mapping filters 是一个非常有用的功能,它可以决定什么块、事件或外在因素会触发映射处理程序。

 

只有满足过滤条件的传入数据才会被映射函数处理。 映射过滤器是选择性使用的,但我们建议使用,因为它们会显着减少 SubQuery 项目处理的数据量并提高索引性能。

 

#Example filter from callHandler

filter:

module: balances

method: Deposit

success: true

下表说明了不同处理程序支持的过滤器。

处理程序

支持的过滤器

specVersion

module,method

module,method ,success

 

• 任何基于底层的链都支持 module 和 method filters。

 

• success filter 采用布尔值,可用于按成功状态过滤外在因素。

 

• specVersion filter 指定了substrate 区块的spec 版本范围。以下示例描述如何设置版本范围。

 

filter:

specVersion: [23, 24] #Index block with specVersion in between 23 and 24 (inclusive).

specVersion: [100] #Index block with specVersion greater than or equal 100.

specVersion: [null, 23] #Index block with specVersion less than or equal 23.

 

定制链(Custom Chains)

 

您还可以通过在 project.yaml 中加入链类型来索引自定义链中的数据。 在 network.types 中声明此区块链支持的特定类型。 我们支持底层运行模块时使用的其他类型。

 

我们还支持 typesAlias、typesBundle、typesChain 和 typesSpec。

  • 0
琥珀财经
琥珀财经

纯粹、简单、完美、无暇

0 条评论