6 min de lecture
This guide includes references to the Ropsten testnet, which is no longer actively maintained. While specific steps related to this chain may not be applicable, the overall process may be valid for other chains. We recommend exploring current alternatives for your implementation. If you’d like to see an updated version of this guide, please let us know!
Aperçu
La norme ERC1155 s'est imposée comme la référence en matière de création de NFT ; toutes les principales places de marché répertorient les nouveaux jetons selon la norme ERC1155. Dans ce guide, nous allons découvrir la norme de jeton ERC1155 et apprendre à créer un jeton ERC1155.
Ce que nous allons faire :
- Créer 3 collections de NFT
- Créer et déployer un contrat ERC-1155
- Mettre à jour le contrat pour qu'il soit compatible avec OpenSea
- Déployez nos collections de NFT
Ce dont vous aurez besoin :
- Ressources graphiques pour créer des NFT
- MetaMask et certains ETH de test Ropsten.
- Connaissance des normes de jetons ERC20 et ERC721 (NFT).
Qu'est-ce que l'ERC1155 ?
L'ERC-1155 est une norme multi-jetons qui permet de créer des jetons fongibles, non fongibles et semi-fongibles au sein d'un même contrat. Avant l'ERC-1155, si un cas d'utilisation nécessitait à la fois des jetons ERC-20 (fongibles) et ERC-721 (non fongibles), il fallait recourir à des contrats distincts pour y parvenir. L’ERC1155 permet également de lancer plusieurs collections de NFT au sein d’un seul contrat intelligent, au lieu de créer un contrat distinct pour chaque collection ; cela améliore l’efficacité de la conception des contrats intelligents et réduit au minimum le nombre de transactions, ce qui est très important car cela permet d’économiser de l’espace sur la blockchain. Avec l’ERC1155, le transfert groupé de jetons est également possible, contrairement aux normes précédentes qui ne permettaient de transférer un jeton qu’à une seule adresse.
Les jeux décentralisés basés sur la blockchain constituent un exemple courant d'application de la norme ERC-1155, car ces jeux nécessitent des jetons et des objets de collection ; c'est pourquoi la norme ERC-1155 s'est imposée comme une référence dans ce domaine. La norme ERC-1155 s'est également imposée comme une référence dans l'univers des NFT.
La norme ERC721 précédente établissait une correspondance biunivoque entre l'identifiant du jeton et l'adresse. La norme ERC1155 présente une correspondance assez complexe, dans laquelle l'adresse, associée à l'identifiant du jeton, est mise en correspondance avec le solde de ce jeton.
Création d'un URI de métadonnées
We will create 3 NFT collections (rock, paper, and scissors) with a single NFT in each one. To upload our files to the decentralized storage IPFS, we can upload them through CLI or use this very easy-to-use tool NFT Storage.
Nous allons utiliser la deuxième option, NFT Storage. Connectez-vous à NFT Storage et téléchargez vos fichiers image pour « pierre, papier, ciseaux ». Une fois le téléchargement terminé, vous devriez voir quelque chose comme ceci :

Click on "Actions" and copy the IPFS URL of each image; we will need it for the metadata of each collection.

Nous allons créer trois fichiers de métadonnées au format JSON afin de stocker des informations sur nos collections de NFT.
- 1.json : Collection de pierres
- 2.json : Recueil d'articles
- 3.json : Collection « Ciseaux »
Notre fichier 1.json ressemblera à peu près à ceci :
{ //1.
"name": "Rocks",
"description": "This is a collection of Rock NFTs.",
"image": "https://ipfs.io/ipfs/bafkreifvhjdf6ve4jfv6qytqtux5nd4nwnelioeiqx5x2ez5yrgrzk7ypi",
}
- nom: Contient le nom du NFT.
- description: Contient la description du NFT.
- image: Has the link to the image we got earlier (IPFS URL).
- Si une collection contient plusieurs images, ce qui est généralement le cas, un paramètre supplémentaire « id » est ajouté afin de distinguer les jetons au sein de la collection.
Créez les fichiers JSON restants, 2.json et 3.json, correspondant respectivement aux collections « papier » et « ciseaux ».
To efficiently upload all the JSON files to IPFS, we will archive them in content-addressed format. https://car.ipfs.io/ helps archive files in IPFS compatible content-addressed archive (.car) format.
Head over to IPFS CAR and upload all three JSON files. Once uploaded, download the .car file and upload it to NFT Storage. All our JSON files are now stored on IPFS in an archived manner. Copy the IPFS URL of the uploaded .car file, and you should be able to access JSON files by just entering the file name at the end of the URL, for example:
https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/1.json

