Vorig week heb ik mijn eerste publieke programma ontwikkeld - een Telegram-bot die fungeert als Bitcoin-wallet en gebruikers in staat stelt 'munten' naar anderen in groepschats te sturen en externe Bitcoin-betalingen te doen aan zichzelf of anderen via zogenaamde “Lightning Apps”. Ik veronderstel dat de lezer in het algemeen bekend is met Bitcoin en Telegram, aangezien ik zal proberen beknopt te schrijven, zonder al te veel in detail te treden. , en Telegram is een instant messaging-app voor mobiele apparaten en pc's, die het mogelijk maakt om kleine applicaties (chatbots) op hun platform te creëren.
Wat zijn de belangrijkste functies van deze applicatie?
- Het stelt je in staat om je gesprekspartner daadwerkelijk met materiële waarde te belonen of te waarderen, en niet alleen met een 'virtuele like', dit tilt elektronische communicatie naar een geheel nieuw niveau.
- Een echt voorbeeld van een applicatie die financieel kan interageren met andere applicaties via een open betalingsprotocol.
- Alle componenten van de applicatie zijn projecten met open source en kunnen worden aangepast en gebruikt voor eigen doeleinden. De applicatie maakt geen gebruik van gesloten of commerciële oplossingen, hoewel het binnen de elektronische handelssector valt, wat tegenwoordig moeilijk als 'open' te kwalificeren is.
En hoe pas je dit toe in de praktijk?
zoiets...

of zo...

Wat betekenen deze cijfers? Dit zijn eenheden van bitcoin - satoshi. Volgens de beursprijzen van medio 2019 is 1000 satoshi ongeveer $0,06. Satoshi kan online worden besteed of gemakkelijk worden omgewisseld naar de nationale valuta. Juist om deze reden (liquiditeit) is het niet alleen maar een 'record in de database' of 'punten die je kunt besteden in de winkels van onze partners', met behulp van 1 bit, gelijk aan 0, echte internetgeld.
*ik wil meteen opmerken dat ik sommige woorden of zinnen opzettelijk niet in het Russisch probeer te schrijven - ofwel omdat ik de contextuele vertaling in sommige gevallen niet weet, of omdat zo'n vertaling naar mijn mening meer misleidend dan correct klinkt.
Je vraagt je misschien af hoe je zo'n applicatie kunt gebruiken als je geen bitcoins hebt. Deze zijn eenvoudig in kleine hoeveelheden te verkrijgen op een van de vele beurzen of wisselkantoren, of je kunt ze van een vriend met bitcoins krijgen of zelfs een paar coins ontvangen van huidige gebruikers van de bot. Veel wallets op telefoons bieden de mogelijkheid om bitcoins direct 'bij de kassa' te kopen.



Wanneer je bitcoins hebt vergaard (waarschijnlijk satoshi-s(?)) — starten we en doen we een /deposit.
De bot vraagt dan hoeveel satoshi je op je saldo wilt storten en stuurt je een betalingsverzoek, dat je kunt betalen met een mobiele wallet door de QR-code te scannen of op de knop (‘open in wallet’) op de factuurpagina te drukken.



