Ir diretamente para o conteúdo principal

Como criar e lançar um ERC-721 (NFT)

Atualizado em
26 de novembro de 2025

8 minutos de leitura

Introdução

Os colecionáveis digitais compatíveis com o padrão ERC-721 tornaram-se muito populares desde o lançamento do Cryptokitties e têm vindo a ganhar uma aceitação generalizada nos últimos meses. Este guia abordará o processo de criação e lançamento do nosso próprio ERC-721 (NFT) utilizando a biblioteca de contratos inteligentes 0xcert/ethereum-erc721

O que é um token não fungível?

«Fungível» significa que é o mesmo ou que é intercambiável. Por exemplo, no caso dos tokens da Ethereum, todos os tokens da mesma classe têm o mesmo valor. O mesmo se pode dizer dos tokens da Cardano. Os tokens fungíveis são intercambiáveis na proporção de 1:1.

Tendo isto em conta, os NFT são únicos, cada um é diferente e possui características únicas. Entre os itens que podem ser NFTs encontram-se cartas colecionáveis, obras de arte, bilhetes de avião, etc. Todos são claramente distinguíveis uns dos outros e não são intercambiáveis entre si. Pense nos tokens não fungíveis (NFTs) como itens colecionáveis muito raros, cada um com as suas características únicas, atributos invulgares e, na maioria dos casos, os seus próprios metadados.

O que é o ERC-721?

ERC é a abreviatura de «Ethereum Request for Comment» e 721 é o número de identificação da proposta. Os ERCs são normas ao nível da aplicação para o ecossistema Ethereum; podem ser normas para contratos inteligentes, como o ERC-20.

O autor de um ERC é responsável por chegar a um consenso com a comunidade Ethereum; depois de revista e aprovada pela comunidade, a proposta torna-se uma norma. Podes acompanhar todas as propostas recentes de ERC aqui.

O ERC-721 foi criado para proporcionar a funcionalidade de acompanhamento e transferência de NFTs nos contratos inteligentes.

O ERC-721 é um padrão aberto que descreve como criar tokens não fungíveis (NFTs) em blockchains compatíveis com a EVM (Máquina Virtual Ethereum). Possui um conjunto de regras que facilitam o trabalho com os NFTs. Os NFTs não se limitam ao padrão ERC-721; também podem ser tokens ERC-1155.

A seguir, apresentam-se as funções e eventos definidos na norma ERC-721:

A norma ERC-721 define algumas funções em conformidade com a norma ERC-20. Isto facilita muito a visualização das informações dos tokens em algumas carteiras já existentes.

Funcionalidades ERC-20

  • nome: Serve para determinar o nome com o qual outros contratos ou aplicações o podem identificar.
  • símbolo: Utilizado para determinar o símbolo ou o nome abreviado.
  • totalSupply: Esta função é utilizada para definir o total de tokens existentes na blockchain; não tem de ser necessariamente constante.
  • balanceOf: Devolve o número de NFTs que uma morada possui.

Funções relacionadas com a propriedade do token

  • ownerOf: Esta função devolve o endereço do proprietário de um token. Como cada token ERC-721 é único e não fungível, estes são representados na blockchain por um ID. Outros utilizadores, contratos ou aplicações podem utilizar este ID para determinar quem é o proprietário de um token.
  • aprovar: Esta função serve para aprovar a transferência do token.
  • takeOwnership: É uma função opcional que permite retirar tokens de um utilizador, desde que já tenha sido previamente aprovado que esta morada os possa retirar.
  • transferência: função que permite ao proprietário de um token transferir os seus tokens para outra morada, tal como se fosse qualquer outro token ou moeda.
  • tokenOfOwnerByIndex: Esta é uma função opcional, mas cuja implementação é bastante recomendada. Cada proprietário de um token pode possuir quantos outros tokens do mesmo NFT quiser ao mesmo tempo. O ID único de cada NFT ajuda a identificá-los, mas, eventualmente, torna-se muito difícil acompanhar esses IDs. Assim, o contrato mantém um registo dos IDs associados ao seu proprietário e esta função permite-nos obter as informações necessárias para esse acompanhamento.

