Skip to content

Funções e Eventos Padrão do Token ERC-1155

Funções e Eventos Padrão do Token ERC-1155


Sumário

  1. O padrão ERC-1155 define as seguintes funções:
  2. ERC-1155 também define os seguintes eventos:
  3. Exemplo de ERC-1155 com poucas funções e eventos:

ERC-1155 é um padrão de contrato inteligente na blockchain Ethereum que define um conjunto de funções e eventos para a criação e gerenciamento de tokens que podem representar ativos fungíveis e não fungíveis.

O padrão ERC-1155 define as seguintes funções:

  • safeTransferFrom: Esta função é usada para transferir vários tipos de tokens de uma só vez. Leva quatro parâmetros: o endereço do remetente, o endereço do destinatário, o endereço do contrato dos tokens e um vetor (array) de IDs e quantidades de tokens que especificam quais tokens estão sendo transferidos.
  • balanceOf: Esta função pega um endereço de contrato e um ID de um token e retorna o número de tokens deste tipo que pertencem ao chamador (caller).
  • ownerOf: Esta função pega o endereço do contrato e um ID de um token e retorna o endereço do proprietário desse token.
  • approve: Esta função é usada para aprovar outro endereço para transferir tokens em nome do proprietário do token.
  • getApproved: Esta função pega o endereço do contrato e um ID de um token e retorna o endereço do gastador aprovado para esse token.
  • setApprovalForAll: Esta função é usada para definir ou revogar a aprovação de outro endereço para transferir todos os tokens do chamador.
  • isApprovedForAll: Esta função pega o endereço do contrato e um endereço e retorna se o endereço fornecido é aprovado para transferir todos os tokens do chamador.

ERC-1155 também define os seguintes eventos:

  • TransferSingle: Este evento é acionado sempre que um único token é transferido. Inclui o endereço do remetente, o endereço do destinatário, o endereço do contrato do token e o ID do token.
  • TransferBatch: Este evento é acionado sempre que vários tokens são transferidos em uma única chamada para safeTransferFrom. Inclui o endereço do remetente, o endereço do destinatário, o endereço do contrato dos tokens e um vetor de IDs de token e quantidades que especificam quais tokens foram transferidos.

Essas funções e eventos são usados ​​para permitir a transferência e gerenciamento de tokens ERC-1155 na blockchain Ethereum.

Exemplo de ERC-1155 com poucas funções e eventos:

pragma solidity ^0.8.0;

// Importar a interface ERC-1155 da biblioteca do OpenZeppelin
import "https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC1155/IERC1155.sol";

// Implementar a interface ERC-1155
contract ERC1155Example is IERC1155 {
   // Mapeamento de saldos para cada ativo
   mapping (bytes32 => uint256) private _balances;

   // Mapeamento de permissões para cada ativo
   mapping (bytes32 => mapping (address => uint256)) private _allowances;

   // Evento para quando um ativo é transferido
   event Transfer(
       address indexed from,
       address indexed to,
       bytes32[] indexed ids,
       uint256[] values
   );

   // Função de transferência de um ativo
   function transfer(
       address to,
       bytes32[] memory ids,
       uint256[] memory values
   ) public {
       // Verificar se o interlocutor tem saldo suficiente para cada ativo
       for (uint256 i = 0; i < ids.length; i++) {
           require(_balances[msg.sender][ids[i]] >= values[i], "Insufficient balance");
       }

       // Transferir os ativos
       for (uint256 i = 0; i < ids.length; i++) {
           // Atualizar os saldos
           _balances[msg.sender][ids[i]] -= values[i];
           _balances[to][ids[i]] += values[i];

           // Emitir o evento de transferência
           emit Transfer(msg.sender, to, ids, values);
       }
   }
}

Este código é um exemplo de como o padrão ERC-1155 pode ser implementado em Solidity. A declaração pragma solidity ^0.8.0 na parte superior do arquivo especifica que este contrato foi escrito em Solidity versão 0.8.0 ou posterior.

O contrato então importa a interface ERC-1155 da biblioteca OpenZeppelin, que define as funções e eventos necessários para a implementação do padrão. O contrato então implementa a interface ERC-1155 declarando que é um contrato que “is” ( is palavra-chave) uma instância da interface IERC1155.

O contrato então define dois mapeamentos: um para rastrear os saldos de cada ativo e outro para rastrear as provisões de cada ativo. Esses mapeamentos são privados, o que significa que só podem ser acessados ​​por outras funções dentro do contrato.

O contrato então define um evento Transfer, que será emitido sempre que um ativo for transferido. Este evento inclui parâmetros indexados para os endereços from e to, bem como os ids e values dos ativos que estão sendo transferidos. Os parâmetros indexados são incluídos nos registros de eventos da blockchain, o que os torna mais fáceis de serem pesquisados e filtrados.

O contrato então define uma função transfer, que permite a transferência de ativos de um endereço para outro. A função recebe três parâmetros: o endereço to, um vetor de ids para os ativos sendo transferidos e um vetorz de values indicando quantos de cada ativo estão sendo transferidos.

A função primeiro verifica se o chamador tem saldo suficiente para cada ativo sendo transferido, usando um extrato require. Se o chamador não tiver saldo suficiente para um dos ativos, a função será revertida com uma mensagem de erro.

Se o chamador tiver saldo suficiente, a função transferirá os ativos atualizando os saldos no mapeamento _balances e emitindo o evento Transfer.

Este é apenas um exemplo de como o padrão ERC-1155 pode ser implementado em Solidity. Os detalhes específicos da implementação podem variar dependendo dos requisitos do contrato.


Artigo escrito por charan e traduzido por Marcelo Panegali


Abrace a oportunidade de elevar sua jornada de desenvolvimento para um nível superior. Tokens ERC-1155 é apenas o começo; os builds incríveis da WEB3DEV representam a chave de entrada para o emocionante cenário web3. 🚀🧑‍💻

Não perca tempo, 👉inscreva-se👈 agora mesmo e comece a desbravar o universo Blockchain!   Seja também WEB3DEV!