Comment j’ai reconstruit le jeu de serpent classique sur la blockchain CENNZnet



@cennznetCENNZnet

CENNZnet est une blockchain publique et une plate-forme d’applications décentralisées qui privilégient une excellente expérience utilisateur.

Commencer votre premier rôle de développeur à temps plein dans la blockchain est sûrement une expérience éprouvante pour les nerfs. Surtout lorsque votre équipe vous confie avec désinvolture la tâche de compléter vos compétences Rust en construisant une vitrine module d’exécution au niveau du protocole dans vos premiers mois !

Mais cela n’a pas suffi à mettre Jason Tulp en phase. Notre plus récent ingénieur logiciel junior du projet CENNZnet a saisi la tâche à deux mains et nous a stupéfaits avec sa version de Snake sur la blockchain !

Nous en avons appris un peu plus sur la façon dont Jason a abordé sa première plongée dans le développement dans l’espace blockchain et sur la prochaine étape pour le serpent CENNZnet.

Voici ce que nous avons appris de Jason…

Qu’avez-vous construit ?

En tant que membre relativement nouveau de l’équipe, j’ai appris frénétiquement les bases de Rust ainsi que les subtilités du développement de la blockchain. Pour aider à consolider mes connaissances, Jordy (CENNZnet CTO) et moi avons décidé que ce serait cool si je tentais de créer mon propre module d’exécution.

Au cours des dernières semaines, j’ai créé un jeu Snake en tant que module d’exécution pour la blockchain CENNZnet. C’est à peu près votre jeu de serpent classique, mais tout en chaîne. Donc ça marche comme ça :

Vous sélectionnez une commande pour déplacer le serpent.
Ceci est lu comme une transaction par la blockchain.
Le module d’exécution contient une logique pour traiter la transaction et stocke les valeurs de position mises à jour du serpent dans un stockage persistant.
Si la transaction réussit, elle créera un événement contenant les nouvelles données et pouvant être lu par un Dapp.
Le Dapp lit les données de l’événement et dessine la sortie sur une page Web

Ainsi, à la fin de chaque finalisation de bloc, le serpent se déplacera en fonction de la nouvelle commande.

Alors, pourquoi un jeu de serpent ?

En fait, c’est un peu une tradition personnelle, chaque fois que j’essaie d’apprendre un nouveau langage de programmation, une fois que j’ai parcouru des exemples de base et des tutoriels, je me mets au défi de créer Snake dans ce langage. J’ai écrit un jeu de serpent en Visual Basic, Javascript, C#, Python, C++ et maintenant Rust. La rouille était certainement la plus difficile!

Qu’est-ce qu’un module d’exécution sur CENNZnet exactement ?

Un module d’exécution est un composant central qui contient une logique qui fonctionne sur la blockchain CENNZnet. Donc, plutôt que de laisser les constructeurs DApp créer leurs propres contrats intelligents pour chaque fonction qu’ils souhaitent communiquer au protocole, notre équipe a construit une sélection de services de base pré-construits au sein du protocole CENNZnet actuel. À l’heure actuelle, ces fonctions du module comprennent :

Actif générique qui vous permet de frapper, transférer et graver différents types de jetons fongibles.
CENNZX est l’échange de jetons en chaîne. L’attestation permet aux comptes d’émettre et de vérifier des réclamations contre d’autres comptes (y compris eux-mêmes).
Jalonnement, qui gère le jalonnement des fonds avec les validateurs.
NFT, notre dernier module vous permet créer des NFT personnalisés en utilisant uniquement l’API javascript et des transactions simples.

C’est un système modulaire assez cool qui offre aux développeurs beaucoup de flexibilité pour choisir les services de blockchain qu’ils souhaitent et en quelque sorte plug n’ play avec eux plutôt que de déterminer comment faire chacun à partir de zéro.

Qu’est-ce qui constitue un module d’exécution CENNZnet ?

Il y a 4 éléments clés dans un module d’exécution qui fonctionnent tous ensemble :

Stockage: Cela permet un accès persistant aux données qui peuvent être conservées entre les blocs.

