Aller directement au menu principal

Création et déploiement d'un sous-graphique sur le réseau Core

Ce guide décrit comment créer, configurer et déployer un sous-graphique sur le réseau Core en utilisant les outils du protocole Graph. Un sous-graphique indexe les données en chaîne d'un contrat intelligent et les rend accessibles via GraphQL, permettant des requêtes puissantes pour les applications décentralisées.

Prérequis

Avant de commencer, assurez-vous d'avoir les éléments suivants installés :

Vous aurez également besoin d'accéder aux services suivants:

  • Un point de terminaison de nœud Graph sur Core
  • Un nœud IPFS (pour les fichiers de sous-graphique)
  • Un jeton d'accès Graph (pour l'authentification lors du déploiement)

Étape 1 : Configuration de votre référentiel de sous-graphique

Pour créer votre propre sous-graphique, suivez official guide from The Graph.

Remarque: Si vous prévoyez de déployer sur le réseau Core, assurez-vous que le champ network dans votre fichier subgraph.yaml est défini sur core.

Exemple: Clonage d'un sous-graphique préconfiguré

Pour cet exemple, utilisons le sous-graphique fourni dans le dapp-tutorial GitHub repo:

git clone https://github.com/coredao-org/dapp-tutorial/.git
cd ./dapp-tutorial/06-subgraph-on-core
npm install

Étape 2: Structure du projet

Une fois à l'intérieur du répertoire 06-subgraph-on-core, vous verrez la structure de projet suivante :

06-subgraph-on-core/
├── subgraph.yaml
├── schema.graphql
├── abis/
│ └── Guestbook.json
├── src/
│ └── guestbook.ts

Aperçu des fichiers

  • subgraph.yaml – Le fichier de configuration principal qui définit les sources de données, le schéma et les gestionnaires de mapping pour le sous-graphique.
  • schema.graphql – Contient le schéma GraphQL, qui définit la structure des données à indexer et à interroger.
  • abis/ – Répertoire contenant les fichiers ABI de contrat ; dans cet exemple, Guestbook.json est utilisé pour décoder les événements.
  • src/ – Contient les fichiers AssemblyScript responsables du traitement des événements et de la création d'entités. La logique de transformation des données Ethereum en entités du sous-graphique se trouve ici.

subgraph.yaml

Configurer subgraph.yaml pour spécifier le contrat, l'ABI et les gestionnaires d'événements:

Important: Dans votre subgraph.yaml, assurez-vous de:

  • Définissez le champ network sur core.
  • Mettez à jour le champ address avec l'adresse de votre contrat déployé.
  • Mettez à jour le name et les détails de l'événement pour correspondre à votre contrat et aux événements qu'il émet.
  • Définissez le startBlock sur le numéro de bloc où votre contrat a été déployé.
specVersion: 1.0.0
indexerHints:
prune: auto
schema:
file: ./schema.graphql
dataSources:
- kind: ethereum/contract
name: Guestbook
network: core
source:
address: "Contract_Address"
abi: Guestbook
startBlock: 6000000 # update the block height
mapping:
kind: ethereum/events
apiVersion: 0.0.7
language: wasm/assemblyscript
entities:
- EntrySigned
abis:
- name: Guestbook
file: ./abis/Guestbook.json
eventHandlers:
- event: EntrySigned(string,string)
handler: handleEntrySigned
file: ./src/guestbook.ts

schema.graphql

Définissez le schéma GraphQL pour les données indexées:

type EntrySigned @entity(immutable: true) {
id: Bytes!
name: String! # string
message: String! # string
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}

guestbook.ts

Implémentez le gestionnaire d'événements dans src/guestbook.ts:

import { EntrySigned as EntrySignedEvent } from "../generated/Guestbook/Guestbook";
import { EntrySigned } from "../generated/schema";

export function handleEntrySigned(event: EntrySignedEvent): void {
let entity = new EntrySigned(
event.transaction.hash.concatI32(event.logIndex.toI32())
);
entity.name = event.params.name;
entity.message = event.params.message;

entity.blockNumber = event.block.number;
entity.blockTimestamp = event.block.timestamp;
entity.transactionHash = event.transaction.hash;

entity.save()

Étape 3: Configurer l'environnement

Créez un fichier .env à la racine du projet et définissez les éléments suivants:

GRAPH_NODE=https://thegraph.coredao.org/deploy/
IPFS_NODE=https://thegraph.coredao.org/ipfs/
GRAPH_ACCESS_TOKEN=your_access_token_here

Assurez-vous que ces points de terminaison sont accessibles depuis votre environnement.

Étape 4: Exécuter avec Docker (Facultatif)

Pour simuler un environnement local, utilisez Docker:

docker-compose up -d

Vérifiez les conteneurs:

docker ps

Assurez-vous que les services tels que Graph Node, IPFS et Postgres sont en cours d'exécution.

Étape 5: Construire et déployer le sous-graphique

Construire

Générez le code et construisez le sous-graphique:

graph codegen
graph build

Créer et déployer un sous-graphique

Créer et déployer le sous-graphique:

graph create \
--node $GRAPH_NODE \
--access-token $GRAPH_ACCESS_TOKEN \
your-subgraph-name

graph deploy \
--node $GRAPH_NODE \
--ipfs $IPFS_NODE \
--access-token $GRAPH_ACCESS_TOKEN \
your-subgraph-name

Étape 6: Interroger le sous-graphique

Après le déploiement, votre sous-graphique sera disponible à l'endpoint de requête (e.g., https://thegraph.test2.btcs.network/subgraphs/name/guestbook-subgraph).

Exemple de requête:

{
entrySigneds(first: 10, orderBy: blockTimestamp, orderDirection: desc) {
id
name
message
blockNumber
blockTimestamp
transactionHash
}
}

Vous pouvez utiliser GraphiQL, Apollo Client ou n'importe quel outil GraphQL pour interroger vos données.

Résumé

Vous avez maintenant créé et déployé avec succès un sous-graphique sur le Core Network!

En indexant les événements de contrats intelligents et en les exposant via GraphQL, les sous-graphiques offrent un accès évolutif et en temps réel aux données de blockchain.

À partir d'ici, vous pouvez:

  • Étendez votre schéma et vos mappings pour prendre en charge des événements et des entités supplémentaires
  • Configurez des gestionnaires planifiés pour des tâches d'indexation périodiques
  • Intégrez votre sous-graphique avec des frameworks frontend en utilisant des outils comme Apollo Client
  • Surveillez et testez votre sous-graphique avec Graph Explorer