So ermöglichen Sie Mikrozahlungen in Ihrer App

Diese Woche habe ich meine erste öffentliche Haustier-App basierend auf dem Telegramm-Chat-Bot codiert, der als Bitcoin-Brieftasche fungiert und das Senden und Empfangen von Tipps zwischen Telegrammbenutzern und anderen sogenannten „Lightning-Apps“ ermöglicht. Ich gehe davon aus, dass Sie mit Bitcoin & Telegram im Allgemeinen vertraut sind. Ich werde versuchen, kurz und ohne tiefe Details zu posten. Weitere Ressourcen zu Bitcoin finden Sie hier. Telegram ist einfach ein Instant Messenger, mit dem Sie Ihre benutzerdefinierten Apps (Chat-Bots) mithilfe ihrer Plattform erstellen können.


Was sind die wichtigsten Punkte einer solchen App?


  • Ermöglicht die Bewertung von Ideen und Antworten anderer Benutzer mit echtem Wert anstelle von
    "Virtuelle Likes". Dies bringt Online-Konversation auf ein völlig neues Niveau
  • Ein echtes Beispiel für eine funktionierende Micro-Payment-App, die mit anderen Unternehmen zusammenarbeiten kann
    über das Internet mit offenem Protokoll
  • Alle Module sind Open-Source-Projekte und können einfach wiederverwendet und angepasst werden
    für Ihr eigenes Projekt. Die App wird nicht an kommerzielle Dienste von Drittanbietern weitergeleitet.
    Auch fällt es unter E-Commerce-Bereich, der derzeit fast geschlossen ist, die App
    basiert auf offenen Lösungen.

Was sind die Anwendungsfälle?


so etwas ...

Bild

oder so ..
Bild

Was bedeuten Zahlen? Dies sind Bitcoin-Einheiten - Satoshis . Mitte 2019 haben 1000 Satoshis einen Wert von 0,06 USD. Sie können es online ausgeben oder mit vielen verfügbaren Diensten in Ihre lokale Währung umtauschen. Dies ist also nicht nur eine andere "Nummer in einer Datenbank" oder ein "Gutschein, den Sie in unserem Partnergeschäft ausgeben können" , sondern ein echtes Internetgeld .


Sie können fragen, was zu tun ist, wenn Sie kein Bitcoin in der App verwenden können. Sie können einfach einen Tipp von einem vorhandenen App-Benutzer erhalten oder eine kleine Menge Bitcoin an verschiedenen Börsen oder Bitcoin-Geldbörsen für Mobiltelefone oder PCs kaufen.


BildBildBild


Wenn Sie Bitcoin erhalten haben, können Sie @atomic_tipbot starten und eine Einzahlung vornehmen.


Sie sehen eine Rechnung, Sie können die bevorzugte Zahlungsmethode auswählen und Geld senden, indem Sie einfach den QR-Code scannen oder per Knopfdruck ( "In Brieftasche öffnen" ) auf der Rechnung.


BildBildBild


Bestätigen Sie die Zahlung in Ihrer mobilen Geldbörse, und im Telegramm wird fast sofort ein Bestätigungsbildschirm angezeigt.


Bisher haben wir zwei separate Teile der App berührt: das Telegramm-Bot-Back-End und das Zahlungsverarbeitungssystem (eigentlich eher das Front-End).


Um diesen Telegramm-Bot zu erstellen, habe ich Python-Telegramm-Bot verwendet . Und natürlich ist der Bot Open Source .


Als Zahlungsverarbeitungssystem zur Erstellung von Rechnungen, zur Überprüfung des Status, zum Senden von Benachrichtigungen und zur Pflege von UX wird BTCPayServer verwendet. Die Dokumentation finden Sie hier .


Wenn Sie wissen, wie Zahlungsereignisse direkt verarbeitet werden können, können Sie auf den Handbuchseiten von Electrum CLI nach Zahlungen in der Kette suchen und nach Lösungen für Zahlungen außerhalb der Kette (Lightning) wie Lightning-Charge oder Sparko suchen .


Sie sagten "keine Drittanbieter" und "keine Cloud-Dienste" !?


Ja, das stimmt. In meiner App verwende ich kostenloses Shared Hosting der BTCPayServer-Instanz - BTCPayJungle , aber es ist möglich, auch auf Ihrem eigenen dedizierten Server hochzufahren . Denken Sie daran, dass Sie dann ca. 500 GB Speicherplatz benötigen, um die Bitcoin- und Litecoin-Blockchain zu speichern. BTCPayServer enthält keine privaten Schlüssel oder vertraulichen Informationen, mit denen Hacker das Geld in Ihrer Brieftasche kontrollieren können. Für On-Chain-Zahlungen (Standardzahlungen) müssen Sie BTCPayServer einen xpub-Schlüssel aus Ihrer Brieftasche zur Verfügung stellen, damit öffentliche Adressen generiert werden können. Auf diese Weise ermöglicht die BTCPay-Architektur die vertrauenswürdige Verarbeitung von Zahlungen auch in einer gemeinsam genutzten Umgebung. Die Konfiguration ist sehr einfach, wenn Sie bewährte Geldbörsen wie Electrum verwenden .


