Escuchando nuevos bloques

Recibe notificaciones cuando se incluye un nuevo bloque.

Prerrequisitos

Método #01: Usando WebSockets

1. Primero, necesitamos crear un enlace bidireccional entre nuestra aplicación cliente y la REST Gateway. Para hacerlo, abre una nueva conexión WebSocket. Recuerda usar una NODE_URL adecuada.

import * as WebSocket from 'ws';

const host = 'NODE_URL';
const ws = new WebSocket('ws://' + host + '/ws');

ws.on('open', () => {
    console.log('Connection opened');
});

ws.on('close', () => {
    console.log('Connection closed');
});

ws.on('message', (msg) => {
    const response = JSON.parse(msg);
    if ('uid' in response) {
        console.log('uid:', response);
    } else {
        console.log(response);
    }
});

Una vez que la conexión esté abierta, recibirás un identificador único en forma de cadena llamado uid. Como queremos recibir notificaciones cada vez que se recolecte un nuevo bloque, el siguiente paso es suscribirnos al canal de bloques. Consulta aquí la lista completa de canales disponibles.

  1. Envía el uid recibido durante la fase de conexión y el nombre del canal formateado de la siguiente manera.

ws.on('message', (msg) => {
    const response = JSON.parse(msg);
    if ('uid' in response) {
      const body = '{"uid":"' + response.uid +'", "subscribe":"block"}';
      console.log('uid:', response);
      ws.send(body);
    } else {
        console.log(response);
    }
});

A partir de ese momento, cada 30 segundos más o menos, recibirás una nueva notificación con el contenido de los nuevos bloques cosechados.

Método #02: Usando el SDK

El Bitxor SDK simplifica el proceso de manejo de conexiones WebSocket.

En el SDK, los WebSockets se denominan Listeners. Como hemos hecho con WebSockets, primero debemos abrir la conexión y suscribirnos al canal deseado, pero esta vez sin manejar uids.

const nodeUrl = 'NODE_URL';
const repositoryFactory = new RepositoryFactoryHttp(nodeUrl);
const listener = repositoryFactory.createListener();

listener.open().then(() => {
  listener.newBlock().subscribe(
    (block) => {
      console.log(block);
      listener.close();
    },
    (err) => console.error(err),
  );
});
const nodeUrl = 'NODE_URL';
const repositoryFactory = new bitxor_sdk_1.RepositoryFactoryHttp(nodeUrl);
const listener = repositoryFactory.createListener();
listener.open().then(() => {
  listener.newBlock().subscribe(
    (block) => {
      console.log(block);
      listener.close();
    },
    (err) => console.error(err),
  );
});

Tenga en cuenta que el Bitxor SDK para TypeScript base Listener está diseñado para funcionar en entornos de back-end de Node.js. Si desea ejecutar Listeners desde el lado del cliente (por ejemplo, Angular, React, Vue), pase la implementación del navegador de WebSocket al Listener.

const listener = new Listener('ws://ngl-dual-101.testnet.bitxordev.network:3000', WebSocket);
listener.open().then(() => ...

Método #03: Uso de la CLI

Abra una ventana de terminal y ejecute el siguiente comando.

bitxor-cli monitor block