So starten Sie Mikrozahlungen in Ihrer Anwendung

In der vergangenen Woche habe ich meine erste öffentliche Anwendung entwickelt – einen Telegram-Bot, der als Bitcoin-Wallet fungiert und es ermöglicht, "Münzen" an andere Teilnehmer in Gruppenchats zu senden sowie externe Bitcoin-Zahlungen an sich selbst oder andere sogenannte „Lightning Apps“ zu tätigen. Ich gehe davon aus, dass der Leser mit Bitcoin und Telegram vertraut ist, da ich versuche, mich kurz zu halten und nicht auf die Details einzugehen. Eine Sammlung von Ressourcen über Bitcoin ist unter diesem Link verfügbar., während Telegram ein Instant-Messaging-Dienst für mobile Geräte und PCs ist, der es ermöglicht, kleine Anwendungen (Chatbots) auf ihrer Plattform zu erstellen.

Welche Schlüsselmerkmale hat diese Anwendung?

  • Es ermöglicht, einen Gesprächspartner mit einer echten materiellen Wertschätzung zu belohnen oder zu ermutigen, und nicht nur mit "einem virtuellen Like", was die elektronische Kommunikation auf ein völlig neues Niveau hebt.
  • Ein reales Beispiel für eine Anwendung, die finanziell mit anderen Anwendungen interagieren kann, indem sie ein offenes Zahlungsprotokoll nutzt.
  • Alle Komponenten der Anwendung sind Open-Source-Projekte und können nach Belieben angepasst und für eigene Zwecke verwendet werden. Die Anwendung nutzt keine proprietären oder kommerziellen Lösungen, obwohl sie in den Bereich des E-Commerce fällt, was heute schwer als offen zu bezeichnen ist.

Und wie setzt man das in der Praxis um?

so oder so...

So starten Sie Mikrozahlungen in Ihrer Anwendung
oder so...

So starten Sie Mikrozahlungen in Ihrer Anwendung
Was bedeuten diese Zahlen? Das sind Einheiten von Bitcoin — Satoshis.Zum Marktpreis Mitte 2019 entspricht 1000 Satoshis ungefähr 0,06 $. Satoshis können online ausgegeben oder einfach in die Landeswährung umgetauscht werden. Aus diesem Grund (Liquidität) sind sie nicht einfach eine weitere "Datenbankeintragung" oder "Punkte, die Sie in den Geschäften unserer Partner ausgeben können", und echtes Internetgeld..
*Ich möchte gleich anmerken, dass ich einige Wörter oder Ausdrücke absichtlich nicht ins Russische übersetze — entweder kenne ich den kontextuellen Übersetzungsspielraum in einigen Fällen nicht oder halte eine solche Übersetzung für irreführender als korrekt.

Möglicherweise fragen Sie sich, wie man eine solche Anwendung nutzen kann, wenn man keine Bitcoins hat. Diese können ganz einfach in kleinen Mengen an einer der vielen Börsen oder Wechselstellen erworben werden, oder Sie können sie von einem Freund mit Bitcoin oder sogar von aktuellen Nutzern des Bots erhalten. Viele mobile Wallets bieten an, Bitcoins direkt "an der Kasse" zu kaufen.

So starten Sie Mikrozahlungen in Ihrer AnwendungSo starten Sie Mikrozahlungen in Ihrer AnwendungSo starten Sie Mikrozahlungen in Ihrer Anwendung

Sobald Sie Bitcoins (oder eher Satoshis-en(?)) besitzen — starten Sie @atomic_tipbot und machen Sie /deposit.

Der Bot wird Ihnen als Antwort die Menge an Satoshis abfragen, die Sie auf Ihr Konto einzahlen möchten, und Ihnen eine Rechnung schicken, die Sie mit Ihrem mobilen Wallet bezahlen können, indem Sie den QR-Code scannen oder auf die Schaltfläche ("im Wallet öffnen") auf der Rechnungsseite klicken.

So starten Sie Mikrozahlungen in Ihrer AnwendungSo starten Sie Mikrozahlungen in Ihrer AnwendungSo starten Sie Mikrozahlungen in Ihrer Anwendung

Nachdem Sie die Zahlung in Ihrem Wallet bestätigt haben, wird der Bot praktisch sofort eine Bestätigung der Zahlung versenden, die visuell im Rahmen der Rechnung angezeigt wird.

