Comment lancer des micropaiements dans votre application

J'ai passé la semaine dernière à développer mon premier programme public - un robot Telegram qui fonctionne comme un portefeuille Bitcoin et vous permet de « lancer des pièces » à d'autres participants dans des discussions de groupe, ainsi que d'effectuer des paiements Bitcoin externes à vous-même ou à d'autres personnes. "Applications Lightning". Je suppose que le lecteur est généralement familier avec Bitcoin et Telegram, car Je vais essayer d'écrire brièvement, sans entrer dans les détails. Une sélection de ressources sur Bitcoin est disponible sur ce lieneh bien, Telegram est un moyen de messagerie instantanée sur appareils mobiles et PC, vous permettant de créer vos propres petites applications (chat bots) sur leur plateforme.

Quelles sont les principales fonctionnalités de cette application ?

  • Permet de remercier ou d'encourager son interlocuteur avec une réelle valeur matérielle, et pas seulement "comme virtuel", cela amène la communication électronique à un tout autre niveau
  • Un exemple concret d'application pouvant interagir financièrement avec d'autres applications à l'aide d'un protocole de paiement ouvert
  • Tous les composants de l'application sont des projets open source et peuvent être modifiés et utilisés pour vos propres tâches. L'application n'utilise pas de solutions fermées ou commerciales, malgré le fait qu'elle s'inscrit dans le domaine du commerce électronique, qu'il est aujourd'hui assez difficile de qualifier d'ouvert.

Et comment appliquer cela en pratique ?

quelque chose comme ça…

Comment lancer des micropaiements dans votre application
ou alors...

Comment lancer des micropaiements dans votre application
Que signifient ces chiffres ? Ce unités bitcoin - satoshi. Aux prix d'échange à la mi-2019, 1000 0.06 satoshi équivaut à environ XNUMX $. Satoshi peut être dépensé en ligne ou facilement échangé contre de la monnaie nationale. C'est pour cette raison (la liquidité) qu'il ne s'agit pas simplement d'un autre "entrée de base de données" ou « des points que vous pouvez dépenser dans nos magasins partenaires »Et argent réel sur Internet.
*Je tiens à souligner d'emblée que je n'essaie évidemment pas d'écrire certains mots ou phrases en russe - soit je ne connais pas la traduction contextuelle dans certains cas, soit une telle traduction, à mon avis, semble plus trompeuse que correct

La question peut se poser de savoir comment utiliser une telle application s'il n'y a pas de bitcoins. Ils peuvent facilement être achetés en petites quantités sur l’un des nombreux échanges ou échangeurs, ou auprès d’un ami Bitcoin, ou même recevoir des pièces des utilisateurs actuels du bot. De nombreux portefeuilles téléphoniques offrent la possibilité d’acheter des bitcoins directement « sans quitter la caisse ».

Comment lancer des micropaiements dans votre applicationComment lancer des micropaiements dans votre applicationComment lancer des micropaiements dans votre application

Quand tu as mis la main sur des bitcoins (ou plutôt satosh-suis-je(?)) - lancement @atomic_tipbot et faites /dépôt.

Le bot répondra en vous demandant combien de satoshis ajouter à votre solde et en vous envoyant une facture de paiement, qui peut être payée avec un portefeuille mobile en scannant le code QR ou en appuyant sur le bouton ("ouvrir dans le portefeuille") sur la page de facture.

Comment lancer des micropaiements dans votre applicationComment lancer des micropaiements dans votre applicationComment lancer des micropaiements dans votre application

Après avoir confirmé le paiement dans votre portefeuille, le bot enverra presque immédiatement une confirmation de paiement et celle-ci sera affichée visuellement dans le cadre de la facture.

Jusqu'à présent, nous avons abordé deux composants de l'application : le back-end du robot Telegram et le système de traitement des paiements en crypto-monnaie (plutôt son front-end).

Pour créer un bot Telegram, j'ai utilisé Bot de télégramme Python. Et bien sûr, le bot lui-même Open source.

