Ir al contenido principal
Change page

Nodos y clientes

Última edición: , 1 de abril de 2024

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. Se requieren dos piezas separadas de software (conocidas como «clientes») para fomar un nodo.

Requisitos previos

Debe estar familiarizado con el concepto de una red entre pares y los aspectos básicos sobre la EVM antes de profundizar y ejecutar su propia instancia de un cliente de Ethereum. Eche un vistazo a nuestra Introducción a Ethereum.

Si no está familiarizado con los nodos, le recomendamos que primero lea nuestra sencilla introducción de Cómo ejecutar un nodo de Ethereum.

¿Qué son los nodos y clientes?

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 cliente es una implementación de Ethereum que comprueba los datos con respecto a las normas de un protocolo y protege la red. Un nodo necesita ejecutar dos clientes: un cliente de consenso y un cliente de ejecución.

  • El cliente de ejecución (también conocido como el ingeniero de ejecución, cliente EL, o anteriormente cliente Eth1) 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.
  • El cliente de consenso (también conocido como el nodo de baliza, cliente CL y anteriormente cliente Eth2) 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 participe en la protección de la red.

Estos clientes trabajan juntos para hacer un seguimiento de la cadena de encabezado de Ethereum y permitir que los usuarios interactúen con la red Ethereum. El diseño modular con múltiples piezas de software trabajando juntas se llama complejidad encapsulada(opens in a new tab). Este enfoque hizo que fuera más fácil ejecutar La Fusión sin problemas; hace que el software del cliente sea más fácil de mantener y desarrollar; y permite la reutilización de clientes individuales, por ejemplo, en el ecosistema de capa 2.

Ejecución combinada y clientes de consenso Diagrama simplificado de una ejecución acoplada y cliente de consenso.

Diversidad de clientes

Ambos clientes de ejecución y clientes de consenso existen en una variedad de lenguajes de programación desarrollados por diferentes equipos.

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.

Más información sobre la diversidad de clientes.

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:

Nodos de rastreamiento en la red

Múltiples rastreadores ofrecen una visión general en tiempo real de los nodos en la red Ethereum. Tenga en cuenta que debido a la naturaleza de las redes descentralizadas, estos rastreadores sólo pueden proporcionar una vista limitada de la red y podrían ofrecer diferentes resultados.

Tipos de nodos

Si desea ejecutar su propio nodo, debe entender que existen diferentes tipos de nodos que consumen datos de forma diferente. De hecho, los clientes pueden ejecutar 3 tipos diferentes de nodos: ligero, completo y de almacenamiento. Además, hay opciones de diferentes estrategias de sincronización que permiten un tiempo de sincronización más rápido. La sincronización se refiere a la rapidez con que puede obtener la información más actualizada sobre el estado de Ethereum.

Nodo completo

Los nodos completos hacen una validación bloque a bloque de la cadena de bloques, incluyendo la descarga y verificación del cuerpo del bloque e información sobre el estado de cada bloque. Hay diferentes clases de nodo completo: algunas parten del bloque original y verifican cada bloque en el historial de la cadena de bloques. Otras comienzan su verificación en un bloque más reciente que confían en que sea válido (por ejemplo, la «sincronía instantánea» de Geth). Independientemente de dónde comience la verificación, los nodos completos solo guardan una copia local de los datos relativamente recientes (normalmente los 128 bloques recientes de msot), lo que permite eliminar los datos más antiguos para ahorrar espacio en el disco. Los datos más antiguos se pueden regenerar cuando se necesiten.

  • Almacena datos completos de la cadena de bloques (aunque esto se recorta periódicamente para que un nodo completo no almacene todos los datos de estado de vuelta al origen).
  • Participa en la validación de bloques, verifica todos los bloques y estados.
  • Todos los estados pueden recuperarse del almacenamiento local o regenerarse de «instantáneas» por un nodo completo.
  • Sirve a la red y proporciona datos si se le solicita.

Nodo de almacenamiento

Los nodos de archivo son nodos completos que verifican cada bloque de genesis y nunca eliminan ninguno de los datos descargados.

  • Almacena todo lo que se guarda en el nodo completo y construye un archivo de estados históricos. Esto es necesario si quiere consultar algún elemento como el saldo de una cuenta en el bloque número 4.000.000, o simplemente probar sus propias transacciones sin minarlas usando el seguimiento.
  • Estos datos representan unidades de terabytes, lo que hace que los nodos de almacenamiento sean menos atractivos para el usuario medio, pero que pueden ser útiles para servicios como los exploradores de bloques, proveedores de carteras y análisis de cadena.

