入门开发 | 第三课:SubQuery 映射之事件和外部信息处理
SubQuery 由 OnFinality 团队构建,允许用户在整个链中运行索引器来构建可通过 GraphQL 查询的数据集。该工具套件包括一个命令行界面,该命令行界面使项目可以生成自己的 SubQuery 项目,从而定义索引器应如何遍历和聚合自己的网络。
SubQuery 节点程序包将为网络建立索引并支持 GraphQL 查询。借助这些工具,任何人都可以轻松创建和运行查询。其目标是成为 Substrate / Polkadot 生态系统的核心基础架构。
OneBlock+ 与 SubQuery 在2021的最后一个月共同推出了「SubQuery 入门——轻松学会区块链数据索引开发」课程,已于2022年1月10日开课。通过课程 6 大模块的讲解,让你熟悉掌握如何将你的区块链项目建立 SubQuery 数据源从而进行链上数据索引,包括开发复杂的 SubQuery 项目和将其部署到 SubQuery 项目托管中。
以下是第三课的课程回顾:
本节课程内容
SubQuery 映射
定义爬取数据方式,可以对爬取的数据进行过滤
入口在:配置文件project.yaml中dataSources域,如下
详情可以参考
1. 默认substrate/Runtime类型支持如下映射处理器和过滤器
映射处理器说明:
过滤器说明:
2. 自定义链 Substrate/CustomDataSource
后面课程会有专门介绍
3. 通过转账的例子介绍 SubQuery
SubQuery 利用 Polkadot API 获取历史高度数据,封装后,使用简单了很多,且可以过滤处理数据。
3.1 使用 Polkadot API 手动获取数据(transfer)步骤如下:
1).const { ApiPromise, WsProvider } = require(`@polkadot/api`)
2).const provider = new WsProvider(`wss://polkadot.api.onfinality.io/public-ws`)
3).api = await ApiPromise.create({ provider })
1). const apiAt = await api.at(blockHash) 代表这我们的api将返回此高度的数据
2). const events = await apiAt.query.system.events()
3). 查看所有events.toHuman(), 变成友好的可读的数据
1). const transferEvent = events[4]
2). transferEvent.event.toHuman() 检查的event 类型和数据。
3). transferEvent.event.meta.toHuman()
3.2. 使用 subquery 获取数据(transfer)
schema.graphql
执行 yarn codegen 在 models 中生成相对应的类
project.yaml
src/mappings/mappingHandlers.ts
yarn build编译项目
subql-node -f . 启动项目
在project.yaml使用network->dictionary: ‘https://api.subquery.network/sq/subquery/dictionary-polkadot’加快索引速度。
需要覆盖所有业务 extrinsic
project.yaml
src/mappings/mappingHandlers.ts
4. EventHandler VS CallHandler
1). 只需关注特定的 event 类型,数据格式稳定
2). 需要覆盖触发 event 的所有 extrinsic,数据格式不统一,可能会跟 runtime 升级发生变化
3). 不能够保证 utility 模块中包括了 transfer 类型的extrinsics,间接触发和批次触发
4). 谨慎处理多层递归
相关资料