En tant que système de traitement des paiements et de résolution des problèmes UX, le choix s'est porté (en fait, il n'y a presque pas de choix) sur Serveur BTCPay, sur lequel documentation sur ce lien.

Si vous recherchez des solutions pour traiter directement les événements de paiement, vous devez faire attention à Pages de manuel de l'Electrum CLI pour ce qu'on appelle les paiements en chaîne, et pour les solutions de micro-paiements instantanés (Lightning) comme Charge de foudre ou Sparko.

Alors, c'est auto-hébergé ou pas !?

Oui c'est le cas. Dans mon application, j'utilise l'hébergement gratuit BTCPayServer - BTCPayJungle, mais il est tout à fait possible et ne nécessite pas beaucoup de temps de lancer votre propre centre de traitement. Cependant, il convient de rappeler que vous aurez besoin d’environ 500 Go disponibles sur le disque dur pour stocker les blockchains Bitcoin (et Litecoin). Vous aurez également besoin de ressources informatiques et réseau pour la durée de la synchronisation et, selon vos besoins, des « wrappers » nécessaires aux blockchains pour faciliter l'interaction avec elles. BTCPayServer ne contient pas intentionnellement des clés privées ou toute autre information vous permettant de contrôler votre portefeuille.

Pour les paiements en chaîne (réguliers), vous devez ajouter ce qu'on appelle. Clé de portefeuille xpub dans BTCPayServer pour générer des adresses de réception (clés publiques). Cela rend possible et sûr l’utilisation de BTCPayServer même sous forme « partagée ». Toutes ces clés et adresses xpub peuvent être facilement obtenues dans de bons portefeuilles comme Electrum, pour une configuration ultérieure du traitement.

Tous ceux qui ont rencontré Bitcoin ont entendu dire que Bitcoin est lent et que les transactions sont coûteuses, surtout lorsqu'il y a un battage médiatique, donc pour les micro-paiements instantanés, il vaut la peine d'utiliser les transactions Lightning Network (hors chaîne).

Qu'est-ce que ce réseau Lightning ?

C'est quelque chose comme un plugin pour Bitcoin, qui ajoute une couche d'abstraction supplémentaire et vous permet d'effectuer des transactions instantanées et pratiquement gratuites sur le réseau Bitcoin. Tout cela est possible grâce à la magie cryptographique des multi-signatures, plus communément appelée contrat intelligent. Il existe plusieurs implémentations du protocole Lightning Network, j'utilise c-foudre implémentation en C.

La principale différence entre les paiements en chaîne et hors chaîne (Lightning) réside dans la manière dont ils sont stockés. Tous sur la chaîne les transactions sont relayées sur tous les nœuds du réseau jusqu'à ce que l'un des nœuds Bitcoin annonce nouveau bloc miné avec les transactions qui y sont incluses. (Sur le hub il y a même BitFury, ils produisent juste du fer pour l'exploitation minière). C'est pour cette raison que nous appelons de telles transactions sur la chaîne. Ces transactions seront enregistrées dans une blockchain commune et y resteront jusqu'à la fin de son existence. En outre, ces transactions sont accessibles au public et peuvent être surveillées, suivies et analysées.

Dans le cas d' hors chaîne Dans les transactions (éclair), tout se passe différemment. Chaque nœud du réseau Lightning possède un (ou plus) les adresses en chaîne sont les mêmes adresses Bitcoin habituelles où tout commence. Lorsque des bitcoins apparaissent à une telle adresse, il est possible d'ouvrir ce qu'on appelle. canal de foudre vers un autre nœud, ce qui signifie qu'en utilisant des techniques cryptographiques, ces deux nœuds se sont mis d'accord sur la disponibilité des fonds entre eux. Plus tard, toutes les transactions (les nôtres et celles de nœuds tiers) qui transitent par un tel canal sont enregistrées uniquement sur les nœuds des participants à la transaction (et les nœuds intermédiaires). Les seules transactions enregistrées sur la blockchain sont les transactions qui ouvrent ou ouvrent un canal. À une échelle plus complète, le résultat est un réseau de nœuds interconnectés qui construit des milliers de chemins différents entre les participants pour « transférer » des fonds d’un nœud à un autre selon certaines règles strictes. Presque toutes ces transactions sont stockées uniquement dans le fichier de base de données des nœuds eux-mêmes. C'est la raison pour laquelle nous les appelons hors chaîne.

Le diagramme montre une visualisation de tous les composants de l'application

Comment lancer des micropaiements dans votre application

En bref:

1) L'utilisateur envoie une commande au bot dans Telegram

2) Telegram envoie un message sur l'événement application python bot

3) application python envoie une demande à Serveur BTCPay

4) BTCPayServer génère les adresses BTC et LTC entrantes et envoie également une demande de facture à charge de foudre, qui à son tour communique avec le démon c-foudre. En conséquence, nous obtenons un magnifique formulaire de traitement de paiement HTML

5) L'utilisateur paie la facture et voit la confirmation

6) Serveur BTCPay envoie notification de paiement de facture (IPN) à la callback_url spécifiée, dans notre cas rappels.py (une autre application python pour recevoir des notifications)

7) Selon les données reçues, le solde de l'utilisateur change

... et si l'utilisateur souhaitait retirer des fonds (pièces qu'il a reçues d'autres) ...

8) Application Python Le bot attend le texte ou l'image du code QR, et lorsque des données valides sont reçues, le paiement est effectué par l'utilitairepaylightning.py*, qui initie une transaction via c-lightning RPC.

Comment lancer des micropaiements dans votre application

*Pour être honnête, il convient de noter que mon wrapper paylightning.py n'est pas entièrement complet et peut renvoyer un faux négatif dans des scénarios spécifiques. je recommande utiliser un wrapper bien débogué dans les cas proches de la production

Ce que nous avons? Les utilisateurs de notre bot peuvent envoyer des messages dans une discussion de groupe ou directement valeur matérielle Pas de limites. Et ce n'est pas tout - grâce au protocole Lightning Network, qui est en quelque sorte un réseau de paiement unifié et simplifié, il devient possible d'envoyer le même argent reçu en chat vers des applications entièrement tierces. Par exemple, Telegram disposait déjà du premier robot pour les paiements Bitcoin – @lntxbot. "Single Balance" vous permet d'utiliser n'importe lequel des robots en fonction des préférences d'un chat de groupe particulier (oui, le problème est complètement tiré par les cheveux et la solution est très inutile, mais c'est le point). Transférer le solde d’un bot à un autre ne coûte rien et ne prend que quelques secondes ! Il est important de noter que les créateurs de ces robots n’ont jamais communiqué entre eux.

Comment lancer des micropaiements dans votre application Comment lancer des micropaiements dans votre application

Tout ce que vous avez à faire est de transmettre un message de demande de dépôt de @lntxbot à @atomic_tipbot et voul !

Il ne s’agit plus simplement de « jeter des chiffres dans une base de données », mais d’un paiement entre deux bases de données différentes et sans rapport. Ainsi, plusieurs « LApps » ont déjà été intégrées au bot, parmi lesquelles : sat2.io и lnsms.monde.

Qu'est-ce que ça veut dire Intégration LApp?

Chaque Réseau Lightning Un nœud est essentiellement un portefeuille Bitcoin. Il a deux soldes : en chaîne et hors chaîne. Un solde en chaîne est nécessaire pour ouvrir de nouveaux canaux et stocker les fonds des canaux fermés. Mais l’équilibre hors chaîne est exactement ce qui se passe entre les nœuds. Les principales exigences pour un nœud sont la réception et l'envoi de paiements, chaque nœud a donc des fonctions de logiciel. pay и facture. Je vais montrer comment cela se produit :

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

