Introducción
Una de las formas de contribuir y ayudar a la red Bitcoin es configurando y ejecutando tu propio nodo. Cuantos mas nodos existan, mayor la robustez de la red y mayor la descentralización de la misma.
Lo ideal sería mantener un hardware propio (Raspberry Pi o un PC antiguo) con una copia completa de la cadena de bloques (blockchain) 300GB+ conectado a la red de tu casa.
Sin embargo, es perfectamente posible, montar un “pruned bitcoin node” en un VPS con unas especificaciones básicas del estilo 1 vCPU 2GB RAM y 20GB HDD o SDD y 1TB de transferencia de datos (almenos para la descarga inicial de la blockchain)
Un VPS de estas características te puede costar unos 3,50€ / mes
El término en español “pruned Bitcoin node”, sería, nodo bitcoin podado, es decir un nodo el cual no contiene almacenada una copia completa de todas las transacciones de la cadena de bloques, por lo contrario, solamente contiene cierta información de cada bloque, lo que nos permite correr un nodo en equipos con poco espacio de almacenamiento, como un VPS o una Raspberry PI. En cuanto a la seguridad y funcionalidad del nodo, no se ve afectada por este hecho.
Si no dispones de un VPS al final del articulo te dejare un par de empresas donde te permiten alojar nodos bitcoin, pagar con criptomonedas y que no te piden apenas datos personales para crear la cuenta.
En esta guía he utilizado un VPS (LXC) con Ubuntu 20.04 Focal Fossa | 1 vCPU | 2GB RAM | 40 GB HDD alojado en Noez.de
1.- Revisar aspectos básicos de seguridad en VPS
Si acabas de contratar un nuevo VPS te recomiendo revisar estos aspectos básicos de seguridad.
Cambia el password de root que te han enviado por email al crear tu VPS
Configura SSH para acceder solamente usando llaves ssh.
No permitas el acceso SSH al usuario root (fichero sshd_config y Permitrootlogin no)
Instala y configura el firewall ufw para permitir solo las conexiones necesarias y bloquear el resto. En el caso de bitcoin, el puerto por defecto es 8333
Te dejo un par de links (en inglés) para el tema de las claves ssh y el uso del firewall.
[How To Setup a Firewall with UFW on an Ubuntu and Debian Cloud Server | DigitalOcean]
[How to Set Up SSH Keys on Ubuntu 20.04 | DigitalOcean
2.- Descargar el software Bitcoin Core
Para descargar la última versión de Bitcoin core nos dirigimos a la siguiente URL: https://bitcoincore.org/en/download/ o en https://bitcoin.org/es/descargar
La última versión disponible actualmente es la 0.20.1 y el fichero que nos interesa es el que aparece en la web como Linux (tgz)
Desde nuestro VPS y con el usuario que tenga permisos para hacer sudo (lo necesitaras más adelante) descargamos el fichero con:
wget https://bitcoincore.org/bin/bitcoin-core-0.20.1/bitcoin-0.20.1-x86_64-linux-gnu.tar.gz
3.- Verificar la descarga (Opcional — Recomendado)
Nos descargamos el fichero con las claves criptográficas de cada fichero
wget https://bitcoincore.org/bin/bitcoin-core-0.20.1/SHA256SUMS.asc
Y verificamos el fichero descargado con:
sha256sum --ignore-missing --check SHA256SUMS.asc
Si encontramos esta linea en la salida del comando, todo esta correcto.
bitcoin-0.20.1-x86_64-linux-gnu.tar.gz: OK
Descargamos una copia de la clave de firma haciendo:
gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 01EA5486DE18A882D4C2684590C8019E36C2E964
Verificamos que el fichero que contiene las claves critográficas antes descargado (sha256sums.asc) esta firmado por la clave PGP que acabamos de recibir.
gpg --verify SHA256SUMS.asc
Buscamos una linea que indique : gpg: Good signature
Y otra que diga: Primary key fingerprint: 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964
Si todo esta correcto ya podemos iniciar la instalación.
Para otras versiones de bitcoin core consultar: https://bitcoincore.org/en/download/
4.- Descomprimir e instalar
Empezamos por descomprimir el tar.gz haciendo
tar zxvf bitcoin-0.20.1-x86_64-linux-gnu.tar.gz
y entramos al directorio recién creado con
cd bitcoin-0.20.1
Copiamos los ejecutables a /usr/local/bin haciendo:sudo install -m 07555 -o root -g root -t /usr/local/bin bitcoin-0.20.1/bin/*
5.- Crear un usuario para bitcoin
Aunque podemos ejectuar bitcoin con cualquier usuario, es mejor crear un usuario dedicado para ejecutar bitcoin
Para ello hacemos
sudo adduser bitcoin
Y cambiamos al usuario con la contraseña que hayamos escogido en el momento de creación
su - bitcoin
6.- Fichero de configuración bitcoin.conf
Por defecto la configuración y todos los demás ficheros de bitcoin se guardan en una carpeta oculta del HOME del usuario.
~/.bitcoin
Bitcoin creara esa carpeta en el momento en que lo ejecutemos, aunque antes de hacerlo, vamos a crearla nosotros y añadir una configuración especifica para nuestro “Pruned node”
cd ~mkdir .bitcoinnano .bitcoin/bitcoin.conf
Para que nuestro nodo actue como pruned node, debemos añadir esta linea:
prune=550
Con esto conseguimos reducir el espacio en disco que ocupa la cadena de bloques de unos 300GB a ~6GB
Ojo: Aunque no se conserve la cadena de bloques entera en nuestro disco, SI que debe descargarla por completo. Así que ten paciencia.
Podemos añadir al fichero de configuración el parámetro
daemon=1
Esto nos permite ejecutar bitcoind
en segundo plano sin especificar -daemon como parámetro al lanzar el comando bitcoind
Finalmente quedaría así:
prune=550
daemon=1
Salimos y guardamos el fichero
Si tu VPS cuenta con menos de 2GB añade estas lineas a la configuración para mejorar el rendimiento:
daemon=1
prune=550
minrelaytxfee=0.00005
limitfreerelay=0
dbcache=50
maxmempool=100
maxorphantx=10
Si quieres explorar otras configuraciones te recomiendo este generador online:
Bitcoin Core Config Generator
Edit description
7.- Arrancando bitcoind
Para ejecutar bitcoind hacemos:
bitcoind
Y veremos
Bitcoin Core starting
En este momento, bitcoind empezara con la descarga de los +300GB de datos correspondientes a la cadena de bloques completa, desde el bloque génesis hasta el último. A medida que va descargando los datos, los ira “podando” para mantenerse en los 5 o 6GB de espacio en disco.
Si estas usando un VPS básico ten paciencia, puede tardar 4 o mas días a terminar la descarga.
8.- Comandos básicos y monitorizar el nodo
Una vez ejecutado bitcoind podemos revisar el estado del mismo haciendo:
bitcoin-cli getblockchaininfo
Este comando devuelve bastante información. Aquí un ejemplo de mi nodo, todavía realizando la sincronización inicial de la cadena de bloques.
bitcoin@vps79457449410:~/.bitcoin$ bitcoin-cli getblockchaininfo
{
“chain”: “main”,
“blocks”: 408531,
“headers”: 663667,
“bestblockhash”: “00000000000000000586099a1333b3568a26d1a31184b863647624a53f7fee75”,
“difficulty”: 178678307671.6884,
“mediantime”: 1461375491,
“verificationprogress”: 0.2086607585263782,
“initialblockdownload”: true,
“chainwork”: “00000000000000000000000000000000000000000017312f716889143339065c”,
“size_on_disk”: 568644483,
“pruned”: true,
“pruneheight”: 408143,
“automatic_pruning”: true,
“prune_target_size”: 576716800,
Revisa que el valor “pruned” sea true, eso significa que bitcoind esta leyendo correctamente el fichero de configuració
Para saber si tu nodo esta completamente sincronizado, revisa (al cabo de unos días) el valor “verificationprogress” debería ser algo cercano a 0.999 o “initialblockdownload” que debería retornar false
Para saber cuantos bloques quedan para la sincronización, resta el valor “headers” por el valor de “blocks”
Como imaginas el valor headers son la altura o numero de bloques totales actualmente en la blockchain y “blocks” son los que tu nodo ha descargado y tiene hasta la fecha.
A continuación un ejemplo de nodo totalmente sincronizado. Fíjate en los valores en negrita para ver la diferencia
bitcoin@mini:~/.bitcoin$ bitcoin-cli getblockchaininfo
{
"chain": "main",
"blocks": 663670,
"headers": 663670,
"bestblockhash": "0000000000000000000a6538e3fbd389e4ba4fc0c8cf35ef895af66eb8651164",
"difficulty": 18599593048299.49,
"mediantime": 1609325951,
"verificationprogress": 0.9999996260131589,
"initialblockdownload": false,
"chainwork": "00000000000000000000000000000000000000001778b344397bb52b820aac9f",
"size_on_disk": 672035906,
"pruned": true,
"pruneheight": 663306,
"automatic_pruning": true,
"prune_target_size": 576716800,
Para comprobar que tu nodo es visible por la red visita esta web bitnodes.io y añade la IP de tu VPS y puerto donde pone Join the network
9.- Otros comandos básicos
Revisar logs
tail -f ~/.bitcoin/debug.log
Memoria RAM disponible
free -h
Comprobar espacio en disco que ocupa bitcoin
du -h ~/.bitcoin
Revisar los recursos que utiliza bitcoind en tu VPS (busca bitcoind en la lista)
top
Donde alojar tu VPS
Si no sabes donde alojar tu VPS te dejo un par de empresas que he probado y me han funcionado bien.
Los links a las empresas son de afiliados, esto no significa que les haga publicidad gratis, son empresas donde actualmente tengo servicios contratados y que me funcionan bien y por tanto, puedo recomendarte.
Noez (https://noez.de)
basada en Alemania, ofrece planes muy atractivos y diferentes opciones de virtualización como LXC, OpenVZ y KVM. Actualmente estoy ejecutando allí mi nodo y no he tenido ningún problema.
Entre sus ventajas:
Los VPS son pre-pago, una vez pasado el mes, tienes que efectuar un nuevo pago. Esto es opcional, pero va bien si estas haciendo pruebas.
Acepta pagos con criptomonedas
No es obligatorio dar tus datos personales, salvo un email, para contratar sus servicios.
Permite instalar Bitcoin e incluso ejecutarlo a través de Tor.
Lunanode (https://lunanode.com)
Aunque mas enfocada a infraestructura cloud, tambien ofrece VPS a precios atractivos.
Acepta pagos con criptomonedas
No es obligatorio dar tus datos personales, salvo un email, para contratar sus servicios.
Permite instalar Bitcoin e incluso ejecutarlo a través de Tor.
Tiene un script muy chulo para instalar BTCPayserver
Muchas gracias por llegar hasta aqui. Espero que este post te haya servido de ayuda.
Si te ha gustado el articulo o te ha he ayudado en algo y te sientes generoso puedes invitarme a un café. ¡Muchas gracias!
Mi dirección bitcoin: (bech32): bc1q26al857mknhy7cu8d4qvehajctacwvh66jxw20