Na bevestiging van de betaling in je wallet zal de bot vrijwel onmiddellijk een bevestiging van de betaling sturen, die visueel wordt weergegeven in het factuurframe.
Tot nu toe hebben we twee onderdelen van de applicatie besproken — de back-end van de Telegram-bot en het systeem voor het verwerken van betalingen met cryptocurrency (eigenlijk de front-end daarvan).
Voor het maken van de Telegram-bot heb ik . En natuurlijk, de bot zelf .
Als systeem voor het verwerken van betalingen en het oplossen van UX-vraagstukken heb ik gekozen voor (eigenlijk is er bijna geen keuze) de , waarvan je .
Als je op zoek bent naar oplossingen voor het verwerken van betalingsgebeurtenissen direct, dan is het de moeite waard om te kijken naar voor zogenaamde on-chain betalingen, en voor directe micro-betalingen (Lightning) oplossingen zoals of .
Is het self-hosted of niet!?
Ja, dat klopt. In mijn applicatie gebruik ik de gratis hosting van BTCPayServer — , maar het is absoluut mogelijk en kost niet veel tijd om een eigen verwerkingscentrum op te zetten. Houd er echter rekening mee dat je ongeveer 500GB aan beschikbare ruimte op je schijf nodig hebt voor het opslaan van de Bitcoin (en Litecoin) blockchains. Daarnaast zijn ook reken- en netwerkbronnen nodig tijdens de synchronisatie en afhankelijk van je behoeften zijn er 'wrappers' voor de blockchains nodig, zodat het gemakkelijk is om ermee te werken. BTCPayServer bevat geen by-design private sleutels of andere informatie die je in staat stelt je wallet te controleren.
Voor on-chain (reguliere) betalingen is het nodig om de zogenaamde xpub-sleutel van de portemonnee toe te voegen aan BTCPayServer voor het genereren van ontvangstadressen (publieke sleutels). Dit maakt het mogelijk en veilig om BTCPayServer zelfs in 'gedeelde' modus te gebruiken. Al deze xpub-sleutels en adressen zijn gemakkelijk te verkrijgen in goede portemonnees zoals , voor verdere configuratie van de verwerking.
Iedereen die met Bitcoin in aanraking is gekomen, heeft gehoord dat Bitcoin traag is en transacties duur zijn, vooral wanneer er veel activiteit is. Daarom is het raadzaam om (off-chain) transacties van het Lightning Network te gebruiken voor directe microbetalingen.
Wat is het Lightning Network?
Het is iets als een plug-in voor Bitcoin, dat een extra abstractielaag toevoegt en het mogelijk maakt om onmiddellijke en praktisch kosteloze transacties in het Bitcoin-netwerk uit te voeren. Dit alles is mogelijk dankzij cryptografische magie met multisig, vaak genoemd smart contract. Er zijn verschillende implementaties van het Lightning Network-protocol, ik gebruik , een implementatie in C.
Het belangrijkste verschil tussen on-chain en off-chain (Lightning) betalingen is hoe ze worden opgeslagen. Alle on-chain transacties worden door alle knooppunten van het netwerk geretweeted, totdat een van de Bitcoin-knooppunten aankondigt met daarin de transacties. (Op Habré is er zelfs , zij produceren precies de hardware voor mining). Om deze reden noemen we zulke transacties on-chain. Dergelijke transacties worden vastgelegd in de publieke blockchain en blijven daar tot het einde van hun bestaan. Ze zijn ook publiek toegankelijk en kunnen worden gemonitord, gevolgd en geanalyseerd.
In het geval van off-chain (Lightning) transacties verloopt alles anders. Elke knoop in het Lightning-netwerk heeft één (of meer) on-chain adressen — dat zijn de gebruikelijke Bitcoin-adressen, waar alles mee begint. Wanneer er Bitcoin op zo'n adres verschijnt, kan er een zogenaamde lightning kanaal naar een andere node, wat betekent dat deze twee nodes met behulp van cryptografische technieken overeen zijn gekomen over de beschikbaarheid van middelen tussen hen. Later worden alle transacties (zowel eigen als transacties van derden) die via zo'n kanaal verlopen alleen opgeslagen op de nodes van de deelnemers aan de transactie (en de tussennodes). De enige transacties die in de blockchain worden vastgelegd, zijn transacties voor het openen of sluiten van een kanaal. In bredere zin ontstaat er zo een netwerk van onderling verbonden nodes die duizenden verschillende paden tussen deelnemers opbouwen voor het 'overdragen' van middelen van de ene node naar de andere volgens bepaalde strikte regels. Bijna alle dergelijke transacties worden alleen opgeslagen in de database van de nodes zelf. Om deze reden noemen we ze off-chain.
In het diagram is een visualisatie van alle componenten van de applicatie te zien

In het kort:
1) De gebruiker stuurt een commando naar de bot in Telegram
2) Telegram stuurt een bericht over de gebeurtenis python-applicatie de bot
3) python-applicatie stuurt een aanvraag naar BTCPayServer
4) BTCPayServer genereert inkomende BTC- en LTC-adressen, en stuurt ook een aanvraag voor een factuur naar lightning-charge, die op zijn beurt communiceert met de daemon c-lightning. Het resultaat is een mooie HTML-formulier voor betalingsverwerking
5) De gebruiker betaalt de factuur en ziet de bevestiging
6) BTCPayServer verzendt factuurbetalingsmelding (IPN) naar de opgegeven callback_url, in ons geval callbacks.py (nog een andere python-applicatie voor het ontvangen van meldingen)
7) Volgens de ontvangen gegevens wordt het saldo van de gebruiker aangepast
… en als de gebruiker besloot om middelen op te nemen (munten die hij van anderen heeft ontvangen) …
8) Python-applicatie de bot wacht op tekst of een afbeelding van de QR-code, en wanneer geldige gegevens zijn ontvangen, wordt de betaling uitgevoerd met de utilitypaylightning.py*, die de transactie initieert via c-lightning RPC.

*Ter rechtvaardigheid moet worden opgemerkt dat mijn wrapper paylightning.py niet helemaal af is en een vals-negatieve uitkomst kan geven in specifieke scenario's. Ik raad aan in situaties die dicht bij productie komen
Wat hebben we? Gebruikers van onze bot kunnen binnen groepschat of direct waarde overdragen materiële waarde zonder beperkingen. En dat is nog niet alles — dankzij het Lightning Network-protocol, dat in zekere zin een verenigd en vereenvoudigd betalingsnetwerk is, is het mogelijk om hetzelfde geld dat in de chat is ontvangen naar compleet andere applicaties te sturen. Bijvoorbeeld, in Telegram was er al de eerste bot voor bitcoin-betalingen — @lntxbot. De 'Één balans' maakt het mogelijk om elke bot te gebruiken afhankelijk van de voorkeuren van een specifieke groepschat (ja, het probleem is absoluut nep en de oplossing is tamelijk nutteloos, maar dat is niet het punt). Het doorsturen van saldo van de ene bot naar de andere kost niets en duurt seconden! Het is belangrijk op te merken dat de makers van deze bots überhaupt nooit met elkaar in contact zijn gekomen.

