Lição 274: Padrões de NFT Além do ERC721
Os tokens não fungíveis (NFTs) revolucionaram o mundo digital, oferecendo propriedade única sobre ativos digitais. Embora o ERC721 seja o padrão de NFT mais amplamente reconhecido no Ethereum, existem vários outros padrões e variações desenvolvidas para atender a necessidades específicas. Esta lição explora alguns desses padrões, acompanhados de exemplos e casos de uso.
Entendendo o ERC721
Antes de mergulhar em alternativas, é essencial entender o que é o ERC721. Este padrão define como criar e gerenciar NFTs, garantindo que cada token seja único e não intercambiável.
Exemplo Básico de ERC721
Aqui está um exemplo simples de um contrato ERC721:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
contract MeuNFT is ERC721URIStorage {
uint256 public contadorTokens;
constructor() ERC721("MeuNFT", "MNFT") {
contadorTokens = 0;
}
function criarToken(string memory tokenURI) public returns (uint256) {
uint256 novoTokenId = contadorTokens;
_mint(msg.sender, novoTokenId);
_setTokenURI(novoTokenId, tokenURI);
contadorTokens++;
return novoTokenId;
}
}
ERC1155: Padrão de Múltiplos Tokens
Introdução ao ERC1155
O ERC1155 é um padrão de múltiplos tokens que permite que um único contrato represente vários tipos de tokens. Ele suporta tanto tokens fungíveis quanto não fungíveis, tornando-se uma opção mais versátil para os desenvolvedores.
Exemplo de um Contrato ERC1155
Aqui está um exemplo básico de como implementar um contrato ERC1155:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
contract MeuMultiToken é ERC1155 {
constructor() ERC1155("https://api.exemplo.com/metadata/{id}.json") {}
function mint(address conta, uint256 id, uint256 quantidade, bytes memory dados) public {
_mint(conta, id, quantidade, dados);
}
function mintBatch(address para, uint256[] memory ids, uint256[] memory quantidades, bytes memory dados) public {
_mintBatch(para, ids, quantidades, dados);
}
}
Casos de Uso para ERC1155
- Jogos: Representar vários tipos de ativos dentro do jogo (armas, skins, personagens) dentro do mesmo contrato.
- Colecionáveis: Emitir itens tanto únicos quanto edições limitadas de forma eficiente.
EIP-721: NFTs Únicos com Metadados
O padrão EIP-721 constrói sobre o ERC721 ao permitir atributos de metadados mais complexos. Embora preserve os princípios fundamentais de propriedade e exclusividade, ele introduz maneiras de anexar descrições mais ricas aos NFTs.
Exemplo de EIP-721 com Metadados
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
contract NFTUnico é ERC721URIStorage {
uint256 public contadorTokens;
constructor() ERC721("NFTÚnico", "UNFT") {
contadorTokens = 0;
}
function mintNFTUnico(string memory tokenURI) public returns (uint256) {
uint256 novoTokenId = contadorTokens;
_mint(msg.sender, novoTokenId);
_setTokenURI(novoTokenId, tokenURI);
contadorTokens++;
return novoTokenId;
}
}
Conclusão
À medida que o espaço dos NFTs continua a evoluir, novos padrões além do ERC721 oferecem possibilidades empolgantes para artistas, desenvolvedores e usuários. Ao utilizar padrões como ERC1155 e EIP-721, os desenvolvedores podem criar ativos digitais mais complexos e versáteis. Compreender esses padrões permite casos de uso mais inovadores no crescente ecossistema de NFTs.
Nesta lição, cobrimos os padrões ERC721, ERC1155 e EIP-721, destacando suas características únicas e aplicações práticas. Ao iniciar suas criações de NFTs, considere qual padrão melhor atende às necessidades do seu projeto!