Nous recevons une « facture » du cahier des charges BOULON11 dans ce cas, quel est le format de paiement dans le réseau Bitcoin (et Litecoin, d'ailleurs aussi). Il s'agit d'une chaîne contenant des informations sur le destinataire, le montant de la transaction, l'heure d'expiration de la demande, etc., des informations détaillées peuvent être obtenues en exécutant decodepay en relation avec cette chaîne :

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"
}

Mais pour payer une telle « facture », nous avons besoin de la fonction pay 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"
}

Tous les états de transaction sont traités par l'ensemble du réseau et par votre propre nœud en particulier. Il n'est pas nécessaire (mais c'est possible) d'interagir avec les auteurs de l'application du destinataire du paiement ou l'une de leurs API pour obtenir des informations sur l'état du paiement. Il n'est pas nécessaire de vérifier l'état du paiement dans le système de traitement intermédiaire. Il n'est pas nécessaire d'attendre que votre transaction soit approuvée par une banque ou un organisme gouvernemental. Après tout, il n’y a pas de rétrofacturation ou d’autres facteurs externes qui peuvent affecter le solde de votre compte. Il s'agit d'une solution permettant de déplacer de la valeur sur Internet, sans avoir besoin d'un arbitre tiers qui décide si la transaction est conforme aux règles (parfois même aux règles internes, dont tous les participants ne sont pas informés à l'avance) ou non. Il n’y a pas de « règles internes » dans Bitcoin. Les seules règles à respecter sont celles du réseau, ouvertes et connues de tous.

Cela le rend réel direct, pratiquement gratuit и instant transactions monétaires entre personnes ou programmes en mode complètement hors ligne.

Si vous avez la possibilité de recevoir des données de paiement d’une application tierce, il devient alors possible d’interagir financièrement avec cette application. À titre d'exemple, considérons le service lnsms.world, qui vous permet d'envoyer un message SMS à un numéro arbitraire, en le payant avec des bitcoins. Pour intégrer cette application, il suffit de transmettre les données du formulaire Web directement au script d'envoi de SMS - émuler les actions de l'utilisateur sur le site Web :

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)

Je ne sais pas pour quelle raison, mais lnsms répond avec un code d'état HTTP 201 et renvoie une facture au format BOLT11. Eh bien, cela suffit pour que les utilisateurs de robots puissent payer l'envoi de SMS à partir de leur solde reçu dans les chats. L’utilisateur ne sait même pas ce qui se passe là-bas, il vient de payer quelques centimes pour envoyer un SMS. Et moi, en tant que développeur, n'entre pas dans les détails du fonctionnement des services SMS. Je viens de transmettre le paiement et de recevoir le service. Vous pouvez faire un balisage par-dessus, ou ce n’est pas obligatoire – c’est mon libre choix. Pas de comptes, d'accords ou d'autres API pour des tâches triviales comme l'envoi de SMS.

Imaginons maintenant un instant que notre application soit quelque chose de plus utile qu'un chatbot et effectue un paiement non pas à un autre bot, mais à une autre application ou appareil connecté à Internet. Ou encore, il s’agit de dizaines, voire de centaines de paiements insignifiants chaque seconde entre appareils, services, magasins ou certains prestataires de services. C’est là le pouvoir des micro-paiements, voilà à quoi devrait ressembler l’Internet des objets. Il existe déjà des projets comme Althea qui donnent vie à ces idées et, dans un avenir proche, nous assisterons à de grands changements, à mon avis, dans le domaine que nous appelons aujourd'hui le commerce électronique.

Si vous avez aimé l'article et souhaitez essayer les bitcoins en action - envoie-moi un verre de bière et des petits pains moelleux.

Seuls les utilisateurs enregistrés peuvent participer à l'enquête. se connecters'il te plait.

Êtes-vous intéressé par des articles purement techniques sur Bitcoin et les logiciels associés ?

  • Oui

  • Non

  • Je m'intéresse davantage aux aspects commerciaux de la crypto-monnaie

8 utilisateurs ont voté. 4 utilisateurs se sont abstenus.

Source: habr.com

Ajouter un commentaire