Configura una Lightning Address con tu propio dominio

En este artículo aprenderás a configurar un servidor personal para usar tu Lightning Address con tu dominio. El objetivo es generar y usar una dirección del tipo [email protected] para recibir bitcoin.

Puede que te estés preguntando qué es una Lightning Address y básicamente es un identificador de internet que permite a cualquier persona enviarte bitcoin mediante la Lightning Network.

Como si fuese un email pero para enviarte bitcoin. Suena increíble la verdad.

Hoy día existen multiples formas de enviar y recibir bitcoin, y esta me parece una de las más simples. Sólo tienes que recordar el formato de una dirección de email, sin necesidad de tener ningún dispositivo contigo, generar direcciones, códigos QR o crear facturas.

Donaciones⚡️

Si el contenido te ha sido útil, por favor considera apoyarme para que pueda crear más proyectos como este.

¿Qué vamos a hacer en este artículo?

Lo que haremos a grandes rasgos será montar un servidor web en nuestro alojamiento actual y responder cuando se solicite a una ruta particular: https://dominio.com/.well-known/lnurlp/usuario

Cuando se solicite esa ruta con parámetro «amount», el servidor web se comunicará con tu nodo Lightning y se generará una factura utilizando el protocolo LNURL-p.

Por lo tanto cuando un usuario desde su wallet intente enviarte dinero usando tu Lightning Address, lo que está sucediendo en el fondo es que la wallet le estaría «solicitando» una factura a tu nodo. Al obtenerla, se realiza el pago.

Requerimientos

Esta solución está pensada para usuarios con un mínimo de control en servidores. Si tienes una web alojada en un servidor compartido seguramente tengas todo bastante bloqueado a la hora de instalar y ejecutar software.

Lo que necesitas:

  • Un dominio
  • Nodo Lightning LND ⚡️
    • URL de acceso a la API REST
    • Macaroon de facturas
  • Acceso SSH a tu servidor web
  • Servidor web Apache o Nginx
  • Posibilidad de instalar y ejecutar software (Git, Node, Docker)
  • Ligess

¿Qué son los macaroons en LND?

Los «macaroons» son una forma de autenticación con tu nodo LND. Cuando se instala LND, generalmente se crean 3 macaroons, nosotros vamos a usar el invoice macaroon.

Por ejemplo, si tu nodo LND lo tienes alojado en un tercero como Voltage puedes encontrar el macaroon en la siguiente ruta dentro de tu nodo LND:
Connect > Other Macaroons > «Bake Other Macaroon».

Si usas BTCPay Server 💚 lo puedes encontrar en:
Server Settings > Services > BTC LND (REST) See information > More details.

Si usas un nodo que has instalado tú mismo, deberás ejecutar un comando de consola para obtener el macaroon en HEX:

# Donde lnddir es el directorio donde tienes instalado LND
$ xxd -p -c 10000 lnddir/data/chain/bitcoin/mainnet/invoice.macaroon

Recuerda que debes usarlo siempre en formato HEX y no en Base64.

Configurando e instalando el paquete Ligess

El paquete que vamos a utilizar es https://github.com/Dolu89/ligess. Para realizar la instalación en nuestra web actual primero vamos a conectarnos por SSH a nuestro servidor.

En este punto sería bueno que nos aseguremos que tenemos el software necesario instalado, de lo contrario lo puedes instalar.

Luego vamos a ir a la carpeta principal de donde tu servidor sirve (valga la redundancia) los archivos públicos, puede ser httdocs, public_html, htdocs, etc.

# Accedemos por ssh
$ ssh usuario@IP

# Versiones de software
$ node -v
v16.x.x

$ git --version
git version 1.8.x.x

# Listamos contenido del directorio
$ ls
bin etc git httpdocs lib ...

# Ingresamos a la carpeta principal
$ cd httpdocs

Los pasos siguientes serán instalar el software, las dependencias y copiar el archivo de configuración .env:

$ git clone https://github.com/dolu89/ligess
$ cd ligess && yarn install
$ cp .env.example .env

