jrtech
2 supporters
Instalar un nodo (pruned) Bitcoin en un ...

Instalar un nodo (pruned) Bitcoin en un VPS

Dec 30, 2020

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

jlopp.github.io

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

Enjoy this post?

Buy jrtech a coffee