Hier nous avons déployé notre premier contrat ERC20.
Aujourd'hui, nous allons parler staking ! Mais avant tout, nous allons refaire un point sur la globalité de notre projet !
En route 🔥
Nous aurons in fine 3 contrats dans notre projet.
Un contrat ERC721 (NFT), un contrat ERC20 (token) ainsi qu'un contrat de staking.
Voici un schéma du fonctionnement de notre app :
Si on résume, on a donc :
- Un contrat ERC721 (NFT) : ✅
- Un contrat ERC20 (Token) : ✅
- Un contrat de staking : 🏁
Il ne nous reste donc qu'à réaliser notre dernier contrat... celui de staking !
Mais comment ça fonctionne un contrat de staking NFT ?
Le contrat de staking est possible pour une raison : un contrat peut être appelé par un autre contrat. Et c'est ainsi que va fonctionner notre contrat !
Voici les étapes que réalise le contrat de staking :
1 - Avant le staking.
Avant le staking, l'utilisateur va devoir donner les droits à notre contrat de staking pour que ce dernier puise se transférer les NFTs afin de les staker.
Pour se faire, il faudra que l'utilisateur utilise la fonction "setApprovalForAll" d'ERC721.
2 - Le staking 1/2.
L'utilisateur va appeler une fonction de staking avec en paramètre les IDs des NFTs qu'il souhaite staker.
Bien évidemment, il faut qu'il possède ces IDs en question.
Si c'est le cas, le contrat se transfère les NFTs et crée une structure.
2/2.
La structure va contenir les informations relatives à l'utilisateur et au staking à savoir pour chaque NFT :
- L'ID
- Le propriétaire
- Le timestamp du début de staking.
Toutes ces informations servent à gérer les récompenses.
3 - Les récompenses 1/3.
Lorsqu'un utilisateur souhaite recevoir ses récompenses, il appelle une fonction qui lui permet de passer en paramètre les IDs de NFT pour lesquels il souhaite recevoir ses tokens.
Le contrat vérifie ensuite si tous les IDs sont bien à lui.
2/3.
Si c'est le cas, il va accumuler le nombre de récompenses en parcourant les différentes structures et en calculant le temps écoulé entre le début du staking et le timestamp actuel.
On peut donc définir un nombre de token à donner par heure de staking.
3/3.
Lorsque l'utilisateur claim une récompense, le timestamp de staking devient le timestamp actuel pour chaque ID claim.
Ensuite, notre contrat de staking va appeler le contrat ERC20 (en étant admin) afin de mint le nombre de token à l'utilisateur.
4 - Unstake les NFTs 1/2.
Pour la dernière étape, il faut pouvoir récupérer les NFTs.
Le contrat de staking va automatiquement envoyé les récompenses à l'utilisateur si il unstake ses NFTs sans avoir claim.
2/2
Lorsque l'utilisateur souhaite unstake x NFTs, le contrat vérifie qu'il les possède bien.
Si c'est le cas, on claim les récompenses pour chaque, puis on supprime simplement le structure et staking avant de renvoyer les NFTs vers son propriétaire.
Notre contrat de staking va aussi émettre des événements lorsqu'il y aura un stake, un unstake ou un claim de récompense !
Maintenant que nous savons comment fonctionnera notre contrat, il est temps de le développer !
On se retrouve demain, même heure, afin de commencer à développer notre dernier contrat 🔥 !
Si l'initiative vous plait, vous pouvez me soutenir avec un j'aime et un retweet sur le tweet principal.
N'hésitez pas à vous abonner pour ne pas rater les prochains jours ! 🔥
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Hier nous avons créé notre premier contrat ERC20. Aujourd'hui le challenge est simple : le déployer sur Mumbai, mint des tokens et l'ajouter à notre wallet pour pouvoir le voir !