WEB3DEV

Cover image for Crie NFTs usando o Solidity com o Open Zeppelin e publique-os no IPFS
Paulo Gio
Paulo Gio

Posted on • Atualizado em

Crie NFTs usando o Solidity com o Open Zeppelin e publique-os no IPFS

NFTs e colecionáveis digitais estão se tornando populares à medida que o espaço web3 continua a fazer avanços significativos na arena blockchain. A enorme popularidade de NFTs como Cryptokitties e Bored APE levou os investidores a comprar colecionáveis digitais compatíveis com ERC721.

Neste artigo, vamos guiá-lo através do procedimento de criação do seu primeiro contrato ERC-721 (NFT) no Solidity com OpenZeppelin.

Desenvolver um contrato inteligente com Solidity e implantá-lo na blockchain pode parecer assustador no início: solidez, segurança, otimização de gas, ambiente de desenvolvedor e taxas de gas são apenas algumas das coisas pelas quais você precisará passar para hospedar seu código na blockchain.

Ferramentas como o OpenZeppelin Wizard, que oferece aos desenvolvedores funcionalidades de clique e escrita para criar contratos inteligentes combináveis e seguros em pouco tempo, usados com ferramentas de desenvolvedor Web3 como Alchemy, tornam a experiência de escrever um código de implantação na blockchain fácil, rápido e confiável como nunca antes visto.

Neste tutorial, você aprenderá a desenvolver e implantar um contrato inteligente ERC721 (NFT).

Pacote de Tecnologias

  • Alchemy
  • OpenZeppelin
  • Remix
  • Ethereum Goerli

1. OpenZeppelin

Primeiramente, vamos ao OpenZeppelin, depois na guia Wizard, clique em ERC721. Todos os NFTs são tokens ERC721.

Openzeppelin ERC721, Fonte: própria

Queremos que nossos tokens sejam compatíveis com o Mintable, tenham Enumerable e URI Storage como recursos. Nomeie seu token conforme seu desejo e também insira o símbolo desejado.

Código para Mintable, Enumerable, URIStorage Fonte: própria

2. Remix IDE

Agora, clique no botão Open in Remix no canto superior direito. Ele abrirá o Remix IDE e terá o código escrito. Você pode alterar a versão do compilador para 0.8.4.

Aqui está o código atualizado. Certifique-se de alterá-lo no Remix. Precisamos remover a parte Ownable do Solidity, pois queremos que outras pessoas além de titulares de Ownable também possam cunhar seus NFTs. Além disso, adicionamos MAX_SUPPLY como 5000 para que os NFTs sejam limitados.

// Identificador-de-licença-SPDX: MIT
pragma solidity ^0.8.4;

import "@openzeppelin/[email protected]/token/ERC721/ERC721.sol";
import "@openzeppelin/[email protected]/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/[email protected]/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/[email protected]/utils/Counters.sol";

contract NAMZZ is ERC721, ERC721Enumerable, ERC721URIStorage{
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;
    uint256 MAX_SUPPLY = 5000;

    constructor() ERC721("NAMZZ", "NMZ") {}

    function safeMint(address to, string memory uri) public{
        uint256 tokenId = _tokenIdCounter.current();
        require(tokenId <= MAX_SUPPLY, "Sorry, all NFTs have been minted!");
        _tokenIdCounter.increment();
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, uri);
    }

    // As funções a seguir são substituições exigidas pelo Solidity.

    function _beforeTokenTransfer(address from, address to, uint256 tokenId)
        internal
        override(ERC721, ERC721Enumerable)
    {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
}
Enter fullscreen mode Exit fullscreen mode

3. Alchemy - Criar aplicativo

Em seguida, precisamos nos inscrever no Alchemy. Clique em Create app e nomeie seu aplicativo como quiser. Eu o chamei de Namzz nft. Em seguida, clique em View Key e copie o endereço HTTPS.

Alchemy após a criação do app, Fonte: própria

4. Metamask- Adicionar rede

Além disso, precisamos criar nossa rede no Metamask clicando em Add Network. Nomeie a rede de testes conforme desejado. Eu a chamei de rede de teste Namzz Goerli. Cole a URL https que copiamos do Alchemy. Adicione ID como 5 para Goerli e insira ETH como símbolo. Clique no botão Add Network.

Rede criada, Fonte: própria

Você pode obter um pouco de Ethereum de teste no faucet Goerli. Aqui está o link. Faça login com sua conta Alchemy e digite seu endereço. Você obterá o ether de teste em segundos!

5. Compilar e implantar o contrato inteligente do NFT na Goerli Testnet

No Remix, vá para Deploy e selecione Injected Web3 como o Ambiente. Ele será conectado à sua rede automaticamente. Você obterá o endereço da sua Metamask junto com o saldo de ether. Selecione seu contrato inteligente na guia Contract e clique em Deploy.

Aparecerá um pop-up da Metamask solicitando que você pague as taxas. Clique em Confirm e aguarde 10 segundos. Ele adicionará o contrato implantado no Remix!

Contrato implantado na Metamask, Fonte: própria

6. Formatando os metadados do NFT

Para que o OpenSea extraia metadados fora da cadeia para tokens ERC721, o contrato precisará retornar um URI (Identificador de Recurso Uniforme - Uniform Resource Identifier) apontando para os metadados hospedados. Para encontrar esse URI, OpenSea, Rarible e outros marketplaces populares usarão o método tokenURI contido no padrão ERC721Uristorage.

Vá até a documentação do desenvolvedor OpenSea e copie a estrutura de metadados. Cole-a no editor online json e edite a descrição de acordo com o seu desejo. De acordo com a documentação do OpenSea, os metadados NFT devem ser armazenados em um arquivo .json e estruturados da seguinte forma:

{
  "description": "Este NFT prova que implantei um NFT no Ethereum Goerli", 
  "external_url": "https://alchemy.com", 
  "image": "", 
  "name": "Namzz",
  "attributes": [
    {
      "trait_type": "Colour", 
      "value": "Mixed"
    }, 
    {
      "trait_type": "Coolness", 
      "value": "A lot!"
    }, 
    {
      "trait_type": "Token Standard", 
      "value": "ERC721"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

7. Criando e carregando os metadados no IPFS

Agora que temos uma breve compreensão do que estará contido nos metadados do seu NFT, vamos aprender como criá-lo e armazená-lo no IPFS (Inter Planetary File System).

Vá para o Filebase e faça uma conta lá. Verifique seu e-mail e faça o login. Agora, precisamos clicar em create bucket, com o nome do bucket em letras minúsculas, chamei-o de namzz-nft. Selecione IPFS e crie. Agora carregue a imagem que você deseja implantar como o nft. Clique na imagem e copie a URL do Gateway IPFS. Insira este link na seção de imagem do arquivo JSON.

Salve o arquivo JSON com o nome de metadata.json e carregue-o no Bucket do FileBase.

Salve o arquivo JSON como metadata.json, Fonte: própria

Clique no seu arquivo e copie o identificador de conteúdo do IPFS (IPFS CID).

8. Cunhe o seu NFT na Goerli Testnet

Agora vá para o Remix. Os métodos Laranja (Orange methods) são métodos que realmente escrevem na blockchain, enquanto os métodos Azuis (Blue methods) são métodos que aprendem com a blockchain.

Clique no ícone suspenso do método safeMint e cole seu endereço e a seguinte string no campo URI:

ipfs://<your_metadata_cid>
Enter fullscreen mode Exit fullscreen mode

Clicar em transact criará um pop-up da Metamask solicitando que você pague as taxas de gas. Clique em “sign” e continue cunhando seu primeiro NFT!

Transact via Metamask

Digite seu endereço no botão balanceOf e novamente digite o seu endereço. Execute-o - ele deve mostrar que você tem 1 NFT.

1 NFT disponível

Faça o mesmo com o método tokenURI, inserindo “0” como o argumento de id (identidade) - seu tokenURI deverá ser exibido.

Excelente! Você acabou de cunhar seu primeiro NFT! 🎉 Agora é hora de migrar para o OpenSea para verificar se os metadados foram lidos.

9. Veja o NFT no OpenSea

Navegue até testnets.opensea.io e faça login com sua carteira Metamask. Em seguida, clique na sua foto do perfil, você deve ver seu NFT recém-criado por lá. Se a imagem ainda não estiver visível, clique nela e clique no botão “refresh metadata”.

Às vezes, o OpenSea tem dificuldade em reconhecer os metadados da rede de teste - e pode levar até 6 horas para atualizar.

Parabéns, você criou, modificou e implantou com sucesso seu primeiro contrato inteligente. Criou seu primeiro NFT e publicou sua imagem no IPFS!

Obrigado por ler.

Artigo publicado por Namya Aankur Gupta em 16 de junho de 2022, traduzido por Paulinho Giovannini. Você pode encontrar a publicação original aqui.

Top comments (0)