Les + populaires

BTC ETH SOL XRP BNB USDC USDT

Suivez-nous

Comment nous avons rédigé un contrat NFT en une semaine

IAavec
Titres Titres

Rédaction contrat NFT

Il y a quelques semaines, nous avons lancé nftscoring.com, un outil qui peut vous aider à prendre des décisions basées sur les données sur le marché NFT. Depuis le début, nous savions que pour assurer la croissance, nous devions obtenir un financement communautaire. Heureusement, les NFT sont un formidable instrument de financement participatif ! Ici, je voudrais partager avec vous comment nous avons écrit et déployé notre contrat NFT et ce que nous avons appris en cours de route.

Lors de la création d’un NFT dans un premier temps, vous devez vous asseoir et réfléchir au fonctionnement de vos jetons. Certaines propriétés sont données par la norme ERC-721, que tous les NFT doivent suivre. De plus, vous pouvez étendre cette norme en ajoutant un comportement personnalisé. Il est crucial de garder à l’esprit que plus vous avez de personnalisations, plus vous êtes susceptible de produire du code erroné. Vous devriez essayer d’être aussi concis que possible.

Nous voulions créer un NFT pour accéder aux fonctionnalités premium de notre site Web. De plus, pour renforcer la vente, nous avons décidé d’allouer un certain nombre de pass diamant. En tant que détenteur de l’un de ces pass diamant, vous recevrez une partie de nos bénéfices. On ne sait pas si vous obtiendrez un pass diamant ou premium à l’avance ; c’est décidé à la menthe. De ce fait, en plus de la norme ERC-721, nous devions :

  • stocker les métadonnées sur les passes de diamant sur la chaîne – généralement, toutes les métadonnées sont stockées hors chaîne sur IPFS
  • pendant la frappe, décidez au hasard quel type de laissez-passer sera frappé
  • mettre en œuvre un mécanisme correct de déblocage des fonds collectés sur le contrat.

Prenez note du dernier point en particulier. Une chose que vous devrez certainement décider est de savoir comment l’argent de votre contrat sera débloqué. C’est beaucoup plus facile s’il n’y a qu’un seul destinataire. Dans notre cas, nous avions plusieurs destinataires, donc cette logique était plus compliquée. Mais comme il n’est pas défini par l’ERC-721, dans l’un ou l’autre des cas, vous devrez l’implémenter vous-même.

L’examen des contrats d’autres NFT peut être une fantastique source d’inspiration pour développer le vôtre. La majorité des projets réputés rendent leur code source NFT disponible sur Ethersan. Voici par exemple le code source de notre contrat.

Solidity est le langage de programmation utilisé pour créer des contrats sur le réseau Ethereum. Si votre contrat ne requiert aucun comportement non standard, vous pouvez utiliser cet outil pour produire le code automatiquement. Vous pouvez également utiliser la bibliothèque OpenZepellin, qui est la norme de facto pour le développement de contrats. Il comprend la mise en œuvre de l’ERC-721 ainsi qu’une multitude d’autres composants utiles prêts à l’emploi. Un autre contrat déjà déployé pourrait être un excellent point de départ. Vous pouvez simplement copier le code source d’Etherscan car il est open source.².

Si vous souhaitez développer un contrat avec une logique plus unique, je vous conseille fortement de lire les meilleures pratiques Ethereum Smart Contract de Consensys. Cela m’a été assez bénéfique.

La programmation Solidity est prise en charge par un certain nombre d’IDE. Nous avons choisi d’utiliser Visual Studio Code en tandem avec Truffle. De nombreuses fonctionnalités pour le développement Solidity sont disponibles dans VS Code, notamment la mise en évidence de la syntaxe et le débogage. Avec Truffle et Ganache, vous pouvez exécuter un réseau de test local ainsi que le déployer sur des réseaux publics.

Essai

Étant donné que le déploiement de contrat sur une blockchain est irréversible et que le code est immuable, il est essentiel d’éviter de déployer un code erroné. Nous avons créé des tests unitaires truffés qui couvraient chaque ligne de notre code. Ce package npm a été très utile pour visualiser la couverture.

Aléatoire

Comme indiqué précédemment, nous devions créer un processus qui détermine si le jeton est premium ou diamant au hasard lors de la frappe. L’aléatoire est un peu plus difficile à atteindre sur la blockchain que dans d’autres langages car le code doit être exécuté de manière prévisible.

Chainlink est la bonne méthode pour ajouter un élément aléatoire au contrat. L’idée principale est de diviser votre opération en deux transactions, dont l’une se termine par une demande de chaînage et dont l’autre commence par le nombre aléatoire produit. En conséquence, tous les calculs de blockchain sont déterministes. Cependant, nous avons trouvé cette technique extrêmement peu pratique, et après de longues délibérations, nous avons décidé d’emprunter une voie différente.

Comme indiqué dans le code ci-dessous, nous choisissons de produire un entier aléatoire basé sur les métadonnées du bloc et le hachage. Soyez prudent, car cette stratégie pourrait conduire à des exploits. Considérez ce qui se passerait si quelqu’un développait un contrat qui utilisait exactement la même fonction aléatoire que nous. Il serait en mesure d’accéder aux métadonnées de bloc identiques, d’évaluer la fonction aléatoire et d’invoquer la méthode mint sur notre contrat si le résultat était en sa faveur (production d’une passe de diamant). Pour contourner ce problème, nous avons décidé d’arrêter la frappe de contrats.¹

Il est temps de déployer une fois que vous avez terminé le contrat. Bien que truffle puisse être utilisé pour le déploiement, nous avons trouvé l’environnement Remix plus convivial. C’est ici que vous pouvez rapidement compiler et déployer votre contrat.

L’option d’indiquer combien de fois vous vous attendez à ce que le contrat soit exécuté est une technique de compilation intéressante dans Solidity. Le compilateur s’efforcera de minimiser la consommation de gaz estimée pour la durée du contrat sur la base de cette estimation.

C’est une bonne idée de vérifier d’abord votre contrat sur certains des réseaux de test, où vous pouvez acquérir des ETH gratuits et interagir avec eux. Si tout se passe bien, vous pouvez procéder au déploiement du réseau principal.

Mis à part le plaisir d’activer quelque chose de complètement irrévocable, rien dans le déploiement du réseau principal n’est différent du déploiement sur l’un des réseaux de test. Vous voudrez également faire coïncider la formation de votre contrat avec un prix du gaz bas, car la création de contrat peut être assez assoiffée – dans notre exemple, 6M de gaz ~ 0,6 ETH. Cet outil a été utile pour rechercher les prix moyens du gaz dans le passé.

Vérification

Seule la version construite de votre contrat – le byte code – est stockée sur la blockchain lors du déploiement. En raison de l’incapacité du bytecode à être lu par les humains, un mécanisme est nécessaire pour que chacun puisse valider le contenu de votre contrat. Etherscan facilite la vérification de votre code source. Il compile votre code source et vérifie si le bytecode généré correspond à ce qui a été téléchargé dans la blockchain. Etherscan publiera le code source fourni avec un message validant la légitimité du code s’il réussit. L’IDE Web Remix fournit un module complémentaire pratique qui automatisera cette procédure pour vous.

Métadonnées

Tant que votre code est complet, vous devez toujours le lier à vos images coûteuses. Chacune des métadonnées de vos tokens n’est pas directement conservée sur la blockchain. Seule une URL redirigeant vers un site où vos métadonnées, y compris les traits et les images, sont stockées est stockée sur la blockchain. L’URL peut être définie de différentes manières :

1. Dès qu’un token est généré, téléchargez les fichiers et les informations, et établissez l’URI du token pour chaque NFT généré. Étant donné que chaque NFT émis nécessite une transaction, cette approche est très coûteuse.

2. Définissez la baseURI sur votre contrat NFT et téléchargez les fichiers d’actifs et de métadonnées à l’avance. Avec cette méthode, vous devez vous assurer que l’ID de jeton qui sera créé ensuite n’est pas connu à l’avance. Dans votre contrat, vous aurez presque certainement besoin d’utiliser un peu d’aléatoire.

3. Sur votre contrat, créez une baseURI temporaire, puis organisez un jour de révélation où vous modifiez cette baseURI pour qu’elle pointe vers les métadonnées exposées. C’est sans doute la technique la plus simple ; le seul problème est que vous devez acquérir la confiance de la communauté avant de faire la génération de métadonnées au hasard. Il y a eu des cas où les créateurs de projets ont profité de cela en s’attribuant des jetons inhabituels.

Une bonne pratique consiste à télécharger vos métadonnées sur IPFS, nous l’avons fait via Pinata.

Interagir avec le contrat

Maintenant, il est temps de commencer à vendre ! Vous pouvez soit utiliser l’IDE Remix pour communiquer avec votre contrat déployé, soit le découvrir sur Etherscan et vous y engager. Cela suppose que vous avez terminé le processus de vérification du code source.

Vous devrez créer une page de frappe pour les utilisateurs finaux, avec une mise en page plus conviviale. Dans le prochain article, je vais vous montrer comment lier votre site Web à web3. Pour l’instant, bon codage !

Source medium.com

Gérez votre patrimoine
Invvest
10% de réduction sur l'abonnement annuel

Donnez votre avis

Soyez le 1er à noter cet article


Partagez cet article maintenant !

Envoyez simplement nos contenus crypto et finance à vos proches.