Nodos y clientes
Última edición: , Invalid DateTime
Ethereum es una red distribuida de ordenadores (conocidos como "nodos") que ejecutan software capaz de verificar bloques y datos de transacciones. Necesitas una aplicación, conocida como cliente, para "ejecutar" un nodo en tu dispositivo.
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 eres nuevo en el tema de los nodos, te recomendamos primero revisar nuestra amigable introducción en ejecutando un nodo Ethereum.
¿Qué son los nodos y clientes?
"Nodo" se refiere a una pieza de software cliente en ejecución. Un cliente es una implementación de Ethereum, que verifica todas las transacciones en cada bloque, manteniendo la red segura y la precisión de los datos.
Puedes observar la red de Ethereum en tiempo real accediendo este mapa de nodos(opens in a new tab).
Existen varios clientes de Ethereum, en una variedad de lenguajes de programación como Go, Rust, JavaScript, Typescript, Python, C# .NET, Nim y Java. Lo que estas implementaciones tienen en común es que todas siguen una especificación formal (originalmente, el libro amarillo de Ethereum(opens in a new tab)). Esta especificación determina cómo funcionan la red de Ethereum y las funciones de la blockchain.
(opens in a new tab)
Diagrama simplificado de las características del cliente de Ethereum.
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 diferentes tipos 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
- Almacena datos completos de la cadena de bloques.
- Participa en la validación de bloques, verifica todos los bloques y estados.
- Todos los estados pueden derivarse de un nodo completo.
- Sirve a la red y proporciona datos si se le solicita.
Nodo ligero
- Almacena la cadena de cabecera y solicita todo lo demás.
- Puede verificar la validez de los datos contra las raíces del estado en las cabeceras de bloques.
- Es útil para dispositivos de baja capacidad, como dispositivos embebidos o teléfonos móviles, que no pueden permitirse almacenar gigabytes de datos de blockchain.
Nodo de almacenamiento
- Almacena todo lo que se guarda en el nodo completo y construye un archivo de estados históricos. Esto es necesario si quieres consultar algún elementos como el saldo de una cuenta en el bloque número 4.000.000 o simplemente probar sus propias transacciones sin minarlas usando OpenEthereum(opens in a new tab).
- Estos datos representan unidades de terabytes lo que hace que los nodos de archivo sean menos atractivos para los usuarios medios, pero pueden ser útiles para servicios como los exploradores de bloques, proveedores y análisis de cadena.
Sincronizar clientes en algún modo distinto al de almacenamiento (archivo) resultará en datos del blockchain truncados. Esto significa que no hay un archivo de todo el histórico de estados, pero el nodo es capaz de construirlo bajo demanda.
¿Por qué debería ejecutar un nodo de Ethereum?
Ejecutar un nodo te permite usar Ethereum de forma confiable y privada mientras das soporte al ecosistema.
Beneficios para ti
Ejecutar tu propio nodo te permite utilizar Ethereum de una manera realmente privada, autosuficiente y sin confianza. No necesitas confiar en la red porque tú mismo puedes verificar los datos con tu cliente. "No confíes, verifica" es un mantra popular en blockchain.
- Tu nodo verifica todas las transacciones y bloquea aquellas que vayan en contra de las reglas del consenso por sí mismo. Esto significa que no tienes que depender de ningún otro nodo de la red o confiar plenamente en ellos.
- No tendrás que filtrar tus direcciones y saldos a nodos aleatorios. Todo puede ser verificado con tu propio cliente.
- Tu dapp puede ser más segura y privada si utilizas tu propio nodo. MetaMask(opens in a new tab), MyEtherWallet(opens in a new tab) y otras carteras pueden ser configuradas fácilmente para apuntar a tu nodo local.
- Puede programar sus propios puntos de conexión RPC.
- 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 es necesario para reemplazar sus transacciones tan rápido como sea posible (es decir, ejecución frontal).
Beneficios de la red
Un conjunto diverso de nodos es importante para la salud, seguridad y resiliencia operativa de Ethereum.
- Proporcionan acceso a los datos de blockchain para clientes ligeros que dependen de ello. En picos de alto uso, es necesario que hayan suficientes nodos completos para ayudar a los nodos ligeros a sincronizarse. Los nodos ligeros no almacenan la cadena de bloques completa, sino que verifican los datos usando los estados raíz en las cabeceras de los bloques. Ellos pueden solicitar más información de los bloques si lo necesitan.
- Los nodos completos hacen cumplir las reglas de consenso de prueba de trabajo, de modo que no se les puede engañar para que acepten bloques que no siguen dichas reglas. Esto proporciona seguridad extra a la red porque, si todos los nodos fueran nodos ligeros y no realizaran la verificación completa, los mineros podrían atacar la red, y por ejemplo, crear bloques con mayores recompensas.
Si ejecuta un nodo completo, toda la red Ethereum se beneficia de él.
Ejecución de tu propio nodo
¿Está interesado/a en ejecutar su propio cliente de Ethereum?
Para una introducción para principiantes, visita nuestra página de ejecuta un nodo para obtener más información.
If you're more of a technical user, learn how to spin up your own node with the command line!
Proyectos
Seleccionar un cliente y seguir sus instrucciones
ethnode - Ejecución de un nodo de Ethereum (Geth u OpenEthereum) en un entorno local
DAppNode - Una GUI del sistema operativo para ejecutar nodos Web3, incluidos Ethereum y la cadena de baliza, en una máquina dedicada
Recursos
- Ejecutando nodos completos de Ethereum: Una guía completa(opens in a new tab) Nov 7, 2019 - Justin Leroux
- Hoja de características clave de la configuración de nodos(opens in a new tab), 5 de enero de 2019, Afri Schoeden
- Cómo instalar y ejecutar un nodo Geth(opens in a new tab) Oct 4, 2020 - Sahil Sen
- ¿Como instalar, ejecutar y abrir Ethereum (fka. Parity) Nodo(opens in a new tab) _Septiembre 22, 2020 - Sahil Sen_ar
Alternativas
Ejecutar su propio nodo puede resultar complicado y no siempre necesita ejecutar su propia instancia. En estos casos, puede usar un proveedor de API de terceros como Infura(opens in a new tab), Alchemy(opens in a new tab) o QuikNode(opens in a new tab). De forma alternativa, ArchiveNode(opens in a new tab) es un nodo de archivo financiado por la comunidad que pretende reunir datos de archivo en la cadena de bloques de Ethereum para desarrolladores independientes que de otra manera no puedan permitírselo. Para obtener una visión general sobre el uso de estos servicios, consulta la página nodos como un servicio.
Si alguien ejecuta un nodo de Ethereum con una API pública en su comunidad, podrá vincular su cartera (como MetaMask) a un nodo de la comunidad a través de Custom RPC(opens in a new tab) y obtener una mayor privacidad que con un tercero aleatorio.
Por otra parte, si ejecuta un cliente, puede compartirlo con sus amigos que lo necesiten.
Cliente de ejecución (anteriormente, «clientes Eth1»)
La comunidad de Ethereum tiene múltiples clientes de ejecución de código abierto (antes 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 mas 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.
Cliente | Idioma | Sistemas operativos | Redes | Estrategias de sincronización | Lima de estado |
---|---|---|---|---|---|
Geth(opens in a new tab) | Go | Linux, Windows, macOS | Mainnet, Görli, Rinkeby, Ropsten | Snap, Full | Archivo, podado |
Nethermind(opens in a new tab) | C#, .NET | Linux, Windows, macOS | Mainnet, Görli, Ropsten, Rinkeby, etc. | Fast, Beam, Archive | Archivo, podado |
Besu(opens in a new tab) | Java | Linux, Windows, macOS | Mainnet, Rinkeby, Ropsten, Görli, and more | Rápido, completo | Archivo, podado |
Erigon(opens in a new tab) | Go | Linux, Windows, macOS | Mainnet, Görli, Rinkeby, Ropsten | Full | Archivo, podado |
OpenEthereum (Deprecated)(opens in a new tab) | Rust | Linux, Windows, macOS | Mainnet, Kovan, Ropsten, etc. | Warp, Completo | Archivo, eliminado |
Tenga en cuenta que OpenEthereumha quedado obsoleta(opens in a new tab)y no tiene mantenimiento. Debe usarla con precaución y, preferiblemente, cambiar de cliente.
Si desea obtener más información sobre redes compatibles, puede leer el apartado de Redes de Ethereum.
Ventajas de las diferentes implementaciones
Cada cliente tiene casos de uso y ventajas únicas, por lo que debe elegir 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, la asistencia, el lenguaje de programación o las licencias.
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.
OpenEthereum
OpenEthereum es un cliente de Ethereum rápido, rico en recursos y avanzado en CLI. Está construido para proporcionar la infraestructura esencial para ofrecer servicios rápidos y fiables que requieren una rápida sincronización y un máximo de tiempo de actividad. El objetivo de OpenEthereum es ser el cliente de Ethereum más rápido, ligero y seguro. Proporciona un código base limpio y modular para:
- una personalización sencilla.
- una integración ligera en servicios o productos.
- una memoria y una huella de almacenamiento mínimas.
OpenEthereum se desarrolla mediante el uso del lenguaje de programación de vanguardia de Rust y se comercializa con la licencia GPLv3.
Tenga en cuenta que OpenEthereumha quedado obsoleta(opens in a new tab)y no tiene mantenimiento. Debe usarla con precaución y, preferiblemente, cambiar de cliente.
Nethermind
Nethermind es una implementación de Ethereum diseñada con la pila 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ólida asistencia para desarrolladores, una comunidad en línea y asistencia ininterrumpida disponible para usuarios prémium.
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.
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 rediseñada de Ethereum, actualmente escrita en Go pero con implementaciones planeadas en otros idiomas. 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
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.
Resumen de las estrategias
Resumen general de los enfoques de sincronización utilizados en clientes listos para la red principal:
Sincronización total
La sincronización total descarga todos los bloques (incluidos los encabezados, las transacciones y los recibos) y va generando de manera creciente el estado del 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 rápida
La sincronización rápida descarga todos los bloques (incluidos los encabezados, las transacciones y los recibos), comprueba todos los encabezados, descarga el estado y lo compara con los encabezados.
- Se basa en la seguridad del mecanismo de consenso.
- La sincronización tarda solo algunas horas.
Sincronización ligera
El modo ligero del cliente descarga todos los encabezados de los bloques, la información de los 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.
Más sobre clientes ligeros(opens in a new tab)
Sincronización instantánea
Implementado por Geth. El uso de instantáneas dinámicas entregadas por pares recupera todos los datos de la cuenta y el almacenamiento sin descargar los nodos de prueba intermedios y, a continuación, reconstruye dichos nodos de prueba Merkle localmente.
- La estrategia de sincronización más rápida desarrollada por Geth, actualmente es su valor predeterminado
- Ahorra mucho uso de espacio en 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 Warp
Implementado por OpenEthereum. Los nodos generan de manera regular una instantánea crítica de estado de consenso y cualquier par puede obtener estas instantáneas a través de la red, lo que permite llevar a cabo una rápida sincronización desde este punto.
- El modo de sincronización más rápido y predeterminado de OpenEthereum depende de las instantáneas estáticas entregadas por los pares.
- Estrategia similar a la sincronización instantánea pero sin algunos beneficios de seguridad.
Más información sobre la sincronización Warp(opens in a new tab)
Sincronización Beam
Implementado por Nethermind y Trinity. Funciona como una sincronización rápida, pero, además, descarga los datos necesarios para ejecutar los bloques más recientes, lo que permite realizar consultas en la cadena poco después de la inicialización.
- Sincroniza el estado primero y le permite realizar consultas RPC en pocos minutos.
- Al estar todavía en desarrollo y no ser totalmente fiable, la sincronización en segundo plano se ralentiza y las respuestas RPC podrían fallar.
Más información sobre la sincronización Beam(opens in a new tab)
Configuración en cliente
Los clientes ofrecen múltiples opciones de configuración para satisfacer sus necesidades. Escoja el más apropiado para usted según el nivel de seguridad, los datos disponibles y el coste. Además del algoritmo de sincronización, también puede configurar la limpieza de datos desactualizados. La limpieza permite eliminar datos desactualizados, p. ej., eliminar nodos de prueba de estado ya inaccesibles desde los últimos bloques.
Lea con atención la documentación del cliente o la página de ayuda para descubrir cuál es el modo de sincronización predeterminado. Puede definir el tipo de sincronización que prefiera de la siguiente manera:
Configuración de la sincronización ligera GETH(opens in a new tab) o ERIGON(opens in a new tab)
geth: modo de sincronización «ligero»
Para obtener más información, visite el tutorial sobre cómo ejecutar un nodo ligero Geth.
Configuración de la sincronización completa con archivado en Besu(opens in a new tab)
besu --sync-mode=FULL
Como cualquier otra configuración, puede establecerse con un parámetro de inicialización o en el archivo de configuración. Otro ejemplo es Nethermind(opens in a new tab), que le pide que elija la configuración durante la inicialización y crea un archivo de configuración.
Clientes de consenso (anteriormente, clientes Eth2)
Existen múltiples clientes de consenso (antes conocidos como clientes "Eth2") que respaldan las actualizaciones de conseso. They are running the Beacon Chain and will provide proof-of-stake consensus mechanism to execution clients after The Merge.
Cliente | Idioma | Sistemas operativos | Redes |
---|---|---|---|
Teku(opens in a new tab) | Java | Linux, Windows, macOS | Cadena de baliza, Goerli |
Nimbus(opens in a new tab) | Nim | Linux, Windows, macOS | Cadena de baliza, Goerli |
Lighthouse(opens in a new tab) | Rust | Linux, Windows, macOS | Cadena de baliza, Goerli, Pyrmont |
Lodestar(opens in a new tab) | TypeScript | Linux, Windows, macOS | Cadena de baliza, Goerli |
Prysm(opens in a new tab) | Go | Linux, Windows, macOS | Cadena de baliza, Gnosis, Goerli, Pyrmont |
Hardware
Los requisitos de hardware difieren según el cliente, pero por lo general no son tan altos, ya que el nodo sólo necesita mantenerse sincronizado. No lo confundas con la minería, que necesita mucha más potencia computacional. Sin embargo, el tiempo de sincronización y el rendimiento mejoran si se dispone de hardware más potente. Según tus necesidades y deseos, Ethereum puede ejecutarse en tu ordenador, servidor de casa, ordenador de una sola placa o servidores privados virtuales en la nube.
Una forma fácil para ejecutar tu propio nodo es usando cajas de rápida instalación, como DAppNode(opens in a new tab). Proporciona hardware para ejecutar clientes y aplicaciones que dependen de ellos con una interfaz de usuario simple.
Requerimientos
Antes de instalar un cliente, asegúrate de que tu equipo tiene suficientes recursos para ejecutarlo. Los requisitos mínimos y recomendados se pueden encontrar a continuación, pero la parte clave es el espacio en disco. La sincronización de la cadena de Ethereum conlleva una carga intensiva de input/output (entrada y salida de datos). Se recomienda usar una unidad de estado sólido (SSD). Para ejecutar un cliente Ethereum en HDD, necesitarás al menos 8 GB de RAM para usar como caché.
Requisitos mínimos
- CPU con dos o más núcleos
- 4 GB de RAM mínimo con SSD, 8 GB o más si tiene un HDD
- 8 o más MBit/s de banda ancha
Especificaciones recomendadas
- CPU rápida con cuatro o más núcleos
- 16 GB o más de RAM
- SSD rápido con al menos 500 GB de espacio libre
- 25 o más MBit/s de banda ancha
El modo de sincronización que elijas afectará a los requerimientos de espacio, pero hemos estimado el espacio en disco que necesitarás para cada cliente a continuación.
Cliente | Tamaño del disco (sincronización rápida) | Tamaño del disco (archivo completo) |
---|---|---|
Geth | 400 GB o más | 6 TB o más |
OpenEthereum | 280 GB o más | 6 TB o más |
Nethermind | 200 GB o más | 5 TB o más |
Besu | 750 GB o más | 5 TB o más |
Erigon | N/A | +1 TB |
- Nota: Erigon no realiza la sincronización rápida, pero permite llevar a cabo la limpieza completa (~500 GB)
Esta gráfica muestra que los requisitos de almacenamiento están en constante cambio. Para obtener la información más reciente para Geth y OpenEthereum, consulta las secciones sobre los datos de sincronización completa(opens in a new tab) y los datos de sincronización de archivo(opens in a new tab).
Ethereum en un ordenador de una sola placa
La manera más conveniente y barata de ejecutar un nodo de Ethereum es usar un ordenador de placa única con arquitectura ARM, como Raspberry Pi. Ethereum en ARM(opens in a new tab) proporciona imágenes de clientes de Geth, Parity y Besu. Aquí podrás encontrar un simple tutorial sobre cómo construir y configurar un cliente ARM.
Los dispositivos pequeños, económicos y eficientes como estos son ideales para ejecutar un nodo desde casa.
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.
- Ethereum 101 - Parte 2 - Explicación de los nodos(opens in a new tab) – Wil Barnes, 13 de febrero de 2019
- Ejecución de los nodos completos de Ethereum: una guía para aquellas personas que se encuentren desmotivadas(opens in a new tab) – Justin Leroux, 7 de noviembre de 2019
- Análisis de los requisitos de hardware para crear un nodo validado y completo de Ethereum(opens in a new tab): Albert Palau, 24 de Septiembre de 2018
- Ejecución de un nodo Besu Hyperledger en la red principal de Ethereum: beneficios, requisitos y configuración(opens in a new tab) , Felipe Faraggi, 7 de mayo de 2020
Temas relacionados
Tutoriales relacionados
- Ejecución de un nodo con Geth : cómo descargar, instalar y ejecutar Geth. Covering syncmodes, the JavaScript console, and more.
- Convierta su Raspberry Pi 4 en un nodo validador con solo intercambiar su tarjeta MicroSD - Guía de instalación Intercambie su Raspberry Pi 4, conecte un cable ethernet, conecte el disco SSD y encienda el dispositivo para convertir el Raspberry Pi 4 en un nodo completo de Ethereum mediante la activación de la capa de ejecución (red principal) o la capa de consenso (cadena de baliza/validador).