Esta vez haremos algo mas técnico, montar un nodo completo (Full Node) de Bitcoin en un Raspberry Pi (RBP). Un nodo completo de Bitcoin es un programa que valida las transacciones y bloques de la red Bitcoin. A su vez, la mayoría de nodos aceptan transacciones y bloques de otros nodos, los que validan y retransmiten a otros nodos.
Correr un nodo completo tiene su lado positivo:
- Ayuda a la red de Bitcoin en la medida que la blockchain de Bitcoin siga las reglas, lo cual ayuda a evitar que muchos mineros se pongan de acuerdo para romperlas.
- Mayor seguridad en la medida que tu monedero (wallet) no depende de un nodo que no controlas y en el cual debes confiar.
- En caso de un hard-fork es una forma de votar por la blockchain que prefieras.
- Mayor privacidad, en el caso que usas un nodo de terceros, ese nodo puede saber que direcciones IP se conectan.
- No es difícil y no es caro.
Existen algunos lados negativos a considerar:
- Asegurarse que Bitcoin no este prohibido en tu jurisdicción.
- Mayor consumo de datos en tu conexión de Internet, verifica que no tengas limites de datos.
Veamos los requerimientos:
- Raspberry Pi3 (o Pi4), con fuente e idealmente su caja (case)
- Monitor con conector HDMI y un teclado
- Cable de red UTP
- Cable HDMI
- Memoria SD con 512GB de alta velocidad (a la fecha Bitcoin consume 345GB)
- Lector/Grabador de memoria SD para nuestra PC
Como primer paso debemos preparar la memoria SD e instalarle un sistema operativo. En este caso usaremos Ubuntu Server 20.04. Como el RBP solo reconoce hasta 64GB en FAT32 y las memorias mayores formatean en exFAT debemos formatear y forzar FAT32 antes de instalar el sistema operativo.
Para formatear la memoria podemos usar SD formatter. Lo bajamos, instalamos y ejecutamos para formatear la memoria SD.
Para migrar a FAT32 podemos usar GUIformat. Igualmente descargar, instalar y ejecutar.
Luego debemos bajar una imagen del sistema operativo Ubuntu Server 20.04 para ARM32 de aquí.
Para grabar la imagen del sistema operativo a la memoria SD usaremos el Raspberry Pi Imager. Lo instalamos y ejecutamos y usamos la imagen de Ubuntu que descargamos para grabar la memoria SD.
Hasta ahi hemos terminado los preparativos para poder levantar el Raspberry Pi con Ubuntu. Ahora debemos pasar la memoria al Raspberry Pi3, conectar todos los cables, monitor, teclado y finalmente la fuente de poder para encenderlo.
Al ingreso veremos que nos recibe el Ubuntu con una terminal pidiendo el login. El usuario por defecto es ubuntu y su contraseña es ubuntu. Nos pedira cambiar la contraseña, escojan la que quieran pero anótenla e idealmente que sea segura.
Ahora viene lo bueno, empecemos a configurar el Ubuntu. Siempre iniciamos con una actualización:
sudo apt update
sudo apt upgrade
sudo reboot
Una vez reiniciado el sistema instalamos, configuramos y activamos el firewall:
sudo apt install ufw
sudo ufw allow 8333 comment “Bitcoin mainnet”
sudo ufw allow ssh
sudo ufw enable
sudo ufw status
También demos un nombre a nuestro servidor:
sudo hostnamectl set-hostname pi-bitcoin
hostnamectl
Cambiemos la IP dinámica (DHCP) a una estática:
ip a
Verificar el nombre de la conexión de red, usualmente es eth0. Para pasarla a estática debemos editar un archivo (adaptar de acuerdo a tu red):
sudo nano /etc/netplan/50-cloud-init.yaml
network:
ethernets:
eth0:
addresses: [192.168.0.200/24]
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
version: 2
Reiniciar la conexión de red y verificar el IP nuevo.
sudo netplan apply
ip a
Como el RBP tiene poca memoria RAM vamos a crear un archivo de SWAP de 4GB para que no nos quedemos sin memoria y el nodo se detenga:
sudo fallocate -l 4GB /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon -s
sudo reboot
Para no usar el usuario con acceso root (administrador) para ejecutar el nodo creamos otro usuario y pasa a su cuenta:
sudo adduser bitcoin
sudo su - bitcoin
Ya estamos listos para instalar el nodo de Bitcoin. Necesitamos descargar Bitcoin Core para ARM Linux de https://bitcoincore.org/en/download/. A la fecha de esta publicacion la version es v0.20.1.
wget https://bitcoincore.org/bin/bitcoin-core-0.20.1/bitcoin-0.20.1-arm-linux-gnueabihf.tar.gz
tar xvf https://bitcoincore.org/bin/bitcoin-core-0.20.1/bitcoin-0.20.1-arm-linux-gnueabihf.tar.gz
Ahora tendrán el programa en el directorio bitcoin-core-0.20.1. Entren al directorio y pueden lanzar el servidor con:
bin/bitcoind
Eso debe funcionar, pero lo detenemos con CTRL-C porque necesitamos hacer unas configuraciones adicionales antes de dejarlo funcionando. Para eso editamos el archivo ~/.bitcoin/bitcoin.conf:
nano ~/.bitcoin/bitcoin.conf
daemon=1
disablewallet=1
maxconnections=40
logips=1
Lanzamos nuevamente el nodo:
bin/bitcoind
Esta vez ya no vemos el registro de eventos (log). Para verlo podemos usar el siguiente comando:
tail -f ~/.bitcoin/debug.log
De ser posible, configrar un DEST-NAT en el router para que las conexiones externas al puerto 8333 sean dirigidas el IP de nuestro RBP.
Para revisar que nuestro nodo realmente esta activo debemos primero verificar nuestro IP publico:
curl https://www.whatismyip.com/ | grep "Public IPv4 is"
Y luego ingresamos ese IP en un Web Browser (Brave o Firefox) en https://bitnodes.io/.
Listo, espero les haya servido y gracias por apoyar la red Bitcoin.
Referencias: