WEB3DEV Español

Delia Viloria T
Delia Viloria T

Posted on

Funciones y Eventos Estándar del Token ERC-1155

Image description

El ERC-1155 es un contrato inteligente estándar en la blockchain Ethereum que define un conjunto de funciones y eventos para la creación y administración de tokens que puede representar activos fungibles y no fungibles.

El estándar ERC-1155 define las siguientes funciones:

  • safeTransferFrom: esta función se usa para transferir múltiples tipos de tokens a la vez. Toma cuatro parámetros: la dirección del remitente, la dirección del destinatario, la dirección del contrato del token y un array de token IDs y cantidades que especifican cuales tokens están siendo transferidos.

  • balanceOf: Esta función toma la dirección del contrato y el ID de un token y regresa el número de los tokens de ese tipo de los que son dueños del que llama.

  • OwnerOf: Esta función toma la dirección del contrato y un ID de un token y retorna la dirección del dueño de ese token.

  • approve: Esta función se usa para aprobar otra dirección para que transfiera tokens en nombre del dueño del token.

  • getApproved: Esta función toma la dirección del contrato y el ID de un token y retorna la dirección del gastador aprobado para ese token.

  • setApprovalForAll: Esta función se usa para configurar o revocar que otra dirección transfiera todos los tokens del que invoca.

  • isApprovedForAll: Esta función toma la dirección del contrato y una dirección y retorna si la dirección dada es aprobada para transferir todos los tokens del que invoca.

ERC-1555 también define los siguientes eventos:

  • TransferSingle: Este evento es desencadenado cuando un solo token se transfiere. Incluye la dirección del remitente, la dirección del destinatario, la dirección del contrato del token y el ID del token.
  • TransferBatch: Este evento es desencadenado cuando múltiples tokens son transferidos en una sola llamada a safeTransferFrom. Incluye la dirección del remitente, la dirección del destinatario, la dirección del contrato de los tokens y un array de IDs de token y cantidades que especifican cuáles tokens fueron transferidos.

Estas funciones y eventos son usados para permitir la transferencia y administración de tokens ERC-1155 en la blockchain Ethereum.

Aquí hay un ejemplo del ERC-1155 con algunas funciones y eventos:

pragma solidity ^0.8.0;

// Importa la interfaz del ERC-1155 de la biblioteca OpenZeppelin
import "https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC1155/IERC1155.sol";

// Implementa la interfaz ERC-1155 
contract ERC1155Example is IERC1155 {
// Mapeo del balance para cada activo
mapping (bytes32 => uint256) private _balances;

// Mapeo de las prestaciones de cada activo
mapping (bytes32 => mapping (address => uint256)) private _allowances;

// Event cuando un activo se transfiere
event Transfer(
address indexed from,
address indexed to,
bytes32[] indexed ids,
uint256[] values
);

// Función para transferir un activo
function transfer(
address to,
bytes32[] memory ids,
uint256[] memory values
) public {
// Verifica que el invocador tiene suficiente balance para cada activo
for (uint256 i = 0; i < ids.length; i++) {
require(_balances[msg.sender][ids[i]] >= values[i], "Insufficient balance");
}

// Transfiere los activos
for (uint256 i = 0; i < ids.length; i++) {
// Actualización de los balances
_balances[msg.sender][ids[i]] -= values[i];
_balances[to][ids[i]] += values[i];

// Emite el evento de Transferencia
emit Transfer(msg.sender, to, ids, values);
}
}
}
Enter fullscreen mode Exit fullscreen mode

Este código es un ejemplo de cómo el estándar ERC-1155 puede ser implementado en Solidity. El argumento pragma solidity ^0.8.0 al comienzo del archivo, especifica que este contrato sea escrito en la versión de Solidity 0.8.0 o superior.

El contrato luego importa la interfaz del ERC-1155 desde la biblioteca de OpenZeppelin, el cual define las funciones y eventos que son requeridos para implementar el estándar. El contrato luego implementa la interfaz del ERC-1155 declarando que un contrato “es” (is keyword) una instancia de la interfaz IERC1155.

El contrato luego define dos mapeos: uno para rastrear los balances de cada activo y uno para rastrear las prestaciones para cada activo. Estos mapeos son privados, lo que quiere decir que sólo pueden ser accesado por otras funciones dentro del contrato.

El contrato luego define un evento Transfer, el cual será emitido cuando un activo es transferido. Este evento incluye parámetros indexado para las direcciones from y to, así como el ids y values de los activos que están siendo transferidos. Los parámetros indexados están incluídos en el registro de la blockchain, la cual lo hace más fácil de buscar y filtrar.

El contrato luego define la función transfer, el cual permite la transferencia de activos desde una dirección a otra. La función toma tres parámetros: la dirección to, un array de ids para los activos siendo transferidos y un array de values indicando cuántos de cada activo están siendo transferidos.

La función primero verifica que el invocador tiene suficiente balance para cada activo siendo transferido, usando el argumento require. Si el que llama no tiene suficiente balance para uno de sus activos, la función se revertirá con un mensaje de error.

Si el que llama tiene suficiente balance, la función entonces transferirá los activos, actualizando los balances en el mapeo _balances y emitiendo un evento Transfer.

Este es solo un ejemplo de cómo el estándar ERC-1155 puede ser implementado en Solidity. Los detalles específicos de la implementación pueden variar, dependiendo de los requisitos del contrato.

Este artículo fue escrito por Charan y traducido por Delia Viloria T. Su original se puede leer aquí.

Sería genial escucharte en nuestro Discord, puedes contarnos tus ideas, comentarios, sugerencias y dejarnos saber lo que necesitas.
Si prefieres puedes escribirnos a @web3dev_eshttps://twitter.com/web3dev_es en Twitter.

Discussion (0)