Ventajas de tener tu propio nodo
Tener tu propio nodo de Ethereum ofrece varias ventajas significativas como tener control total sobre las transacciones y los datos que procesas. No dependes de terceros para acceder a la blockchain, lo que aumenta la independencia y la seguridad. Al operar tu propio nodo, no necesitas confiar en nodos externos que podrían registrar tus actividades. Esto reduce los riesgos de vigilancia y aumenta la privacidad de tus transacciones y datos entre otras ventajas.
También tener tu propio nodo te permite probar contratos inteligentes y aplicaciones descentralizadas (dApps) en un entorno controlado, facilitando el desarrollo y la implementación de nuevas soluciones en la red Ethereum y además no necesitas confiar en servicios como Infura para interactuar con la red Ethereum. Esto puede ser crucial en situaciones donde la disponibilidad de estos servicios es limitada o se imponen restricciones.
A tener en cuenta
A continuación vamos a ir dando un paso a paso de lo que necesitamos tener e ir ejecutando para levantar nuestro nodo, no vamos a ahondar en la teoría de los nodos de etehreum pero vamos a dejar todos los links a la documentación para los que quieras profundizar sobre el tema.
Desde el cambio de Ethereum de PoW a PoS no solo debemos tener un cliente de ejecución de la blokchain si no también un cliente de consenso, las opciones para un cliente de ejecución que en este momento nos están dando son: Besu, Erigon, Geth y Nethermind y en cuanto a las opciones de clientes de consenso son: Lighthouse, Lodestar, Nimbus, Prysm y Teku para nuestro caso vamos a utilizar Geth y Prysm ambos están escritos en el lenguaje GO.
Requisitos técnicos
Este es un apartado no menor, la documentación de Ethereum nos indica los siguientes requisitos:
Requisitos mínimos
- CPU con dos o más núcleos
- 8 GB de RAM
- SSD de 2 TB
- 10 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ápida con 2 o másTB
- 25 o más MBit/s de banda ancha
En nuestra prueba logramos levantar el nodo con una PC con los siguientes requisitos:
Especificaciones de nuestro nodo
- CPU Intel Core i7-4790 3.60Ghz
- RAM 16 GB DDR3
- SSD 500GB
- HDD 2TB
- 100 MBit/s de banda ancha
- SO Linux Mint 21.1 Cinnamon
Si bien la documentación dice que el almacenamiento debe ser obligatoriamente SSD ósea un disco solido por temas de velocidad de escritura y lectura pudimos encontrar una configuración que mencionaremos mas adelante para usar un almacenamiento mixto.
Primeros pasos
Vamos a instalar el cliente Geth usando la siguiente documentación y vamos a ejecutar las siguientes lineas:
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
Ahora creamos nuestro directorio donde vamos a instalar el cliente de ejecución y el cliente de consenso en el escritorio de nuestro nodo
cd /home/<User>/Desktop
mkdir ethereum
mkdir ethereum/consensus
Instalamos el cliente de consenso usando esta documentación dentro de la carpeta consensus que acabamos de crear ejecutamos el siguiente comando:
curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && chmod +x prysm.sh
En el mismo directorio vamos a crear el archivo JWT que necesita el cliente de consenso para hablar con el cliente de ejecucióny lo vamos a mover al directorio /tmp
./prysm.sh beacon-chain generate-auth-secret
cp jwp.hex /tmp/jwtsecret
Iniciando el nodo
Antes de poder iniciar el cliente de ejecución debemos iniciar el clef con los siguientes comandos posicionados en la carpeta /ethereum que habíamos creado en el escritorio.
clef newaccount --keystore geth-tutorial/keystore
clef --keystore geth-tutorial/keystore --configdir geth-tutorial/clef --chainid 1
Podemos observar que se creo una carpeta nueva “geth-tutorial” en donde se va a ejecutar nuestro cliente de ejecución, la consola en la que estamos ejecutando el clef debe quedar abierta.
Ahora vamos a ejecutar nuestro cliente de ejecución en una consola nueva, antes debemos crear una carpeta data para los datos mas pesados de nuestro cliente que se van a guardar en el disco HDD
mkdir /mnt/sda1/ethereum/data
geth --mainnet --datadir geth-tutorial --datadir.ancient=/mnt/sda1/ethereum/data --authrpc.addr localhost --authrpc.port 8551 --authrpc.vhosts localhost --authrpc.jwtsecret /tmp/jwtsecret --http --http.api eth,net --signer=geth-tutorial/clef/clef.ipc --http
Una vez ejecutado vemos que comenzara a sincronizar y descargar información necesaria de la blockchain, mientras el cliente de ejecución comienza la sincronización ejecutaremos el cliente de consenso. Importante no cerrar la consola del cliente de ejecución.
Nos posicionamos en la carpeta Descktop/ethereum/consensus y ejecutamos:
./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --mainnet --jwt-secret=/tmp/jwtsecret --checkpoint-sync-url=https://beaconstate.info --genesis-beacon-api-url=https://beaconstate.info
Si todo se ejecuto correctamente sin errores el nodo va a estar descargando datos de la blockchain y sincronizándose. Este proceso en nuestro caso tardo unas 36hs y ocupo alrededor de 300Gb en el disco SSD y 800Gb en el disco HDD.
Una ves terminada la sincronización puede probar ejecutando en una nueva consola el siguiente comando
geth attach http://127.0.0.1:8545
Esta consola nos va a dejar ejecutar comandos de utilidad como
eth.accounts;
o
web3.fromWei(eth.getBalance('0xca57F3b40B42FCce3c37B8D18aDBca5260ca72EC'), 'ether');
Con esto veremos la cuenta que esta asociada a nuestro nodo y con el otro comando podremos ver el balance de la billetera que queramos siendo ejecutada esta consulta en nuestro nodo
Consideraciones
Esta es una guía rápida para la instalación de un nodo de etehreum en mainnet , un nodo solo para consultas sobre la blockchain que podría servir para no depende de un nodo remoto como infura, pero no es una guía para un nodo de staking en el cual debe depositar 32ETH para poder validar bloques.
Además notamos que nuestro nodo esta muy justo con la memoria RAM habiendo momentos en los cuales supera los 16GB recomendaríamos tener mas de 16GB y de ser posible usar un disco SSD de 2TB para tener mejor estabilidad en el nodo.