SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
09.12.2024

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!

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

Thank you for voting!