Cómo hacer posibles micropagos en tu aplicación

Esta semana pasé codificando mi primera aplicación pública para mascotas basada en el bot de chat de Telegram que actúa como una billetera de Bitcoin y permite enviar y recibir consejos entre los usuarios de Telegram y otras llamadas "aplicaciones Lightning". Supongo que está familiarizado con Bitcoin y Telegram en general, intentaré publicar en breve y sin profundizar en los detalles. Puede encontrar más recursos sobre Bitcoin aquí y Telegram es simplemente un mensajero instantáneo que le permite crear sus aplicaciones personalizadas (chat-bots) utilizando su plataforma.


¿Cuáles son los puntos clave de dicha aplicación?


  • Permite calificar las ideas y respuestas de otros usuarios con un valor real en lugar de
    'Me gusta virtual'. Esto lleva la conversación en línea a un nivel completamente nuevo.
  • Ejemplo real de aplicación de micropagos en funcionamiento que puede actuar con otras entidades
    a través de internet utilizando un protocolo abierto
  • Todos los módulos son proyectos de código abierto y pueden reutilizarse y ajustarse fácilmente
    para tu propio proyecto. La aplicación no se retransmite en servicios comerciales de terceros.
    Incluso cae en el campo del comercio electrónico, que actualmente está casi cerrado, la aplicación
    Se basa en soluciones abiertas.

¿Cuáles son los casos de uso?


algo como esto ...

imagen

o asi ..
imagen

¿Qué significan los números? Estas son unidades de bitcoin: satoshis . A mediados de 2019 1000 satoshis tiene un valor de $ 0.06. Puede gastarlo en línea o cambiarlo a su moneda local utilizando muchos servicios disponibles. Por lo tanto, este no es solo otro "número en una base de datos" o un "cupón que puede gastar en nuestra tienda asociada" , sino un dinero real de Internet .


Puede preguntar qué hacer si no tiene ningún bitcoin para usar en la aplicación. Simplemente puede recibir una sugerencia del usuario de la aplicación existente o comprar una pequeña cantidad de bitcoin en varios intercambios o billeteras bitcoin para teléfono móvil o PC.


imagenimagenimagen


Cuando tienes bitcoin, puedes iniciar @atomic_tipbot y hacer un / depósito.


Verá una factura, puede seleccionar el método de pago preferido y enviar dinero simplemente escaneando el código QR o presionando el botón ( "abrir en la billetera" ) en la factura.


imagenimagenimagen


Confirme el pago en su billetera móvil y verá una pantalla de confirmación casi instantáneamente en Telegram.


Hasta ahora hemos tocado dos partes separadas de la aplicación: el back-end de telegram bot y el sistema de procesamiento de pagos (en realidad, más bien como su front-end).


Para crear este bot de Telegram, he usado el bot de Python Telegram . Y, por supuesto, el bot es de código abierto .


Como un sistema de procesamiento de pagos para generar facturas, verificar el estado, enviar notificaciones y cuidar de UX, se utiliza BTCPayServer, cuya documentación se puede encontrar aquí .


Si está buscando cómo procesar eventos de pago directamente, puede consultar las páginas del manual de Electrum CLI para pagos en cadena y ver soluciones para pagos fuera de cadena (Lightning) como Lightning-charge o Sparko .


¡Dijiste 'sin terceros' y 'sin servicios en la nube'?


Si, eso es verdad. En mi aplicación, uso el alojamiento compartido gratuito de la instancia de BTCPayServer , BTCPayJungle , pero es posible activar incluso en su propio servidor dedicado. Solo recuerde que necesita aproximadamente ~ 500 GB de espacio para almacenar la cadena de bloques de Bitcoin y Litecoin. BTCPayServer no posee ninguna clave privada o información confidencial que pueda permitir a los piratas informáticos controlar los fondos en su billetera. Para los pagos en cadena (estándar) debe proporcionar la clave xpub de su billetera a BTCPayServer para que pueda generar direcciones públicas. De esta manera, la arquitectura BTCPay hace posible procesar pagos de manera no confiable incluso en un entorno compartido. Es muy simple de configurar si usa billeteras comprobadas como Electrum .


¿Qué es la red Lightning?


Es algo así como un complemento de Bitcoin que agrega una capa de abstracción adicional y permite realizar transacciones de bitcoin instantáneas y casi gratuitas. Todo esto es posible gracias a la magia criptográfica de múltiples firmas, que a menudo se llama contrato inteligente . Existen múltiples implementaciones del protocolo LN. Estoy usando la implementación de c-lightning C.


La principal diferencia entre los pagos dentro y fuera de la cadena (Lightning) está en cómo se almacenan las transacciones. Todas las transacciones en cadena se transmiten a toda la red, por lo que cada nodo bitcoin en ejecución registrará esta transacción en blockchain, si se extrae el bloque que contiene esta transacción. Hola, BitFury , ¿estoy en lo cierto? ;) Es por eso que llamamos a tales transacciones en cadena . Dichas transacciones se almacenarán en blockchain hasta el final de su existencia. Es posible rastrear, analizar y monitorear públicamente cualquier transacción de este tipo a través de la red.


En caso de transacciones fuera de la cadena (Lightning), las cosas suceden de otra manera. Cada nodo de rayo tiene (puede ser muchas) direcciones en la cadena, desde donde comienza todo. Cuando se reciben fondos en dicha dirección, el uso del nodo de técnicas de criptografía puede abrir el llamado canal de rayos a otro nodo, lo que significa que estos dos nodos llegaron a un acuerdo sobre la disponibilidad de fondos entre ellos. Más tarde, todas las transacciones que se realizan a través del canal (transacciones propias, o puede ser una transacción enrutada desde otro nodo) se almacenan solo en esos dos nodos (y el nodo intermedio si existiera). Las únicas transacciones que se almacenan en las redes blockchain son las transacciones de apertura y cierre de canales. Es por eso que las transacciones Lightning que llamamos fuera de la cadena . Principalmente existen solo en el archivo de base de datos de nodos.


Todo se visualiza en el diagrama.


imagen

Cuento corto:


1) El usuario envía un mensaje y solicita un depósito al bot en Telegram


2) Telegram activa la aplicación python de bot


3) la aplicación Python envía una solicitud a BTCPayServer


4) BTCPayServer genera direcciones entrantes para BTC y LTC, y también se pone en contacto con lightning-charge , que obtiene datos del demonio c-lightning . Como resultado, obtenemos un marco HTML bien manejado para el procesamiento de pagos


5) El usuario paga la factura y verá la confirmación


6) BTCPayServer envía una notificación de pago de factura (IPN) a la URL de devolución de llamada especificada, en nuestro caso,
irá a callbacks.py (otra aplicación de Python para escuchar las devoluciones de llamada)


7) De acuerdo con los detalles completos del pago, el saldo del usuario cambia y el usuario recibe una notificación


... si el usuario decide retirar fondos (propinas que recibió) ...


8) La aplicación Python de Bot escucha el texto o la imagen de QR, cuando recibe datos de la factura (cadena larga de caracteres) luego envía la solicitud para pagar esa factura a otra aplicación Python paylightning.py * , que inicializa los pagos usando c-lightning RPC


imagen

* Para ser justos, necesito mencionar que mi envoltorio de pago paylightning.py está incompleto y puede dar resultados falsos negativos en algunos casos específicos. Debe usar un contenedor de pago bien probado para c-lightning en caso de uso similar a la producción.


Los usuarios pueden enviarse consejos entre ellos en chats grupales y enviar / recibir valor sin ningún límite. Pero eso no es todo. Gracias al protocolo Lightning Network, que se encuentra en algún tipo de red de pago unificada y simplificada, puede enviar las mismas monedas de saldo a aplicaciones completamente diferentes. Hay otro tip-bot de bitcoin en telegram: @lntxbot. El usuario puede solicitar un depósito a este bot


