⚠️ ¡Advertencia! El siguiente artículo es un resumen sobre Mastering Ethereum, en consecuencia, me tomé la libertad de quitar las partes que no me parecieron relevantes y profundizar en lo que sí. Si tenés alguna sugerencia o corrección, no dudes en contactarme.
Nodos y Clientes en Ethreum#
Ethereum es una red distribuida de ordenadores (denominados nodos) que ejecutan software que puede verificar bloques y datos de transacciones. El software debe de ejecutarse en su ordenador para convertirlo en un nodo de Ethereum.
¿Qué es un nodo?#
Un «nodo» es cualquier instancia del software de un cliente de Ethereum que está conectado con otros ordenadores que también ejecutan el software de Ethereum, formando una red. Un nodo necesita ejecutar dos clientes: un cliente de consenso y un cliente de ejecución.
¿Qué es un cliente?#
Es una pieza de software que sigue determinados lineamientos para implementar el protocolo de Ethereum, esto quiere decir que diferentes comunidades y equipos pueden desarrollar diferentes clientes, pero al mismo tiempo todas estas implementaciones son compatibles para interactuar entre ellas.
Cliente de ejecución: escucha las nuevas transacciones transmitidas en la red, las ejecuta en la EVM, y mantiene el estado más reciente y la base de datos de todos los datos actuales de Ethereum.
Cliente de consenso: implementa el algoritmo de consenso de la prueba de participación, que permite que la red alcance un acuerdo basado en datos validados del cliente de ejecución. También hay una tercera pieza de software, conocida como «validador» que se puede agregar al cliente de consenso, lo que permite que un nodo partícipe en la protección de la red.
¿Por qué es bueno tener diferentes implementaciones de los clientes?#
Múltiples implementaciones de clientes pueden fortalecer la red reduciendo su dependencia de una sola base de código. El objetivo ideal es lograr la diversidad sin que ningún cliente tenga una posición dominante para reducir así los puntos únicos de error. La variedad de idiomas también invita a una comunidad de desarrolladores más amplia y les permite crear integraciones en su idioma preferido.
Lo que estas implementaciones de clientes tienen en común es que todas siguen una misma especificación. Estas especificaciones determinan cómo funcionan la red de Ethereum y las funciones de la cadena de bloques. Cada detalle técnico se define y se pueden encontrar especificaciones como:
- En su origen, el Protocolo de Ethereum(opens in a new tab)
- Especificaciones de ejecución(opens in a new tab)
- Especificaciones de consenso(opens in a new tab)
- Se han implementado las EIP(opens in a new tab) en varias actualizaciones de red
Tipos de Nodos#
Hay tres tipos principales de nodos en Ethereum: completos, de almacenamiento y ligeros, cada uno con sus propias características y funciones.
Full Node#
- Realiza una validación bloque a bloque de la cadena de bloques, incluyendo la descarga y verificación del cuerpo del bloque y la información sobre el estado de cada bloque.
- Almacena datos completos de la cadena de bloques, aunque recorta periódicamente datos antiguos para ahorrar espacio en disco.
- Participa en la validación de bloques y verifica todos los bloques y estados.
- Sirve a la red y proporciona datos si se le solicita.
Nodo de Almacenamiento#
- Similar al nodo completo, pero nunca elimina ninguno de los datos descargados.
- Almacena todo lo que se guarda en el nodo completo y construye un archivo de estados históricos.
- Requiere mucho almacenamiento, ya que puede acumular terabytes de datos, pero es útil para servicios como block explorers y análisis.
Nodo Ligero#
- En lugar de descargar cada bloque, solo descarga los encabezados de los bloques, que contienen información resumida sobre el contenido de los bloques.
- Solicita cualquier otra información necesaria a un nodo completo y verifica independientemente los datos recibidos.
- Permite a los usuarios participar en la red Ethereum sin requerir hardware potente o ancho de banda extenso.
- No participa en el consenso, pero puede acceder a la cadena de bloques con garantías de funcionalidad y seguridad similares a un nodo completo.
Los nodos ligeros son un área de desarrollo activo en Ethereum, y se espera que su soporte se desarrolle rápidamente en el futuro cercano, lo que permitirá una mayor descentralización y accesibilidad a la red.
¿Por qué correr un full node?#
Beneficios para uno#
Privacidad y autonomía: Al ejecutar su propio nodo, puede utilizar Ethereum de manera privada y sin depender de terceros, verificando los datos.
Verificación de transacciones: El nodo verifica todas las transacciones y bloquea aquellas que infringen las reglas del consenso, lo que le permite evitar depender completamente de otros nodos.
Seguridad en el uso de wallets: Se puede utilizar wallets de manera más segura y privada al no tener que filtrar sus datos a intermediarios, ya que todo puede ser verificado con su propio cliente.
Conexión directa y baja latencia: Puede conectarse a su nodo utilizando IPC o reescribiendo el nodo para cargar su programa como un complemento, lo que otorga baja latencia y facilita el procesamiento rápido de datos.
Participación en la red y recompensas: Se puede participar directamente con ETH para asegurar la red y obtener recompensas (si tenemos el capital necesario para eso).
Beneficios para la red#
Cumplimiento de reglas de consenso: Los full nodes hacen cumplir las reglas de consenso, lo que proporciona seguridad adicional a la red y evita que los validadores acepten bloques que no siguen dichas reglas.
Recuperación social en caso de ataque: En caso de un ataque, los full nodes pueden realizar una recuperación social eligiendo seguir la cadena honesta.
Diversidad y robustez de la red: Más nodos en la red conducen a una red más diversa y robusta, lo que permite un sistema resistente a la censura y de confianza.
Acceso a datos para clientes ligeros: Los nodos completos proporcionan acceso a los datos de la cadena de bloques para clientes ligeros, que pueden solicitar más información si la necesitan.
En resumen, ejecutar un nodo de Ethereum no solo brinda beneficios personales en términos de privacidad y seguridad, sino que también contribuye a la salud, seguridad y resiliencia operativa de la red en su conjunto.
Espero que el artículo haya sido informativo, yo todavía no estoy corriendo un full node, generalmente uso providers externos, pero si en algún momento me preocupara mi privacidad, sin duda me parece una buena idea, creo que además de eso es un buen proyecto de fin de semana para divertirse un poco.
Referencias#
- Antonopoulos, A. M., & Wood, G. (2018). “Mastering Ethereum: Building Smart Contracts and DApps.” O’Reilly Media.
- Ethereum Developers Documentation. “Nodos y Clientes”. Recuperado de https://ethereum.org/es/developers/docs/nodes-and-clients/