Passer au contenu principal

Comment créer et déployer un NFT ERC-1155

Mis à jour le
26 novembre 2025

6 min de lecture

Avis important

Ce guide contient des références au testnet Ropsten, qui n'est plus activement maintenu. Même si certaines étapes spécifiques liées à cette chaîne peuvent ne plus être applicables, le processus global peut s'appliquer à d'autres chaînes. Nous vous recommandons d'étudier les alternatives actuelles pour votre mise en œuvre. Si vous souhaitez consulter une version mise à jour de ce guide, n'hésitez pas à nous le faire savoir!

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 :

  1. Créer 3 collections de NFT
  2. Créer et déployer un contrat ERC-1155
  3. Mettre à jour le contrat pour qu'il soit compatible avec OpenSea
  4. 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

Nous allons créer trois collections de NFT (pierre, papier et ciseaux), chacune contenant un seul NFT. Pour mettre nos fichiers en ligne sur le système de stockage décentralisé IPFS, nous pouvons les télécharger via l'interface en ligne de commande (CLI) ou utiliser cet outil très simple d'utilisation, 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 :

Interface utilisateur de stockage NFT affichant le tableau des fichiers téléchargés.

Cliquez sur « Actions » et copiez l'URL IPFS de chaque image ; nous en aurons besoin pour les métadonnées de chaque collection.

Exemple d'option permettant de copier une URL IPFS depuis l'interface utilisateur de NFT Storage.

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: contient le lien vers l'image que nous avons obtenue précédemment (URL IPFS). 
  • 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 ».

Pour transférer efficacement tous les fichiers JSON vers IPFS, nous allons les archiver au format d'archivage par contenu. L'outil « https://car.ipfs.io/ » permet d'archiver des fichiers au format d'archivage par contenu (.car) compatible avec IPFS.

Rendez-vous sur IPFS CAR et téléchargez les trois fichiers JSON. Une fois le téléchargement terminé, téléchargez le fichier .car et transférez-le vers NFT Storage. Tous nos fichiers JSON sont désormais stockés sur IPFS sous forme d'archives. Copiez l'URL IPFS du fichier .car téléchargé ; vous devriez alors pouvoir accéder aux fichiers JSON en saisissant simplement le nom du fichier à la fin de l'URL, par exemple :

https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/1.json

Le code JSON de la collection Rock affiché sur une page web.

Création et déploiement du contrat ERC1155

Nous allons utiliser la bibliothèque de contrats OpenZeppelin pour créer notre contrat ERC1155 et le déployer à l'aide de l'IDE Ethereum REMIX sur le testnet Ropsten. Assurez-vous de disposer d'un peu d'ETH de test Ropsten, que vous pouvez également obtenir via 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é :

Fenêtre REMIX avec les options de déploiement.

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.

Fenêtre REMIX avec le contrat déployé.

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.

Fenêtre REMIX avec sortie sous forme d'URI compatible avec 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.

Abonnez-vous à notre newsletter pour découvrir d'autres articles et guides sur Ethereum. Si vous avez des commentaires, n'hésitez pas à nous contacter sur Twitter. Vous pouvez également discuter avec nous sur notre serveur Discord, où vous rencontrerez certains des développeurs les plus géniaux qui soient :)

Partager ce guide