Exécutez un nœud Oracle Chainlink sur Moonbeam

Redallica
Moonbeam in French
Published in
7 min readMay 17, 2021

--

Introduction

En tant que réseau ouvert et sans autorisation, n’importe qui peut choisir d’exploiter un Oracle fournissant des données à des contrats intelligents exécutés sur Moonbeam.

Cet article fournit un aperçu de la configuration d’un Oracle Chainlink sur Moonbase Alpha.

Note

Les exemples fournis sont à des fins de démonstration uniquement. Les mots de passe DOIVENT être gérés de manière sécurisée et jamais stockés en texte brut. Ces exemples supposent un environnement basé sur Ubuntu 18.04, mais les appels pour MacOS sont inclus. Ce guide est pour une configuration de développement uniquement, ne l’utilisez pas pour un environnement de production.

Modèle de demande de base

Avant de nous plonger dans la façon de commencer, il est important de comprendre les bases du «modèle de demande de base».

Un nœud Oracle a un ensemble d’ID de travail, chacun correspondant à une tâche qui peut être demandée par un utilisateur, par exemple, récupérer une alimentation de prix. Pour ce faire, l’utilisateur doit envoyer une demande via un contrat, nous le nommerons le contrat client , en transmettant les informations suivantes:

  • Adresse Oracle: adresse du contrat déployé par le nœud Oracle
  • ID de tâche: tâche à exécuter
  • Paiement: paiement en jetons LINK que l’Oracle recevra pour répondre à la demande

Cette demande envoie en fait un transferAndCall au contrat de jeton LINK, qui gère le paiement et relaie la demande au contrat Oracle. Ici, un événement est émis avec la requête, qui est captée par le nœud Oracle. Ensuite, le nœud récupère les données nécessaires et exécute la fonction performOracleRequest , qui exécute un rappel qui stocke les informations demandées dans le contrat client. Le diagramme suivant explique ce flux de travail.

Utilisateurs avancés

Si vous êtes familiarisé avec l’exécution des nœuds Oracle Chainlink, ces informations vous permettront de démarrer rapidement sur Moonbase Alpha TestNet:

  • Documentation Chainlink, qui peut être trouvée ici
  • Point de terminaison Moonbase Alpha WSS: wss://wss.testnet.moonbeam.network
  • ChainId de Moonbase Alpha: 1287
  • Jeton LINK sur Moonbase Alpha: 0xa36085F69e2889c224210F603D836748e7dC0088
  • Obtenez des jetons Moonbase Alpha de notre faucet

Commencer

Ce guide décrit le processus de configuration du nœud Oracle, résumé comme suit:

  • Configurer un nœud Chainlink connecté à Moonbase Alpha
  • Nœud de fonds
  • Déployer un contrat Oracle
  • Créer une tâche sur le nœud Chainlink
  • Noeud Bond et Oracle
  • Test à l’aide d’un contrat client

Les exigences de base sont:

  • Docker pour exécuter des conteneurs de nœuds Postgres DB et ChainLink. Pour plus d’informations sur l’installation de Docker, veuillez visiter cette page
  • Un compte avec des fonds. Vous pouvez en créer un avec Metamask , qui peut être financé via notre faucet
  • Accédez à l’IDE Remix au cas où vous souhaiteriez l’utiliser pour déployer le contrat Oracle. Vous pouvez trouver plus d’informations sur Remix sur Moonbeam ici

Configuration du nœud

Commençons par créer un nouveau répertoire pour placer tous les fichiers nécessaires. Par exemple:

mkdir -p ~/.chainlink-moonbeam //cd ~/.chainlink-moonbeam

Ensuite, créons une base de données Postgres avec Docker. Pour ce faire, exécutez la commande suivante (les utilisateurs de MacOs peuvent remplacer — network host \par -p 5432:5432):

docker run -d — name chainlink_postgres_db \
— volume chainlink_postgres_data:/var/lib/postgresql/data \
-e ‘POSTGRES_PASSWORD={YOU_PASSWORD_HERE}’ \-e ‘POSTGRES_USER=chainlink’ \— network host \-t postgres:11

Assurez-vous de remplacer {YOU_PASSWORD_HERE} par un mot de passe réel.

Note

Rappel, ne stockez aucun mot de passe de production dans un fichier en clair. Les exemples fournis sont à des fins de démonstration uniquement.

Docker procédera au téléchargement des images nécessaires si elles ne sont pas disponibles. Maintenant, nous devons créer un fichier d’environnement pour Chainlink dans le répertoire nouvellement créé. Ce fichier est lu lors de la création du conteneur Chainlink. Les utilisateurs de MacOs peuvent remplacer localhost par host.docker.internal.

echo “ROOT=/chainlinkLOG_LEVEL=debugETH_CHAIN_ID=1287MIN_OUTGOING_CONFIRMATIONS=2LINK_CONTRACT_ADDRESS={LINK TOKEN CONTRACT ADDRESS}CHAINLINK_TLS_PORT=0SECURE_COOKIES=falseGAS_UPDATER_ENABLED=falseALLOW_ORIGINS=*ETH_URL=wss://wss.testnet.moonbeam.networkDATABASE_URL=postgresql://chainlink:{YOUR_PASSWORD_HERE}@localhost:5432/chainlink?sslmode=disableMINIMUM_CONTRACT_PAYMENT=0" > ~/.chainlink-moonbeam/.env

Ici, en plus du mot de passe ( {YOUR_PASSWORD_HERE}), nous devons fournir le contrat de jeton de lien ( {LINK TOKEN CONTRACT ADDRESS}). Après avoir créé le fichier d’environnement, nous avons également besoin d’un fichier .api qui stocke le login et le mot de passe utilisés pour accéder à l’API du nœud, à l’interface utilisateur de l’opérateur du nœud et à la ligne de commande Chainlink.

echo “{AN_EMAIL_ADDRESS}” > ~/.chainlink-moonbeam/.apiecho “{ANOTHER_PASSWORD}” >> ~/.chainlink-moonbeam/.api

Définissez à la fois une adresse e-mail et un autre mot de passe. Enfin, nous avons besoin d’un autre fichier qui stocke le mot de passe du portefeuille pour l’adresse du nœud:

echo “{THIRD_PASSWORD}” > ~/.chainlink-moonbeam/.password

Maintenant que nous avons fini de créer tous les fichiers nécessaires, nous pouvons lancer les conteneurs avec la commande suivante (les utilisateurs de MacOs peuvent remplacer — network host \ par -p 6688:6688):

docker run -d — name chainlink_oracle_node \— volume $(pwd):/chainlink \— env-file=.env \— network host \-t smartcontract/chainlink:0.9.2 \local n \-p /chainlink/.password \-a /chainlink/.api

Pour vérifier que tout fonctionne et que les journaux progressent, utilisez:

docker ps #Containers Runningdocker logs — tail 50 {container_id} #Logs progressing

Configuration du contrat

Avec le nœud Oracle en cours d’exécution, configurons le côté contrat intelligent des choses.

Tout d’abord, nous devons récupérer l’adresse que le nœud Oracle utilisera pour envoyer des transactions et écrire des données en chaîne. Pour récupérer l’adresse, connectez-vous à l’ interface utilisateur du nœud ChainLink (situé à http://localhost:6688/) en utilisant les informations d’identification du fichier .api.

Accédez à la «Page de configuration» et copiez l’adresse du nœud. Utilisez le faucet Moonbeam pour le financer.

Ensuite, nous devons déployer le contrat Oracle, qui est le middleware entre la chaîne et le nœud. Le contrat émet un événement avec toutes les informations nécessaires, qui est lu par le nœud Oracle. Ensuite, le nœud répond à la demande et écrit les données demandées dans le contrat de l’appelant.

Le code source du contrat Oracle peut être trouvé dans le référentiel officiel GitHub de Chainlink ici . Pour cet exemple, nous utiliserons Remix pour interagir avec Moonbase Alpha et déployer le contrat. Dans Remix, nous pouvons copier le code suivant:

pragma solidity ^0.6.6;import “https://github.com/smartcontractkit/chainlink/evm-contracts/src/v0.6/Oracle.sol";

Après avoir compilé le contrat, dirigez-vous vers l’onglet «Déployer et exécuter des transactions», entrez l’adresse du jeton de lien et déployez le contrat. Une fois déployé, copiez l’adresse du contrat.

Enfin, nous devons lier le nœud Oracle et le contrat intelligent Oracle. Un nœud peut écouter les demandes envoyées à un certain contrat Oracle, mais seuls les nœuds autorisés (aka. Liés) peuvent répondre à la demande avec un résultat.

Pour définir cette autorisation, nous pouvons utiliser la fonction setFulfillmentPermission() du contrat Oracle. Cela nécessite deux paramètres:

  • L’adresse du nœud que nous voulons lier au contrat (ce que nous avons fait lors d’une étape précédente)
  • Un booléen indiquant l’état de la liaison. Dans ce cas, nous le réglons sur true

Nous pouvons utiliser l’instance du contrat déployé sur Remix pour ce faire, et vérifier que le nœud Oracle est autorisé avec la fonction de vue getAuthorizationStatus(), en passant l’adresse du nœud Oracle.

Créer une tâche sur le nœud Oracle

La dernière étape pour avoir un Chainlink Oracle entièrement configuré est de créer un Job. En se référant à la documentation officielle de Chainlink :

Les spécifications d’un Job, ou spécifications, contiennent les tâches séquentielles que le nœud doit effectuer pour produire un résultat final. Une spécification contient au moins un initiateur et une tâche, qui sont décrits en détail ci-dessous. Les spécifications sont définies à l’aide de JSON standard afin qu’elles soient lisibles par l’homme et puissent être facilement analysées par le nœud Chainlink.

En voyant un Oracle comme un service API, un Job ici serait l’une des fonctions que nous pouvons appeler et qui renverra un résultat. Pour créer notre premier Job, allez dans les sections Jobs de votre nœud et cliquez sur “New Job”.

Ensuite, collez le JSON suivant. Cela créera un Job qui demandera le prix ETH actuel en USD. Assurez-vous de saisir l’adresse de votre contrat Oracle ( YOUR_ORACLE_CONTRACT_ADDRESS).

{“initiators”: [{“type”: “runlog”,“params”: { “address”: “YOUR_ORACLE_CONTRACT_ADDRESS” }}],“tasks”: [{“type”: “httpget”,“params”: { “get”: “https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD" }},{“type”: “jsonparse”,“params”: { “path”: [ “USD” ] }},{“type”: “multiply”,“params”: { “times”: 100 }},{ “type”: “ethuint256” },{ “type”: “ethtx” }]}

Et c’est tout! Vous avez entièrement configuré un nœud Oracle Chainlink qui s’exécute sur Moonbase Alpha.

Testez l’Oracle

Pour vérifier que l’oracle est opérationnel et qu’il répond aux demandes, suivez notre en utilisant un tutoriel Oracle . L’idée principale est de déployer un contrat client qui demande à l’oracle, qui écrit les données demandées dans le stockage du contrat.

Donnez-nous de vos nouvelles

Si vous avez des commentaires concernant l’envoi d’une proposition sur Moonbase Alpha ou tout autre sujet lié à Moonbeam, n’hésitez pas à nous contacter via notre canal officiel Discord.

--

--