23/08/2025
Adentrarse en el mundo del desarrollo de blockchain puede parecer una tarea abrumadora, especialmente por los costos asociados a las transacciones en la red principal de Ethereum. Sin embargo, existe una solución perfecta para aprender, experimentar y desarrollar aplicaciones descentralizadas (dApps) sin gastar un solo centavo: crear tu propia red privada de Ethereum. Una red privada es un entorno aislado y controlado que funciona exactamente igual que la red principal, pero donde tú tienes el control total sobre los participantes, la generación de bloques y la distribución de Ether. En esta guía detallada, te llevaremos paso a paso a través del proceso de configuración de tu propia blockchain privada utilizando Geth, el cliente oficial de Ethereum, en un sistema Ubuntu.

Preparando el Terreno: Instalación de Geth
Antes de poder construir nuestra red, necesitamos la herramienta fundamental: Geth (Go Ethereum). Es crucial asegurarse de tener una instalación limpia para evitar conflictos. Si tienes una versión anterior, lo mejor es empezar de cero.
Paso 1: Desinstalar Versiones Anteriores de Geth (Opcional)
Si ya tienes Geth instalado, sigue estos comandos para una eliminación completa y segura:
sudo apt remove --purge -y ethereum sudo apt autoremove -y sudo apt clean
Verifica que se haya desinstalado correctamente. Este comando debería dar un error de "comando no encontrado":
geth version
Paso 2: Instalar Geth v1.12 en Ubuntu
Para este tutorial, utilizaremos una versión específica de Geth para garantizar la compatibilidad de todos los pasos. Nos moveremos al directorio `/usr/local/bin` para realizar la instalación.
1. Navega al directorio deseado:
cd /usr/local/bin
2. Descarga el archivo binario de Geth v1.12.0:
sudo wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.12.0-e501b3b0.tar.gz
3. Extrae el contenido del archivo descargado:
sudo tar -xvf geth-linux-amd64-1.12.0-e501b3b0.tar.gz
4. Mueve el ejecutable de Geth a una ubicación accesible en tu PATH del sistema:
sudo mv geth-linux-amd64-1.12.0-e501b3b0/geth /usr/local/bin/geth
5. Limpia los archivos de instalación que ya no son necesarios:
sudo rm -rf geth-linux-amd64-1.12.0-e501b3b0.tar.gz geth-linux-amd64-1.12.0-e501b3b0
6. Finalmente, verifica que la instalación fue exitosa. Deberías ver la información de la versión de Geth:
geth version
Construyendo la Arquitectura de la Red
Con Geth instalado, es hora de definir la estructura de nuestra red. Para este ejemplo, crearemos una red simple con dos nodos.
Paso 3: Creación de la Estructura de Directorios y Cuentas
1. Crea una carpeta principal para todo el proyecto:
mkdir private_ethereum_setup cd private_ethereum_setup
2. Dentro, crea una carpeta para cada nodo:
mkdir node1 node2
3. Ahora, generaremos una cuenta de Ethereum (un par de claves pública y privada) para cada nodo. Geth almacenará los datos de cada nodo en su respectivo directorio (`--datadir`).
Para el Nodo 1:
geth --datadir "node1" account new
Para el Nodo 2:
geth --datadir "node2" account new
Durante este proceso, se te pedirá que crees una contraseña (passphrase) para cada cuenta. ¡Es de vital importancia que guardes estas contraseñas y las direcciones públicas que se generan! Para facilitar el proceso más adelante, crea un archivo `password.txt` dentro de cada carpeta de nodo (`node1/password.txt` y `node2/password.txt`) y escribe la contraseña correspondiente en él.
El Bloque Génesis: El Origen de tu Blockchain
Toda blockchain comienza con un primer bloque, conocido como el bloque génesis. Este bloque se define en un archivo JSON y contiene la configuración inicial de la red, como el nivel de dificultad, el límite de gas y, crucialmente, las cuentas que tendrán un saldo inicial de Ether.
Paso 4: Crear y Configurar el Archivo `genesis.json`
Dentro de tu carpeta `private_ethereum_setup`, crea un archivo llamado `genesis.json` con el siguiente contenido. Deberás modificarlo con tus propias direcciones.
{ "config": { "chainId": 12345, "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "clique": { "period": 5, "epoch": 30000 } }, "difficulty": "1", "gasLimit": "8000000", "extradata": "0x0000000000000000000000000000000000000000000000000000000000000000[DIRECCION_NODO1_SIN_0x]0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "alloc": { "[DIRECCION_NODO1_CON_0x]": { "balance": "300000000000000000000" }, "[DIRECCION_NODO2_CON_0x]": { "balance": "400000000000000000000" } } }
Modificaciones importantes:
- `extradata`: Aquí debes insertar la dirección pública de tu Nodo 1 (que actuará como minero o sellador), pero eliminando el `0x` inicial.
- `alloc`: En esta sección, asignas un saldo inicial a tus cuentas. Reemplaza `[DIRECCION_NODO1_CON_0x]` y `[DIRECCION_NODO2_CON_0x]` con las direcciones públicas completas (incluyendo el `0x`) que generaste en el paso anterior.
Paso 5: Inicializar los Nodos
Con el archivo génesis listo, cada nodo debe ser inicializado para que reconozca esta configuración como el punto de partida de su blockchain.
geth init --datadir node1 genesis.json geth init --datadir node2 genesis.json
Conectando la Red: Bootnode y Comunicación Peer-to-Peer
Para que nuestros nodos se encuentren y se comuniquen, necesitamos un punto de encuentro. Este rol lo cumple el bootnode.
Paso 6: Configurar el Bootnode
1. Instala la herramienta `bootnode`:
sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-get install bootnode
2. Genera una clave para el bootnode. Esto creará un archivo `boot.key`.
bootnode -genkey boot.key
Paso 7: Iniciar la Red
Este es el momento de la verdad. Necesitarás tres terminales abiertas simultáneamente, todas ubicadas en la carpeta `private_ethereum_setup`.
Terminal 1: Iniciar el Bootnode
Ejecuta el bootnode usando la clave que acabas de generar. Este nodo se quedará a la espera de conexiones.
bootnode -nodekey boot.key -verbosity 9 -addr :30305
Copia la dirección `enode` que aparece en la salida. La necesitarás para los siguientes pasos.
Terminal 2: Iniciar el Nodo 1 (Minero)
Este comando iniciará el primer nodo, lo desbloqueará para firmar transacciones y activará la minería. Reemplaza la dirección `enode` y las direcciones públicas con las tuyas.
geth --datadir node1 --port 30306 --bootnodes [TU_DIRECCION_ENODE] --networkid 123454321 --unlock [DIRECCION_NODO1_CON_0x] --password node1/password.txt --authrpc.port 8551 --miner.etherbase [DIRECCION_NODO1_CON_0x] --mine
Terminal 3: Iniciar el Nodo 2 (Par)
Este comando inicia el segundo nodo y lo conecta a la red a través del bootnode. No está configurado para minar, solo para participar y sincronizar.
geth --datadir node2 --port 30307 --bootnodes [TU_DIRECCION_ENODE] --networkid 123454321 --unlock [DIRECCION_NODO2_CON_0x] --password node2/password.txt --authrpc.port 8552
Si todo ha ido bien, verás en la terminal del Nodo 1 cómo se empiezan a minar nuevos bloques, y en la terminal del Nodo 2 verás cómo se importan esos bloques. ¡Felicidades, tu red privada de Ethereum está viva!
Explorando tu Blockchain Privada
Ahora que la red está funcionando, podemos interactuar con ella usando la consola JavaScript de Geth.
Paso 8: Conectarse a un Nodo
Abre una cuarta terminal y conéctate a la instancia en ejecución del Nodo 1:
geth attach node1/geth.ipc
Desde esta consola, puedes ejecutar varios comandos para explorar y operar en tu red.
Comandos Útiles en la Consola Geth
- Verificar conexión de pares: `net.peerCount` (debería devolver `1`, ya que el Nodo 2 está conectado).
- Listar cuentas del nodo: `eth.accounts`
- Consultar el número de bloque actual: `eth.blockNumber`
- Consultar el saldo de una cuenta (en Wei): `eth.getBalance(eth.accounts[0])`
- Consultar el saldo en Ether: `web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")`
- Enviar una transacción: Para enviar 10 Ether desde el Nodo 1 al Nodo 2, ejecuta (reemplaza las direcciones):
eth.sendTransaction({from:"[DIRECCION_NODO1]", to:"[DIRECCION_NODO2]", value: web3.toWei(10, "ether")}) - Ver detalles de un bloque: `eth.getBlock(eth.blockNumber)`
- Verificar el pool de transacciones pendientes: `txpool.content`
Al realizar una transacción, verás cómo el minero (Nodo 1) la procesa y la incluye en un nuevo bloque. Posteriormente, puedes verificar los saldos de ambas cuentas para confirmar que la transferencia se ha realizado con éxito.
Preguntas Frecuentes (FAQ)
- ¿Por qué necesito una red privada de Ethereum?
- Es un entorno ideal para desarrolladores y entusiastas. Permite probar contratos inteligentes, experimentar con la tecnología blockchain y construir aplicaciones descentralizadas sin incurrir en los costos de gas de la red principal (Mainnet) o las redes de prueba públicas (Testnets).
- ¿Qué es exactamente el archivo `genesis.json`?
- Es el "bloque cero" o el punto de partida de tu blockchain. Define las reglas fundamentales de la red, como el ID de la cadena, la dificultad inicial de la minería y qué cuentas comienzan con un saldo de Ether.
- ¿Puedo añadir más de dos nodos a mi red?
- ¡Por supuesto! Puedes añadir tantos nodos como desees. Simplemente repite el proceso de creación de cuenta e inicialización para un `node3`, `node4`, etc., y luego inícialos apuntando al mismo `bootnode` para que puedan descubrir a los otros pares en la red.
- ¿Qué ocurre si olvido la contraseña de una cuenta?
- La cuenta y los fondos que contiene se vuelven irrecuperables. No hay un mecanismo de "recuperación de contraseña" en Ethereum. Por eso es absolutamente crítico guardar las contraseñas en un lugar seguro.
Si quieres conocer otros artículos parecidos a Crea tu Red Privada de Ethereum: Guía Completa puedes visitar la categoría Blockchain.