Het is heel eenvoudig om een bericht met een verzoek om een storting van @lntxbot naar @atomic_tipbot door te sturen en voilà!
Het is al niet gewoon 'cijfers doorschuiven in een database' maar een betaling tussen twee verschillende, niet met elkaar verbonden databases. Zo zijn er al verschillende 'LApps' in de bot geïntegreerd, waaronder: en .
Wat betekent integratie LApp?
Elke Lightning Network node is in wezen een bitcoin-portemonnee. Het heeft twee balansen: on-chain en off-chain. De on-chain balans is nodig voor het openen van nieuwe kanalen en het opslaan van middelen met gesloten kanalen. De off-chain balans is juist wat tussen de nodes circuleert. De belangrijkste vereisten voor een node zijn het ontvangen en verzenden van betalingen, daarom heeft elke node als software de functies pay en invoice. Ik zal demonstreren hoe dit gebeurt:
user@ln-node: / % lightning-cli invoice 1000000000 internal_description external_description
{
"payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0",
"expires_at" : 1558709834,
"bolt11" : "lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6"
}
We ontvangen de 'factuur' specificatie in dit geval, die het formaat van betalingen in het Bitcoin-netwerk is (en Litecoin, trouwens, ook). Dit is een string die informatie bevat over de ontvanger, het bedrag van de transactie, de vervaldatum van de aanvraag, etc., gedetailleerde informatie kan worden verkregen door decodepay uit te voeren op deze string:
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"
}
Voor het betalen van een dergelijke "factuur" hebben we de functie pay van c-lightning nodig:
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 statussen van transacties worden door het volledige netwerk en uw eigen node in het bijzonder verwerkt. Het is niet nodig (maar het is een mogelijkheid) om contact op te nemen met de auteurs van de betalingsontvangende applicatie of hun API voor informatie over de status van de betaling. U hoeft de status van de betaling niet te controleren in het verwerkingsysteem. U hoeft niet te wachten op goedkeuring van uw transactie door de bank of een overheid. Tenslotte zijn er hier geen chargebacks en andere externe factoren die de saldo op uw rekening kunnen beïnvloeden. Dit is een oplossing voor het verplaatsen van waarde via het internet, zonder de noodzaak van een externe arbiter die bepaalt of de transactie aan de regels voldoet (soms zelfs interne regels waarvan niet alle deelnemers van tevoren op de hoogte zijn) of niet. In Bitcoin zijn er geen "interne regels". De enige regels die moeten worden gevolgd, zijn de regels van het netwerk — open en voor iedereen bekend.
Dit maakt het mogelijk directe, bijna gratis en onnodige geldtransacties tussen mensen of programma's volledig autonoom.
Als je de mogelijkheid hebt om betalingsgegevens van een externe applicatie te krijgen, dan ontstaat er de mogelijkheid om financieel te interageren met deze applicatie. Een voorbeeld is de service lnsms.world, die het mogelijk maakt om een SMS-bericht naar elk gewenst nummer te sturen, betaald met bitcoins. Voor de integratie van deze applicatie hoeven we alleen maar de gegevens uit het webformulier rechtstreeks naar het sms-verzendscript door te geven — de acties van de gebruiker op de website te emuleren:
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)
Ik weet niet waarom, maar lnsms antwoordt met de HTTP-statuscode 201 en geeft een factuur in het BOLT11-formaat terug. Nou, dat is genoeg zodat de gebruikers van de bot hun saldo dat ze in chatrooms hebben ontvangen, kunnen gebruiken om de verzending van sms'jes te betalen. De gebruiker weet zelfs niet wat er aan de hand is; hij heeft gewoon een paar cent betaald voor de verzending van een sms. En ik, als ontwikkelaar, ga niet in op de details van hoe sms-diensten werken. Ik heb gewoon de betaling doorgestuurd en de dienst verkregen. Ik kan daar een toeslag op leggen, maar dat hoeft niet — dat is mijn vrije keuze. Geen accounts, geen overeenkomsten en geen extra API voor triviale taken zoals het verzenden van sms'jes.
Laten we ons nu even voorstellen dat onze applicatie iets nuttigers is dan een chatbot en een betaling verricht aan een andere applicatie of apparaat dat verbinding heeft met het internet. Of het nu tientallen of zelfs honderden onbeduidende betalingen elke seconde zijn tussen apparaten, diensten, winkels of bepaalde dienstverleners. Dit is de kracht van micropayments; zo zou het Internet of Things eruit moeten zien. Er bestaan al projecten zoals die deze ideeën tot leven brengen, en in de nabije toekomst zullen we grote veranderingen zien op het gebied dat we momenteel elektronische handel noemen.
Als je deze post leuk vond en je wilt bitcoins in actie proberen — .
Alleen geregistreerde gebruikers kunnen deelnemen aan de enquête. , alstublieft.
Bent u geïnteresseerd in puur technische artikelen over Bitcoin en gerelateerde software?
Yes
No
Ik ben meer geïnteresseerd in de marktaspecten van cryptocurrency.
8 gebruikers hebben gestemd. 4 gebruikers hebben zich onthouden.
Bron: habr.com