Função de metadados

  • tokenMetadata: Esta característica opcional é uma interface que nos permite obter informações sobre o token.

Eventos

  • Transferência: Este evento é acionado quando o proprietário de um token muda. Fornece informações sobre a morada de onde o token foi transferido, a morada que o recebeu e o ID do token que foi transferido.
  • Aprovar: Este evento é acionado quando um utilizador autoriza outro utilizador a dispor do token, por exemplo, quando a função «approve» é executada. Fornece informações sobre qual a morada que detém atualmente o token, qual a morada que foi autorizada a dispor do token no futuro e qual o ID do token que foi autorizado a ser transferido para a sua posse.

Casos de utilização dos tokens não fungíveis (NFTs):

  • Arte digital (ou arte física): Este é o caso de utilização mais popular dos NFTs. Os leilões de arte digital foram uma das primeiras aplicações dos NFTs e continuam a crescer
  • Jogos: Para disponibilizar compras no jogo e itens colecionáveis.
  • Imobiliário: Possibilidade de tokenizar imóveis e criar contratos inteligentes para permitir a compra e venda.
  • Finanças: Instrumentos financeiros, como empréstimos, futuros e outras responsabilidades.
  • Software: Licenças de software para garantir a luta contra a pirataria e a privacidade.
  • Bilhetes para concertos ou eventos desportivos: Para evitar fraudes na venda de bilhetes e para que os fãs tenham um único local onde possam consultar as suas experiências passadas.

A realizar o teste ETH

Agora que já sabemos o que é e como funciona um token ERC-721, vamos ver como podemos criar e lançar o nosso próprio token.

Vamos lançar o nosso contrato na blockchain de teste Ropsten. Para começar, precisas de ter a extensão do navegador Metamask instalada para poderes criar uma carteira ETH e obter um pouco de ETH de teste através do faucet Ropsten. Seleciona «Ropsten Test Network» na tua carteira Metamask e copia o endereço da carteira no campo de texto do faucet; em seguida, clica em «Send me test Ether».

Adicionar ficheiros ao IPFS

Antes de redigirmos o nosso contrato NFT, precisamos de guardar a arte associada ao NFT e criar um ficheiro de metadados. Para tal, utilizaremos o IPFS, um sistema distribuído de partilha de ficheiros. Descarrega e instala o IPFS CLI no teu sistema operativo, seguindo o guia de instalação do IPFS abaixo.

A seguir, apresentam-se os passos para guardar a imagem e o ficheiro de metadados

Passo 1: Criar o repositório IPFS. Inicie o repositório IPFS introduzindo os seguintes comandos no terminal

ipfs init

Passo 2: Iniciar o monitor do IPFS

Abrir um novo terminal e introduzir o seguinte comando

daemon IPFS

Passo 3: Adicionar a imagem ao IPFS

No primeiro terminal, insira a imagem (art.png, neste caso)

ipfs adicionar art.png

Copie o hash que começa por Qm e adicione https://ipfs.io/ipfs/ no início; deve ficar semelhante ao seguinte: https://ipfs.io/ipfs/QmQEVVLJUR1WLN15S49rzDJsSP7za9DxeqpUzWuG4aondg

Passo 4: Adicionar um ficheiro JSON ao IPFS

Cria um ficheiro JSON chamado nft.json e guarda-o no mesmo diretório da imagem.

O ficheiro JSON:

{
"name": "NFT Art",
"description": "This image shows the true nature of NFT.",
"image": "https://ipfs.io/ipfs/QmZzBdKF7sQX1Q49CQGmreuZHxt9sVB3hTc3TTXYcVZ7jC",
}

Agora, adiciona o ficheiro JSON ao IPFS

ipfs adicionar nft.json

Copie o hash que começa por Qm e adicione https://ipfs.io/ipfs/ no início; deve ficar semelhante ao seguinte: https://ipfs.io/ipfs/QmUFbUjAifv9GwJo7ufTB5sccnrNqELhDMafoEmZdPPng7

Guarda este URL, vamos precisar dele para lançar o nosso NFT.

A criar o nosso token