imagenimagen


¡Simplemente reenvíe datos de @lntxbot a @atomic_tipbot y voul'a!


Esto ya no es un 'intercambio de números en la base de datos' sino un pago entre dos 'bases de datos' separadas y no relacionadas. Bot ya tiene pocos 'LApps' integrados: sat2.io y lnsms.world .


Usted puede preguntar, ¿qué significa exactamente la integración de LApp ?


Cada nodo de Lightning Network actúa como una billetera bitcoin. Tiene equilibrio tanto dentro como fuera de la cadena. El saldo en cadena generalmente se usa para abrir canales y almacenar fondos de canales cerrados, en tareas de mantenimiento de nodos cortos. El saldo fuera de la cadena es exactamente lo que se usa para intercambiar fondos entre nodos. Las funciones principales de cada nodo es la capacidad de enviar o recibir fondos, por lo que el nodo como software proporciona métodos de pago y facturación . En breve mostraré cómo sucede:


user@ln-node:/ % lightning-cli invoice 1000000000 internal_description external_description { "payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0", "expires_at" : 1558709834, "bolt11" : "lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6" } 

La factura BOLT11 se genera en este caso, que es un formato unificado para solicitudes de pago en la red Bitcoin (así como Litecoin). Esta cadena incluye datos sobre el destinatario de la factura, el importe, la marca de tiempo, la caducidad, etc. Para decodificar esta cadena, c-lightning proporciona el método decodepay:


 user@ln-node:/ % lightning-cli decodepay lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6 { "currency" : "bc", "created_at" : 1558105034, "expiry" : 604800, "payee" : "025a14b8ed40583d67aec92da19453e0b2d1fbbf75f96f85d3dd0ff61a51ee0490", "msatoshi" : 1000000000, "amount_msat" : "1000000000msat", "description" : "external_description", "min_final_cltv_expiry" : 10, "routes" : [ [ { "pubkey" : "03a20c0c2ae4508b669a70e5f82f08f69a3da5da3bf0c973673c3fe977db0f61e3", "short_channel_id" : "574012x1255x1", "fee_base_msat" : 1000, "fee_proportional_millionths" : 1, "cltv_expiry_delta" : 144 } ] ], "payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0", "signature" : "304502210099f31dffd18b6db8296637db3e3a1ffbaf7b7db087a2ad1eedb7639f25e78b25022079038370073681aa1e1a7a05de6588e98ead078896d0a37a15b755c212dc3d37" } rayo-cli decodepay lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6 user@ln-node:/ % lightning-cli decodepay lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6 { "currency" : "bc", "created_at" : 1558105034, "expiry" : 604800, "payee" : "025a14b8ed40583d67aec92da19453e0b2d1fbbf75f96f85d3dd0ff61a51ee0490", "msatoshi" : 1000000000, "amount_msat" : "1000000000msat", "description" : "external_description", "min_final_cltv_expiry" : 10, "routes" : [ [ { "pubkey" : "03a20c0c2ae4508b669a70e5f82f08f69a3da5da3bf0c973673c3fe977db0f61e3", "short_channel_id" : "574012x1255x1", "fee_base_msat" : 1000, "fee_proportional_millionths" : 1, "cltv_expiry_delta" : 144 } ] ], "payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0", "signature" : "304502210099f31dffd18b6db8296637db3e3a1ffbaf7b7db087a2ad1eedb7639f25e78b25022079038370073681aa1e1a7a05de6588e98ead078896d0a37a15b755c212dc3d37" } 

