WEB3DEV

Cover image for Cunhar Centenas de NFTs em apenas 5 MINUTOS usando o ERC1155 😊😊
Fatima Lima
Fatima Lima

Posted on

Cunhar Centenas de NFTs em apenas 5 MINUTOS usando o ERC1155 😊😊

Image description

Em um de nossos artigos anteriores, cunhamos nosso próprio NFT usando o contrato ERC721, que REALMENTE foi uma experiência fantástica para nós! O link desse artigo está: 👉 aqui

Agora! Nosso desafio será fazer isso de forma mais divertida e rápida!

Neste artigo, utilizaremos o padrão ERC-1155 para cunhar nosso NFT.

Não somente isto, mas também tentaremos cunhar nossos NFTs em menos de 5 minutos.

Você pode estar se perguntando, por que usar o ERC-1155 para cunhar nossas NFTs em vez do padrão ERC-721, certo?

Há algumas diferenças fundamentais que devem responder a esta questão:

  • Um contrato inteligente para todos: O padrão ERC-721 produz exclusivamente NFTs e força os desenvolvedores a criarem um contrato inteligente para cada novo token. Por outro lado, o ERC-1155 permite que os desenvolvedores desenvolvam um único contrato inteligente que pode ser usado para cunhar tokens fungíveis ou NFTs. Sim, isto significa, vários de cada um destes tokens sob um contrato. Ele tem a capacidade de suportar múltiplos estados no mesmo endereço e contrato. Em palavras mais simples, isto significa que você pode fazer pagamentos no jogo usando um token fungível nesse endereço e, simultaneamente, transferir ativos NFT únicos também.
  • Eficiência: o ERC-721 permite uma única operação para cada transação. É cara e demorada. Já o ERC-1155 permite múltiplas operações em uma única transação. Portanto, as transações são mais baratas e mais eficientes.

Ao contrário do ERC-721, que utiliza um espaço significativo, o ERC-1155 utiliza menos espaço de armazenamento em uma rede blockchain. Isto ocorre porque o ERC-1155 tem os recursos:

  • Batch Transfer: Transfere vários ativos em uma única chamada.
  • Batch Approval: Aprova todos os tokens para um endereço

Isto resulta em um menor consumo de espaço na rede blockchain.

Agora que já vimos alguns dos benefícios do ERC-1155, vamos começar 🏃🏻

Ferramentas que iremos utilizar🛠️

  1. IDE (Ambiente de Desenvolvimento Integrado) Remix: É uma poderosa ferramenta de código aberto que ajuda você a escrever contratos em Solidity diretamente do navegador e acelera todo o processo de desenvolvimento. Embora, em nossa opinião, isso não deva ser de forma alguma sua estratégia go-to para trabalhar em projetos.
  2. IPFS: O IPFS (Sistema de Arquivos Interplanetário) é um sistema distribuído para armazenar e acessar arquivos, websites, aplicativos e dados. Usaremos o cliente Pinata para interagir com o IPFS. O Pinata dá aos usuários a capacidade de carregar, gerenciar e compartilhar seu conteúdo quando, onde e com quem eles quiserem.
  3. MetaMask: A MetaMask é uma carteira do Chrome que nos permite interagir com a blockchain. Vamos precisar dos detalhes de nossa carteira da Metamask. Você tem muitas outras opções, mas estamos apenas nos limitando a isto para facilitar.

Por favor, note que você terá que conectar sua Metamask à rede Testnet Mumbai Matic para este tutorial. Leia 👉 isto para que você se conecte à Testnet Mumbai Matic. Uma vez que isso seja feito, você deve buscar os tokens de teste; para isto veja 👉 aqui

🏋️Agora vamos à parte divertida 🏋️‍♀️

1. Escreva nosso contrato inteligente

A fim de escrever nosso contrato inteligente, vamos usar o IDE Remix para cunhar nossos NFTs mais rápido do que nunca! 🚅

Portanto, se você é novo no IDE Remix, recomendamos fortemente que você passe por este vídeo.

Antes de mais nada, vamos criar um arquivo em Solidity onde estaremos definindo nosso contrato e cunharemos alguns NFTs das personagens do Game of Thrones. 😮

Portanto, vamos nomear nosso arquivo como GameofThrones.sol

Em segundo lugar, importaremos o contrato ERC-1155 da Openzeppelin para usar suas funções em nosso contrato.

Terceiro, definiremos nosso contrato inteligente para cunhar nosso NFT que também herda do contrato ERC1155 da Openzeppelin.

Seu código deve se parecer com este 👇

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "<https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol>";
contract GameofThrones is ERC1155 { }
Enter fullscreen mode Exit fullscreen mode

Então, vamos especificar alguns nomes e IDs para os NFTs, que poderíamos usar mais adiante para testar referências.

Por exemplo, aqui atribuímos os IDs às várias variáveis com nomes de caracteres.

Com isto, poderíamos dizer que o NFT com o ID 1 é JonSnow e assim por diante.

uint256 public constant JonSnow = 1;
uint256 public constant CerseiLannister = 2;
uint256 public constant DaenerysTargaryen = 3;
uint256 public constant NightKing = 4;
uint256 public constant TyrionLannister = 5;
uint256 public constant AryaStark = 6;
Enter fullscreen mode Exit fullscreen mode

Agora, vamos definir o construtor onde vamos usar a função _mint do contrato ERC1155 a fim de cunhar nosso NFT.

Dentro da função _mint, vamos definir alguns valores:

  • O endereço do remetente
  • Os tokens que nós vamos cunhar
  • A quantidade de tokens que nós queremos cunhar
  • E os dados do token

