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.
- Próposito
- Objetivo
- Alcance
- Requerimientos técnicos
- Preparar el ambiente de trabajo
- Docker
- MongoDB
- P2plnbot
- Conectar con el nodo Lightning
Permitir a las personas comerciar usando la red Lightning con otras personas en Telegram. El bot p2plnbot está desarrollado en nodejs y se conecta con un nodo LND (Lightning Network Daem on) 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, es decir; que 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 de l 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.
- 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.
- Verificar si tiene instalado Nodejs.
$ node -v
En caso de no tenerlo instalado:
- En Mac ejecute la siguiente instrucción:
$ brew install node
- En Windows ir al siguiente enlace.
- En Linux:
$ sudo apt install npm
- Crear un directorio donde colocara el archivo
docker-compose.yml
para MongoDB con los siguientes valores:
mkdir mongodb
cd mongodb
mkdir db-data
vi docker-compose.yml
El archivo 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:
- ./db-data/:/data/db
ports:
- 27017:27017
- Verificar si está levantado Docker con la siguiente instrucción:
$ docker ps –a
Nota: Al ejecutar el primer comando verás la imagen que has creado.
- Levantar el contenedor.
$ docker-compose up –d
- Entrar al contenedor, para ello deberá ejecutar las siguientes instrucciones:
$ docker ps –a
- Este comando le mostrará el ID que se ha creado para posteriormente entrar al contenedor:
$ docker exec -it <container id> /bin/bash
Nota: Entrar al contenedor te permitirá entrar a la BD.
- Entrar a MongoDB
$ mongo admin -u mongoadmin –p secret
$ show dbs
$ use nueva_db ej.
- Clonar el repositorio del bot:
$ git clone https://github.com/grunch/p2plnbot.git
$ cd p2plnbot
$ npm install
- Crear un archivo
.env
, en el directorio raíz del proyecto, viene uno de ejemplo, así que solo necesitara copiarlo y rellenar algunos datos:
• Ejecute las siguientes instrucciones:
$ cp .env-sample .env
$ vi .env
• Para conectar con un nodo lnd
, necesitamos establecer algunas variables:
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',
- Si está usando Polar los datos los obtiene como se muestra en la siguiente imagen:
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.
BOT_TOKEN: Deberá entrar a Telegram y buscar BotFather.
Ejecutar el menú y elegir Create a new bot
donde elegirá el nombre del bot y el usuario, una vez generado le mostrará un númer
o de token que es que se colocará en este campo.
CHANNEL: Cree un canal en Telegram, para ello pulse 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. Pulse sobre la opción Nuevo canal
.
ADMIN_CHANNEL: Este dato será el ID de su canal, para obtenerlo escriba un mensaje en su canal, reenvíelo al bot @JsonDumpBot
y le mostrara un JSON con el ID del canal.
-
Más información aquí.
-
Archivo
.env
LND_CERT_BASE64=
LND_GRPC_HOST='127.0.0.1:10001'
BOT_TOKEN=''
FEE=.001
DB_USER='mongoadmin'
DB_PASS='secret'
DB_HOST='localhost'
DB_PORT='27017'
DB_NAME='p2plnbot'
INVOICE_EXPIRATION_WINDOW=60000
HOLD_INVOICE_EXPIRATION_WINDOW=60
CHANNEL='@tunuevocanal' # Canal creado por ti, el bot debe ser admin aquí
ADMIN_CHANNEL='-10*****46' # Canal o grupo donde el bot envía info a admins, el bot debe ser admin
MAX_DISPUTES=8
HOLD_INVOICE_CLTV_DELTA=144
HOLD_INVOICE_CLTV_DELTA_SAFETY_WINDOW=12
PENDING_PAYMENT_WINDOW=5
FIAT_RATE_EP='https://api.yadio.io/rate'
• Una vez editado el archivo ejecutar la siguiente instrucción:
$ npm start
• Para hacer pruebas:
$ npm test
• Será necesario haber creado ya un bot con BotFather
, tener otra número para usar con Telegram y haber abierto canales en Polar.
- Debe iniciar el bot con esa misma cuanta 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.