Eventos en Solidity | Casos prácticos y limitaciones

En Solidity, los eventos son una característica que permite a los contratos inteligentes comunicarse con el mundo exterior, particularmente con aplicaciones fuera de la cadena, como interfaces frontales o servicios de monitorización. Se utilizan principalmente para registrar información en la cadena de bloques de Ethereum, que puede ser recuperada y leída por clientes externos como DApps (aplicaciones descentralizadas) o servicios que escuchan estos registros.

Características principales de los eventos en Solidity

Mecanismo de registro de la cadena de bloques

Los eventos se registran en el recibo de la transacción y se almacenan en la blockchain. Sin embargo, los propios contratos inteligentes no pueden acceder a ellos una vez creados; sólo están disponibles fuera de la cadena.

Los registros se almacenan en una estructura de datos especial, denominada temas de registro, lo que permite realizar búsquedas en ellos de forma eficiente.

Recuperación eficiente de datos

Las aplicaciones externas pueden «suscribirse» a determinados eventos y escuchar cuándo se emiten durante la ejecución del contrato inteligente, lo que permite actualizaciones o monitorización en tiempo real.

Parámetros indexados

Los eventos pueden tener hasta 3 parámetros indexados, lo que permite que los parámetros sean buscables. Estos parámetros indexados son como etiquetas o filtros, que ayudan a los clientes a buscar eventos específicos en función de los valores de estos parámetros.

Sintaxis de eventos en Solidity

Los eventos se declaran utilizando la palabra clave event, y se pueden emitir utilizando la palabra clave emit en Solidity.
Ejemplo de declaración y uso de eventos:

// Declare an event
event Transfer(address indexed from, address indexed to, uint256 value);

// Emit the event in a function
function transfer(address to, uint256 value) public {
    // Code logic for transferring value

    // Emit the event to log the transfer
    emit Transfer(msg.sender, to, value);
}

Explicación del ejemplo

Declaración: el evento Transferencia(dirección indexada de, dirección indexada a, valor uint256) define un evento llamado Transferencia que registra una transferencia de una dirección a otra, junto con la cantidad transferida. La palabra clave indexada permite filtrar y buscar direcciones específicas de origen o destino.

Emisión del evento: Dentro de la función de transferencia, cuando se produce una transferencia de fichas, el evento se emite utilizando la palabra clave emit, que registra el evento en la cadena de bloques.

Casos de uso de los eventos

  • Transferencias de tokens: En tokens ERC-20 o ERC-721, se emiten eventos como Transferencia o Aprobación para rastrear el movimiento de tokens entre usuarios.
  • Registro de cambios de estado: Los eventos pueden utilizarse para registrar cualquier cambio de estado importante en un contrato, como la transferencia de propiedad o un voto emitido en un contrato de votación.
  • Depuración y supervisión: Los eventos pueden utilizarse para supervisar la ejecución de los contratos y ayudar con la depuración mediante el seguimiento de los pasos clave en el ciclo de vida del contrato.

Limitaciones

  • El propio contrato inteligente no puede acceder a los eventos una vez emitidos. Son sólo para aplicaciones externas.
  • Los eventos no devuelven datos directamente a la transacción de llamada; sólo registran datos para su uso fuera de la cadena.

Los eventos son una parte esencial de Solidity para permitir que las aplicaciones fuera de la cadena reaccionen a los cambios o acciones dentro de los contratos inteligentes.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *