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);
}
}
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"
}
]
}
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>
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.
Oldest comments (0)