Bis zu diesem Punkt haben wir zwei Komponenten der Anwendung behandelt — das Back-End des Telegram-Bots und das Zahlungssystem für Kryptowährungen (um es genauer zu sagen, dessen Front-End).

Für die Erstellung des Telegram-Bots habe ich Python Telegram Botverwendet. Und natürlich den Bot selbst. mit Open-Source-Code..

Als Zahlungssystem und zur Lösung von UX-Problemen fiel die Wahl (tatsächlich gibt es kaum eine andere Wahl) auf BTCPayServer., auf dem Dokumentation unter diesem Link.

Wenn Sie nach direkten Lösungen zur Verarbeitung von Zahlungsereignissen suchen, sollten Sie sich die Electrum CLI-Handbuchseiten für sogenannte On-Chain-Zahlungen ansehen. Für sofortige Mikro-Zahlungen (Lightning) sind Lösungen wie Lightning-charge oder Sparko.

Also, ist es selbst gehostet oder nicht!?

Ja, das ist es. In meiner Anwendung verwende ich das kostenlose Hosting von BTCPayServer — BTCPayJungle, aber es ist absolut möglich und erfordert nicht viel Zeit, um ein eigenes Zahlungszentrum zu starten. Es ist jedoch wichtig zu beachten, dass Sie ~500 GB Speicherplatz auf der Festplatte benötigen, um die Blockchains von Bitcoin (und Litecoin) zu speichern. Zudem werden Rechen- und Netzwerkressourcen während der Synchronisation benötigt sowie je nach Ihren Bedürfnissen die notwendigen „Wrapper“ für die Blockchains, um bequem mit ihnen interagieren zu können. BTCPayServer enthält von Haus aus keine privaten Schlüssel oder andere Informationen, die Ihnen die Kontrolle über Ihre Wallet ermöglichen.

Für on-chain (gewöhnliche) Zahlungen ist es erforderlich, den sogenannten xpub-Schlüssel der Wallet in BTCPayServer einzufügen, um Adressen für den Empfang (öffentliche Schlüssel) zu generieren. Dies ermöglicht und sichert die Nutzung von BTCPayServer, selbst in „geteiltem“ Modus. Alle diese xpub-Schlüssel und Adressen können leicht in guten Wallets wie Electrum, für die weitere Konfiguration der Verarbeitung erhalten werden.

Jeder, der mit Bitcoin zu tun hatte, hat gehört, dass Bitcoin langsam ist und Transaktionen teuer, besonders während des Hypes. Daher sollten für sofortige Mikrozahlungen (off-chain) Transaktionen des Lightning Networks verwendet werden.

Was ist das Lightning Network?

Es ist eine Art Plugin für Bitcoin, das eine zusätzliche Abstraktionsschicht aufbaut und es ermöglicht, sofortige und nahezu kostenlose Transaktionen im Bitcoin-Netzwerk durchzuführen. Dies ist alles möglich durch kryptografische Magie mit Multi-Signaturen, oft als Smart Contractbezeichnet. Es gibt mehrere Implementierungen des Lightning Network-Protokolls, ich benutze c-lightning , eine Implementierung in C.

Der Hauptunterschied zwischen on-chain und off-chain (Lightning) Zahlungen liegt darin, wie sie gespeichert werden. Alle on-chain Transaktionen werden über alle Knoten im Netzwerk weitergeleitet, bis einer der Bitcoin-Knoten sie ankündigt. neuer mined Block mit den darin enthaltenen Transaktionen. (Auf Habr gibt es sogar BitFury, sie stellen genau die Hardware für das Mining her). Aus diesem Grund bezeichnen wir solche Transaktionen on-chain. Diese Transaktionen werden in der gemeinsamen Blockchain aufgezeichnet und bleiben dort bis zum Ende ihrer Existenz. Ebenso sind solche Transaktionen öffentlich zugänglich und können überwacht, verfolgt und analysiert werden.

