Wie man Mikrotransaktionen in seiner Anwendung startet

In der vergangenen Woche habe ich daran gearbeitet, mein erstes öffentliches Programm zu entwickeln – einen Telegram-Bot, der als Bitcoin-Wallet fungiert und es ermöglicht, „Münzen“ an andere Teilnehmer von Gruppenchats zu senden sowie externe Bitcoin-Zahlungen an mich oder andere sogenannte „Lightning-Apps“ zu leisten. Ich gehe davon aus, dass der Leser im Allgemeinen mit Bitcoin und Telegram vertraut ist, da ich versuchen werde, kurz und ohne in Details zu gehen, zu schreiben. Eine Auswahl von Ressourcen über Bitcoin ist unter diesem Link verfügbar., und Telegram ist ein Instant-Messaging-Dienst für mobile Geräte und PCs, der es ermöglicht, kleine Anwendungen (Chatbots) auf seiner Plattform zu erstellen.

Welche wichtigsten Funktionen hat diese Anwendung?

  • Er ermöglicht es, den Gesprächspartner wirklich mit einem materiellen Wert zu belohnen oder zu ermutigen, und nicht nur „mit einem virtuellen Like“, das hebt die elektronische Kommunikation auf ein ganz neues Niveau.
  • Ein echtes Beispiel für eine Anwendung, die finanziell mit anderen Anwendungen interagieren kann, indem sie das offene Zahlungsprotokoll nutzt.
  • Alle Komponenten der Anwendung sind Open-Source-Projekte, die verändert und für eigene Zwecke genutzt werden können. Die Anwendung verwendet keine geschlossenen oder kommerziellen Lösungen, auch wenn sie in den Bereich E-Commerce fällt, der heutzutage als offen zu bezeichnen, ziemlich schwierig ist.

Und wie lässt sich das in der Praxis anwenden?

so oder so...

Wie man Mikrotransaktionen in seiner Anwendung startet
oder so...

Wie man Mikrotransaktionen in seiner Anwendung startet
Was bedeuten diese Zahlen? Es sind Einheiten von Bitcoin – Satoshis.Zum Handelskurs Mitte 2019 sind 1000 Satoshi ungefähr 0,06 $. Satoshi können online ausgegeben oder leicht in die Landeswährung umgetauscht werden. Genau aus diesem Grund (Liquidität) handelt es sich nicht einfach um einen „Eintrag in die Datenbank“ oder „Punkte, die Sie in den Geschäften unserer Partner ausgeben können“., und Es sind die wahrhaftigen Internet-Währungen..
*Ich möchte gleich anmerken, dass ich bei manchen Wörtern oder Ausdrücken bewusst versuche, sie nicht ins Russische zu schreiben – entweder kenne ich nicht den kontextuellen Übersetzung in einigen Fällen oder ich denke, dass eine solche Übersetzung eher irreführend als korrekt klingt.

Vielleicht stellt sich die Frage, wie man eine solche App nutzen kann, wenn man keine Bitcoins hat. Diese lassen sich ganz einfach in kleinen Mengen an einer der vielen Börsen oder Wechselstuben erwerben, oder man kann sie von einem befreundeten Bitcoin-Nutzer bekommen oder sogar von aktuellen Nutzern des Bots erhalten. Viele Wallets für das Handy bieten an, Bitcoins direkt "an der Kasse" zu kaufen.

Wie man Mikrotransaktionen in seiner Anwendung startetWie man Mikrotransaktionen in seiner Anwendung startetWie man Mikrotransaktionen in seiner Anwendung startet

Sobald man Bitcoin (oder eher Satoshis-en(?)) hat — starten wir @atomic_tipbot und machen /deposit.

Der Bot wird daraufhin fragen, wie viele Satoshis man auf das Konto einzahlen möchte, und wird eine Rechnung senden, die man mit einer mobilen Wallet bezahlen kann, indem man den QR-Code scannt oder die Schaltfläche drückt ("im Wallet öffnen") auf der Rechnungsseite.

Wie man Mikrotransaktionen in seiner Anwendung startetWie man Mikrotransaktionen in seiner Anwendung startetWie man Mikrotransaktionen in seiner Anwendung startet

Nachdem die Zahlung in der eigenen Wallet bestätigt wurde, sendet der Bot praktisch sofort eine Bestätigung der Zahlung, die visuell im Rechnungsrahmen angezeigt wird.

Bis zu diesem Zeitpunkt haben wir zwei Komponenten der App behandelt — das Backend des Telegram-Bots und das System zur Verarbeitung von Kryptowährungszahlungen (eher dessen Frontend).

Für die Erstellung des Telegram-Bots habe ich Python Telegram Botverwendet. Und natürlich der Bot selbst mit offenem Quellcode.

Als Zahlungssystem zur Verarbeitung und Lösung von UX-Anforderungen fiel die Wahl (eigentlich gibt es fast keine Wahl) auf BTCPayServer, für den die Dokumentation unter diesem Link.

Wenn man nach Lösungen zur direkten Verarbeitung von Zahlungsereignissen sucht, sollte man auf Electrum CLI-Handbuchseiten für die sogenannten On-Chain-Zahlungen achten, und für sofortige Mikrozahlungen (Lightning) gibt es Lösungen wie Lightning-charge oder Sparko.

Also, ist es selbstgehostet oder nicht!?

Ja, das ist es. In meiner App benutze ich das kostenlose Hosting von BTCPayServer — BTCPayJungle, aber es ist absolut möglich und erfordert nicht viel Zeit, um ein eigenes Zahlungssystem zu betreiben. Man sollte jedoch beachten, dass man etwa 500 GB auf der Festplatte für die Speicherung der Blockchains von Bitcoin (und Litecoin) benötigt. Außerdem sind Rechen- und Netzwerkressourcen während der Synchronisation erforderlich und je nach Bedarf sind "Wrapper" für die Blockchains notwendig, um einen bequemen Umgang damit zu gewährleisten. BTCPayServer enthält by-design keine privaten Schlüssel oder andere Informationen, die es ermöglichen, Ihre Wallet zu kontrollieren.

Für on-chain (übliche) Zahlungen ist es notwendig, den sogenannten xpub-Schlüssel des Wallets in BTCPayServer hinzuzufügen, um Adressen für den Empfang (öffentliche Schlüssel) zu generieren. Dies ermöglicht und sichert die Verwendung von BTCPayServer sogar in einer 'geteilten' Form. All diese xpub-Schlüssel und Adressen können leicht in guten Wallets wie Electrum, für die weitere Verarbeitung erhalten werden.

Alle, die mit Bitcoin in Berührung gekommen sind, haben gehört, dass Bitcoin langsam ist und Transaktionen teuer sind, besonders während eines Hypes. Daher sollten für sofortige Mikrozahlungen (off-chain) Transaktionen im Lightning Network verwendet werden.

Was ist das Lightning Network?

Es ist eine Art Plug-in für Bitcoin, das eine zusätzliche Abstraktionsschicht aufbaut und es ermöglicht, sofortige und nahezu kostenlose Transaktionen im Bitcoin-Netzwerk durchzuführen. All dies ist dank kryptografischer Magie mit Mehrfachsignaturen möglich, die häufig als Smart Contractbezeichnet wird. Es gibt mehrere Implementierungen des Lightning Network-Protokolls, ich verwende c-lightning eine Implementierung in C.

Der Hauptunterschied zwischen on-chain und off-chain (Lightning) Zahlungen liegt in der Art und Weise, wie sie gespeichert werden. Alle on-chain Transaktionen werden über alle Knoten des Netzwerks weitergeleitet, bis einer der Bitcoin-Knoten einen neuen geschürften Block mit den darin enthaltenen Transaktionen ankündigt. (Auf Habr gibt es sogar BitFury, sie stellen gerade die Hardware für das Mining her). Aus diesem Grund nennen wir solche Transaktionen on-chain. Solche Transaktionen werden in der gemeinsamen Blockchain aufgezeichnet und bleiben dort bis zum Ende ihrer Existenz. Außerdem sind diese Transaktionen öffentlich zugänglich und können überwacht, verfolgt und analysiert werden.

Bei off-chain (Lightning) Transaktionen läuft alles anders. Jeder Knoten im Lightning-Netzwerk hat eine oder mehrere (oder mehr) on-chain Adressen – das sind die normalen Bitcoin-Adressen, von denen alles ausgeht. Wenn Bitcoins auf einer solchen Adresse erscheinen, kann der sogenannte Lightning-Kanal eröffnet werden. zu einem anderen Knoten, was bedeutet, dass diese beiden Knoten durch kryptografische Techniken die Verfügbarkeit von Mitteln untereinander vereinbart haben. Später werden alle Transaktionen (sowohl eigene als auch Transaktionen von externen Knoten), die über einen solchen Kanal laufen, nur auf den Knoten der Transaktionsteilnehmer (und den Vermittlerknoten) gespeichert. Die einzigen Transaktionen, die in die Blockchain aufgenommen werden, sind die Transaktionen zur Eröffnung oder Schließung eines Kanals. Im größeren Maßstab entsteht ein Netzwerk wechselseitig verbundener Knoten, das zwischen den Teilnehmern Tausende von verschiedenen Wegen zum „Übertragen“ von Mitteln von einem Knoten zum anderen gemäß bestimmten strengen Regeln aufbaut. Fast alle solchen Transaktionen werden nur in der Datenbankdatei der Knoten selbst gespeichert. Aus diesem Grund nennen wir sie off-chain.