Sincronizar clientes en algún modo distinto al almacenamiento (archivo) ocasionará que los datos de la cadena de bloques resultante sean truncados. Esto significa que no hay un archivo de todo el historial de estados, pero el nodo completo es capaz de construirlo bajo demanda.

Más información sobre Nodos de almacenamiento.

Nodo ligero

En lugar de descargar cada bloque, los nodos ligeros solo descargan los encabezados de los bloques. Estos encabezados contienen información resumida sobre el contenido de los bloques. Cualquier otra información que requiera el nodo ligero se solicita a un nodo completo. El nodo ligero puede entonces verificar independientemente los datos que recibe frente a raíces de estado en los encabezados de bloque. Los nodos ligeros permiten a los usuarios participar en la red Ethereum sin el potente hardware o amplitud de achura de banda necesarios para ejecutar nodos completos. Con el tiempo, los nodos ligeros podrían ejecutarse en teléfonos móviles o dispositivos pequeños. Los nodos ligeros no participan en el consenso (es decir, no pueden ser mineros/validadores), pero sí pueden acceder a la cadena de bloques de Ethereum con las mismas garantías de funcionalidad y seguridad que un nodo completo.

Los clientes ligeros son un área de desarrollo activo para Ethereum y esperamos ver pronto nuevos clientes ligeros para la capa de consenso y la capa de ejecución. También hay rutas potenciales para proporcionar datos ligeros del cliente a través de la red de intercambio de información (o Gossip)(opens in a new tab). Lo que supone una ventaja, ya que la red de intercambio de información podría soportar una red de nodos ligeros sin necesidad de nodos completos para servir solicitudes.

Ethereum aún no soporta una gran cantidad de nodos ligeros, pero se espera que el soporte para nodos ligeros se desarrolle rápidamente en un futuro cercano. En particular, clientes como Nimbus(opens in a new tab), Helios(opens in a new tab)y LodeStar(opens in a new tab) están actualmente muy centrados en nodos ligeros.

¿Por qué debería ejecutar un nodo de Ethereum?

Ejecutar un nodo le permite usar Ethereum de forma directa y privada, sin confianza, mientras soporta la red manteniéndola más robusta y descentralizada.

Beneficios para usted

Ejecutar su propio nodo le permite utilizar Ethereum de una manera realmente privada, autosuficiente y sin confianza. No necesita confiar en la red, porque usted mismo puede verificar los datos con su cliente. «No confíe, verifique» es un mantra popular en la cadena de bloques.

  • Su nodo verifica todas las transacciones y bloquea aquellas que vayan en contra de las reglas del consenso en sí. Esto significa que no tiene que depender de ningún otro nodo de la red o confiar plenamente en ellos.
  • Puede utilizar una cartera Ethereum con su propio nodo. Puede usar DApps de forma más segura y privada, porque no tendrá que filtrar sus direcciones y saldos a intermediarios. Todo puede ser verificado con tu propio cliente. MetaMask(opens in a new tab), Frame(opens in a new tab) y muchas otras carteras ofrecen importación RPC, permitiéndoles usar su nodo.
  • Puede ejecutar y tener otros servicios autoalojados que dependen de los datos de Ethereum. Por ejemplo, podría ser un validador de la cadena de baliza como la capa 2, infraestructura, exploradores de bloques, procesadores de pagos, etc.
  • Puede proporcionar sus propias terminales RPC personalizadas. Incluso podría ofrecer estas terminales públicamente a la comunidad para ayudarles a evitar los grandes proveedores centralizados.
  • Puede conectarse a su nodo usando la comunicación entre procesos (IPC) o reescribiendo el nodo para cargar su programa como un complemento. Esto otorga poca latencia, lo que ayuda mucho, p. ej., al procesar una gran cantidad de datos usando bibliotecas Web 3, o cuando necesite reemplazar sus transacciones lo más rápido posible (por ejemplo, operaciones ventajistas o «frontrunning»).
  • Puede participar directamente con ETH para asegurar la red y ganar recompensas. Vea Cómo hacer participaciones en solitario para empezar.

Cómo accede a Ethereum a través de su aplicación y nodos

Beneficios de la red