Im Falle von Off-Chain (Lightning) Transaktionen läuft alles anders. Jeder Knoten im Lightning-Netzwerk hat eine (oder mehrere) On-Chain-Adressen – das sind die regulären Bitcoin-Adressen, von denen alles beginnt. Wenn Bitcoins auf einer solchen Adresse erscheinen, kann ein sogenannter Lightning-Kanal eröffnet werden zu einem anderen Knoten, was bedeutet, dass diese beiden Knoten durch kryptografische Techniken eine Vereinbarung über die Verfügbarkeit von Mitteln untereinander getroffen haben. Später werden alle Transaktionen (sowohl eigene als auch von externen Knoten) die durch einen solchen Kanal laufen, nur auf den Knoten der Transaktionsbeteiligten (und Vermittlerknoten) gespeichert. Die einzigen Transaktionen, die in der Blockchain aufgezeichnet werden, sind diejenigen zur Eröffnung oder Schließung eines Kanals. In größerem Maßstab ergibt sich ein Netzwerk von miteinander verbundenen Knoten, das zwischen den Teilnehmern Tausende verschiedener Wege zur „Übertragung“ von Mitteln von einem Knoten zum anderen über festgelegte strenge Regeln aufbaut. Praktisch alle solchen Transaktionen werden nur in der Datenbank-Datei der Knoten selbst gespeichert. Aus diesem Grund nennen wir sie Off-Chain.

In der Grafik ist die Visualisierung aller Komponenten der Anwendung zu sehen

So starten Sie Mikrozahlungen in Ihrer Anwendung

Kurz gesagt:

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

2) Telegram sendet eine Nachricht über das Ereignis python-Anwendung Bot

3) python-Anwendung sendet eine Anfrage an BTCPayServer.

4) BTCPayServer generiert eingehende BTC- und LTC-Adressen, sowie eine Anfrage zur Rechnung an lightning-charge, der sich wiederum mit dem Daemon verbindet c-lightning. Am Ende erhalten wir ein ansprechendes HTML-Formular zur Zahlungsabwicklung

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

6) BTCPayServer. sendet Benachrichtigung über die Rechnungszahlung (IPN) an die angegebene callback_url, in unserem Fall callbacks.py (eine weitere Python-Anwendung zur Entgegennahme von Benachrichtigungen)

7) Basierend auf den erhaltenen Daten wird das Guthaben des Benutzers angepasst

… und wenn der Benutzer Geld abheben möchte (Münzen, die er von anderen erhalten hat) …

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

So starten Sie Mikrozahlungen in Ihrer Anwendung

*Um fair zu sein, sollte erwähnt werden, dass meine Wrapper paylightning.py nicht vollständig abgeschlossen ist und in spezifischen Szenarien falsche negative Ergebnisse zurückgeben kann. Ich empfehle die Verwendung eines gut getesteten Wrappers in produktionsähnlichen Fällen

Was haben wir? Benutzer unseres Bots können innerhalb des Gruppen-Chats oder direkt materielle Werte übertragen ohne Einschränkungen. Und das ist noch nicht alles – dank des Lightning Network-Protokolls, das gewissermaßen ein einheitliches und vereinfachtes Zahlungssystem darstellt, können die gleichen Gelder, die im Chat erhalten wurden, an völlig unabhängige Anwendungen gesendet werden. Zum Beispiel gab es bereits den ersten Bot für Bitcoin-Zahlungen in Telegram – @lntxbot. Der „einheitliche Saldo“ erlaubt die Nutzung von beliebigen Bots, je nach den Vorlieben des spezifischen Gruppenchats (ja, das Problem ist absolut erfunden und die Lösung ziemlich nutzlos, aber es geht um die Idee). Das Übertragen des Saldos von einem Bot zu einem anderen kostet nichts und dauert nur Sekunden! Es ist wichtig zu bemerken, dass die Ersteller dieser Bots nie miteinander kommuniziert haben.

So starten Sie Mikrozahlungen in Ihrer Anwendung So starten Sie Mikrozahlungen in Ihrer Anwendung

Es reicht einfach aus, die Nachricht mit einer Einzahlungsanfrage von @lntxbot an @atomic_tipbot weiterzuleiten und voilà!

Dies ist bereits mehr als nur das „Übertragen von Zahlen in einer Datenbank“, sondern 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 Integration von LApp?

Jede Lightning Network Ein Knoten ist im Grunde genommen eine Bitcoin-Wallet. Sie hat zwei Bilanzen: on-chain und off-chain. Der On-Chain-Bereich ist notwendig, um neue Kanäle zu eröffnen und Mittel aus geschlossenen Kanälen zu speichern. Der Off-Chain-Bereich hingegen ist das, was zwischen den Knoten hin und her geschickt wird. Die Hauptanforderungen an einen Knoten sind das Empfangen und Senden von Zahlungen, weshalb jeder Knoten als Software Funktionen hat. bezahlen und Rechnung. Ich zeige Ihnen, wie das funktioniert:

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

Wir erhalten die "Rechnung" Spezifikationen BOLT11 in diesem Fall, die das Zahlungsformat im Bitcoin-Netzwerk (und auch bei Litecoin) darstellt. Dies ist eine Zeichenkette, die Informationen über den Empfänger, den Transaktionsbetrag, die Ablaufzeit des Antrags usw. enthält. Detaillierte Informationen können durch das Ausführen von decodepay für 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 bezahlen, 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 von dem gesamten Netzwerk und speziell von Ihrem eigenen Node verarbeitet. Es besteht keine Notwendigkeit (aber die Möglichkeit besteht), mit den Entwicklern der empfangenden Zahlungsanwendung oder deren API zu interagieren, um Informationen über den Zahlungsstatus zu erhalten. Es ist nicht notwendig, den Zahlungsstatus im Vermittlungssystem zu überprüfen. Sie müssen nicht auf die Genehmigung Ihrer Transaktion durch die Bank oder eine staatliche Einrichtung warten. Schließlich gibt es hier keine Chargebacks und andere externe Faktoren, die den Saldo auf Ihrem Konto beeinflussen könnten. Dies ist eine Lösung zur Übertragung von Werten über das Internet, ohne dass ein Dritter als Schiedsrichter benötigt wird, 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 jedem bekannt.

Das macht es real direkt, praktisch kostenlos und sofort Geldtransaktionen zwischen Menschen oder Programmen im vollständig autonomen Modus.

Wenn Sie die Möglichkeit haben, Zahlungsdaten von einer Drittanwendung zu erhalten, können Sie finanziell mit dieser Anwendung interagieren. Ein Beispiel ist der Dienst lnsms.world, der es ermöglicht, SMS-Nachrichten an beliebige Nummern zu senden, indem Sie mit Bitcoin bezahlen. Für die Integration dieser Anwendung müssen wir lediglich die Daten aus dem Webformular direkt an das SMS-Versandskript übermitteln – die Aktionen des Benutzers auf der Website 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. Das reicht aus, damit die Bot-Nutzer die SMS-Versendung von ihrem Guthaben in den Chats bezahlen können. Der Nutzer weiß nicht, was da genau vor sich geht; er hat einfach ein paar Cent für die SMS bezahlt. Und ich, als Entwickler, gehe nicht auf die Details der SMS-Dienste ein. Ich habe lediglich die Zahlung weitergeleitet und die Dienstleistung erhalten. Ich kann einen Aufschlag erheben oder auch nicht – das ist meine freie Entscheidung. Keine Konten, Verträge und keine zusätzliche API für banale Aufgaben wie das Versenden von SMS.

Lassen Sie uns nun einen Moment lang vorstellen, dass unsere Anwendung nützlicher ist als ein Chatbot und Zahlungen nicht an einen anderen Bot, sondern an eine andere Anwendung oder ein mit dem Internet verbundenes Gerät sendet. Oder es sind Dutzende oder sogar Hunderte von unbedeutenden Zahlungen jede Sekunde zwischen Geräten, Diensten, Geschäften oder bestimmten Dienstanbietern. Das ist die Macht der Mikrozahlungen; so sollte das Internet der Dinge aussehen. Es gibt bereits Projekte wie Althea die diese Ideen verwirklichen, und in naher Zukunft werden wir meiner Meinung nach große Veränderungen im Bereich erleben, den wir derzeit als E-Commerce bezeichnen.

Wenn Ihnen der Beitrag gefallen hat und Sie Bitcoin in der Praxis ausprobieren möchten — schicken Sie mir ein Bier und ein paar leckere französische Brötchen..

Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte melden Sie sich an.Sind Sie an Contour interessiert?

Sind Sie an rein technischen Artikeln über Bitcoin und verwandte Software interessiert?

  • Ja

  • Nein

  • Mir sind eher die Marktaspekte der Kryptowährung wichtig.

8 Nutzer haben abgestimmt. 4 Nutzer haben sich enthalten.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster