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. , 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...

oder so...

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.



Sobald man Bitcoin (oder eher Satoshis-en(?)) hat â starten wir 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.



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 verwendet. Und natĂŒrlich der Bot selbst .
Als Zahlungssystem zur Verarbeitung und Lösung von UX-Anforderungen fiel die Wahl (eigentlich gibt es fast keine Wahl) auf , fĂŒr den .
Wenn man nach Lösungen zur direkten Verarbeitung von Zahlungsereignissen sucht, sollte man auf fĂŒr die sogenannten On-Chain-Zahlungen achten, und fĂŒr sofortige Mikrozahlungen (Lightning) gibt es Lösungen wie oder .
Also, ist es selbstgehostet oder nicht!?
Ja, das ist es. In meiner App benutze ich das kostenlose Hosting von BTCPayServer â , 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 , 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 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 mit den darin enthaltenen Transaktionen ankĂŒndigt. (Auf Habr gibt es sogar , 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

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.

*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 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.

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: und .
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 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 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 â .
Nur registrierte Benutzer können an der Umfrage teilnehmen. .
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
