WEB3DEV

Cover image for Funções e Eventos Padrão do Token ERC-1155
Panegali
Panegali

Posted on • Atualizado em

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);
       }
   }
}
Enter fullscreen mode Exit fullscreen mode

Este código é um exemplo de como o padrão ERC-1155 pode ser implementado em Solidity. A declaração pragma solidity ^0.8.0na 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” ( ispalavra-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 frome to, bem como os idse valuesdos 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 idspara os ativos sendo transferidos e um vetorz de valuesindicando 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!

Top comments (0)