Docs
La Recherche⌘ K
  • Accueil
  • À propos de The Graph
  • Réseaux pris en charge
  • Contrats du Protocole
  • Subgraphs
    • Substreams
      • Token API
        • AI Suite
          • Indexing
            • Resources
              Subgraphs > Developing > Deploying

              6 minutes

              Déploiement d'un subgraph sur plusieurs réseaux

              Cette page explique comment déployer un subgraph sur plusieurs réseaux. Pour déployer un subgraph, vous devez d’abord installer Graph CLI⁠. Si vous n’avez pas encore créé de subgraph, consultez Créer un subgraph.

              Déployer le Subgraph sur plusieurs réseaux

              Dans certains cas, vous souhaiterez déployer le même Subgraph sur plusieurs réseaux sans dupliquer l’ensemble de son code. La principale difficulté réside dans le fait que les adresses contractuelles de ces réseaux sont différentes.

              En utilisant graph-cli

              Les commandes graph build (depuis la version v0.29.0) et graph deploy (depuis la version v0.32.0) acceptent deux nouvelles options:

              1Options:23      --network <nom>          Configuration du réseau à utiliser à partir du fichier de configuration des réseaux4      --network-file <chemin>  Chemin du fichier de configuration des réseaux (par défaut : "./networks.json")

              Vous pouvez utiliser l’option --network pour spécifier une configuration réseau à partir d’un fichier standard json (par défaut networks.json) pour mettre à jour facilement votre Subgraph pendant le développement.

              Note : La commande init générera désormais automatiquement un fichier networks.json en se basant sur les informations fournies. Vous pourrez ensuite mettre à jour les réseaux existants ou en ajouter de nouveaux.

              Si vous n’avez pas de fichier networks.json, vous devrez en créer un manuellement avec la structure suivante :

              1{2    "network1": { // le nom du réseau3        "dataSource1": { // le nom de la source de données4            "address": "0xabc...", // l'adresse du contrat (facultatif)5            "startBlock": 123456 // le bloc de départ (facultatif)6        },7        "dataSource2": {8            "address": "0x123...",9            "startBlock": 12344410        }11    },12    "network2": {13        "dataSource1": {14            "address": "0x987...",15            "startBlock": 12316        },17        "dataSource2": {18            "address": "0xxyz..",19            "startBlock": 45620        }21    },22    ...23}

              Note : Vous n’avez besoin de spécifier aucun des templates (si vous en avez) dans le fichier de configuration, uniquement les dataSources. Si des templates sont déclarés dans le fichier subgraph.yaml, leur réseau sera automatiquement mis à jour vers celui spécifié avec l’option --network.

              Maintenant, supposons que vous vouliez être capable de déployer votre Subgraph sur les réseaux mainnet et sepolia, et voici votre subgraph.yaml :

              1# ...2dataSources:3  - kind: ethereum/contract4    name: Gravity5    network: mainnet6    source:7      address: '0x123...'8      abi: Gravity9    mapping:10      kind: ethereum/events

              Voici à quoi devrait ressembler votre fichier de configuration réseau :

              1{2  "mainnet": {3    "Gravity": {4      "address": "0x123..."5    }6  },7  "sepolia": {8    "Gravity": {9      "address": "0xabc..."10    }11  }12}

              Nous pouvons maintenant exécuter l’une des commandes suivantes :

              1# En utilisant le fichier networks.json par défaut2yarn build --network sepolia34 # En utilisant un fichier personnalisé5yarn build --network sepolia --network-file chemin/à/configurer

              La commande build va mettre à jour votre subgraph.yaml avec la configuration sepolia et ensuite recompiler le Subgraph. Votre fichier subgraph.yaml devrait maintenant ressembler à ceci :

              1# ...2dataSources:3  - kind: ethereum/contract4    name: Gravity5    network: sepolia6    source:7      address: '0xabc...'8      abi: Gravity9    mapping:10      kind: ethereum/events

              Vous êtes maintenant prêt à utiliser la commande yarn deploy.

              Note : Comme mentionné précédemment, depuis graph-cli 0.32.0, vous pouvez directement exécuter yarn deploy avec l’option --network:

              1# En utilisant le fichier networks.json par défaut2yarn deploy --network sepolia34 # En utilisant un fichier personnalisé5yarn deploy --network sepolia --network-file chemin/à/configurer

              Utilisation du modèle subgraph.yaml

              Une façon de paramétrer des aspects tels que les adresses de contrat en utilisant des versions plus anciennes de graph-cli est de générer des parties de celui-ci avec un système de creation de modèle comme Mustache⁠ ou Handlebars⁠.

              Pour illustrer cette approche, supposons qu’un Subgraph doive être déployé sur le réseau principal et sur Sepolia en utilisant des adresses contractuelles différentes. Vous pourriez alors définir deux fichiers de configuration fournissant les adresses pour chaque réseau :

              1{2  "network": "mainnet",3  "address": "0x123..."4}

              et

              1{2  "network": "sepolia",3  "address": "0xabc..."4}

              Avec ceci, vous remplacerez le nom du réseau et les adresses dans le manifeste par des variables de type {{network}} et {{address}} et renommer le manifeste par exemple subgraph.template.yaml:

              1# ...2dataSources:3  - kind: ethereum/contract4    name: Gravity5    network: mainnet6    network: {{network}}7    source:8      address: '0x2E645469f354BB4F5c8a05B3b30A929361cf77eC'9      address: '{{address}}'10      abi: Gravity11    mapping:12      kind: ethereum/events

              Pour générer un manifeste pour l’un ou l’autre réseau, vous pourriez ajouter deux commandes supplémentaires au fichier package.json ainsi qu’une dépendance à mustache :

              1{2  ...3  "scripts": {4    ...5    "prepare:mainnet": "mustache config/mainnet.json subgraph.template.yaml > subgraph.yaml",6    "prepare:sepolia": "mustache config/sepolia.json subgraph.template.yaml > subgraph.yaml"7  },8  "devDependencies": {9    ...10    "mustache": "^3.1.0"11  }12}

              Pour déployer ce Subgraph sur le Mainnet ou Sepolia, il vous suffit de lancer l’une des deux commandes suivantes :

              1# Mainnet:2yarn prepare:mainnet && yarn deploy34# Sepolia:5yarn prepare:sepolia && yarn deploy

              Un exemple fonctionnel de ceci peut être trouvé ici⁠.

              Note : Cette approche peut également être appliquée à des situations plus complexes, dans lesquelles il est nécessaire de remplacer plus que les adresses des contrats et les noms de réseau ou où il est nécessaire de générer des mappages ou alors des ABI à partir de modèles également.

              This will give you the chainHeadBlock which you can compare with the latestBlock on your Subgraph to check if it is running behind. synced informs if the Subgraph has ever caught up to the chain. health can currently take the values of healthy if no errors occurred, or failed if there was an error which halted the progress of the Subgraph. In this case, you can check the fatalError field for details on this error.

              Subgraph Studio Politique d’archivage de Subgraph

              Une version de Subgraph dans Studio est archivée si et seulement si elle répond aux critères suivants :

              • La version n’est pas publiée sur le réseau (ou en attente de publication)
              • La version a été créée il y a 45 jours ou plus
              • Le Subgraph n’a pas été interrogé depuis 30 jours

              En outre, lorsqu’une nouvelle version est déployée, si le Subgraph n’a pas été publié, la version N-2 du Subgraph est archivée.

              Chaque Subgraph concerné par cette politique a la possibilité de rétablir la version en question.

              Vérification de la santé du Subgraphs

              Si un Subgraph se synchronise avec succès, c’est le signe qu’il continuera à fonctionner correctement pour toujours. Toutefois, de nouveaux déclencheurs sur le réseau peuvent entraîner une condition d’erreur non testée dans votre Subgraph ou un retard dû à des problèmes de performance ou à des problèmes avec les opérateurs de nœuds.

              Graph Node expose un endpoint GraphQL que vous pouvez interroger pour vérifier l’état de votre subgraph. Sur le service hébergé, il est disponible à https://api.thegraph.com/index-node/graphql. Sur un nœud local, il est disponible sur le port 8030/graphql par défaut. Le schéma complet de ce point d’accès peut être trouvé ici⁠. Voici un exemple de requête qui vérifie le statut de la version actuelle d’un subgraph :

              1{2  indexingStatusForCurrentVersion(subgraphName: "org/subgraph") {3    synced4    health5    fatalError {6      message7      block {8        number9        hash10      }11      handler12    }13    chains {14      chainHeadBlock {15        number16      }17      latestBlock {18        number19      }20    }21  }22}

              This will give you the chainHeadBlock which you can compare with the latestBlock on your Subgraph to check if it is running behind. synced informs if the Subgraph has ever caught up to the chain. health can currently take the values of healthy if no errors occurred, or failed if there was an error which halted the progress of the Subgraph. In this case, you can check the fatalError field for details on this error.

              ⁠Edit on GitHub⁠

              Déploiement en utilisant Subgraph StudioPublier sur le réseau décentralisé
              On this page
              • Déployer le Subgraph sur plusieurs réseaux
              • En utilisant graph-cli
              • Utilisation du modèle subgraph.yaml
              • Subgraph Studio Politique d’archivage de Subgraph
              • Vérification de la santé du Subgraphs
              The GraphStatusTestnetActifs de la MarqueForumSécuritéPolitique de confidentialitéConditions d'utilisation