美文网首页
subgraph的开发

subgraph的开发

作者: 侧耳倾听y | 来源:发表于2022-06-18 19:46 被阅读0次

详细文档:https://thegraph.academy/developers/defining-a-subgraph/

子图demo

如上链接是子图详细的开发流程,我自己在开发过程中,用了其中的部分步骤。

1. 安装Graph CLI

两种方式任选其一

# NPM
npm install -g @graphprotocol/graph-cli

# Yarn
yarn global add @graphprotocol/graph-cli

2. 创建subgraph项目

根据已有的合约,创建subgraph项目:

graph init \
  --from-contract <CONTRACT_ADDRESS> \
  [--network <ETHEREUM_NETWORK>] \
  [--abi <FILE>] \
  <SUBGRAPH_NAME> [<DIRECTORY>]

graph init --product subgraph-studio --from-contract 0x00000000 example-subgraph ./example-subgraph --abi /xx/xx.json

CONTRACT_ADDRESS:合约地址
ETHEREUM_NETWORK:网络
FILE:abi文件
SUBGRAPH_NAME:subgraph项目名称
DIRECTORY:subgraph项目路径

3. subgraph项目简介

  • subgraph.yaml

项目的配置,会根据abi自动生成。下面介绍一些重要配置的含义:

dataSources.source.address: 定义subgraph监听的合约地址
dataSources.source.startBlock: 定义数据从哪个区块开始,建议设置为合约创建地址
dataSources.mapping.entities: 定义存储的数据实体
dataSources.mapping.abis: 合约abi文件的路径
dataSources.mapping.eventHandlers: 定义event监听
dataSources.mapping.callHandlers: 方法调用监听 
dataSources.mapping.blockHandlers: 区块监听
  • schema.graphql

定义数据如何存储和搜索,可以理解为表结构。

  • AssemblyScript Mappings

event数据转化为entity的代码,可以理解为一段保存数据的代码。

4. 定义Entity

schema.graphql文件定义Entity结构,将数据保存为自己想要的结构。

type Gravatar @entity {
  id: ID!
  owner: Bytes!
  displayName: String!
  imageUrl: String!
}

修改后,可运行以下命令,自动生成相关代码。

yarn graph codegen

5. 实现AssemblyScript Mappings

在src目录下的文件,写自己期望的保存代码。

import { NewGravatar, UpdatedGravatar } from '../generated/Gravity/Gravity'
import { Gravatar } from '../generated/schema'

export function handleNewGravatar(event: NewGravatar): void {
  let gravatar = new Gravatar(event.params.id.toHex())
  gravatar.owner = event.params.owner
  gravatar.displayName = event.params.displayName
  gravatar.imageUrl = event.params.imageUrl
  gravatar.save()
}

export function handleUpdatedGravatar(event: UpdatedGravatar): void {
  let id = event.params.id.toHex()
  let gravatar = Gravatar.load(id)
  if (gravatar == null) {
    gravatar = new Gravatar(id)
  }
  gravatar.owner = event.params.owner
  gravatar.displayName = event.params.displayName
  gravatar.imageUrl = event.params.imageUrl
  gravatar.save()
}

更多用法

6. 部署subgraph

检查代码是否编译通过:

yarn build

创建subgraph:

yarn create

部署subgraph:

yarn deploy

相关文章

网友评论

      本文标题:subgraph的开发

      本文链接:https://www.haomeiwen.com/subject/cxclvrtx.html