E há uma coisa interessante, nós já carregamos nossos metadados do NFT para o IPFS para economizar nosso tempo.

O IPFS é um sistema de armazenamento descentralizado. E aqui usamos o IPFS Pinata que dá aos usuários a capacidade de armazenar seus dados.

Esta é a pasta que está armazenando os Metadados que vamos usar para nossos NFTs. Portanto, aqui temos 6 Metadados diferentes para os respectivos NFTs.

Se você é novo no Pinata, recomendamos que você passe por nosso artigo anterior sobre NFT, onde abordamos como carregar os metadados de seu NFT no IPFS Pinata.

Seu construtor deve ser semelhante a este 👇

constructor() ERC1155("<https://gateway.pinata.cloud/ipfs/QmXLdCoTPVZ8Vf5PrEZR1awPKR8PvxmyEakaR5ummPCPnh/{id}.json>") {
       _mint(msg.sender, JonSnow, 100, "");
       _mint(msg.sender, CerseiLannister, 100, "");
       _mint(msg.sender, DaenerysTargaryen, 100, "");
       _mint(msg.sender, NightKing, 1, "");
       _mint(msg.sender, TyrionLannister, 100, "");
       _mint(msg.sender, AryaStark, 100, "");
}
Enter fullscreen mode Exit fullscreen mode

Note que para as personagens do Game of Thrones, todos as personagens são tokens fungíveis a não ser o token NightKing, que é um token não fungível, pois cunhamos apenas um deles.

O contrato ERC1155 inclui a extensão opcional IERC1155MetaDataURI. É daí que vem a função URI: vamos usá-la para recuperar os metadados do URI.

Assim, se substituirmos o id pelo token ID 1 dentro do MetadataURI que fornecemos, poderemos obter os metadados do primeiro NFT.

O resultado seria semelhante a este 👇

Image description

Mas o OpenSea não entende como codificamos a identificação dentro do MetadataURI.

Portanto, temos que sobrescrever a função URI para que ela funcione um pouco diferente. E para fazer isso, vamos precisar de algumas funções auxiliares para trabalhar com as strings.

Portanto, vamos importar o contrato Strings do contrato da Openzeppelin.

import "<https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol>";
Enter fullscreen mode Exit fullscreen mode

E então adicione o seguinte código dentro de seu contrato:

function uri(uint256 _tokenId) override public view returns (string memory) {
       return string(
           abi.encodePacked(
               "<https://gateway.pinata.cloud/ipfs/QmXLdCoTPVZ8Vf5PrEZR1awPKR8PvxmyEakaR5ummPCPnh/>",
               Strings.toString(_tokenId),
               ".json"
           )
       );
}
Enter fullscreen mode Exit fullscreen mode

Portanto, aqui, estamos escrevendo nossa própria implementação da função URI e queremos pegar a identificação do token e então queremos concatenar o URL de base e a identificação do token requerida (que é um inteiro) na string.

Ao fazer isso, teremos nosso contrato ERC-1155 pronto para ser implantado!! 😃

Seu contrato inteligente deve se parecer com isto👇

Image description

Para sua comodidade, você pode usar este ➡️ link 🔗 para carregar este contrato diretamente no remix em seu navegador.

Portanto, agora é a hora de implantar nosso contrato e visualizar nossos NFTs no Opensea. 🤯

2. Implante o Contrato Inteligente na Testnet Mumbai Matic

O Opensea suporta várias redes como Rinkeby, Mumbai Matic, etc. Assim, vamos utilizar a rede de testes Mumbai Matic para cunhar nossos NFTs.

Vamos seguir alguns passos para implantar nosso contrato:

  • Para implantar o contrato, vamos usar a carteira Metamask na rede de teste Mumbai Matic, para que, uma vez implantado o contrato, o Opensea possa pegá-lo facilmente.
  • Mude para a rede de teste Mumbai Matic em sua carteira Metamask e certifique-se de ter algum Matic de teste para realizar a transação. Se você não tiver o Matic de teste, entre 👉 aqui

Image description

  • Em seguida, atualize o ambiente do IDE Remix para Injected Web3, que você pode encontrar na seção Deploy & Run Transactions.
  • Uma vez feito, você pode ver que o endereço da conta mostrado no IDE Remix é similar ao de sua conta Metamask.

Image description

Depois

  • Escolha o contrato que você deseja implantar. Em nosso caso, temos o GameofThrones.sol
  • Agora, uma vez pressionado o botão Deploy, você pode ver um pop-up da Metamask que nos pede para confirmar nossa transação.

Aperte o botão confirmar para cunhar nosso NFT no Opensea.

E aí você vaiiiii!! 🎺🎺🎺

Você já cunhou seus próprios NFTs. 😲😲😲

Sem perda de tempo, usaremos este link para ver nosso NFT cunhado no Opensea

[&lt;https://testnets.opensea.io/>&lt;your-account-address>?tab=created]

Você pode ver o meu aqui

Mostre seus NFTs para seus amigos e não se esqueça de nos marcar no Twitter em @uv_labs

Certamente iremos retweetar seu NFT 🥳

E não se preocupe, se você receber alguma mensagem de erro, você pode nos perguntar também, nos marcando no Twitter.

Dê-nos uma estrela, aplauda se você gostou do nosso trabalho.

Autores (aberto a comentários) : 👇

Amateur-Dev e Pari Tomar

Este artigo foi traduzido por Fátima Lima e seu original pode ser lido aqui.

Top comments (0)