0xNekr.eth Profile picture
Dec 20 19 tweets 6 min read
[#CALENDRIER DE L'AVENT 20/25]

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

Jour 20 / 25 :

Staking : Le staking des NFTs ! Comment faire pour que le contrat permette de staker un NFT ? C'est ce que nous allons développer aujourd'hui. 🔥

🧵
Avant de commencer, vous pouvez repartir du code développé hier.

Il est présent dans le répertoire "Jour20/Staking_Jour20.sol".

N’oubliez pas de modifier les noms et les imports.

Si vous n'avez pas ce répertoire : git pull.
Le but de notre journée : développer la fonction qui permet de staker un/des NFT(s) !

Cette fonction va se transférer le NFT de l'utilisateur (avec "approve" au préalable) et créer la structure de staking.
On commence donc par définir une nouvelle fonction, la fonction "stake".

Elle prend en paramètre une liste d'ID.

C'est la liste des IDs que l'utilisateur souhaite staker.

La fonction est "external", car elle ne peut être appelée que par l'utilisateur !
Deuxième étape, on définit à l'intérieur de notre fonction une boucle "for".

Cette boucle va nous permettre de parcourir tous les IDs de la liste donnés par l'utilisateur.

Le but est d'effectuer le même traitement pour chaque ID présent dans la liste grâce à la boucle !
Nous allons passer au premier "require", la propriété du NFT.

Au niveau du constructeur, nous avons associé notre variable "nft" à notre adresse de contrat, c'est ici que ça devient utile !

Grâce à notre variable, nous allons pouvoir appeler un autre contrat !

Fait hier 🔽 !
Pour appeler notre autre contrat, on utilise notre variable "nft".

Ici, nous devons appeler la fonction "nft.ownerOf()", qui retourne l'adresse du propriétaire du NFT afin de vérifier que la personne qui veut staker possède bien le NFT !

Tout ça dans un "require".
On vérifie qu'aucun des IDs n'est déjà staké !

Pour ça on récupère, grâce à "StructByID[tokenIds[i]]", la structure associée à notre ID.

On récupère ensuite notre variable "stakingStartTime", si cette variable est à 0 alors le token n'est pas staké !
Pour rappel, la fonction "stake" devra être appelée après que l'utilisateur ait utilisé la fonction standard "setApprovalForAll" pour accorder le droit à notre contrat de transférer ses NFTs à sa place.

Sinon, la fonction que nous allons voir dans le tweet suivant va échouer !
Lorsque le contrat est sûr que l'utilisateur possède bien les NFTs et qu'ils ne sont pas déjà stakés, alors il peut les transférer.

Pour cela on utilise la fonction d'ERC721 "transferFrom".

Le contrat transfert le NFT de l'adresse de l'utilisateur vers sa propre adresse !
C'est ainsi que fonctionne le staking.

Nous sommes sûrs que l'utilisateur a "bloqué" son NFT, car il est présent sur le contrat et ne peut donc pas être vendu ou échangé !
Une fois que le NFT est bien transféré sur le contrat, on émet un événement pour préciser qu'une nouveau NFT est staké.

On précise donc l'adresse de l'utilisateur, le numéro du NFT ainsi que le "timestamp".

Le "block.timestamp" est l'horodatage du block de la transaction.
Maintenant que le NFT est sur notre contrat et que l'événement est émis, alors nous pouvons créer la structure "StakeStruct".

Notre but va être de créer une structure et de la stocker directement dans le mapping "StructByID" pour associer notre nouvelle structure à notre token !
Pour faire cela, on associe directement notre structure à notre ID dans notre token grâce au mapping.

On définit donc un nouveau "StakeStruct" avec :

- tokenId: le token.
- stakingStartTime: le timestamp du block.
- owner: la personne qui appelle la fonction.

Et c'est tout !
Le tweet précédent est compliqué à comprendre en apparence en termes de code, je vous invite à bien le lire et relire jusqu'à bien comprendre comment marche l'association d'une structure à un ID grâce au mapping.

N'oubliez pas de venir sur Discord si vous avez des questions !
Pour finir, il ne reste qu'à incrémenter notre variable "totalStaked" qui permet de savoir combien de NFTs sont stakés au total.

Pour cela, on additionne à la variable la taille du tableau "tokenIds".

La taille est forcément égale au nombre de NFT à ajouter !
Petite note en plus, si une erreur arrive sur la boucle "for" alors la transaction va échouer.

Par exemple, si l'utilisateur renseigne 5 IDs de NFT, et qu'il n'en possède que 4 sur 5, alors toute la transaction échoue !

Pareil si l'utilisateur n'a pas approuvé le contrat !
Et voilà, notre première fonction de staking est terminée !

Nous pouvons désormais envoyer un token sur notre contrat tout en créant une structure, associé au NFT, afin d'avoir les informations sur notre staking !

On attaque la suite dès demain ! 🔥

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with 0xNekr.eth

0xNekr.eth Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @0xNekr

Dec 21
[#CALENDRIER DE L'AVENT 21/25]

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

Jour 21 / 25 :

Staking : Aujourd'hui nous allons gérer les récompenses du staking, ainsi que le claim de ces récompenses ! 💸

🧵
Avant de commencer, vous pouvez repartir du code développé hier.

Il est présent dans le répertoire "Jour21/Staking_Jour21.sol".

N’oubliez pas de modifier les noms et les imports.

Si vous n'avez pas ce répertoire : git pull. Image
Read 20 tweets
Dec 19
[#CALENDRIER DE L'AVENT 19/25]

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

Jour 19 / 25 :

Staking : Nous allons entamer notre contrat de staking ! Parlons imports, initialisations et variables.

🧵
Vous savez comment va fonctionner globalement notre contrat de staking, il est temps de le développer !

Allons-y 🔥
Read 12 tweets
Dec 18
[#CALENDRIER DE L'AVENT 18/25]

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

Jour 18 / 25 :

Staking : Comment ça fonctionne ? Qu'est-ce que c'est ? C'est ce que nous allons voir aujourd'hui ! 🔥

🧵
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 🔥
Read 17 tweets
Dec 17
[#CALENDRIER DE L'AVENT 17/25]

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

Jour 17 / 25 :

Création #ERC20 : Nous allons déployer notre contrat ERC20, le vérifier, et l'ajouter à notre wallet 🔥

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

En route 🔥
Read 18 tweets
Dec 16
[#CALENDRIER DE L'AVENT 16/25]

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

Jour 16 / 25 :

Création #ERC20 : Nous allons créer notre premier token ERC20 ! Et tout ceci en une seule journée 🔥

🧵
Il est possible de faire des contrats de token ERC20 plus ou moins complexe !

Comme nous réalisons un token utilitaire qui sert de récompense de staking, il va être extrêmement simple à mettre en place !

On pourrait imaginer qu'il serve dans une marketplace de jeu par exemple.
Read 13 tweets
Dec 15
[#CALENDRIER DE L'AVENT 15/25]

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

Jour 15 / 25 :

La norme #ERC20 : Qu'est-ce que la norme ERC20 ? À quoi sert-elle ? C'est ce que nous allons voir aujourd'hui 💸

🧵
La norme ERC20 est une norme pour définir les contrats intelligents des jetons fongibles.

À l'inverse d'un NFT (ERC721), ERC20 permet de créer des jetons qui sont échangeables en 1:1 car ils ont exactement tous la même valeur !
À titre d'exemple, le "stable coin" #USDT est un token fongible dont le contrat est disponible sur plusieurs blockchain.

etherscan.io/token/0xdac17f…

Il est impossible de différencier 1 USDT d'un autre sur le même contrat, c'est pour ça qu'on les appelle des jetons fongibles !
Read 11 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(