Instala tu nodo Bitcoin con Lightning Network y gestiona tu propio Banco

Instala tu nodo Bitcoin con Lightning Network y gestiona tu propio Banco

La motivación para instalar mi propio nodo es tener soberanía monetaria y ser un individuo soberano. La motivación para crear esta guía surge porque muchos bitcoiners quieren tener su propio nodo y no todos tienen el conocimiento técnico para saber cual es la mejor ruta para seguir dentro del infinito mar de posibilidades que se pueden escoger.

Estos son las reflexiones, decisiones y paso a paso que seguí desde que decidí tener mi propio nodo de Bitcoin con Lightning Network.

Algunos de los tutoriales pueden ser retadores para personas no técnicas. Sin embargo si eres un usuario no tan técnico pero con muchos deseos de aprender entonces este tutorial es para ti.

Cada decisión que tomé desde el hardware a usar y que software instalar la sustento con argumentos e intento ser lo más explícito posible. Sin más preámbulo pongamos toda la carne en el asador.

Un nodo de Bitcoin puede usar las siguientes redes:

  • Mainnet: Es la red principal donde están los bitcoins reales (peso de la blockchain 460 GB aproximadamente en el momento de hacer esta guía).
  • Testnet: Es una red parecida a mainnet pero para hacer pruebas.(peso de la blockchain menos de 50 GB)
  • Regtest: Es una red local en la cual puedes crear varios nodos en la misma máquina.

La recomendación es usar la red de testnet para aprender y no arriesgar satoshis reales.

Si vas a instalar un nodo de testnet sólo para probar y quieres hacerlo en el PC que usas habitualmente sólo debes asegurarte que tengas más de 50 GB de espacio disponible.

Cuando quieras usar un nodo en producción o sea en mainnet, lo más aconsejable es destinar una CPU para tal efecto y tener un disco adicional debido al peso actual de la cadena de bloques.

Este artículo se va a centrar en todas las decisiones que tomé para poner un nodo personal en producción, desde el hardware , hasta el tipo de implementación y el tipo de instalación.

Tener en cuenta que cuando me refiero a nodo personal es porque un nodo también puede instalarse con el objetivo de ser enrutador o para brindar algún tipo de servicio y en esos casos hay que tener otro tipo de consideraciones y configuraciones.

Requisitos

Hardware

Los requisitos para instalar un nodo de Bitcoin son particularmente bajos, el recurso más costoso para almacenar la cadena de bloques de la red de mainnet sería el disco duro ya que actualmente pesa 460 GB aproximadamente. Si el nodo se va usar para pruebas en red de testnet solo es necesario tener 50 GB de espacio en disco.

A continuación se detallan cuáles serían los requisitos mínimos para instalar un nodo:

  • CPU con procesador corei3 o similares en adelante. También puede ser una raspberry pi 4.
  • Memoria: Mínimo 4 GB
  • Disco duro de 1 Tera SSD

Buscando un buen costo beneficio me decanté por una CPU de segunda mano con las siguientes características:

  • CPU con procesador Corei3 o similares en adelante.
  • Memoria Ram: 8 GB
  • Disco duro HDD Sata III de 500 GB para el sistema operativo
  • Disco duro de 1 Tera SSD para la blockchain

¿Por qué no usé una raspberry?

En el momento en que deseaba montar el nodo era año de pandemia y las raspberry pi estaban más costosas que comprar una CPU con las características enunciadas arriba. Además una CPU con las características mínimas puede dar mejor estabilidad especialmente porque la microsd de la raspberry a veces se daña.

Software

  • Sistema operativo: El sistema operativo a usar será Linux. ¿Porque Linux? Porque siempre me ha gustado la filosofía que hay detrás del software libre, a nivel de servidores es el sistema operativo más usado y cuando deseas profundizar en desarrollo de protocolos como Bitcoin, es necesario aprender a usar la terminal de comandos.
  • Distribución: Aunque hay varias distribuciones de Bitcoin voy a usar Debian. ¿Porqué Debian? Es una distribución muy estable en la que he tenido diferentes servicios sin ningún tipo de problema. Algo importante a destacar es que todos los pasos serán aplicables a cualquier distribución basada en Debian como Ubuntu o similares.

Instalación de nodo Bitcoin

Usaremos la implementación de Bitcoin Core que es la que inició el mismísimo Satoshi y que implementa el protocolo en su totalidad.

La instalación con un archivo binario es más fácil, pero en el tutorial que te voy a compartir se va a descargar el software del repositorio y lo vamos a compilar.

¿Por qué compilar?

Es mejor compilar para mejorar el desempeño, ya que las instrucciones del programa fuente son totalmente adaptadas a la arquitectura de nuestro procesador.

A continuación te voy a dejar el tutorial: Tutorial cómo instalar Bitcoin Core

Instalación de nodo lightning

Usaremos la implementación Core Lightning. Tener en cuenta que antes se llamaba c-lightning porque está escrita en C, pero dado que se están empezando a escribir módulos en Rust se le cambió el nombre por algo más genérico.

¿Por que Core Lightning?

En este momento la cuota de mercado de Core Lightning es de 6% frente a un 92% de LND (aproxidamente) Esta gran brecha se ha dado porque LND ha desarrolló mas pronto herramientas y documentación para que los developers pudieran construir aplicaciones de forma muy sencilla y en este aspecto LND le tomó ventaja.

Sin embargo Core lightning tiene 4 características que me gustan y son:

  • Es ligero: Consume pocos recursos de la CPU.
  • Es modular: Cada funcionalidad está implementada como un módulo.
  • Es extensible mediante plugins: Se pueden construir en lenguajes como C,Python o Rust.
  • Acceso a comandos JSON-RPC nativos: Usando el plugin Commando y mediante sockets.

