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 !)