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!
Oldest comments (0)