0xNekr.eth Profile picture
Dec 13 24 tweets 8 min read
[#CALENDRIER DE L'AVENT 13/25]

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

Jour 13 / 25 :

Création #ERC721 : Comment gérer les métadonnées ? Est-ce que les métadonnées sont immuables ? Développons ça !

🧵
Dans le thread précédent, nous avons appréhendé le système d'Arbre de Merkle, c'est un gros sujet quand on parle de cryptomonnaie.

Le deuxième gros sujet, plus spécifique aux NFTs, ce sont les métadonnées... mais qu'est-ce que c'est ?
Pour vulgariser simplement, les métadonnées sont des informations que nous pouvons attacher aux IDs de token afin de les définir plus précisément.

C'est grâce à ces métadonnées que nous pouvons spécifier un nom, une image, une description, des attributs, etc. Image
Car, de base, un token NFT n'est rien d'autre qu'un ID lié à un contrat, en l'état, il ne représente pas grand-chose.

Et c'est sur ce token que nous pouvons attacher des informations (tel que les métadonnées) afin de le définir plus précisément et lui apporter plus d'intérêt !
Il existe un standard de métadonnées pour que les plateformes puissent comprendre vos métadonnées.

#Opensea fournis une bonne documentation sur le sujet, et je vous conseille de la lire si vous souhaitez approfondir le sujet (c'est très important)

docs.opensea.io/docs/metadata-…
En reprenant la documentation ci-dessus, on peut voir que les métadonnées doivent être sous le format "json".

Il est important d'utiliser des mots-clés précis tels que "description", "image", "name", "attributes", etc.

Pour une liste complète, il faut lire la doc d'Opensea ! Image
Vous l'aurez compris, les métadonnées sont des informations supplémentaires que nous attachons à notre ID de Token afin de le définir plus précisément !

C'est ce qui permet aux BAYC, par exemple, de posséder une image et des attributs.

Mais comment et où stocker ces infos ? Image
Le problème est précisément là !

La plupart du temps, ces métadonnées ne sont pas stockées on-chain...

C'est-à-dire que nous stockons toutes ces informations en dehors de la blockchain, ce qui veut dire que ces informations peuvent disparaître ou peuvent être modifiées!

🔽
Il existe donc plusieurs possibilités "classiques" :

- Stocker on-chain
- Stocker off-chain de manière centralisée
- Stocker off-chain de manière décentralisée

Il est même possible de mélanger plusieurs choses.

Voici les avantages et inconvénients de chaque technique.

🔽
> Stocker on-chain :

Avantage : ça ne peut pas disparaitre sans raison ! Si c'est sur la blockchain, c'est immuable tant qu'on ne peut pas le modifier !

Inconvénient : on ne peut pas stocker 10000 images sur la blockchain... cette solution n'est pas viable pour cela.
> Stocker off-chain : centralisée

Avantage : faible coût, le projet peut modifier les NFTs à sa guise sans engendrer de transactions.

Inconvénient : rien d'immuable, le projet peut décider de tout supprimer et vous ne pourrez rien y faire.
> Stocker off-chain : décentralisée

Avantage : faible coût, tout est stocké off-chain mais sur un réseau décentralisé de partage de document.

Inconvénient : il n'est pas impossible que tout ce réseau autre tombe, et que tous vos NFTs perdent leurs métadonnées. Pas de risque 0.
C'est donc cette troisième et dernière solution que la plupart des projets vont mettre en place.

C'est aussi ce que nous allons faire aujourd'hui ! Mais avant tout, il faut comprendre sur quoi repose ce fameux réseau off-chain décentralisé : #IPFS

fr.beincrypto.com/apprendre/ipfs…
Je ne suis pas un expert de la génération d'image pour créer des NFTs, je vais donc vous passer directement un lien vers des métadonnées déjà enregistrées sous IPFS afin que nous puissions avancer pour la suite.

Ce lien, c'est un URI, un identifiant de ressource uniforme ! Image
Et nous n'allons pas utiliser n'importe quel URI.
Nous allons prendre celui-ci :

ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/

Qui est celui du projet #BAYC.

Mais comment cet URI peut lier notre token à nos informations s'il n'est pas directement on-chain? Image
Une fonction dans le contrat permet de retourner, pour chaque ID de NFT, un URI vers ses métadonnées.

Cette fonction s'appelle "tokenURI" pour ERC721 et nous allons la mettre en place.

Pour l'ID #0 on aura :

"ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/0" Image
Passons au développement de notre contrat !

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/Jour13". Image
On commence par rajouter une variable.

Cette variable est un booléen qui va nous servir pour définir si les métadonnées peuvent être modifiées ou non.

Le but est de se laisser la possibilité de modifier au début, et une fois que tout est bon et en place, qu'on puisse les figer. Image
Suite logique, il faut définir la fonction qui va permettre de figer les métadonnées.

Toute simple, c'est une fonction "onlyOwner" qui ne peut donc être appelée que par le propriétaire du contrat.

Elle va simplement passer notre variable à "true". Image
Et voici la fonction la plus importante. Fonction d'ERC721, c'est elle que les plateformes utilisent pour récupérer les métadonnées.

C'est donc une vue "override" de la fonction de base, on vérifie si le token existe puis en renvoie la concaténation de l'URI et de l'ID. Image
Pour finir, nous allons définir une fonction pour modifier notre URI.

Disponible que pour le propriétaire, cette fonction permet de modifier la variable "baseTokenURI".

Cependant, il faut que notre variable "metadataFrozen" soit à "false", sinon on ne peut plus rien modifier ! Image
Et c'est fini pour aujourd'hui !

Demain on attaque la dernière étape de notre contrat ERC721...

Le mint ! Après ça, on pourra passer au token ERC20 ! 🔥

Like & Rt le thread si ça ta plu ! 👋

• • •

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 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
Dec 14
[#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 ! 🔥

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

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

Jour 4 / 25 :

Comprendre les imports et les variables !

Vous aurez aussi un exercice.

🧵
Nous allons désormais passer par une petite phase de “cours théorique” sur les différents points de la programmation Solidity.

Mon but est de vous donner les bases pour que vous puissiez bien comprendre ce que nous allons réaliser par suite.
Read 12 tweets
Dec 3
[#CALENDRIER DE L'AVENT 3/25]

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

Jour 3 / 25 :

Développons, testons et déployons notre premier contrat !

Après cette journée, vous saurez déjà déployer un contrat sur la blockchain 🤟

🧵
Hier nous avons créé notre environnement de développeur.

Nous avons maintenant un projet “Hardhat” ainsi qu’un IDE qui va nous permettre d’éditer notre code.

Tout est installé sur notre projet pour développer les contrats, réaliser des tests et déployer notre contrat !
Read 17 tweets
Dec 2
[#CALENDRIER DE L'AVENT 2/25]

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

Jour 2 / 25 :

Aujourd'hui, nous allons créer notre environnement de développement !

🧵
Tout développeur a besoin d’un environnement pour développer, et il est important d’utiliser des outils avec lesquels vous vous sentirez à l’aise.

C’est sûrement une des étapes les plus longues à mettre en place, mais une fois que c’est fait, on est tranquille pour un moment.
Read 24 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!

:(