3 minutos
Tutorial: Como Montar um Subgraph Movido a Substreams na Solana
Configure um subgraph, movido pelo Substreams e baseado em gatilhos, para um token da SPL (Biblioteca de Protocolos da Solana) da Solana.
Como Começar
Para ver um tutorial em vídeo sobre o assunto, clique aqui
Pré-requisitos
Antes de começar:
- Complete o Guia de Introdução para montar o seu ambiente de programação com um Recipiente de Programação.
- Familiarize-se com o The Graph e conceitos básicos de blockchain, como transações e Protobufs.
Passo 1: Inicialize o Seu Projeto
-
Para inicializar o seu projeto, abra o seu Recipiente e execute o seguinte comando:
1substreams init
-
Selecione a opção de projeto “minimal” (mínimo).
-
Troque os conteúdos do arquivo
substreams.yaml
gerado com a seguinte configuração, que filtra transações para a conta do Orca no ID de programa do token da SPL:
1params: # Modifique os parâmetros a seu gosto2 # For program_id: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA3 map_spl_transfers: token_contract:orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE
Passo 2: Crie o Manifest do Subgraph
Com o projeto inicializado, gere um manifest de subgraph com o seguinte comando no Recipiente de Programação:
1substreams codegen subgraph
Será gerado um manifest subgraph.yaml
que importa o pacote do Substreams como uma fonte de dados:
1---2dataSources:3 - kind: substreams4 name: my_project_sol5 network: solana-mainnet-beta6 source:7 package:8 moduleName: map_spl_transfers # Módulo definido no substreams.yaml9 file: ./my-project-sol-v0.1.0.spkg10 mapping:11 apiVersion: 0.0.912 kind: substreams/graph-entities13 file: ./src/mappings.ts14 handler: handleTriggers
Passo 3: Defina as Entidades em schema.graphql
Para definir os campos a guardar nas suas entidades de subgraph, atualize o arquivo schema.graphql
.
Por exemplo:
1type MyTransfer @entity {2 id: ID!3 amount: String!4 source: String!5 designation: String!6 signers: [String!]!7}
Este schema define uma entidade MyTransfer
com campos como id
, amount
, source
, designation
, e signers
.
Passo 4: Controle Dados do Substreams no mappings.ts
Com os objetos do Protobuf criados, agora você pode tratar os dados descodificados do Substreams no seu arquivo mappings.ts
no diretório ./src
.
O exemplo abaixo demonstra como extrair as transferências não derivadas associadas à id de conta do Orca para entidades de subgraph:
1import { Protobuf } from 'as-proto/assembly'2import { Events as protoEvents } from './pb/sf/solana/spl/token/v1/Events'3import { MyTransfer } from '../generated/schema'45export function handleTriggers(bytes: Uint8Array): void {6 const input: protoEvents = Protobuf.decode<protoEvents>(bytes, protoEvents.decode)78 for (let i = 0; i < input.data.length; i++) {9 const event = input.data[i]1011 if (event.transfer != null) {12 let entity_id: string = `${event.txnId}-${i}`13 const entity = new MyTransfer(entity_id)14 entity.amount = event.transfer!.instruction!.amount.toString()15 entity.source = event.transfer!.accounts!.source16 entity.designation = event.transfer!.accounts!.destination1718 if (event.transfer!.accounts!.signer!.single != null) {19 entity.signers = [event.transfer!.accounts!.signer!.single!.signer]20 } else if (event.transfer!.accounts!.signer!.multisig != null) {21 entity.signers = event.transfer!.accounts!.signer!.multisig!.signers22 }23 entity.save()24 }25 }26}
Passo 5: Crie Arquivos de Protobuf
Para gerar objetos do Protobuf no AssemblyScript, execute:
1npm run protogen
Este comando converte as definições do Protobuf em AssemblyScript, permitindo o seu uso no handler do subgraph.
Conclusão
Parabéns! Está montado um subgraph movido a Substreams, baseado em gatilhos, para um token da SPL da Solana. Agora dá para personalizar mais o seu schema, os seus mapeamentos, e os seus módulos de modo que combinem com o seu caso de uso específico.
Tutorial em vídeo
Outros Recursos
Para otimizações e personalizações mais avançadas, veja a documentação oficial do Substreams.