Création et déploiement du contrat ERC1155
We will use the OpenZeppelin contracts library to create our ERC1155 contract and deploy it using Ethereum REMIX IDE on the Ropsten testnet. Make sure you have some Ropsten test ETH which you can also get from Ropsten Faucet.
Créez un nouveau fichier, token.sol, dans REMIX, puis collez-y le code suivant.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
contract rockPaperScissors is ERC1155 {
uint256 public constant Rock = 1;
uint256 public constant Paper = 2;
uint256 public constant Scissors = 3;
constructor() ERC1155("https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/{id}.json") {
_mint(msg.sender, Rock, 1, "");
_mint(msg.sender, Paper, 1, "");
_mint(msg.sender, Scissors, 1, "");
}
}
Explication du code ci-dessus :
Ligne 1 : Spécification du type de licence SPDX, qui a été ajouté à partir de Solidity ^0.6.8. Chaque fois que le code source d'un contrat intelligent est rendu public, ces licences peuvent aider à résoudre ou à éviter les problèmes liés aux droits d'auteur. Si vous ne souhaitez pas spécifier de type de licence, vous pouvez utiliser la valeur spéciale UNLICENSED ou simplement ignorer l'intégralité du commentaire (cela ne provoquera pas d'erreur, mais simplement un avertissement).
Ligne 2 : Déclaration de la version de Solidity.
Ligne 4 : Importation du contrat ERC1155 d'OpenZeppelin.
Lignes 6 à 9 : Création de notre contrat nommé « rockPaperScissors » et définition de trois variables : Rock, Paper et Scissors; attribution ensuite d'un identifiant approprié à chacune d'entre elles.
Lignes 11 à 15 : initialisation du constructeur avec le lien vers notre fichier « car » en tant que paramètre, création de différentes collections de NFT à l'aide des paramètres suivants :
- Adresse sur laquelle les jetons seront créés ; « msg.sender » désigne ici la personne qui a déployé le contrat.
- Identifiant de jeton : nous avons déjà attribué des noms à ces identifiants de jeton, nous utilisons donc ces noms ici.
- Quantité de chaque jeton.
- Le dernier est le champ de données, qui est laissé vide ici.
Compilez le contrat, accédez au troisième onglet du menu de gauche, sélectionnez « Injected Web3 » comme environnement, puis déployez-le en choisissant le nom de contrat approprié :

Validez la transaction depuis MetaMask. Une fois la transaction effectuée, votre contrat sera déployé.
Vous pouvez désormais effectuer des opérations telles que la consultation du solde d'un jeton en saisissant son adresse et son identifiant. Il est également possible de récupérer l'URI du jeton en saisissant son identifiant.

OpenSea ne prend pas en charge le format d'URI renvoyé. Nous devrons donc redéfinir la fonction URI afin qu'elle renvoie le nom du fichier sous forme de chaîne de caractères :
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
contract rockPaperScissors is ERC1155 {
uint256 public constant Rock = 1;
uint256 public constant Paper = 2;
uint256 public constant Scissors = 3;
constructor() ERC1155("https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/{id}.json") {
_mint(msg.sender, Rock, 1, "");
_mint(msg.sender, Paper, 1, "");
_mint(msg.sender, Scissors, 1, "");
}
function uri(uint256 _tokenid) override public pure returns (string memory) {
return string(
abi.encodePacked(
"https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/",
Strings.toString(_tokenid),".json"
)
);
}
}
Ajouts :
Ligne 5 : Importation d'un contrat OpenZeppelin permettant de convertir un entier en chaîne de caractères.
Lignes 18 à 25 : redéfinition de la fonction URI en créant une fonction URI personnalisée, puis en convertissant le jeton « if » d'un entier en chaîne de caractères, avant de renvoyer l'URI complet.
Recompilez le contrat et déployez-le. Si vous interrogez désormais le contrat à l'aide de son URI, il renverra un format pris en charge par OpenSea.

Conclusion
Félicitations pour le déploiement de vos jetons ERC1155. Si vous êtes arrivé jusqu'ici, vous connaissez désormais la norme multi-jetons ERC1155 et savez comment créer et déployer des NFT ERC1155.
Subscribe to our newsletter for more articles and guides on Ethereum. If you have any feedback, feel free to reach out to us via Twitter. You can always chat with us on our Discord community server, featuring some of the coolest developers you'll ever meet :)
