SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
10.12.2024

Lição 280: Comparação dos Padrões de Token do Ethereum

No mundo do Ethereum, os tokens desempenham um papel crucial em várias aplicações, que vão desde finanças descentralizadas (DeFi) até tokens não fungíveis (NFTs). Ao longo dos anos, vários padrões de token foram estabelecidos, cada um atendendo a diferentes propósitos e funcionalidades. Nesta lição, vamos comparar os padrões de token mais comuns do Ethereum: ERC-20, ERC-721 e ERC-1155.

1. ERC-20: Padrão de Token Fungível

O padrão ERC-20 é o padrão de token mais amplamente utilizado na blockchain do Ethereum. Ele define um conjunto de regras que todos os tokens fungíveis devem seguir, o que significa que cada token é intercambiável com outro token do mesmo tipo.

Principais Características:

  • Fungibilidade: Cada token é idêntico e pode ser substituído por qualquer outro token do mesmo tipo.
  • Compatibilidade: Os tokens ERC-20 podem se integrar facilmente a carteiras, exchanges e outros contratos.

Exemplo de Código:

Aqui está um exemplo simples de uma implementação de token ERC-20:

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

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract MeuTokenERC20 is ERC20 {
    constructor(uint256 fornecimentoInicial) ERC20("MeuToken", "MTK") {
        _mint(msg.sender, fornecimentoInicial);
    }
}

Funções Principais:

  • transfer(address destinatário, uint256 quantia): Transfere quantia de tokens para o destinatário.
  • approve(address gastador, uint256 quantia): Permite que o gastador retire quantia de tokens da conta do chamador.
  • transferFrom(address remetente, address destinatário, uint256 quantia): Permite que um gastador transfira tokens de remetente para destinatário.

2. ERC-721: Padrão de Token Não Fungível

Enquanto o ERC-20 lida com tokens fungíveis, o ERC-721 define um padrão para tokens não fungíveis (NFTs). Cada token sob este padrão é único e não pode ser trocado em uma base de um para um.

Principais Características:

  • Singularidade: Cada token possui um identificador único, tornando-o distinto.
  • Propriedade: Permite rastrear a propriedade de cada ativo individual.

Exemplo de Código:

Aqui está um exemplo básico de uma implementação de token ERC-721:

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

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

contract MeuTokenERC721 is ERC721, Ownable {
    uint256 public próximoTokenId;

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

    function mint() external onlyOwner {
        _safeMint(msg.sender, próximoTokenId);
        próximoTokenId++;
    }
}

Funções Principais:

  • safeMint(address para, uint256 tokenId): Cria um novo NFT e o transfere de forma segura para o endereço especificado.
  • ownerOf(uint256 tokenId): Retorna o proprietário do ID de token especificado.

3. ERC-1155: Padrão de Multi-Token

O padrão ERC-1155 foi criado para lidar com vários tipos de tokens em um único contrato. Isso significa que tanto tokens fungíveis quanto não fungíveis podem coexistir sob uma única plataforma, tornando-o mais eficiente em termos de custos de gas.

Principais Características:

  • Suporte a Multi-Token: Permite a criação de tanto tokens fungíveis quanto não fungíveis.
  • Transferências em Lote: Suporta a transferência de múltiplos tokens em uma única transação.

Exemplo de Código:

Aqui está um exemplo ilustrativo de uma implementação de token ERC-1155:

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

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

contract MeuTokenERC1155 is ERC1155, Ownable {
    uint256 public constant TIPO_TOKEN1 = 0;
    uint256 public constant TIPO_TOKEN2 = 1;

    constructor() ERC1155("https://minhaapi.com/api/token/{id}") {
        _mint(msg.sender, TIPO_TOKEN1, 1000, "");
        _mint(msg.sender, TIPO_TOKEN2, 500, "");
    }

    function mint(uint256 tokenId, uint256 quantia) external onlyOwner {
        _mint(msg.sender, tokenId, quantia, "");
    }
}

Funções Principais:

  • mint(address conta, uint256 id, uint256 quantia, bytes data): Cria quantia de tokens do tipo id para o endereço especificado.
  • safeTransferFrom(address de, address para, uint256 id, uint256 quantia, bytes data): Transfere de forma segura tokens do tipo id de um endereço para outro.

Conclusão

Entender as diferenças entre os padrões de token do Ethereum é crucial para desenvolvedores que trabalham no ecossistema do Ethereum. Cada padrão—ERC-20, ERC-721 e ERC-1155—possui seus casos de uso e benefícios únicos. Ao escolher o padrão correto, os desenvolvedores podem criar soluções baseadas em tokens que sejam eficientes e eficazes, adequadas às suas necessidades específicas. À medida que o ecossistema do Ethereum continua a evoluir, esses padrões permanecerão fundamentais para várias aplicações em blockchain.

Video

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

Thank you for voting!