SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
24.11.2024

Aula 122: Padrões Avançados de Token

Nesta aula, vamos nos aprofundar nos padrões avançados de token no Ethereum, explorando especificamente os padrões ERC721 e ERC1155. Esses padrões vão além do token básico ERC20 e permitem que os desenvolvedores criem tokens não fungíveis (NFTs) e tokens semi-fungíveis, respectivamente. Vamos discutir suas funcionalidades, implementação e fornecer um código de exemplo para ilustrar como funcionam.

ERC721: Tokens Não Fungíveis

O padrão ERC721 permite a criação de tokens não fungíveis (NFTs), que são únicos e não podem ser trocados em uma base um-para-um. Isso torna o ERC721 ideal para ativos digitais como arte, colecionáveis e itens de jogos.

Principais Funcionalidades do ERC721

  • Unicidade: Cada token possui um identificador único.
  • Propriedade: Cada token pode ser possuído e transferido por diferentes usuários.
  • Metadados: Os tokens podem carregar informações adicionais, como descrições e imagens.

Implementação do ERC721

Aqui está uma implementação básica de um token ERC721 em Solidity:

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

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract MeuNFT is ERC721, Ownable {
    uint256 public proximoTokenId;
    mapping(uint256 => string) private _tokenURIs;

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

    function mint(string memory uri) public onlyOwner {
        uint256 tokenId = proximoTokenId;
        proximoTokenId++;
        _mint(msg.sender, tokenId);
        _setTokenURI(tokenId, uri);
    }

    function _setTokenURI(uint256 tokenId, string memory uri) internal {
        _tokenURIs[tokenId] = uri;
    }

    function tokenURI(uint256 tokenId) public view returns (string memory) {
        return _tokenURIs[tokenId];
    }
}

Explicação

  • O contrato herda de ERC721 e Ownable da biblioteca OpenZeppelin.
  • proximoTokenId: Uma variável para rastrear o próximo ID do token a ser cunhado.
  • mint: Uma função que permite ao proprietário cunhar um novo NFT e definir sua URI de metadados.
  • tokenURI: Uma função de visualização pública que retorna a URL de metadados para um determinado token.

ERC1155: Padrão de Multi-Token

O padrão ERC1155 permite a criação de tokens fungíveis e não fungíveis dentro de um único contrato. Essa flexibilidade é especialmente útil para aplicações de jogos ou plataformas que precisam gerenciar vários tipos de ativos.

Principais Funcionalidades do ERC1155

  • Transferências em Lote: A capacidade de transferir múltiplos tipos de tokens em uma única transação.
  • Eficiência de Gás: Mais eficiente do que implantar vários contratos para tokens fungíveis e não fungíveis.
  • Gerenciamento de URI: Suporta URIs de metadados para tokens fungíveis e não fungíveis.

Implementação do ERC1155

Aqui está uma implementação simples de um token ERC1155 em Solidity:

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

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract MeuMultiToken is ERC1155, Ownable {
    uint256 public constant TOKEN_FUNGIVEL = 0;
    uint256 public constant TOKEN_NAO_FUNGIVEL = 1;

    constructor() ERC1155("https://api.exemplo.com/metadados/{id}.json") {}

    function mintFungivel(address conta, uint256 quantidade) public onlyOwner {
        _mint(conta, TOKEN_FUNGIVEL, quantidade, "");
    }

    function mintNaoFungivel(address conta) public onlyOwner {
        _mint(conta, TOKEN_NAO_FUNGIVEL, 1, "");
    }

    function mintLote(address conta, uint256[] memory ids, uint256[] memory quantidades) public onlyOwner {
        _mintBatch(conta, ids, quantidades, "");
    }
}

Explicação

  • O contrato herda de ERC1155 e Ownable.
  • TOKEN_FUNGIVEL e TOKEN_NAO_FUNGIVEL: Constantes usadas para identificar diferentes tipos de token.
  • mintFungivel e mintNaoFungivel: Funções para cunhar os respectivos tipos de token.
  • mintLote: Permite a cunhagem de múltiplos tipos de token em uma única operação.

Conclusão

Nesta aula, exploramos padrões avançados de token, sendo o ERC721 para tokens não fungíveis e o ERC1155 para padrões de multi-token. Esses padrões expandem as possibilidades do que pode ser construído no Ethereum e possibilitam aplicações ricas em áreas como jogos, arte digital e muito mais.

Entender e utilizar esses padrões permitirá que você crie aplicações descentralizadas (DApps) diversas e inovadoras. Boa programação!

Video

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

Thank you for voting!