Un conjunto diverso de nodos es importante para la salud, seguridad y resiliencia operativa de Ethereum.

  • Los nodos completos hacen cumplir las reglas de consenso, de modo que no se les pueda engañar para que acepten bloques que no siguen dichas reglas. Esto proporciona seguridad adicional a la red, porque si todos los nodos fueran nodos ligeros y no realizaran la verificación completa, los validadores podrían atacar la red.
  • En caso de un ataque que supere las defensas criptoeconómicas de la prueba de participación, se puede realizar una recuperación social por nodos completos eligiendo seguir la cadena honesta.
  • Más nodos en la red dan como resultado una red más diversa y robusta, que es el objetivo absoluto de la descentralización, y que permite un sistema resistente a la censura y de confianza.
  • Los nodos completos proporcionan acceso a los datos de la cadena de bloques para clientes ligeros que dependen de ellos. Los nodos ligeros no almacenan la cadena de bloques completa, sino que verifican los datos usando los estados raíz en los encabezamientos de los bloques. Pueden solicitar más información de los nodos completos si la necesitan.

Si ejecuta un nodo completo, toda la red Ethereum se beneficia de él, incluso si no se ejecuta un validador.

Ejecución de tu propio nodo

¿Le interesaría ejecutar su propio cliente de Ethereum?

En nuestra página de Cómo ejecutar un nodo puede ver una sencilla introducción apta para principiantes.

Si es usted un usuario más avezado y quiere profundizar más sobre cómo Ejecutar su propio nodo.

Alternativas

Configurar su propio nodo puede costarle tiempo y recursos, pero no siempre necesita ejecutar su propia instancia. En este caso, puede utilizar un proveedor de API externo. Para obtener una visión general sobre el uso de estos servicios, consulte la página Nodos como servicio.

Si alguien ejecuta un nodo de Ethereum con una API pública en su comunidad, puede apuntar sus carteras a un nodo comunitario a través de RPC personalizado y ganar más privacidad que con algún tercero de confianza aleatorio.

Por otra parte, si ejecuta un cliente, puede compartirlo con amigos suyos que lo necesiten.

Clientes de ejecución

La comunidad de Ethereum tiene múltiples clientes de ejecución de código abierto (anteriormente conocidos como «clientes Eth1», o simplemente «clientes de Ethereum»), desarrollados por diferentes equipos mediante el uso de diferentes lenguajes de programación. Esto hace que la red sea más sólida y más diversa. 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.

En esta tabla se resumen los diferentes clientes. Todos ellos pasan pruebas de cliente(opens in a new tab) y se gestionan de manera activa para mantenerse actualizados con actualizaciones de red.

ClienteIdiomaSistemas operativosRedesEstrategias de sincronizaciónLima de estado
Geth(opens in a new tab)GoLinux, Windows, macOSRed principal, Sepolia, GoerliInstantánea, completaArchivo, podado
Nethermind(opens in a new tab)C#, .NETLinux, Windows, macOSRed principal, Sepolia, Goerli y másInstantánea (sin servir), rápida, completaArchivo, podado
Besu(opens in a new tab)JavaLinux, Windows, macOSMainnet, Sepolia, GoerliInstantánea, rápida, completaArchivo, podado
Erigon(opens in a new tab)GoLinux, Windows, macOSMainnet, Sepolia, GoerliCompletaArchivo, podado
Reth(opens in a new tab)RustLinux, Windows, macOSRed principal, Sepolia, Goerli y másCompletaArchivo, podado

Si desea obtener más información sobre redes compatibles, puede leer el apartado de Redes de Ethereum.

Cada cliente tiene casos de uso y ventajas únicas, por lo que debe elegirlo basándose en sus propias preferencias. La diversidad permite que las implementaciones se centren en diferentes características y públicos. Puede elegir un cliente en función de las características, el soporte, el lenguaje de programación o las licencias.

Besu

Hyperledger Besu es un cliente empresarial de Ethereum para redes públicas y autorizadas. Ejecuta todas las características de la red principal de Ethereum, desde el seguimiento hasta GraphQL, ejerce una amplia supervisión y es compatible con ConsenSys, tanto en canales comunitarios abiertos como a través de SLA comerciales para empresas. Está escrito en Java y dispone de licencia Apache 2.0.

La extensa documentación(opens in a new tab) de Besu le guiará a través de todos los detalles y sus características y configuraciones.

Erigon

Erigon, antiguamente conocido como Turbo Geth, es una variante de Go Ethereum orientada hacia la velocidad y la eficiencia del espacio en el disco. Erigon es una implementación completamente restructurada de Ethereum, actualmente escrita en Go pero con implementaciones en otros lenguajes en desarrollo. El objetivo de Erigon es proporcionar una implementación más rápida, modular y optimizada de Ethereum. Puede realizar una sincronización completa de nodos de archivo usando menos de 2 Tb de espacio en disco, en menos de 3 días.

Go-Ethereum

Go-Ethereum (Geth, para abreviar) es una de las implementaciones originales del protocolo de Ethereum. Actualmente, es el cliente más difundido con la mayor base de usuarios y variedad de herramientas para usuarios y desarrolladores. Está escrito en Go, es de código totalmente abierto y se comercializa con la licencia GNU LGPL v3.

Descubra más sobre Geth en su documentación(opens in a new tab).

Nethermind

Nethermind es una implementación de Ethereum diseñada con el bloque de C# .NET, y se ejecuta en todas las plataformas importantes, como ARM. Ofrece un gran rendimiento con:

  • una máquina virtual optimizada
  • acceso al estado
  • redes y características importantes, como paneles de control Prometheus/Graphana, asistencia de registro para empresas de seg, rastreo de JSON RPC y complementos de análisis.

Además, Nethermind dispone de documentación detallada(opens in a new tab), una sólido soporte para desarrolladores, una comunidad en línea y asistencia ininterrumpida disponible para usuarios premium.

Clientes de consenso

Existen múltiples clientes de consenso (antes conocidos como clientes Eth2) que respaldan las actualizaciones de consenso. Son responsables de toda la lógica relacionada con el consenso, incluido el algoritmo de elección de bifurcación, el procesamiento de certificados y la gestión de prueba de participación recompensas y penalizaciones.

ClienteIdiomaSistemas operativosRedes
Lighthouse(opens in a new tab)RustLinux, Windows, macOSCadena de baliza, Goerli, Pyrmont, Sepolia, Ropsten y más
Lodestar(opens in a new tab)TypeScriptLinux, Windows, macOSCadena de baliza, Goerli, Pyrmont, Sepolia, Ropsten y más
Nimbus(opens in a new tab)NimLinux, Windows, macOSBeacon Chain, Goerli, Pyrmont, Sepolia, Ropsten y más
Prysm(opens in a new tab)GoLinux, Windows, macOSCadena de baliza, Goerli, Pyrmont, Sepolia, Ropsten y más
Teku(opens in a new tab)JavaLinux, Windows, macOSCadena de baliza, Goerli, Pyrmont, Sepolia, Ropsten y más

Lighthouse

Lighthouse es una implementación de cliente de consenso en Rust bajo la licencia Apache-2.0. La mantiene Sigma Prime y está estable y lista para la producción desde el origen de la cadena de baliza. Depende de varias empresas, participaciones agrupadas e individuos. Su objetivo es ser segura, ejecutable e interoperable en una amplia gama de entornos, desde PC de escritorio hasta sofisticados despliegues automatizados.

La documentación se puede encontrar en el Manual de Lighthouse(opens in a new tab)

Lodestar

Lodestar es una implementación de cliente de consenso lista para la producción y escrita en Typescript bajo licencia LGPL-3.0. La mantiene ChainSafe Systems y es el más reciente de los clientes de consenso para participantes en solitario, desarrolladores e investigadores. Lodestar consiste en un cliente de nodos y validador de baliza basado en implementaciones en JavaScript de protocolos Ethereum. Lodestar tiene como objetivo mejorar la facilidad de uso de Ethereum con clientes ligeros, ampliar la accesibilidad a un grupo más grande de desarrolladores y contribuir aún más a la diversidad de los ecosistemas.

Puede encontrar más información en nuestro sitio web de Lodestar(opens in a new tab)

Nimbus

Lighthouse es una implementación de cliente de consenso escrita en Rust bajo la licencia Apache-2.0. Es un cliente listo para la producción que ya lo están usando los participantes en solitario o las participaciones agrupadas. Nimbus está diseñado para la eficiencia de los recursos, facilitando el funcionamiento en dispositivos restringidos a recursos e infraestructura empresarial con la misma facilidad, sin comprometer la estabilidad ni recompensar el rendimiento. Una huella de recursos más ligera significa que el cliente tiene un mayor margen de seguridad cuando la red está sometida a estrés.

Encontrará más información en el manual de Nimbus(opens in a new tab)

Prysm

Prysm es un cliente de consenso de código abierto completamente escrito en Go bajo la licencia GPL-3.0. Cuenta con una interfaz de usuario opcional de la aplicación web y prioriza la experiencia del usuario, la documentación y la configurabilidad tanto para usuarios interesados como institucionales.

Visite documentos de Prysm(opens in a new tab) para obtener más información.

Teku

Teku es uno de los clientes originales desde los orígenes de la cadena de baliza. Junto con los objetivos habituales (seguridad, robustez, estabilidad, facilidad de uso, rendimiento), Teku específicamente pretende cumplir con todos los estándares de consenso de los clientes.

Teku ofrece opciones de despliegue muy flexibles. El nodo de baliza y el cliente validador pueden ejecutarse juntos como un solo proceso, lo que es extremadamente conveniente para los interesados en la participación en solitario, o los nodos pueden ejecutarse por separado para sofisticadas operaciones de participación. Además, Teku es completamente interoperable con Web3Signer(opens in a new tab) para firmar la seguridad clave y protección de recortes.

Está escrito en Java y dispone de licencia Apache 2.0. Es desarrollado por el equipo de Protocols de ConsenSys que también es responsable de Besu y Web3Signer. Obtenga más información en el manual de Teku(opens in a new tab).

Modos de sincronización

Para seguir y verificar los datos actuales en la red, el cliente Ethereum debe sincronizarse con el último estado de red. Para ello, es necesario descargar datos de pares, comprobar criptográficamente su integridad y construir una base de datos local de cadenas de bloques.

Los modos de sincronización representan diferentes enfoques de este proceso con diferentes compensaciones. Los clientes también varían en su implementación de algoritmos de sincronización. Consulte siempre la documentación oficial del cliente elegido para obtener información específica sobre su implementación.

Modos de sincronización de la capa de ejecución

Sincronización completa del archivo

La sincronización total descarga todos los bloques (incluidos los encabezados, las transacciones y los recibos) y va generando de manera creciente el estado de la cadena de bloques al ejecutar cada bloque desde el principio.

  • Minimiza la confianza y ofrece la máxima seguridad al verificar cada transacción.
  • Debido al número creciente de transacciones, puede llevar de días a semanas procesar todas las transacciones.

Sincronización instantánea completa

La sincronización instantánea verifica la cadena bloque por bloque, al igual que una sincronización de archivo completa; sin embargo, en lugar de comenzar en el bloque inicial, comienza en el punto de control «de confianza» más reciente que se sabe que es parte de la verdadera cadena de bloques. El nodo guarda puntos de control periódicos mientras elimina datos con mayor antigüedad a partir de una fecha concreta. Esas instantáneas se utilizan para regenerar los datos de estado cuando se necesitan, en lugar de tener que almacenarlos todos para siempre.

  • Es la estrategia de sincronización más rápida, actualmente por defecto en la red principal de Ethereum.
  • Usa mucho menos espacio del disco y ancho de banda de red sin sacrificar la seguridad.

Más sobre la sincronización instantánea(opens in a new tab)

Sincronización ligera

El modo de cliente ligero descarga todos los encabezados de los bloques, los datos de bloques y luego verifica algunos de manera aleatoria. Solamente sincroniza un extremo de la cadena desde el punto de control de confianza.

  • Obtiene solamente el último estado mientras confía en los desarrolladores y en el mecanismo de consenso.
  • Cliente listo para usar con el estado actual de la red en pocos minutos.

NB La sincronización ligera aún no funciona con la prueba de participación en Ethereum. ¡Las nuevas versiones de la sincronización ligera saldrán próximamente!

Más información sobre clientes ligeros

Modos de sincronización de la capa de consenso

Sincronización optimista

La sincronización óptima es una estrategia de sincronización después de La Fusión diseñada para ser compatible opt-in y backwards permitiendo que los nodos de ejecución se sincronicen a través de métodos establecidos. El motor de ejecución puede importar bloques de baliza optimistamente sin verificarlos completamente, encontrar el último encabezado y luego comenzar a sincronizar la cadena con los métodos anteriores. Seguidamente, una vez que el cliente de ejecución se haya actualizado, informará al cliente de consenso de la validez de las transacciones en la cadena de baliza.

Más sobre la sincronización optimista(opens in a new tab)

Sincronización de punto de control

La sincronización de punto de control, también conocida como sincronización de subjetividad débil, crea una experiencia de usuario superior para sincronizar el nodo de baliza. Se basa en supuestos de subjetividad débil que permiten la sincronización de la cadena de baliza desde un punto de control de la subjetividad débil reciente en lugar del origen. La sincronización de punto de control hace que el tiempo de sincronización inicial sea significativamente más rápido con supuestos de confianza similares como la sincronización desde su

.

En la práctica, esto significa que el nodo se conecta a un servicio remoto para descargar estados finalizados recientes y continúa verificando datos desde ese punto. Se confía en que terceros faciliten los datos y deben ser seleccionados con cuidado.

Más en punto de control sincronizado(opens in a new tab)

Más lectura

Existe mucha información acerca de los clientes de Ethereum en Internet. Estos son algunos de los recursos que le pueden resultar útiles.

¿Le ha resultado útil este artículo?