A continuación te voy a dejar el tutorial: Tutorial Cómo instalar Core Lightning

Si logras instalar tu nodo de Bitcoin con Lightning Network usando esta guía, testea el nodo invitándome un café y déjame un mensaje que te salga del corazón 🙂 Sats para un café

Cómo instalar un nodo Core Lightning desde cero con Linux Debian/Ubuntu y que use Tor

Para poder ejecutar un nodo Core Lightning , debes tener instalado y corriendo Bitcoin Core. En caso de que no lo tengas instalado te recomiendo que vayas primero al siguiente tutorial Como instalar un nodo de Bitcoin Core

Instalar dependencias para poder compilar lightningd

$sudo apt-get update
$sudo apt-get install -y \
autoconf automake build-essential git libtool libgmp-dev libsqlite3-dev \
python3 python3-mako python3-pip net-tools zlib1g-dev libsodium-dev gettext
$pip3 install --upgrade pip

Si se quiere usar el plugin cln-grpc o constuir plugins con Rust debes instalar Rust con esta linea:

$sudo apt-get install -y cargo rustfmt

En caso de que estés interesado en desarrollar, debes instalar estas dependencias adicionales:

$sudo apt-get install -y valgrind libpq-dev shellcheck cppcheck \
libsecp256k1-dev jq

Compilar e instalar lightningd

Clonamos el repositorio donde está el código fuente de c-lightning:

$git clone https://github.com/ElementsProject/lightning.git
$cd lightning

Buscamos la última versión estable:

$git tag

En el momento de actualizar este tutorial es la v23.05 de modo que vamos a ese release:

$git checkout v23.05

Ahora si compilamos y ejecutamos lightning:

$pip3 install --upgrade pip
$pip3 install mako 
$./configure
$make -j$(nproc)
$sudo make install

Antes de ejecutar lightningd debemos crear el directorio .lightning y dentro de ese directorio vamos a crear el archivo config

$sudo nano ~./lightning/config

Y agregamos las siguientes líneas:

network=bitcoin
log-level=debug
log-file=lightningd.log
addr=0.0.0.0:9735

Antes de lanzar lightningd ya debe estar corriendo bitcoind.

Ahora si lanzamos lightningd como demonio:

$lightningd --daemon

Y obtenemos datos del nodo:

$lightning-cli getinfo

Felicitaciones ahora tienes corriendo un nodo core lightning.

Con este comando puedes detener lightningd

$lightning-cli stop

Configurar lightningd para que use Tor y cargue al iniciar el sistema.

Abrimos el archivo de configuración de Tor:

$sudo nano /etc/tor/torrc

y añadimos las siguientes líneas:

HiddenServiceDir /var/lib/tor/lightningd-service_v3/
HiddenServiceVersion 3
HiddenServicePort 9735 127.0.0.1:9735

presiona Ctrl+x , luego presiona ‘s’ y enter para guardar los cambios.

Detenemos Tor:

$sudo systemctl stop tor

Volvemos a lanzar Tor:

$sudo systemctl start tor

Ahora ejecutamos el siguiente comando para obtener la dirección onion que nos asignó Tor.

$sudo cat /var/lib/tor/lightningd-service_v3/hostname

Esta dirección que nos acaba de arrojar es una dirección tor fija para nuestro nodo lightning

Añade esta dirección en el archivo de configuración de lightningd

$sudo nano ~./lightning/config

Copia las siguientes líneas en ese archivo reemplazando la que dice announce-addr por la que hayas obtenido.

announce-addr=huzhaegx5xoeqebmrjeiti6hu7qpg4pavr5lq4vaf52h4bq5rgx4oaid.onion
:9735
proxy=127.0.0.1:9050
always-use-proxy=true

presiona Ctrl+x , luego presiona ‘s’ y enter para guardar los cambios.

Ahora detenemos lightningd con el siguiente comando:

$lightning-cli stop

Ahora regarcamos Tor:

$sudo systemctl restart tor

E iniciamos de nuevo lightningd:

$lightningd –daemon

Para observar que esté funcionando, ejecutamos:

$lightning-cli getinfo

Si no hacemos nada más, cada vez que se reinicie el PC hay que ejecutar este comando para que bitcoind se ejecute. Por eso lo que debemos hacer es crear un servicio para que se ejecute automáticamente al iniciar el pc.

Antes de crear el servicio detengamos de nuevo lightningd para lanzarlo luego como servicio:

$lightning-cli stop

Ahora para crear el servicio vamos a la siguiente ruta:

$cd /etc/systemd/system

Y ejecutamos este comando para obtener el archivo de configuración directamente desde el repositorio de bitcoin

$sudo wget https://raw.githubusercontent.com/ElementsProject/lightning/master/contrib/init/lightningd.service

Ahora tenemos que modificar las rutas donde esta el parámetro ExecStart

$sudo nano lightningd.service

ExecStart=/usr/local/bin/lightningd --daemon   /home/admon/.lightning/config --pid-file=/run/lightningd/lightningd.pid

presiona Ctrl+x , luego presiona ‘s’ y enter para guardar los cambios.

Ejecutamos este comando para que inicie el servicio cuando se reinicie el equipo:

$sudo systemctl enable lightningd.service

Y con este comando lo ejecutamos:

$sudo systemctl start lightningd.service

Para mirar el estado del servicio ejecutamos:

$sudo systemctl status lightningd.service

Si deseamos detenerlo usamos:

$sudo systemctl stop lightningd.service

Si has llegado hasta aquí muchas felicitaciones, tienes corriendo un nodo con Bitcoin Core y Core Lightning, ahora tienes tu propio banco y por primer vez en la historia podrás tener soberanía monetaria 🙂