图片

La dernière fois que nous avons créé un article pratique sur la création d'un composant pour obtenir les données de prix Ethereum à partir d'un contrat Ethereum, Snapshot Indexer EVM utilise l'ABI comme interface pour récupérer les données d'une chaîne compatible EVM.

Dans cet article, nous allons essayer de récupérer des données à partir d'ordinateurs Internet à l'aide de Candid, une interface sur les ordinateurs Internet exécutant Chainsight. Dans cet article, nous allons essayer de créer un composant qui collecte des données à partir d'ordinateurs Internet à l'aide de Snapshot Indexer ICP.

Le projet est un indexeur d'instantanés de prix ICP qui collecte les prix ICP à l'aide de contrats DEX sur des ordinateurs Internet, et en février 2024, 1 ICP se négocie à environ 12 $.

Définition du composant terminée

ICPSwap est l'un des DEX bien connus sur Internet. Il est utilisé pour obtenir les prix ICP. Le contrat ICPSwap (conteneur) est appelé régulièrement pour collecter les données de prix ICP. L'indexeur d'instantanés est construit avec un intervalle de collecte d'une heure.

图片

conditions préalables

Chainsight CLI nécessite plusieurs outils et l'installation de csx. Veuillez vous référer aux articles suivants pour les préparations préliminaires :

  • dev.to/hide_yoshi/step-by-step-creating-an-evm-price-oracle-with-chainsight-469g

Créer un projet et ajouter un modèle de liste de contrôle

Comme auparavant, construisez à partir d'un projet vide et utilisez csx new --no-samples pour créer le modèle.

图片

Utilisez ensuite csx add pour ajouter l'indexeur d'instantanés EVM, le type snapshot_indexer_icp doit être sélectionné.

图片

Mettons à jour le manifeste que nous avons ajouté afin de pouvoir appeler un conteneur déjà déployé sur des ordinateurs sur Internet. Dans ce cas, nous utiliserons le conteneur utilisé dans ICPSwap.

Identifiant du domicile : 2ixw4-taaaa-aaaag-qcpdq-cai

图片

Dans le champ datasource, spécifiez le conteneur et sa fonction à appeler cette fois.

Spécifiez l'ID du conteneur à appeler dans le champ location.id, dans ce cas, définissez 2ixw4-taaaa-aaaag-qcpdq-cai, et ensuite, dans datasource.method , spécifiez la fonction conteneur à appeler.

Dans method.identifier , la fonction est spécifiée au format Candid, qui est la notation d'interface pour les ordinateurs Internet.

Candid est un langage de description d'interface dont l'objectif principal est de décrire l'interface publique d'un service, généralement sous la forme d'un programme déployé comme un conteneur s'exécutant sur des ordinateurs via Internet. L'un des principaux avantages de Candid est qu'il s'agit d'un langage. agnostique et permet l'interopérabilité entre les services et les frontaux écrits dans différents langages de programmation, notamment Motoko, Rust et JavaScript.

source:

  • internetcomputer.org/docs/current/developer-docs/backend/candid/candid-concepts

Les ordinateurs Internet peuvent facilement visualiser l'interface du conteneur via le tableau de bord.

图片图片

source:

  • tableau de bord.internetcomputer.org/canister/2ixw4-taaaa-aaaag-qcpdq-cai

C'est l'interface Candid du conteneur que nous appellerons. La déclaration en service est l'interface fournie par le conteneur. Dans ce cas, nous utiliserons la fonction get_exchange_rates décrite ici. Nous devons faire deux choses pour spécifier cette fonction.

Spécifiez la déclaration de fonction contenant les paramètres et les informations de réponse dans method.identifier : get_exchange_rates: () -> (vec ExchangeRate__1).

Étant donné que le type personnalisé utilisé par cette déclaration n'est pas le type intégré Candid, créez un fichier .did contenant l'interface Candid afin de pouvoir la référencer et spécifiez-le dans method.interface .

Après avoir sélectionné Candid dans l'interface Canister de l'écran du tableau de bord susmentionné, cliquez sur "Copier" dans le coin supérieur droit pour copier la déclaration dans l'interface. Ensuite, créez target_interface.did sous le dossier interfaces et collez-y le contenu que vous venez de copier. , les dossiers et fichiers réels ressembleront à ceci.

图片

Après avoir créé le fichier, spécifiez interfaces/target_interface.did dans method.interface et le champ source de données devrait ressembler à ceci.

图片

Enfin, ajoutez un paramètre pour que ce composant appelle le conteneur en dehors de Chainsight Platform. is_target_component doit être défini sur false. Si cet indicateur n'est pas défini et est vrai, le composant appellera le composant à l'intérieur de Chainsight Platform. Ceci termine la mise à jour du manifeste. . Le manifeste complété est le suivant.

图片

Pour les métadonnées, tout paramètre arbitraire fera l'affaire, vérifiez à nouveau les champs de la source de données et is_target_component, si vous avez réussi à modifier le code jusqu'à présent, nous générerons le code immédiatement.

Générer du code et créer des modules

Utilisons csxgenerate pour générer le code du conteneur, si vous exécutez réellement cette commande, vous obtiendrez le résultat suivant.

图片

Comme pour l'EVM Snapshot Indexer, cette interface dans l'ICP Snapshot Indexer ne nécessite aucune personnalisation supplémentaire et le processus de génération peut commencer sans aucune personnalisation supplémentaire.

Vous pouvez utiliser csx build pour générer un module à partir du code, exécutons-le.

图片

La construction sera terminée dans quelques minutes. Cette commande génère le module WASM et l'interface franche. Pour une compréhension plus approfondie de ces comportements, veuillez vous référer à l'article suivant :

  • medium.com/@Chainsight_Network/behind-chainsight-how-modules-are-created-pt-2-4cf29234b98b

Enfin, déployez et démarrez le composant !

Déployer des composants

Comme dans les leçons pratiques précédentes, utilisez csx déployer et csx exec pour déployer ce composant sur la plateforme Chainsight.

图片

Lorsque vous les exécutez, vous devriez obtenir les journaux suivants.

图片

Les instructions de déploiement et de démarrage des opérations sont désormais terminées et il ne vous reste plus qu'à attendre l'intervalle d'exécution automatique pour référencer les données.

Les composants qui peuvent être créés lors de cette session pratique sont également en cours d'exécution (nous avons légèrement modifié la description et les intervalles d'exécution).

图片

source:

  • beta.chainsight.network/explore/components/lqf7x-4yaaa-aaaal-qdg7q-cai

Notre pratique sur l'indexeur d'instantanés EVM se termine ici. Nous continuerons à créer et à publier de nouveaux cours pratiques à l'avenir, alors restez à l'écoute !

Restez connecté avec nous pour des mises à jour plus intéressantes et découvrez comment l'avenir du web3 se construit, alors qu'ensemble, nous continuons à façonner un avenir de la finance plus modulaire et innovant !

图片

Canaux de contact

Site officiel:

chainsight.network

X:

@Chainsight_

GitHub:

github.com/horizonx-tech?q=chainsight&type=all

Moyen:

medium.com/@Chainsight_Network

Documents :

docs.chainsight.network

图片

#Chainsight #EVM #Web3 #ICP🚀🚀 $ICP

Contenu IC qui vous intéresse

Progrès technologique | Informations sur le projet |

Collectez et suivez IC Binance Channel

Restez à jour avec les dernières informations