Module: Cette partie définit les fonctions accessibles depuis l’extérieur du module d’exécution et sert de moyen de communication entre le module et les DApps essayant d’y accéder.

Événement: définit une liste d’événements qui sont déclenchés après des opérations en chaîne réussies.

Configuration: La partie config est un peu comme le cerveau du système global. Il stocke la logique de l’ensemble du module et détermine quoi faire avec les données qu’il reçoit.

Quels outils avez-vous utilisés pour créer le module d’exécution Snake ?

Rust pour le backend pour construire le module lui-même.Typescript pour le front-end et pour fournir une interface pour interagir avec le module.L’équipe CENNZnet, qui était toujours là pour répondre aux questions et généralement fournir de la sagesse. Je devais aussi comprendre Substrat, Pois et Brancher composants donc beaucoup de lecture autour de leurs projets.

Quel a été le plus grand défi que vous ayez rencontré pendant le processus de construction ?

La partie la plus difficile a probablement été de trouver un moyen d’utiliser le hasard pour déplacer le morceau de nourriture lorsque le serpent l’a mangé. Cela aurait été facile dans un programme traditionnel, mais j’avais besoin d’une approche déterministe pour travailler dans un module d’exécution.

Essentiellement, les blockchains doivent toujours obtenir la même valeur à partir d’un ensemble de calculs pour prouver qu’une transaction spécifique est correcte. Cela signifiait que l’utilisation d’un caractère aléatoire standard basé sur l’heure système n’était pas une option. J’ai dû utiliser une approche centrée sur le numéro de bloc et une valeur constamment incrémentée appelée « Nonce » pour calculer un nombre aléatoire reproductible à chaque fois que la nourriture était déplacée. Cela signifiait que le nombre « aléatoire » pouvait être recalculé par les validateurs lors de la finalisation du bloc.

Quels autres défis avez-vous rencontrés lors de la création de votre premier module d’exécution ?

Apprendre la structure des modules d’exécution Substrate et comment ils communiquent entre eux
Apprendre les subtilités du langage Rust telles que la propriété et les génériques tout en se battant avec le compilateur strict pour que le projet soit construit.
Mise en place de tests unitaires dans un environnement de test « simulé » du runtime. Ceux-ci gèrent tous les cas limites et fournissent une base pour le comportement attendu du module.
Utilisation de Typescript pour connecter le front-end au module et appeler les différentes fonctions
Contourner les restrictions du codec d’échelle de parité pour sérialiser et désérialiser différents types de données.

Quels conseils donneriez-vous à quiconque essaie de créer un module d’exécution blockchain ?

J’ai plus d’un plongeon et de le travailler au fur et à mesure que je m’approche. Si c’était à refaire, je prendrais le temps de prendre du recul et d’apprendre toutes les parties d’un module d’exécution avant d’essayer de les construire ! Il existe également de nombreuses ressources en ligne de Substrate et Polkadot qui expliquent en détail les modules d’exécution que je conseillerais de parcourir en premier.

Quelle est la prochaine étape pour le module serpent ?

Il y a deux voies potentielles auxquelles je pense pour le module serpent. La première consiste simplement à le faire vivre sur notre réseau de test en tant que jeu d’instance individuel. Cela signifierait que quiconque le souhaite pourrait jouer à ses jeux de serpent individuels et, bien sûr, consulter le code open source.

L’autre chose que j’ai en tête est de le mettre sur notre réseau de test en tant que jeu communautaire. Cela signifie qu’il n’y aurait qu’un seul jeu de serpent auquel tout le monde pourrait accéder. Les membres de notre communauté pourraient alors voter en utilisant le DAO sur le prochain mouvement pour le serpent.

Également publié sur : https://medium.com/centrality/blockchain-building-snake-runtime-modules-and-learning-rust-7048dc7f9431

Histoires liées

Mots clés

Rejoignez Hacker Midi

Créez votre compte gratuit pour débloquer votre expérience de lecture personnalisée.

Traduction de l’article de CENNZnet : Article Original

Publié le
Catégorisé comme Non classé

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *