Nekr Profile picture
Lead Blockchain - Lead Developer - J'explique les concepts Blockchain & Web3 avec des mots simples.

Dec 14, 2022, 15 tweets

[#CALENDRIER DE L'AVENT 14/25]

25 jours pour apprendre à développer des Smart Contracts en #Solidity 🔥

Jour 14 / 25 :

Création #ERC721 : Finalisation du contrat ERC721... le mint ! 🔥

🧵

Tweet précédent

🔽

Dernière étape de notre contrat ERC721 ! Mais pas des moindres... la fonction de mint !

Elle doit regrouper pas mal de mécanismes pour gérer toutes les phases, nous allons la décortiquer !

Avant tout, si vous n'avez pas fait les jours précédents, vous pouvez récupérer le contrat à jour dans le dossier "contracts/Jour14".

La fonction de mint est la fonction que vont appeler les utilisateurs pour créer le NFT !

Comme nous utilisons une fonction unique, il faut qu'elle puisse gérer les différentes phases (whitelist/public), et les différentes restrictions qui vont avec !

Décortiquons ça ! 🔍

Mais avant, voici comme va fonctionner le mint :

Deux phases possibles, whitelist ou public.

En whitelist : 1 seul mint par personne.
En public : autant que souhaité (jusqu'au max supply).

Commençons par la définition.

La fonction "mint" est donc externe et payable car elle ne sera jamais appelée que depuis l'extérieur et elle doit pouvoir recevoir de l'argent.

Elle prend en argument la preuve de Merkle de la whitelist, ainsi que le nombre de NFT souhaité!

On définit un "require" qui empêche d'utiliser la fonction si nous ne sommes pas dans la phase de whitelist ou public.

On récupère le prix grâce à notre fonction "getCurrentPrice".

On récupère le nombre déjà minté en récupérant l'ID du dernier mint grâce à "_tokenIds.current".

Place à ce que nous devons faire en phase de whitelist :

Un require pour être sur que l'utilisateur est WL grâce à "isWhitelisted".

Un require pour être sur que l'utilisateur mint une seule fois.

Un require pour être sur que la supply "whitelist" n’est pas épuisée.

Pour finir avec les require :

Un pour être sur que le nombre de mint actuel + le nombre que souhaite acheter la personne ne dépasse pas la "maxSupply".

Un dernier pour être sur que la personne a bien envoyé assez d'argent, donc "prix x nombres de NFT" !

Une fois que tout est vérifié, il ne reste plus qu'à réaliser une boucle "for" qui va exécuter autant de fois que de NFT voulu les étapes suivantes :

- Récupération du token ID actuel
- Création du token
- Incrémentation (+1) du compteur "_tokenIds"

Puis on déclenche l'évent !

Et j'ai l'impression qu'on peut officiellement déclarer notre premier contrat ERC721 terminé !

Vous pouvez êtes fier de vous si vous avez tenu jusqu'ici (attention, ce n’est pas fini !)

C'est un beau premier bébé eheh !

Je vous conseille d'aller tester tout ça sur remix.ethereum.org

Vous pouvez directement déployer votre contrat sur la blockchain depuis cet outil !

J'ai déjà créé un thread sur comment tester un contrat comme ceci, je vous laisse le lire pour le faire vous-même !

Si vous avez des soucis pour tester, ma version du contrat est disponible dans le répertoire "solutions/NekrIsERC721.sol" 🔥

Et c'est déjà fini pour aujourd'hui !

Dès demain on attaque sur la partie token ERC20 !

On va commencer par rappeler ce qu'est la norme et ses spécificités avant de commencer un contrat token !

Vous verrez, ce contrat sera bien plus simple que celui d'ERC721 ! 🔥

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling