SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
24.11.2024

Aula 120: Criando NFTs

Nesta aula, vamos explorar os fundamentos da criação de Tokens Não Fungíveis (NFTs) usando Solidity. Os NFTs são ativos digitais únicos que representam a propriedade ou a prova de autenticidade de um item ou peça de conteúdo específica, frequentemente utilizados em arte digital, colecionáveis e jogos.

O que é um NFT?

Um NFT (Token Não Fungível) é um tipo de token digital que é único e não pode ser trocado na mesma proporção com outro NFT. Ao contrário das criptomoedas, que são fungíveis e podem ser trocadas entre si, os NFTs possuem atributos únicos que os diferenciam uns dos outros.

Padrão ERC721

O padrão mais comum para NFTs na blockchain Ethereum é o padrão ERC721. Este padrão define a funcionalidade básica dos NFTs e especifica como eles podem ser criados, transferidos e interagidos.

Configurando seu Ambiente

Antes de começarmos a codificar, verifique se você tem as seguintes ferramentas instaladas:

  • Node.js
  • npm (Node Package Manager)
  • Truffle ou Hardhat (para desenvolvimento de contratos inteligentes)
  • Ganache (para testes em blockchain local)
  • MetaMask (para interagir com seus contratos implantados)

Para inicializar um novo projeto Truffle, execute:

mkdir MeuNFT
cd MeuNFT
truffle init

Criando o Contrato Inteligente

Vamos criar um simples contrato inteligente de NFT usando o padrão ERC721. Crie um novo arquivo chamado MeuNFT.sol no diretório contracts.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract MeuNFT is ERC721 {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdCounter;

    constructor() ERC721("MeuNFT", "MNFT") {}

    function mintNFT(address destinatario) public {
        uint256 novoItemId = _tokenIdCounter.current();
        _mint(destinatario, novoItemId);
        _tokenIdCounter.increment();
    }
}

Explicação do Código

  1. Importando Contratos OpenZeppelin: A biblioteca OpenZeppelin fornece implementações seguras de tokens ERC721 e é amplamente utilizada na comunidade Ethereum.
  2. Contadores: Usamos um Counters.Counter para controlar os IDs dos tokens e garantir que cada NFT tenha um identificador único.
  3. Construtor: O construtor inicializa o NFT com um nome ("MeuNFT") e um símbolo ("MNFT").
  4. Criação de NFTs: A função mintNFT permite que os usuários criem novos NFTs. Cada vez que um novo NFT é criado, o ID do token é incrementado, garantindo a unicidade.

Implantando o Contrato Inteligente

Agora, vamos configurar o script de implantação. Crie um novo arquivo chamado 2_deploy_contracts.js no diretório migrations.

const MeuNFT = artifacts.require("MeuNFT");

module.exports = function (deployer) {
    deployer.deploy(MeuNFT);
};

Executando a Migração

Para implantar seu contrato em uma blockchain local, verifique se o Ganache está em execução e execute:

truffle migrate

Isso irá compilar seus contratos e implantá-los na rede Ethereum que está sendo executada no Ganache.

Interagindo com o Contrato Inteligente

Agora que seu contrato NFT está implantado, você pode interagir com ele usando um script JavaScript ou através do console do Truffle. Vamos criar um script para mintar um novo NFT.

Crie um novo arquivo chamado mintNFT.js na raiz do seu projeto:

const MeuNFT = artifacts.require("MeuNFT");

async function mint() {
    const myNFTInstance = await MeuNFT.deployed();
    const contas = await web3.eth.getAccounts();
    console.log("Mintando NFT...");
    await myNFTInstance.mintNFT(contas[0]);
    console.log(`NFT mintado para o endereço: ${contas[0]}`);
}

mint();

Executando o Script de Mintagem

Execute o seguinte comando para executar o script de mintagem:

truffle exec mintNFT.js

Visualizando Seus NFTs

Para visualizar seus NFTs, você precisa usar a interface ERC721 para recuperar os IDs dos tokens pertencentes a um endereço específico. Amplie seu contrato com uma função que permita buscar os detalhes do NFT:

function getTokenURI(uint256 tokenId) public view returns (string memory) {
    return string(abi.encodePacked("https://api.exemplo.com/metadata/", tokenId));
}

Você pode criar uma aplicação frontend usando frameworks como React, Angular ou Vue.js para exibir os NFTs, buscando os detalhes do token através da URI fornecida.

Conclusão

Nesta aula, cobrimos o básico da criação de NFTs usando Solidity e o padrão ERC721. Implementamos uma função simples de mintagem que permite que os usuários criem tokens únicos e implantamos nosso contrato em uma blockchain local. A partir daqui, você pode aprimorar seu contrato NFT com funcionalidades adicionais, como metadados, royalties e muito mais.

Feliz codificação!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!