Funcionamiento del Nodo de NEM

La plataforma de blockchain NEM se construye a partir de una red de nodos. Estos nodos proporcionan una plataforma potente, estable y segura donde las transacciones de Activos Inteligentes se realizan, se buscan y se registran de manera inmutable en el libro mayor de blockchain.

La arquitectura de cuatro capas permite a los desarrolladores actualizar cualquiera de estos niveles sin interrumpir los otros, lo que mejora la seguridad.

Componente P2P
Repositorio: Servidor Catapult

Los nodos P2P forman la columna vertebral de la cadena de bloques, lo que hace que la red sea robusta, ya que no se puede cerrar eliminando una sola entidad. La función del nodo es verificar las transacciones y los bloques, ejecutar el algoritmo de consenso, crear nuevos bloques y propagar los cambios a través de la red.

El API envía nuevas transacciones a la red P2P, donde se incluyen en un bloque o se descartan. Una vez procesado el bloque:

  • El binario del bloque se guarda en el disco como un archivo plano.
  • El estado actualizado de la cadena se guarda en la memoria o RocksDB (configurable).

Reputación del Nodo  

Las redes públicas permiten a cualquiera ejecutar un nodo. Algunos de estos nodos podrían compartir información no válida o intentar perturbar la red.

Para reducir los intentos de comunicación, los nodos realizan un seguimiento de los resultados de las comunicaciones anteriores.

Cuando un nodo se conecta a un par remoto, el primero incrementa la confianza hacia el remoto. De lo contrario, el nodo incrementa el contador de fallas. Del mismo modo, el nodo actualiza los contadores de confianza en consecuencia después de procesar los datos solicitados.

A partir de estas interacciones, el nodo asigna un peso entre 500 y 10000 a cada uno de los pares alcanzados.

La probabilidad de seleccionar un nodo remoto depende linealmente de su peso. Cada cuatro rondas de selecciones de nodos, los criterios cambian para evitar los ataques de Sybil. El nodo selecciona un par con gran importancia en su lugar.

RocksDB

RocksDB almacena la cadena estatal. Las estructuras de datos almacenadas en caché se serializan y almacenan como valor en una clave correspondiente. Por ejemplo, una columna asigna las claves públicas a las direcciones. Otra, las entradas de estado de cuenta como el valor de las claves de dirección correspondientes.

El almacenamiento del estado en la memoria suele ser más rápido que usar RocksDB. Sin embargo, el almacenamiento de información de estado en RocksDB exige menos memoria de los nodos de la red.

Nota

Persistir el estado es conveniente en redes con un gran número de cuentas.

Componente API


Repository: Catapult REST

La responsabilidad principal de la API es almacenar los datos en una forma legible. Cada instancia de API mantiene un MongoDB y, opcionalmente, un RocksDB para guardar el estado.

La capa valida las transacciones recibidas del componente REST. Además, la API devuelve los errores a través de ZMQ en binario.

Este componente también es responsable de recopilar las cosignaturas de las transacciones consolidadas agregadas, que solo se envían a los nodos P2P una vez que están completas.

Un componente API puede conectarse a múltiples nodos P2P, pero al menos debe conectarse a uno.

MongoDB


MongoDB almacena bloques, transacciones y el estado de la cadena para un alto rendimiento de consulta.

La API actualiza el MongoDB cuando:

  • Un nuevo bloque / un montón de bloques terminó de procesar.
  • Procesamiento de nuevas transacciones sin confirmar completadas.

ZMQ

ZeroMQ es una biblioteca de mensajería asíncrona, que permite suscripciones en tiempo real. Transporta notificaciones desde el servidor de la API al punto final de ZMQ, donde escucha el componente REST de Catapult. Es una alternativa a REST WebSockets, destinada a ser utilizada cuando el rendimiento es crítico.

Componente de reposo


Repository: Catapult REST

El componente REST maneja las solicitudes de cliente de la API JSON. Esto se lee en MongoDB, formatea la respuesta y la devuelve al cliente. Este componente también es responsable de devolver los eventos al cliente utilizando WebSockets.

Cada componente REST se conecta a una instancia de API, enviando nuevas transacciones utilizando sockets.


Guías

Implementar un nodo completo de Catapult para fines de aprendizaje y desarrollo.