Was ist Lightning Network?


Es ist so etwas wie ein Add-On zu Bitcoin, das eine zusätzliche Abstraktionsschicht hinzufügt und es ermöglicht, sofortige und fast kostenlose Bitcoin-Transaktionen durchzuführen. All dies ist dank der kryptografischen Magie mit mehreren Signaturen möglich, die oft als Smart-Contract bezeichnet wird . Es gibt mehrere Implementierungen des LN-Protokolls. Ich verwende die C-Lightning C-Implementierung.


Der Hauptunterschied zwischen On-Chain- und Off-Chain-Zahlungen (Lightning) besteht darin, wie Transaktionen gespeichert werden. Alle On-Chain- Transaktionen werden an das gesamte Netzwerk gesendet, sodass jeder laufende Bitcoin-Knoten diese Transaktion in Blockchain aufzeichnet, wenn der Block, der diese Transaktion enthält, abgebaut wird . Hey, BitFury , habe ich recht? ;) Deshalb nennen wir solche Transaktionen On-Chain . Solche Transaktionen werden bis zum Ende ihrer Existenz in Blockchain gespeichert. Es ist möglich, solche Transaktionen öffentlich über das Netzwerk zu verfolgen, zu analysieren und zu überwachen.


Bei Transaktionen außerhalb der Kette (Lightning) geschieht dies auf andere Weise. Jeder Blitzknoten hat (möglicherweise mehrere) Adressen in der Kette, von denen aus alle beginnen. Wenn Gelder an einer solchen Adresse eingehen, kann der Knoten unter Verwendung von Kryptografietechniken einen sogenannten Blitzkanal für einen anderen Knoten öffnen, was bedeutet, dass diese beiden Knoten eine Vereinbarung über die Verfügbarkeit von Geldern zwischen ihnen getroffen haben. Später werden alle Transaktionen, die über den Kanal ausgeführt werden (eigene Transaktionen oder Routing-Transaktionen von einem anderen Knoten), nur auf diesen beiden Knoten (und dem Zwischenknoten, falls vorhanden) gespeichert. Die einzigen Transaktionen, die in der Blockchain des Netzwerks gespeichert sind, sind Transaktionen zum Öffnen und Schließen von Kanälen. Aus diesem Grund nennen wir Lightning-Transaktionen Off-Chain . Meist existieren sie nur in der Knotendatenbankdatei.


Das Ganze wird im Diagramm visualisiert


Bild

Kurzgeschichte:


1) Der Benutzer sendet eine Nachricht und fordert eine Einzahlung an den Bot per Telegramm an


2) Telegramm löst die Python-App des Bots aus


3) Die Python-App sendet eine Anfrage an BTCPayServer


4) BTCPayServer generiert eingehende Adressen für BTC und LTC und kontaktiert die Blitzgebühr, die Daten vom c-lightning- Daemon erhält. Als Ergebnis erhalten wir einen gut gehandhabten HTML-Frame für die Zahlungsabwicklung


5) Der Benutzer zahlt die Rechnung und erhält eine Bestätigung


6) BTCPayServer sendet eine Rechnungszahlungsbenachrichtigung (IPN) an die angegebene Rückruf-URL, in unserem Fall
geht zu callbacks.py (eine andere Python-App, um auf Rückrufe zu warten)


7) Entsprechend den vollständigen Zahlungsdetails wird das Benutzerguthaben geändert und der Benutzer erhält eine Benachrichtigung


... wenn der Benutzer beschließt, Geld abzuheben (erhaltene Tipps) ...


8) Die Python-App von Bot hört sich Text oder Bild von QR an. Wenn sie Rechnungsdaten (lange Zeichenfolge) erhält, sendet sie eine Zahlungsaufforderung an diese Rechnung an eine andere Python-App paylightning.py * , die die Auszahlungen mit c-lightning initialisiert RPC


Bild

* Um fair zu sein, muss ich erwähnen, dass mein Pay-Wrapper paylightning.py unvollständig ist und in bestimmten Fällen falsch negativ zurückgeben kann. Bei produktionsähnlicher Verwendung sollten Sie einen bewährten Zahlungs-Wrapper für C-Lightning verwenden.


Benutzer können sich gegenseitig Tipps zu Gruppenchats senden und Werte ohne Einschränkungen senden / empfangen. Aber das ist noch nicht alles. Dank des Lightning Network-Protokolls, das sich in einer Art einheitlichem und vereinfachtem Zahlungsnetzwerk befindet, können Sie dieselben Guthabenmünzen an völlig unterschiedliche Apps senden. Es gibt einen weiteren Bitcoin-Tipp-Bot im Telegramm - @lntxbot. Der Benutzer kann eine Einzahlung für diesen Bot beantragen


BildBild


Leiten Sie einfach Daten von @lntxbot an @atomic_tipbot und voul'a weiter!


Dies ist kein "Nummernwechsel in der Datenbank" mehr, sondern eine Zahlung zwischen zwei separaten, nicht verwandten "Datenbanken". Bot hat bereits einige 'LApps' integriert: sat2.io und lnsms.world .


Sie fragen sich vielleicht, was genau LApp-Integration bedeutet?


Jeder Lightning Network- Knoten fungiert als Bitcoin-Brieftasche. Es hat sowohl ein Gleichgewicht in der Kette als auch außerhalb der Kette. Das On-Chain-Guthaben wird normalerweise verwendet, um Kanäle zu öffnen und Gelder aus geschlossenen Kanälen zu speichern, kurz Wartungsaufgaben für kurze Knoten. Das Off-Chain-Gleichgewicht wird genau verwendet, um Geld zwischen Knoten auszutauschen. Die Kernfunktionen jedes Knotens sind die Fähigkeit, Geld zu senden oder zu empfangen. Daher bietet der Knoten als Software Zahlungs- und Rechnungsmethoden . Ich werde kurz zeigen, wie es passiert:


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

In diesem Fall wird die BOLT11-Rechnung erstellt. Dies ist ein einheitliches Format für Zahlungsanforderungen im Bitcoin-Netzwerk (sowie im Litecoin-Netzwerk). Diese Zeichenfolge enthält Daten zu Rechnungsempfänger, Betrag, Zeitstempel, Ablauf usw. Um diesen String zu dekodieren, bietet c-lightning eine Decodepay-Methode:


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

Für den Fall, dass wir eine Rechnung bezahlen müssen, sollten wir die Zahlungsmethode von c-lightning verwenden:


 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" } Blitz-cli Pay lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j 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" } 

Alle Status von Zahlungen werden vom gesamten Netzwerk und Ihrem eigenen Knoten verwaltet. Sie müssen (müssen aber nicht) überhaupt mit empfangsseitigen App-Entwicklern oder deren API, einem Kartenverarbeitungsanbieter oder einer Bank kommunizieren, um eine Bestätigung über Ihre Zahlung zu erhalten oder Geld von Ihrem eigenen freizugeben Konto. Es gibt keine Rückbuchungen oder sonstigen externen Einflüsse auf Ihren Kontostand. Sie benötigen lediglich eine Software, die nach dezentralen Netzwerkregeln arbeitet. Dies ist eine Lösung, um einen Wert über das Internet auszutauschen, ohne dass ein Schiedsrichter in der Mitte benötigt wird, der über Ihre Zahlungskompatibilität mit einigen Regeln entscheidet, die manchmal sogar allen Parteien bisher unbekannt waren. Es gibt keine "internen" Regeln in Bitcoin. Alle Regeln, die Ihre App erfüllen muss, sind offen und bekannt.


Dies ermöglicht einen direkten , fast kostenlosen und sofortigen Werteaustausch über das Internet zwischen Menschen oder sogar der Software selbst auf wirklich autonome Weise.


Wenn es eine Möglichkeit gibt, Zahlungsdaten von einer anderen App abzurufen, können Sie finanziell damit umgehen. Wie in unserem Beispiel ist lnsms.world eine Web-App, mit der Sie SMS an eine beliebige Nummer senden und mit Bitcoin bezahlen können. Um eine solche Option in unsere App zu integrieren, müssen wir lediglich die erforderlichen Daten vom Webformular an lnsms.world übergeben:


 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) 

Ich weiß nicht aus welchem ​​Grund, aber lnsms antwortet mit 201 HTTP-Statuscode und gibt die BOLT11-Rechnung zurück. Nun, das reicht aus, um diese Rechnung zu bezahlen, und unsere Benutzer senden kurz nach Zahlungseingang eine SMS. Wir können zusätzlich eine Gebühr erheben oder nicht, das ist unsere freie Wahl.


Stellen Sie sich nun vor, Ihr Bot ist tatsächlich eine nützlichere App und zahlt nicht einen anderen Bot, sondern eine andere Entität, die mit dem Internet verbunden ist. Oder können dies Zahlungen zwischen Software, Maschinen, Geschäften und Dienstleistern sein, die regelmäßig alle paar Sekunden wiederholt werden? Spüren Sie die Kraft von Mikrozahlungen? So wird das Internet der Dinge aussehen. Bereits jetzt gibt es Projekte wie https://althea.org/, und in naher Zukunft werden wir großen Veränderungen auf dem Gebiet gegenüberstehen, das wir E-Commerce nennen.


Wenn Ihnen dieser Beitrag gefällt und Sie Bitcoin-Zahlungen selbst ausprobieren möchten, können Sie mir einen Tipp auf meiner Trinkgeldseite hinterlassen .

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


All Articles