# Abrimos el archivo .env y reemplazamos con nuestros valores
$ nano .env
# Archivo .env

# Usuario del identificador (ejemplo [email protected])
LIGESS_USERNAME=dani

# Dominio
LIGESS_DOMAIN=dominio.com

# Implementación
LIGESS_LN_BACKEND=LND

# LND API REST URL (puede ser .onion)
LIGESS_LND_REST=https://yourLNDRestAPI.com

# Macaroon de facturas en formato HEX
LIGESS_LND_MACAROON=0201036c6e640258030a10be...

# Clave privada de Nostr si quieres recibir zaps (NIP-57)
LIGESS_NOSTR_ZAPPER_PRIVATE_KEY=25e5c82273a271cb1a840d00...

Nota: El paquete en este momento permite conexión con LND y Eclair, probablemente se pueda integrar también con Core Lightning en breves.

Ejecutando el paquete

Una vez que tengamos el archivo de configuración vamos a realizar una prueba de que nuestra app se puede ejecutar sin problemas:

$ yarn dev

yarn run v1.22.xx
warning package.json: No license field
$ nodemon index.js
[nodemon] 2.0.12
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.js`
{"level":30,"time":1678363580264,"pid":9352,"hostname":"xxx","msg":"Server listening at http://127.0.0.1:3000"}

Eso ejecutará nuestra app, como ves está en 127.0.0.1 (localhost) y el puerto 3000. Ahora nos queda conectar esa ubicación con nuestro servidor web.

Conectar con nuestro servidor web

Lo que queremos lograr en este punto es que cuando alguien quiera enviarnos bitcoin mediante la Lightning Network usando nuestra Lightning Address (ejemplo [email protected]), nuestro servidor responda correctamente.

Hacer esto con Nginx es bastante fácil, puedes agregar una directiva o modificar tu archivo de configuración actual para hacer el proxy reverso.

Te recuerdo que todos los ejemplos aquí vistos son para instalar y utilizar este paquete junto a tu web actual. Si quieres usar dominio exclusivamente para esto la configuración sería algo distinta.

# Hacemos el mapeo con un reverse proxy de Nginx
location /.well-known/lnurlp/dani {
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_pass http://127.0.0.1:3000;
}

Realizando las pruebas iniciales

A este punto ya tenemos casi todo en su sitio, a continuación realizaremos una simple prueba con una aplicación online https://hoppscotch.io.

Lo que haremos con esta aplicación será probar si nuestro servidor está respondiendo correctamente.

Crearemos un request tipo GET a https://dominio.com/.well-known/lnurlp/dani. Recuerda modificar los datos con tu dominio y usuario que hayas elegido en la parte de configuración.

Si recibes la siguiente respuesta significa que tu servidor está respondiendo correctamente.

Realizaremos una segunda petición para ver si la comunicación con tu nodo LND es correcta y responde con un pay request válido. Esta vez debemos agregar un parámetro amount y un valor, por ejemplo 1000 (el valor está expresado en mili-satoshis).

Si la respuesta es similar a la siguiente significa que lo tienes todo listo.

Utilizar Ligess en modo producción

Si queremos mantener la aplicación en modo producción podemos instalar un paquete como PM2.

PM2 es un administrador de procesos de Nodejs que realiza un seguimiento de tus procesos de Node en ejecución con muchas funciones interesantes que facilitan la depuración y la visualización de registros de aplicaciones en ejecución.

# Instalamos el paquete de forma global
$ npm install pm2@latest -g

# Ejecutamos nuestra app
$ pm2 start index.js --name lightning-address

Para utilizar más parámetros puedes ver la documentación de PM2.

Conclusión

Hemos instalado un servidor personal para usar nuestra propia Lightning Address con nuestro dominio y LND.

Si buscas más flexibilidad y gestionar varias Lightning Address con varios nodos, puedes usar otro paquete como Satdress https://github.com/nbd-wtf/satdress. Satdress es un servidor Lightning Address federado.

🖖 Si este artículo te ha sido útil comparte para ayudar a otros.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *