El siguiente documento tiene como próposito brindar la información necesaria para poder preparar el ambiente de trabajo para el desarrolo del bot brindando las características técnicas y físicas de cada elemento.
Permitir a las personas comerciar usando la red Lightning con otras personas en Telegram. El bot lnp2pbot está desarrollado en nodejs y se conecta con un nodo LND (Lightning Network Daemon) es una implementación completa de un nodo Lightning Network.
Lograr que el bot de telegram sea capaz de recibir pagos Lightning sin ser custodio, el usuario no necesitará permiso para usar el servicio, ni proporcionar datos personales que puedan comprometer su privacidad, logrando con ello conservar toda la custodia de sus bienes en todo momento, para ello el bot usará facturas retenidas y sólo liquidará dichas facturas del vendedor cuando cada parte está de acuerdo con ello y justo después de ese momento el bot pagará la factura del comprador.
Llegar a todos los usuarios que requieran adquirir satoshis de Bitcoin sin custodia por medio de un bot en Telegram.
- Computadora con acceso a internet.
- Sistema de gestión de nodos Polar, o nodo LND.
- Docker: automatización de implementación de aplicaciones como contenedores portátiles y autosuficientes que se pueden ejecutar en la nube o localmente.
- MogoDB como gestor de bases de datos.
$ node -v
En caso de no tenerlo instalado:
- En Mac ejecuta la siguiente instrucción:
$ brew install node
- En Linux y Windows ir al siguiente enlace.
Crea un directorio donde colocarás el archivo mongo.yml
para MongoDB:
mkdir mongodb
cd mongodb
nano mongo.yml
El archivo mongo.yml debe contener lo siguiente:
version: "3.7"
services:
mongodb:
image: mongo:5.0
environment:
MONGO_INITDB_ROOT_USERNAME: mongoadmin
MONGO_INITDB_ROOT_PASSWORD: secret
volumes:
- ./mongodb-data/:/data/db
ports:
- 27017:27017
Para iniciar MongoDB, ejecuta el siguiente comando:
$ docker compose -f mongo.yml up
Clona el repositorio del bot y navega al directorio del proyecto:
$ git clone https://github.com/lnp2pBot/bot.git
$ cd bot
$ npm install
En el directorio raíz del proyecto, encontrarás un archivo de ejemplo .env-sample
. Copia este archivo y edítalo para configurar tus variables de entorno:
$ cp .env-sample .env
$ nano .env
Para conectar con un nodo lnd
, necesitas establecer algunas variables dentro del archivo .env
creado en el paso anterior:
-
LND_CERT_BASE64: Certificado TLS del nodo LND en formato base64, puede obtenerlo base64
~/.lnd/tls.cert | tr -d '\n'
en el nodo lnd. -
LND_MACAROON_BASE64: Archivo macarrón en formato base64, el archivo macarrón contiene permiso para realizar acciones en el nodo lnd, puede obtenerlo con base64
~/.lnd/data/chain/bitcoin /mainnet/admin.macaroon | tr -d '\n',
-
LND_GRPC_HOST: dirección IP o el nombre de dominio desde el nodo LND y el puerto separado por dos puntos, ej:
192.168.0.2:10009.
Si estás usando Polar los datos los obtienes como se muestra en la siguiente imagen:
A continuación están las variables que debes modificar en el archivo .env
. El resto pueden mantener el valor por defecto o ser modificadas a tu consideración:
LND_CERT_BASE64=''
LND_MACAROON_BASE64=''
LND_GRPC_HOST=''
BOT_TOKEN=''
DB_USER='mongoadmin'
DB_PASS='secret'
DB_HOST='127.0.0.1'
DB_PORT='27017'
DB_NAME='lnp2pbot'
MONGO_URI='mongodb://mongoadmin:secret@localhost/lnp2pbot?authSource=admin'
CHANNEL='@tu-canal-de-ofertas'
ADMIN_CHANNEL='-10*****46'
HELP_GROUP='@tu-grupo-de-soporte'
FIAT_RATE_EP='https://api.yadio.io/rate'
DISPUTE_CHANNEL='@tu-canal-de-disputas'
NOSTR_SK=''
RELAYS=''
Detalles de algunas variables:
-
BOT_TOKEN: Deberás entrar a Telegram y abrir @BotFather. Ejecuta el menú y elige
Create a new bot
donde elegirás el nombre del bot y el usuario, una vez generado te mostrará un token que colocarás en este campo. -
CHANNEL: En ese canal el bot publica las ofertas. Crea un canal en Telegram, para ello pulsa el botón de escribir nuevo mensaje. En Android está en la esquina inferior derecha con un icono redondo con un lápiz, y en iOS está en la superior derecha con un icono bastante pequeño con la forma de un lápiz. Pulsa sobre la opción
Nuevo canal
. Luego pon al bot como administrador del canal (abrir el bot y seleccionar: Añadir a un grupo o canal). -
ADMIN_CHANNEL: A ese canal el bot envía información relevante para los administradores, como el fallo del pago de facturas, cuando un usuario toma una orden y no continúa, entre otras. En este campo debes poner el ID del canal, para obtenerlo escribe un mensaje en el canal, reenvíalo al bot
@JsonDumpBot
y te mostrará un JSON con el ID del canal. Más información aquí. Debes añadir al bot como administrador del canal.
-
HELP_GROUP: Grupo donde darás soporte del bot. Puedes crear un nuevo grupo o utilizar uno que tengas creado previamente.
-
DISPUTE_CHANNEL: En ese canal el bot publica las disputas para que los solvers las tomen (no es un canal para resolver disputas, sino para tomarlas). Debes crear este canal en Telegram y añadir al bot como administrador.
-
NOSTR_SK: Clave privada de Nostr que publicará las ofertas del bot como un evento parametrizado remplazable tipo 38383. Si no quieres que tu bot publique las ofertas en Nostr, comenta esa variable.
-
RELAYS: Relays de Nostr a los que se conectará el usuario de Nostr de tu bot para publicar las ofertas. Si no quieres que tu bot publique las ofertas en Nostr, comenta esa variable.
$ npm start
- Para hacer pruebas:
$ npm test
Luego de completar los pasos de la Instalación:
- Inicia el bot con el comando:
/start
Mostrará un menú, elegiremos la opción de /sell
para vender con los requerimientos necesarios.
- En el canal se verá la oferta, debe elegir comprar con el otro usuario de Telegram.
- Tomar la orden en el canal. Dar clic en Comprar Satoshis.
- Entrar al bot y dar clic en continuar.
Este mensaje es el que se le mostrará.
- Crear factura en Polar con algunos de los usuarios y pegar en Telegram. Elegir
Crear Factura
en la parte de comportamiento.
- Poner la cantidad de venta.
- Elegir
copiar y Cerrar.
- Entrar al
bot
y pegar la factura.
Llegará una solicitud de pago al vendedor que se verá en el bot.
- Pegar la factura en Polar y pagarla.
- Cuando alguien tome la orden, el
bot
mostrará el siguiente mensaje:
- En el
bot
para el otro usuario se mostrará lo siguiente:
- El usuario debe liberar los fondos con el comando
/fiatsent
, para ello debe copiar y pegar con elid
- El
bot
indicará que el usuario ya envió el dinero fiat.
- El usuario debe liberar los fondos con el comando
/release
, para ello debe copiar y pegar con elid
- Finalmente se le avisará al comprador que su operación ha sido completada con éxito.