Sumário
- O padrão ERC-1155 define as seguintes funções:
- ERC-1155 também define os seguintes eventos:
- 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 parasafeTransferFrom. 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!