3 minutes
Tutoriel : Configurer un Subgraph alimenté par Substreams sur Solana
Mise en place réussie d’un subgraph alimenté par Substreams basé sur des déclencheurs pour un jeton Solana SPL.
Commencer
Pour un tutoriel vidéo, consultez Comment indexer Solana avec un subgraph alimenté par des Substreams
Prérequis
Avant de commencer, assurez-vous de :
- Avoir suivi le Guide Getting Started pour configurer votre environnement de développement à l’aide d’un Dev Container.
- Être familier avec The Graph et des concepts de base de la blockchain tels que les transactions et les Protobufs.
Étape 1 : Initialiser votre projet
-
Ouvrez votre Dev Container et exécutez la commande suivante pour initialiser votre projet :
1substreams init
-
Sélectionnez l’option de projet “minimal”.
-
Remplacez le contenu du fichier généré
substreams.yaml
par la configuration suivante, qui filtre les transactions du compte Orca sur l’ID du programme SPL token :
1specVersion: v0.1.02package:3 name: my_project_sol4 version: v0.1.056imports: # Passez le spkg qui vous intéresse7 solana: https://github.com/streamingfast/substreams-solana-spl-token/raw/master/tokens/solana-spl-token-v0.1.0.spkg89modules:10 - name: map_spl_transfers11 use: solana:map_block # Sélectionnez les modules disponibles dans votre spkg12 initialBlock: 2600000821314 - name: map_transactions_by_programid15 use: solana:solana:transactions_by_programid_without_votes1617network: solana-mainnet-beta1819params: # Modifiez les champs param pour répondre à vos besoins20 # Pour program_id: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA21 map_spl_transfers: token_contract:orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE
Étape 2 : Générer le Manifeste du Subgraph
Une fois le projet initialisé, générez un manifeste de subgraph en exécutant la commande suivante dans le Dev Container :
1substreams codegen subgraph
Cette commande génère un fichier subgraph.yaml
qui importe le package Substreams comme source de données:
1---2dataSources:3 - kind: substreams4 name: my_project_sol5 network: solana-mainnet-beta6 source:7 package:8 moduleName: map_spl_transfers # Module defined in the 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
Étape 3 : Définir les Entités dans schema.graphql
Définissez les champs que vous souhaitez enregistrer dans vos entités Subgraph en mettant à jour le fichier schema.graphql
.
Voici un exemple :
1type MyTransfer @entity {2 id: ID!3 amount: String!4 source: String!5 designation: String!6 signers: [String!]!7}
Ce schéma définit une entité MyTransfer
avec des champs tels que id
, amount
, source
, designation
et signers
.
Étape 4 : Gérer les Données Substreams dans mappings.ts
Avec les objets Protobuf générés, vous pouvez désormais gérer les données de Substreams décodées dans votre fichier mappings.ts
trouvé dans le répertoire ./src
.
L’exemple ci-dessous montre comment extraire vers les entités du subgraph les transferts non dérivés associés à l’Id du compte Orca :
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}
Étape 5 : Générer les Fichiers Protobuf
Pour générer les objets Protobuf en AssemblyScript, exécutez la commande suivante :
1npm run protogen
Cette commande convertit les définitions Protobuf en AssemblyScript, ce qui permet de les utiliser dans le gestionnaire du subgraph.
Conclusion
Félicitations ! Vous avez configuré avec succès un subgraph alimenté par Substreams basé sur des déclencheurs pour un jeton Solana SPL. Vous pouvez passer à l’étape suivante en personnalisant votre schéma, vos mappages et vos modules pour les adapter à votre cas d’utilisation spécifique.
Tutoriel Vidéo
Ressources supplémentaires
Pour aller plus loin en matière de personnalisation et d’optimisation, consultez la documentation officielle de Substreams.