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
networkdans votre fichiersubgraph.yamlest défini surcore.
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.jsonest 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
networksurcore.- Mettez à jour le champ
addressavec l'adresse de votre contrat déployé.- Mettez à jour le
nameet les détails de l'événement pour correspondre à votre contrat et aux événements qu'il émet.- Définissez le
startBlocksur 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:
- Mainnet
- Testnet
GRAPH_NODE=https://thegraph.coredao.org/deploy/
IPFS_NODE=https://thegraph.coredao.org/ipfs/
GRAPH_ACCESS_TOKEN=your_access_token_here
GRAPH_NODE=https://thegraph-node.test2.btcs.network
IPFS_NODE=https://thegraph-ipfs.test2.btcs.network
GRAPH_ACCESS_TOKEN=b020b95e511443699e72a10c697f84c0
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