En caso de que necesitemos pagar alguna factura, debemos usar el método de pago de c-lightning:


 user@ln-node:/ % lightning-cli pay lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j { "id" : 163, "payment_hash" : "c3e644a005f56e33df89facbce2c9dfcabbef5d105285a98272cacc77ab2de63", "destination" : "03021c5f5f57322740e4ee6936452add19dc7ea7ccf90635f95119ab82a62ae268", "msatoshi" : 200000, "amount_msat" : "200000msat", "msatoshi_sent" : 200003, "amount_sent_msat" : "200003msat", "created_at" : 1558106072, "status" : "complete", "payment_preimage" : "1a9552b9f4e9199e26839353f870b12cc85b7674a2fb134e78aa370032611019", "bolt11" : "lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j" } rayo-cli lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j pago user@ln-node:/ % lightning-cli pay lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j { "id" : 163, "payment_hash" : "c3e644a005f56e33df89facbce2c9dfcabbef5d105285a98272cacc77ab2de63", "destination" : "03021c5f5f57322740e4ee6936452add19dc7ea7ccf90635f95119ab82a62ae268", "msatoshi" : 200000, "amount_msat" : "200000msat", "msatoshi_sent" : 200003, "amount_sent_msat" : "200003msat", "created_at" : 1558106072, "status" : "complete", "payment_preimage" : "1a9552b9f4e9199e26839353f870b12cc85b7674a2fb134e78aa370032611019", "bolt11" : "lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j" } 

Todos los estados de pagos son manejados por toda la red y su propio nodo. No tiene la necesidad (pero tiene la posibilidad de hacerlo) de comunicarse con los desarrolladores de aplicaciones del lado receptor o su API, algún proveedor de procesamiento de tarjetas o cualquier banco para obtener confirmación sobre su pago o liberar fondos de su cuenta cuenta No hay devoluciones de cargo ni ningún otro tipo de influencia externa en el saldo de sus cuentas. Todo lo que necesita es un software que actúe según las reglas de red descentralizadas. Esta es una solución para intercambiar un valor a través de Internet, sin la necesidad de ningún tipo de árbitro en el medio que decida sobre su compatibilidad de pago con algunas reglas, a veces incluso antes desconocidas para todas las partes. No hay reglas "internas" en bitcoin, todas las reglas que su aplicación necesita completar son abiertas y conocidas.


Esto hace posible el intercambio de valor directo , casi gratis e instantáneo a través de Internet entre personas o incluso el software en sí mismo de manera verdaderamente autónoma.


Si hay una manera de obtener datos de pago de otra aplicación, puede actuar con ellos en sentido financiero. Como en nuestro ejemplo, lnsms.world es una aplicación web que le permite enviar sms a cualquier número y pagar con bitcoin. Para integrar dicha opción en nuestra aplicación, simplemente necesitamos pasar los datos requeridos del formulario web a lnsms.world:


 payload = { 'number': phone_number, 'text': text, 'force_unicode': 0 } send_req = requests.post('https://lnsms.world/invoice', data=payload) if send_req.status_code == 201: plain_invoice = str(send_req.text) 

No sé por qué motivo, pero lnsms responde con el código de estado 201 HTTP y devuelve la factura BOLT11. Bueno, eso es suficiente para pagar esta factura y nuestros usuarios enviarán sms poco después de recibir el pago. Podemos cobrar una tarifa por encima o no, esa es nuestra libre elección.


Ahora, imagine, que su bot es en realidad una aplicación más útil y no paga a otro bot, sino a otra entidad, conectada a Internet. O, ¿pueden ser pagos entre software, máquinas, tiendas, proveedores de servicios de forma periódica que se repiten cada pocos segundos? ¿Sientes el poder de los micropagos? Así será la Internet de las cosas. Ya hay proyectos como https://althea.org/ y en un futuro cercano enfrentaremos grandes cambios en el campo que llamamos comercio electrónico.


Si le gusta esta publicación e intenta realizar pagos con bitcoins usted mismo, puede dejarme un consejo en mi página de propinas .

Source: https://habr.com/ru/post/452666/


All Articles