Por uma questão de facilidade e segurança, vamos utilizar o 0xcert/ethereum-erc721 para criar o nosso contrato NFT. Com o 0xcert/ethereum-erc721, não vamos escrever toda a interface ERC-721; em vez disso, podemos importá-la e utilizar as suas funções.

Aceda ao Ethereum Remix IDE e crie um novo ficheiro Solidity, por exemplo, «nft.sol»

Copia o código seguinte para o teu novo ficheiro Solidity:

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

import "https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/nf-token-metadata.sol";
import "https://github.com/0xcert/ethereum-erc721/src/contracts/ownership/ownable.sol";

contract newNFT is NFTokenMetadata, Ownable {

constructor() {
nftName = "Synth NFT";
nftSymbol = "SYN";
}

function mint(address _to, uint256 _tokenId, string calldata _uri) external onlyOwner {
super._mint(_to, _tokenId);
super._setTokenUri(_tokenId, _uri);
}

}

Explicação do código acima:

Linha 1: A especificação do tipo de licença SPDX, uma adição necessária a partir do Solidity ^0.6.8. Sempre que o código de um contrato inteligente for disponibilizado ao público, estas licenças podem ajudar a resolver e a evitar problemas relacionados com os direitos de autor. Se não pretender especificar qualquer tipo de licença, pode utilizar o valor «Unlicensed» ou simplesmente não incluir o comentário (isto não resultará num erro, mas apenas num aviso).

Linha 2: Indica a versão do Solidity do contrato inteligente.

Linhas 4-5: Importar o contrato 0xcert/ethereum-erc721

Linha 7: O contrato começa com o nome «newNFT» e este contrato herda de outros contratos chamados «NFTokenMetadata» e «Ownable».

Linhas 9-12: Inicializar o construtor e definir o nome e o símbolo do nosso token.

Linha 14: Declaramos a função `mint` com três argumentos: a variável `_to`, do tipo `address`, que irá armazenar o endereço que receberá o token NFT; a variável `_tokenId`, do tipo `uint256`, que irá armazenar o ID do token; e a variável `_uri`, que irá armazenar a URI do ficheiro JSON. O facto de esta função `mint` ser declarada como `external` significa que pode ser acedida a partir de outros contratos inteligentes e fora do âmbito do próprio contrato.

Linha 15: Insira o token utilizando o endereço que o vai receber e o ID do token.

Linha 16: Definir o URI utilizando o token id e o URI do ficheiro JSON.

Compila-se o contrato inteligente e efetua-se a implementação utilizando o Web3 injetado (certifique-se de que a rede de teste Ropsten está selecionada no Metamask antes de compilar o contrato).

Aprovar a transação no Metamask.

Se receber uma mensagem de erro antes da implementação («Este contrato pode ser abstrato»), certifique-se de que está a selecionar o contrato correto na opção «Contratos»

Agora vai à secção «Deployed Contracts» no Remix e expande o contrato que acabou de ser implementado. Vais ver imensas funções/métodos. Expande a função «mint» e adiciona os seguintes detalhes:

  1. Adiciona o teu endereço Ropsten ao campo _to
  2. Insira um número no campo _tokenid (sugerimos o 1, porque é o primeiro)
  3. Adicione o URI do ficheiro JSON no campo _uri; obtivemo-lo na secção anterior.

Clica em «Transact» e confirma a transação no Metamask. Agora já tens o token na rede Ropsten.

Podes verificar outros detalhes, como o nome, o símbolo, o proprietário e o tokenuri, introduzindo o tokenid que mencionámos anteriormente.

Conclusão

Parabéns por criares o teu próprio NFT! Ajuda um amigo artista, colocando o seu trabalho artístico na rede Ethereum, ou torna-te tu próprio um artista. Podes consultar o GitHub do 0xcert/ethereum-erc721 para veres mais exemplos.

Subscreve a nossa newsletter para receberes mais artigos e guias sobre o Ethereum. Se tiveres algum comentário, não hesites em partilhá-lo no nosso Twitter. Podes sempre falar connosco no nosso servidor do Discord, onde vais encontrar alguns dos melhores programadores :)

Partilhe este guia