---
title: "¿Qué son los events en Solidity?"
description: "Aprende cómo funcionan los events de Solidity"
---

# ¿Qué son los events en Solidity?

Los eventos de [Solidity](https://www.alchemy.com/overviews/solidity) son fundamentales para los desarrolladores de smart contracts porque permiten que los smart contracts indexen variables para reconstruir el estado del storage, ayudan a actualizar automáticamente la interfaz de usuario y permiten probar variables específicas. Este artículo profundizará tu comprensión de los eventos de Solidity y te ayudará a [profundizar tu conocimiento del lenguaje de programación Solidity](https://www.alchemy.com/university/courses/solidity?a=d7f2788ae5).

Primero presentaremos los eventos de Solidity, luego daremos algunas de sus clasificaciones y proporcionaremos ejemplos. Al finalizar este artículo, podrás crear un evento de Solidity para tu próximo proyecto.

## **¿Qué es un evento en Solidity?**

**En Solidity, los eventos son señales despachadas que los smart contracts pueden emitir.** Cuando llamas a eventos, estos hacen que los argumentos se almacenen en el log de la transacción, que es una estructura de datos especial en la blockchain. Los eventos notifican a usuarios externos, como un sitio web frontend en escucha o una aplicación cliente, que algo ha ocurrido en la blockchain.

### **¿Cuál es la diferencia entre eventos y funciones en Solidity?**

**Si bien tanto las funciones como los eventos aceptan argumentos y pueden ser llamados, las funciones modifican directamente los smart contracts, mientras que los eventos tienen el rol de informar a servicios fuera de la blockchain para hacerles saber a los usuarios que algo ha ocurrido.**

Las [funciones en Solidity](https://www.alchemy.com/overviews/solidity-functions) permiten a los desarrolladores leer, escribir, modificar y almacenar datos en el smart contract. Puedes pasar argumentos o parámetros a una función. También puedes llamar a una función cuando sea necesario dentro del código.

Los eventos también aceptan argumentos, pero estos se almacenan en el log de la transacción, al cual los smart contracts no tienen acceso. Los datos de los contratos viven en el State trie y los datos de los eventos se almacenan en el Transaction Receipts trie, lo que significa que los contratos no pueden leer datos de eventos.

Al igual que las funciones, los eventos pueden ser llamados. Sin embargo, se utiliza la palabra clave _emit_ para llamar/despachar eventos. Esto permite a los desarrolladores saber cuándo se está llamando a un evento o a una función.

### ¿Cuál es la relación entre eventos y logs?

La estructura de datos Log de Ethereum almacena los datos emitidos por los eventos.

La Ethereum Virtual Machine (EVM) cuenta con una función de logging que se utiliza para escribir datos, incluidos los eventos de Solidity, en una estructura fuera de los smart contracts.

Los logs y los eventos suelen usarse como sinónimos. Los eventos te permiten "imprimir" información en la estructura de logging de una manera más eficiente en cuanto a gas, ya que la información no se almacena en una variable de storage, lo cual consume más gas. Los eventos, o logs, viven en el Transaction Receipts trie, al cual los smart contracts no tienen acceso.

#### **¿Cómo se indexan los eventos en Solidity?**

**Los eventos de Solidity son interfaces con la funcionalidad de logging de la EVM.** Puedes agregar el atributo indexed a hasta tres parámetros. Estos aparecen entonces en la estructura de topics, no en la parte de datos del log. Cuando los parámetros no tienen el atributo indexed, se codifican en ABI dentro de la parte de datos del log.

## **Tipos de eventos en Solidity**

Existen dos tipos de eventos en Solidity: los indexados y los que no lo son.

Cuando los parámetros no tienen el atributo indexed, se codifican en [ABI](https://www.alchemy.com/overviews/solidity-abi) dentro de la parte de datos del log. Estos parámetros forman el arreglo de bytes del evento. Los datos se codifican según su tipo y pueden decodificarse según un esquema.

Los parámetros indexados, también conocidos como "topics", son los parámetros de eventos que se pueden buscar. Los parámetros indexados te permitirán buscar estos eventos usándolos como filtros. Puedes agregar el atributo indexed a hasta 4 o 3 parámetros, según si los eventos son anónimos o no, respectivamente.

## **¿Cómo funcionan los eventos en Solidity?**

**Los eventos de Solidity se declaran, se emiten y se registran.**

1. Primero, el tipo de evento debe declararse con la palabra clave _event_ en Solidity.
1. Luego, el evento debe emitirse con la palabra clave emit.
1. Cada vez que algo cambia en la blockchain, tu programa registrará automáticamente ese cambio y disparará el evento.

**Nota:** Emitir un evento después de declararlo te permite luego "escucharlo" desde tu aplicación usando librerías como [Web3.js](https://www.alchemy.com/dapps/web3-js) o Ethers.js.

### **¿Cómo se declara un evento en Solidity?**

**La declaración de un evento contiene el nombre del evento y los parámetros que deseas guardar al dispararlo.**

Primero, debes declarar un evento en Solidity. Luego, emites el evento con la palabra clave _emit_.

A continuación se muestra un ejemplo de cómo declarar un evento:

El evento, al dispararse, informará a la aplicación externa que algo ha cambiado en la blockchain.

### **¿Cómo se emiten los eventos en Solidity?**

Una vez definido el evento, puedes dispararlo usando la palabra clave _emit_. Cuando se emite un evento, los argumentos pasados se almacenan en los logs de la transacción.

La siguiente sintaxis te muestra cómo usar emit en Solidity:

## **Cómo escuchar eventos en Solidity**

Una vez que los eventos se emiten, puedes escucharlos suscribiéndote para capturarlos usando [ethers.js](https://www.alchemy.com/dapps/ethers-js). Luego, las [apps](https://www.alchemy.com/dapps/top/defi-dapps), o cualquier elemento conectado a una API JSON-RPC de Ethereum, pueden escuchar estos eventos y actuar en consecuencia.

### **Ejemplo de evento en Solidity**

El siguiente código de ejemplo define y emite un evento para transferencias. Este código es aplicable a una aplicación de transferencias de Ethereum, donde el evento se dispara al realizar una transferencia. Se puede agregar código adicional para que el evento, al dispararse, actualice la interfaz de usuario y muestre que se realizó una transferencia.

<ImageBlock
  src="https://media.alchemy.com/1703866327-solidity-event-example.png"
  alt="Ejemplo de código Solidity que define y emite un evento Transfer en un contrato inteligente"
  width={1600}
  height={743}
  caption="Definir y emitir un evento de transferencia"
/>

El siguiente ejemplo, tomado de **Solidity by Example**, crea un evento con dos parámetros: la dirección del remitente y el mensaje de tipo string. Al dispararse, el evento registra "Hello World" y "Hello EVM".

<ImageBlock
  src="https://media.alchemy.com/1703866441-solidity-event-with-two-parameters.png"
  alt="Ejemplo de código Solidity de un evento con dos parámetros: dirección del remitente y string de mensaje"
  width={1558}
  height={890}
  caption="Evento con dos parámetros"
/>

## **Sigue aprendiendo sobre Solidity**

Este artículo te presenta los eventos de Solidity y te ofrece explicaciones y recursos para tu próximo proyecto. Con los eventos de Solidity, te resultará más fácil crear smart contracts eficientes.

Si eres nuevo en el lenguaje Solidity y quieres construir tu primer smart contract, asegura tu lugar en el [curso gratuito de programación en Solidity](https://www.alchemy.com/university/courses/solidity?a=d7f2788ae5) de 7 semanas de Alchemy University.
