0Pricing
Web3 & DApp Development Fundamentals · Lección

Escuchar eventos

Suscripciones off-chain

Escuchar eventos es una lección gratuita de Web3 & DApp Development Fundamentals en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Web3 & DApp Development Fundamentals, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Web3 & DApp Development Fundamentals incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

Consuming Events Off-Chain

Events are useless until something listens for them. Off-chain apps - web front-ends, bots, and indexers - subscribe to logs to react to on-chain activity.

Libraries like ethers.js and web3.js make this straightforward.

Listening with ethers.js

With ethers.js you attach a listener using contract.on(eventName, callback). The callback receives the decoded parameters plus the raw event object.

<code>contract.on('Transfer', (from, to, amount, event) => {
    console.log(from, '->', to, amount.toString());
});</code>

Querying Past Events

To read history rather than live events, use queryFilter with a block range. This returns an array of matching past logs.

<code>const logs = await contract.queryFilter('Transfer', 0, 'latest');
logs.forEach(l => console.log(l.args.amount.toString()));</code>

Filtering by Indexed Value

Because some parameters are indexed, you can build a filter that only matches certain topics, for example transfers received by one address.

<code>const filter = contract.filters.Transfer(null, myAddress);
const received = await contract.queryFilter(filter);</code>

Listening with web3.js

The web3.js library uses an event emitter pattern via contract.events.EventName(), with data and error callbacks.

<code>contract.events.Transfer({ fromBlock: 'latest' })
  .on('data', (e) => console.log(e.returnValues))
  .on('error', console.error);</code>

WebSocket Providers

Live event subscriptions require a WebSocket connection (wss://), because HTTP providers cannot push updates. For one-off history queries an HTTP provider is fine.

<code>// const provider = new ethers.WebSocketProvider('wss://...');
// HTTP works for queryFilter, not for live .on()</code>

Block Confirmations

An event can be reorged out if its block is replaced. Wait for several confirmations before treating an event as final, especially for value transfers.

<code>contract.on('Deposit', async (acct, amount, event) => {
    await event.getTransactionReceipt();
    // optionally wait N confirmations
});</code>

Indexers and The Graph

For large dApps, a dedicated indexer such as The Graph ingests events and exposes a queryable GraphQL API. This scales far better than scanning logs in the browser.

Decoding Raw Logs

If you have raw logs, you can decode them with the contract's ABI using an interface. The signature hash in topic 0 identifies which event it is.

<code>const iface = new ethers.Interface(abi);
const parsed = iface.parseLog(rawLog);
console.log(parsed.name, parsed.args);</code>

Avoiding Duplicate Handling

Listeners may receive the same event more than once across reconnects. Track processed log identifiers (transaction hash + log index) to keep handling idempotent.

<code>const key = event.transactionHash + ':' + event.logIndex;
if (seen.has(key)) return;
seen.add(key);</code>

Cleaning Up Listeners

Remove listeners when a component unmounts to prevent memory leaks and duplicate handlers, using contract.off or removeAllListeners.

<code>function handler(from, to, amount) { /* ... */ }
contract.on('Transfer', handler);
// later:
contract.off('Transfer', handler);</code>

Quick Check

Test your understanding of listening for events.

Recap

You learned how off-chain code listens for events:

  • contract.on() for live events, queryFilter for history
  • Filters target indexed topics
  • WebSocket providers are required for live subscriptions
  • Wait for confirmations, deduplicate logs, and clean up listeners
  • Indexers like The Graph scale event queries

Preguntas frecuentes

¿La lección «Escuchar eventos» es gratis?

Sí — el texto completo de «Escuchar eventos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Web3 & DApp Development Fundamentals, actualiza a CoddyKit PRO. El curso de Web3 & DApp Development Fundamentals incluye 4 lecciones en total.

¿Qué aprenderé en «Escuchar eventos»?

Suscripciones off-chain Practicas Web3 & DApp Development Fundamentals con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Web3 & DApp Development Fundamentals?

No se requiere experiencia previa. Web3 & DApp Development Fundamentals en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Escuchar eventos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Web3 & DApp Development Fundamentals?

Sí. Cada lección de Web3 & DApp Development Fundamentals incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Declaración de eventos
  2. Parámetros indexados
  3. Escuchar eventos
  4. Eventos frente a almacenamiento
← Volver a Web3 & DApp Development Fundamentals