What is Ethereum ID?

Ethereum ID: La Clave de Red y Cadena Explicada

11/09/2023

Valoración: 4.82 (8895 votos)

En el complejo y fascinante universo de Ethereum, existen conceptos técnicos que, aunque pueden parecer menores, son absolutamente fundamentales para el funcionamiento, la seguridad y la integridad de toda la red. Dos de estos pilares son el Network ID (Identificador de Red) y el Chain ID (Identificador de Cadena). A primera vista, podrían parecer intercambiables, especialmente porque a menudo comparten el mismo valor numérico, pero en realidad, cumplen funciones distintas y críticas. Comprender su propósito no solo es esencial para desarrolladores y operadores de nodos, sino también para cualquier usuario avanzado que desee profundizar en cómo Ethereum garantiza que las transacciones sean seguras y que la comunicación en su vasta red descentralizada sea coherente.

How much is $1000 in Ethereum 5 years ago?
5 years ago: If you invested $1,000 in Ethereum in 2020, your investment would be worth $11,145. 10 years ago: If you invested $1,000 in Ethereum in 2015 when it traded at $1.27, your investment would be worth nearly $3.4 million.

Estos identificadores actúan como el ADN digital de cada red Ethereum, ya sea la red principal (Mainnet), una red de prueba (testnet) o una red privada. Son la primera línea de defensa contra el caos y los errores, asegurando que un nodo que intenta conectarse a la red de prueba Sepolia no termine accidentalmente sincronizándose con la Mainnet, y que una transacción firmada para una cadena no pueda ser maliciosamente replicada en otra. A lo largo de este artículo, desglosaremos en detalle cada uno de estos identificadores, exploraremos su importancia histórica y funcional, y veremos cómo se gestionan en la práctica.

Índice de contenido

Network ID vs. Chain ID: Dos Caras de la Misma Moneda

Aunque están íntimamente relacionados, el Network ID y el Chain ID tienen responsabilidades claramente separadas. Entender esta división es el primer paso para dominar el funcionamiento interno de Ethereum.

¿Qué es el Network ID?

El Network ID es el identificador utilizado en la capa de comunicación entre pares (peer-to-peer o P2P). Su única función es gobernar cómo los nodos de Ethereum se descubren y se conectan entre sí. Piénselo como una frecuencia de radio específica: solo los nodos que están sintonizados en la misma frecuencia (el mismo Network ID) pueden comunicarse, sincronizar el estado de la cadena de bloques y propagar nuevas transacciones y bloques.

Cuando un nuevo nodo se une a la red, anuncia su Network ID. Otros nodos escucharán este anuncio y solo establecerán una conexión si el ID coincide con el suyo. Esto crea una barrera efectiva que segrega las diferentes redes de Ethereum (Mainnet, testnets, redes privadas) a nivel de red, impidiendo que los nodos de redes distintas intercambien información directamente.

¿Qué es el Chain ID?

El Chain ID, por otro lado, es un concepto más orientado a la seguridad de las transacciones. Fue introducido formalmente a través de la Propuesta de Mejora de Ethereum EIP-155 para resolver un problema de seguridad crítico conocido como "ataque de repetición" (replay attack). Su función es identificar de manera única una cadena de bloques específica en el momento de firmar una transacción.

Antes de EIP-155, las transacciones firmadas para una cadena de Ethereum podían ser válidas en otra cadena que fuera una bifurcación (fork) de la original. El Chain ID se incorpora directamente en los datos que se firman criptográficamente, lo que significa que una transacción firmada para la Mainnet (Chain ID 1) será criptográficamente inválida en cualquier otra red, como la testnet Sepolia (Chain ID 11155111).

EIP-155: El Escudo Contra los Ataques de Repetición

Para apreciar plenamente la importancia del Chain ID, es crucial entender el peligro que mitiga. Un ataque de repetición ocurre cuando un actor malicioso copia una transacción válida de una cadena de bloques y la "repite" o retransmite en otra cadena.

El ejemplo más famoso de este riesgo se hizo evidente durante la bifurcación dura (hard fork) que resultó en la creación de Ethereum (ETH) y Ethereum Classic (ETC) en 2016. Después de la bifurcación, ambas cadenas compartían el mismo historial hasta el bloque de la bifurcación. Sin un mecanismo de protección, una transacción para enviar 10 ETH en la nueva cadena de Ethereum podría ser copiada y retransmitida en la red de Ethereum Classic, resultando en el envío involuntario de 10 ETC de la misma cuenta. Esto causó una enorme confusión y pérdidas financieras.

La EIP-155 solucionó esto de manera elegante. Al incluir el Chain ID en la firma de la transacción, se creó una distinción criptográfica única para cada cadena. Ahora, cuando un usuario firma una transacción, está declarando explícitamente: "Esta transacción está destinada única y exclusivamente para la cadena con el ID X". Cualquier intento de retransmitirla en una cadena con un ID diferente fallará en la validación, protegiendo así los fondos y la integridad de cada red de forma independiente.

El Archivo Génesis: El ADN de la Cadena

Tanto el Chain ID como el Network ID se definen en un archivo de configuración fundamental conocido como el "archivo génesis" (genesis file). Este archivo es, en esencia, el certificado de nacimiento de una cadena de bloques. Define el primer bloque (el bloque génesis) y establece las reglas iniciales de la red, como la asignación inicial de fondos, el nivel de dificultad y, por supuesto, sus identificadores.

Dentro de la sección de configuración (`config`) del archivo génesis, se encuentra el parámetro `chainID`:

{ "config": { "chainID": 1981, "homesteadBlock": 0, ... }, ... }

Los clientes de Ethereum, como Besu o Geth, utilizan este archivo para inicializar un nodo. Al especificar un archivo génesis, el cliente configura automáticamente el Chain ID. Por defecto, el Network ID se establece con el mismo valor que el Chain ID, lo que explica por qué suelen ser idénticos en la mayoría de las redes públicas.

Tabla Comparativa de Identificadores de Red

A continuación, se presenta una tabla con los identificadores de las redes de Ethereum más comunes. Es vital que los desarrolladores y usuarios utilicen los correctos para evitar errores costosos.

Red Símbolo Chain ID Network ID Tipo
Mainnet ETH 1 1 Producción
Holesky ETH 17000 17000 Testnet
Sepolia ETH 11155111 11155111 Testnet
Classic ETC 61 1 Producción
Mordor ETC 63 7 Testnet

Nota: Las redes de prueba Ropsten, Rinkeby y Kiln han sido deprecadas y ya no se mantienen activas.

Modificación de Identificadores: Creando Redes Aisladas y Nuevas Cadenas

Si bien los identificadores de las redes públicas son fijos, es posible modificarlos al ejecutar una red privada. Esto abre la puerta a dos escenarios principales.

1. Sobrescribir el Network ID para aislar nodos

Un operador de nodos puede querer ejecutar un grupo de nodos que, aunque sigan la misma cadena de bloques (mismo Chain ID), no se comuniquen con el resto de la red pública. Esto puede ser útil para pruebas internas o para crear un clúster privado de nodos de alta disponibilidad. Para lograrlo, se puede utilizar una opción en el cliente, como `--network-id`, para asignar un Network ID personalizado a ese grupo de nodos. Estos nodos solo se conectarán entre sí, formando una sub-red aislada.

2. Cambiar el Chain ID para iniciar una nueva cadena

Cambiar el Chain ID es una medida mucho más drástica. Si se modifica el `chainID` en el archivo génesis de un grupo de nodos existentes, estos ya no serán compatibles con la red original. Efectivamente, se está creando una nueva cadena de bloques, una bifurcación completa desde el bloque génesis. Los nodos con el nuevo Chain ID no podrán conectarse ni sincronizarse con los nodos de la cadena antigua.

Para iniciar una nueva cadena con un Chain ID diferente, se deben seguir estos pasos:

  1. Detener todos los nodos: Asegurarse de que todos los nodos de la red estén completamente apagados.
  2. Actualizar el archivo génesis: Modificar el valor de `chainID` en el archivo génesis y distribuir esta nueva versión a todos los nodos que formarán parte de la nueva red.
  3. Eliminar los datos antiguos: Es crucial borrar el directorio de datos de la cadena anterior en cada nodo. De lo contrario, podrían surgir conflictos.
  4. Reiniciar los nodos: Iniciar todos los nodos con el nuevo archivo génesis y el directorio de datos vacío. Comenzarán a sincronizarse entre ellos para construir la nueva cadena desde cero.

Preguntas Frecuentes (FAQ)

¿El Network ID y el Chain ID son siempre iguales?

No siempre. Aunque en la mayoría de las redes públicas como Ethereum Mainnet y Sepolia son idénticos por convención, son conceptualmente diferentes. Es técnicamente posible tener un Network ID diferente al Chain ID, como se ve en el caso de Ethereum Classic (Chain ID 61, Network ID 1).

¿Por qué es tan importante el Chain ID para la seguridad?

Es la principal defensa contra los ataques de repetición. Al incluir el Chain ID en la firma de la transacción, se asegura que una transacción destinada a una cadena no pueda ser ejecutada en otra, protegiendo los fondos de los usuarios en caso de bifurcaciones de la red.

¿Qué sucede si un desarrollador usa el Chain ID incorrecto?

Si un desarrollador o una aplicación utiliza el Chain ID incorrecto al construir una transacción, la firma criptográfica será inválida para la red de destino. Los nodos de esa red rechazarán la transacción de inmediato, y esta nunca será incluida en un bloque. Por eso, herramientas como MetaMask solicitan al usuario cambiar de red si intentan interactuar con una dApp en una cadena diferente a la seleccionada.

¿Puedo crear mi propia red Ethereum con un Chain ID personalizado?

Sí. Al crear una red privada de Ethereum, puedes y debes elegir un Chain ID único que no entre en conflicto con ninguna red pública existente. Esto garantiza que tus transacciones y tu red permanezcan completamente aisladas y seguras.

Si quieres conocer otros artículos parecidos a Ethereum ID: La Clave de Red y Cadena Explicada puedes visitar la categoría Tecnología.

Subir