Auf dem Diagramm ist die Visualisierung aller Komponenten der Anwendung zu sehen

Wie man Mikrotransaktionen in seiner Anwendung startet

Kurz gesagt:

1) Der Benutzer sendet einen Befehl an den Bot in Telegram

2) Telegramm sendet eine Nachrichtenbenachrichtigung über das Ereignis python-Anwendung Bot

3) python-Anwendung sendet eine Anfrage an BTCPayServer

4) BTCPayServer generiert Eingangsadressen für BTC und LTC und sendet außerdem eine Anfrage für eine Rechnung an lightning-charge, der wiederum mit dem Daemon kommuniziert c-lightning. Am Ende erhalten wir ein schönes HTML-Formular zur Zahlungsbearbeitung

5) Der Benutzer bezahlt die Rechnung und sieht die Bestätigung

6) BTCPayServer sendet eine Zahlungsbenachrichtigung für die Rechnung (IPN) an die angegebene callback_url, in unserem Fall callbacks.py (eine weitere python-Anwendung zum Empfang von Benachrichtigungen)

7) Basierend auf den erhaltenen Daten ändert sich das Guthaben des Benutzers

… und wenn der Benutzer beschließt, Mittel (Münzen, die er von anderen erhalten hat) abzuheben …

8) Python-Anwendung des Bots wartet auf den Text oder das Bild des QR-Codes, und wenn gültige Daten empfangen werden, erfolgt die Zahlung über das Toolpaylightning.py*, das die Transaktion über c-lightning RPC initiert.

Wie man Mikrotransaktionen in seiner Anwendung startet

*Um der Fairness willen ist festzustellen, dass meine Wrapper paylightning.py nicht ganz vollständig ist und in spezifischen Szenarien ein falsch-negatives Ergebnis zurückgeben kann. Ich empfehle die Verwendung eines gut getesteten Wrappers in Fällen, die der Produktionsumgebung nahekommen

Was haben wir? Die Benutzer unseres Bots können innerhalb eines Gruppenchats oder direkt Werte übertragen. materielle Werte ohne Einschränkungen. Und das ist noch nicht alles – dank des Protokolls Lightning Network, das in gewissem Sinne ein einheitliches und vereinfachtes Zahlungssystem darstellt, besteht die Möglichkeit, das gleiche Geld, das im Chat erhalten wurde, an völlig unabhängige Anwendungen zu senden. Zum Beispiel gab es im Telegram bereits den ersten Bot für Bitcoin-Zahlungen – @lntxbot. Der „Einheitliche Saldo“ ermöglicht die Verwendung eines beliebigen der Bots, abhängig von den Vorlieben des spezifischen Gruppenchats (ja, das Problem ist absolut erfunden und die Lösung recht nutzlos, aber darum geht es in der Essenz). Das Übertragen von Guthaben von einem Bot zu einem anderen kostet nichts und dauert Sekunden! Es ist wichtig zu bemerken, dass die Ersteller dieser Bots niemals miteinander kommuniziert haben.

Wie man Mikrotransaktionen in seiner Anwendung startet Wie man Mikrotransaktionen in seiner Anwendung startet

Es ist ganz einfach, die Nachricht mit der Anfrage nach einer Einzahlung von @lntxbot an @atomic_tipbot weiterzuleiten und voilà!

Es handelt sich bereits nicht nur um „Zahlenübertragung in einer DB“, sondern um eine Zahlung zwischen zwei verschiedenen, nicht miteinander verbundenen Datenbanken. So sind bereits mehrere „LApps“ in den Bot integriert, darunter: sat2.io und lnsms.world.

Was bedeutet die Integration von LApp?

Jede Lightning Network Node ist im Grunde ein Bitcoin-Wallet. Sie hat zwei Guthaben: On-Chain und Off-Chain. Das On-Chain-Guthaben wird benötigt, um neue Kanäle zu öffnen und Gelder von geschlossenen Kanälen zu speichern. Das Off-Chain-Guthaben hingegen ist das, was zwischen den Nodes bewegt wird. Die Hauptanforderungen an eine Node sind das Empfangen und Senden von Zahlungen, daher hat jede Node als Software Funktionen pay und invoice. Ich werde demonstrieren, wie das geschieht:

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

Wir erhalten eine „Rechnung“ im Format BOLT11 in diesem Fall, das das Zahlungsformat im Bitcoin-Netzwerk (und auch im Litecoin-Netzwerk) darstellt. Es handelt sich um eine Zeichenkette, die Informationen über den Empfänger, den Betrag der Transaktion, die Ablaufzeit der Anfrage usw. enthält; detaillierte Informationen können durch die Ausführung von decodepay in Bezug auf diese Zeichenkette erhalten werden:

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

Um eine solche «Rechnung» zu begleichen, benötigen wir die Funktion pay von 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"
}

Alle Transaktionszustände werden vom gesamten Netzwerk und insbesondere von Ihrem eigenen Knoten verarbeitet. Es ist nicht erforderlich (aber möglich), mit den Entwicklern der empfangenden Anwendung oder deren API zu interagieren, um Informationen über den Zahlungsstatus zu erhalten. Es besteht keine Notwendigkeit, den Zahlungsstatus im Vermittlungssystem zu überprüfen. Sie müssen nicht auf die Genehmigung Ihrer Transaktion durch die Bank oder eine staatliche Stelle warten. Schließlich gibt es hier keine Chargebacks und andere externe Faktoren, die den Saldo Ihres Kontos beeinflussen könnten. Dies ist eine Lösung für den Werttransfer über das Internet, ohne einen externen Schiedsrichter, der entscheidet, ob die Transaktion den Regeln entspricht (manchmal sogar internen Regeln, über die nicht alle Teilnehmer im Voraus informiert sind) oder nicht. Im Bitcoin gibt es keine „internen Regeln“. Die einzigen Regeln, die befolgt werden müssen, sind die Regeln des Netzwerks — offen und allgemein bekannt.

Das macht es real direkt, fast kostenlose und sofortige Geldtransaktionen zwischen Personen oder Programmen im vollständig autonomen Modus.

Wenn Sie die Möglichkeit haben, Zahlungsdaten von einer Drittanbieter-App zu erhalten, eröffnet sich die Möglichkeit, in finanzieller Hinsicht mit dieser App zu interagieren. Ein Beispiel dafür ist der Dienst lnsms.world, der es ermöglicht, eine SMS an eine beliebige Nummer zu senden, indem man dafür mit Bitcoin bezahlt. Um diese Anwendung zu integrieren, müssen wir lediglich die Daten aus dem Webformular direkt an das SMS-Versand-Skript übergeben – das Nutzerverhalten auf der Webseite emulieren:

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 dem HTTP-Statuscode 201 und gibt eine Rechnung im BOLT11-Format zurück. Nun, das reicht aus, damit die Bot-Nutzer ihre SMS-Nachricht aus ihrem Guthaben bezahlen können, das sie in Chats erhalten haben. Der Benutzer weiß nicht, was dort passiert; er hat einfach ein paar Cent für das Senden einer SMS bezahlt. Und ich, als Entwickler, gehe nicht auf die Details der Funktionsweise von SMS-Diensten ein. Ich habe einfach die Zahlung verarbeitet und die Dienstleistung erhalten. Man kann einen Aufschlag darauf machen, oder auch nicht – das ist meine freie Wahl. Keine Konten, keine Vereinbarungen und keine überflüssige API für triviale Aufgaben wie das Versenden von SMS.

Und jetzt stellen Sie sich für einen Moment vor, dass unsere Anwendung etwas Nützlicheres ist als ein Chatbot und eine Zahlung nicht an einen anderen Bot, sondern an eine andere Anwendung oder ein Gerät, das mit dem Internet verbunden ist, leistet. Oder es handelt sich um Dutzende oder sogar Hunderte unbedeutender Zahlungen pro Sekunde zwischen Geräten, Diensten, Geschäften oder bestimmten Dienstanbietern. Das ist die Macht der Mikropayments; so sollte das Internet der Dinge aussehen. Es gibt bereits Projekte wie Althea die diese Ideen in die Realität umsetzen, und in naher Zukunft werden wir, meiner Meinung nach, große Veränderungen im Bereich der elektronischen Handels sehen, den wir jetzt als solchen bezeichnen.

Wenn Ihnen der Beitrag gefällt und Sie Bitcoin in Aktion ausprobieren möchten – schicken Sie mir ein Bier und weiche französische Brötchen.

Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte einloggen.

Interessieren Sie sich für rein technische Artikel über Bitcoin und verwandte Software?

  • Ja

  • Nein

  • Ich finde die Marktaspekte der Kryptowährung interessanter.

8 Nutzer haben abgestimmt. 4 Nutzer haben sich enthalten.

Quelle: habr.com

60GB SSD 8Gb DDR4