Minulý týždeň som strávil vývojom svojho prvého verejného programu — Telegram bota, ktorý funguje ako Bitcoin peňaženka a umožňuje "hádzať mince" iným účastníkom skupinových chatov, ako aj vykonávať externé Bitcoin platby pre seba alebo ostatných pomocou takzvaných "Lightning Apps". Predpokladám, že čitateľ má všeobecnú znalosť o Bitcoine a Telegrame, preto sa budem snažiť písať stručne, bez zbytočných podrobností. , a Telegram je aplikácia na okamžitú výmenu správ na mobilných zariadeniach a počítačoch, ktorá umožňuje na ich platforme vytvárať svoje malé aplikácie (chat boty).
Aké sú kľúčové funkcie tejto aplikácie?
- Umožňuje oceniť alebo odmeniť svojho partnera skutočnou materiálnou hodnotou, nie len "virtuálnym lajkom", to posúva elektronickú komunikáciu na úplne novú úroveň.
- Reálny príklad aplikácie, ktorá môže finančne interagovať s inými aplikáciami pomocou otvoreného platobného protokolu.
- Všetky komponenty aplikácie sú projekty s otvoreným zdrojovým kódom, ktoré je možné meniť a používať podľa vlastných potrieb. Aplikácia nepoužíva uzavreté ani komerčné riešenia, aj keď spadá do sféry elektronického obchodu, ktorú je dnes veľmi ťažké nazvať otvorenou.
A ako to aplikovať v praxi?
nejako takto…

alebo takto…

Čo znamenajú tieto čísla? To sú jednotky bitcoinu — satoshi. Podľa burzových cien v polovici roka 2019 je 1000 satoshi približne 0,06 dolára. Satoshi je možné minúť online alebo ľahko zameniť za národnú menu. Práve z tohto dôvodu (likvidita) to nie je len ďalšia "záznam v databáze" alebo "body, ktoré môžete minúť v obchodoch našich partnerov", a pravé internetové peniaze..
*ihneď chcem poukázať na to, že niektoré slová alebo frázy úmyselne nepíšem v ruštine — buď nepoznám kontextový preklad v niektorých prípadoch, alebo sa tento preklad podľa môjho názoru zdá skôr zavádzajúci než správny.
Môže sa objaviť otázka, ako sa takáto aplikácia používa, ak nemáte bitcoiny. Tieto je ľahké získať v malom množstve na jednej z mnohých búrz alebo prostredníctvom zmenární, alebo ich môžete získať od priateľa-používateľa bitcoinov, alebo dokonca získať mince od aktuálnych používateľov bota. Mnohé peňaženky na telefóne ponúkajú možnosť zakúpiť bitcoiny priamo „bez odchodu od pokladne“.



Keď už máte bitcoiny (alebo skôr satoshi-y(?)) — spustíme a vykonáme /deposit.
Bot následne opýta, koľko satoshí chcete vložiť na svoj účet a pošle vám faktúru, ktorú môžete zaplatiť mobilnou peňaženkou skenovaním QR kódu alebo stlačením tlačidla („otvoriť v peňaženke“) na stránke faktúry.



Potvrdením platby vo svojej peňaženke bot takmer okamžite pošle potvrdenie o platbe a to bude vizuálne zobrazené vo výmime faktúry.
Doteraz sme spomenuli dve komponenty aplikácie — back-end telegram bota a systém spracovania platieb kryptomenou (skôr jeho front-end).
Na vytvorenie Telegram bota som použil . No a samozrejme, samotný bot .
Ako systém spracovania platieb a riešenia UX úloh, voľba padla (v skutočnosti, nie je veľa možností) na , na ktorý .
Ak hľadáte riešenia na spracovanie udalostí platieb priamo, mali by ste sa pozrieť na pre tzv. on-chain platby, a pre okamžité mikro-platby (Lightning) sú riešenia ako alebo .
Tak je self-hosted alebo nie!?
Áno, je to pravda. V svojej aplikácii používam bezplatný hosting BTCPayServer — , ale je absolútne možné a nevyžaduje veľa času na spustenie vlastného spracovateľského centra. Avšak, treba mať na pamäti, že budete potrebovať ~500GB voľného miesta na disku na uloženie blockchainov Bitcoin (a Litecoin). Taktiež budú potrebné výpočtové a sieťové zdroje počas synchronizácie a v závislosti od vašich potrieb potrebné „obaly“ pre blockchainy, aby s nimi bolo pohodlné interagovať. BTCPayServer neobsahuje by-design žiaden súkromný kľúč alebo akékoľvek iné informácie, ktoré by umožnili kontrolovať vašu peňaženku.
Na on-chain (bežné) platby je potrebné pridať tzv. xpub-kľúč peňaženky do BTCPayServer na generovanie adries na prijímanie (verejných kľúčov). To umožňuje a zabezpečuje použitie BTCPayServer aj v 'zdieľanej' podobe. Všetky tieto xpub-kľúče a adresy je možné ľahko získať v dobrých peňaženkách ako , pre ďalšie nastavenie procesovania.
Všetci, kto sa stretli s Bitcoinom, počuli o tom, že bitcoin je pomalý a transakcie sú drahé, najmä počas hype, takže pre okamžité mikro-platby by sa mali používať (off-chain) transakcie Lightning Network.
Čo je to Lightning Network?
Je to niečo ako doplnok k bitcoinu, ktorý nadstavuje ďalšiu vrstvu abstrakcie a umožňuje vykonávať okamžité a prakticky bezplatné transakcie v sieti Bitcoin. Všetko toto je možné vďaka kryptografickej mágii s multi-podpismi, častejšie nazývanej smart kontrakt. Existuje niekoľko realizácií protokolu Lightning Network, ja používam realizáciu na C.
Hlavný rozdiel medzi on-chain a off-chain (Lightning) platbami je v tom, ako sú uložené. Všetky on-chain transakcie sa retransmitujú po všetkých uzloch siete, kým jedna z bitcoinových nód neohlási so zahrnutými transakciami. (Na Habr je dokonca , oni práve vyrábajú hardvér na ťažbu). Práve z tohto dôvodu nazývame takéto transakcie on-chain. Takéto transakcie budú zapísané v spoločnom blockchaine a zachovajú sa v ňom až do konca jeho existencie. Taktiež sú takéto transakcie vo všeobecnom prístupe a je ich možné monitorovať, sledovať a analyzovať.
V prípade off-chain (Lightning) transakcií sa všetko deje inak. Každá nód Lightning siete má jeden (alebo viac) on-chain adries - to sú tie obyčajné bitcoinové adresy, z ktorých všetko začína. Keď sa na takej adrese objavia bitcoiny, je možné otvoriť tzv. lightning kanál k inej nódě, čo znamená, že prostredníctvom kryptografických techník sa tieto dve nódky dohodli na dostupnosti prostriedkov medzi sebou. Neskôr všetky transakcie (ako svoje, tak aj transakcie cudzích nód) prechádzajúce cez taký kanál sa ukladajú iba na nódach účastníkov transakcie (a nódach-prostredníkoch). Jediné transakcie, ktoré sa zapisujú do blockchainu, sú transakcie o otvorení alebo zatvorení kanála. Na širšom meradle vzniká taká sieť vzájomne prepojených nód, ktorá medzi účastníkmi vytvára tisíce rôznych ciest na „prehádzanie“ prostriedkov z jednej nód do druhej podľa určitých pevne stanovených pravidiel. Prakticky všetky tieto transakcie sa ukladajú iba v súbore DB samotných nód. Práve z tohto dôvodu ich nazývame off-chain.
Na diagrame je vidieť vizualizáciu všetkých komponentov aplikácie

Stručne:
1) Používateľ posiela príkaz botovi v Telegram
2) Telegram posiela správu o udalosti python aplikácii bota
3) python-aplikácii posiela požiadavku na BTCPayServer
4) BTCPayServer generuje prichádzajúce adresy BTC a LTC, a taktiež posiela požiadavku na faktúru k lightning-charge, ktorý sa zasa komunikuje s démonom c-lightning. Na výstupe dostaneme pekný HTML formulár na spracovanie platby
5) Používateľ platí faktúru a vidí potvrdenie
6) BTCPayServer odosiela oznámenie o platbe faktúry (IPN) na zadaný callback_url, v našom prípade callbacks.py (ďalšia python aplikácia na prijímanie oznámení)
7) Podľa prijatých údajov sa zmení zostatok používateľa
… a ak sa používateľ rozhodol vybrať prostriedky (mince, ktoré dostal od iných) …
8) Python-aplikácia bota čaká na text alebo obrázok QR kódu, a keď sú prijaté platné údaje, uskutoční sa platba prostredníctvom utilítpaylightning.py*, ktorá iniciuje transakciu prostredníctvom c-lightning RPC.

*Na spravodlivosti strane stojí za zmienku, že moja obálka paylightning.py nie je úplne dokončená a môže v špecifických scenároch vrátiť falošne negatívny výsledok. Odporúčam v prípadoch blízkych k produkcii
Čo máme? Používatelia nášho bota môžu v rámci skupinového chatu alebo priamo prenášať materiálnu hodnotu bez obmedzení. A to nie je všetko — vďaka protokolu Lightning Network, ktorý je do určitej miery unifikovanou a zjednodušenou platobnou sieťou, je možné prenášať rovnaké peniaze prijaté v chate do úplne cudzích aplikácií. Napríklad v Telegrame už existoval prvý bot pre bitcoinové platby — @lntxbot. „Jednotný zostatok“ umožňuje využívať akéhokoľvek bota v závislosti od preferencií konkrétneho skupinového chatu (áno, problém je úplne umelý a riešenie celkom zbytočné, ale ide o podstatu). Prehodíš zostatok z jedného bota na druhého bez akýchkoľvek nákladov a trvá to sekundy! Je dôležité poznamenať, že tvorcovia týchto botov sa vôbec nikdy nespojili medzi sebou.

Stačí len preposlať správu so žiadosťou o vklad od @lntxbot k @atomic_tipbot a voilà!
To už nie je len „presúvanie čísel v DB“, ale platba medzi dvoma rôznymi, navzájom nesúvisiacimi DB. Takže do bota je integrovaných už niekoľko „LApps“, medzi nimi: a .
Čo to znamená integrácia LApp?
Každá Lightning Network noda je v podstate bitcoinová peňaženka. Má dva zostatky: on-chain a off-chain. On-chain zostatok je potrebný na otváranie nových kanálov a uchovávanie prostriedkov z uzavretých kanálov. Off-chain zostatok je to, čo sa prenáša medzi nodami. Hlavné požiadavky na nodu sú prijímanie a odosielanie platieb, preto každá noda ako softvér má funkcie pay a invoice. Ukážem ti, ako to prebieha:
user@ln-node: / % lightning-cli invoice 1000000000 internal_description external_description
{
"payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0",
"expires_at" : 1558709834,
"bolt11" : "lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6"
}
Získavame „faktúru“ špecifikácie v tomto prípade, ktorá je formátom platieb v sieti Bitcoin (a Litecoin, mimochodom, tiež). Je to reťazec, ktorý obsahuje informácie o príjemcovi, sume transakcie, čase vypršania žiadosti atď., podrobnejšie informácie je možné získať spustením decodepay vo vzťahu k tomuto reťazcu:
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"
}
Na zaplatenie tohto "invoicu" potrebujeme funkciu pay z 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"
}
Všetky stavy transakcií spracováva celá sieť a vaša vlastná nódová sieť konkrétne. Nie je potrebné (ale je to možné) komunikovať s autormi aplikácie-prijímateľa platby alebo s akýmkoľvek ich API na získanie informácií o stave platby. Nie je potrebné kontrolovať stav platby v systéme spracovania-mediatora. Netreba čakať na schválenie vašej transakcie bankou alebo štátnou inštitúciou. Konečne, tu nie sú chargebacky a iné externé faktory, ktoré by mohli ovplyvniť zostatok na vašom účte. Toto je riešenie pre presúvanie hodnoty prostredníctvom siete Internet bez potreby tretej strany, ktorá rozhoduje, či transakcia spĺňa pravidlá (niekedy aj vnútorné pravidlá, o ktorých nie všetci účastníci sú vopred informovaní) alebo nie. V bitcoine neexistujú "vnútorné pravidlá". Jedinými pravidlami, ktorými sa treba riadiť, sú pravidlá siete — otvorené a všetkým známe.
To robí skutočným priame, prakticky bezplatné a okamžité finančné transakcie medzi ľuďmi alebo programami plne autonómne.
Ak máte možnosť získať údaje o platbe z externého aplikačného softvéru, vzniká možnosť finančnej interakcie s touto aplikáciou. Ako príklad môžeme uviesť službu lnsms.world, ktorá umožňuje posielať SMS správy na libovolné číslo, pričom ich financujete bitcoinmi. Na integráciu tejto aplikácie stačí iba preniesť údaje z webového formulára priamo do skriptu na odosielanie SMS – emulovať akcie používateľa na webovej stránke:
payload = {
'number': telefónne_číslo,
'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)
Neviem, z akého dôvodu, ale lnsms odpovedá status kódom 201 HTTP a vracia faktúru formátu BOLT11. Nuž, to stačí, aby používatelia bota mohli zaplatiť za zaslanie SMS zo svojho zostatku, ziskaného v chatovacích miestnostiach. Používateľ ani nevie, čo sa tam deje, len zaplatil pár centov za odoslanie SMS. A ja ako vývojár sa nezapletám do podrobností fungovania SMS služieb. Jednoducho som preniesol platbu a dostal službu. Môžem si pridať maržu, alebo aj nie — to je moja voľba. Žiadne účty, dohody a žiadne API pre banálne úlohy ako posielanie SMS.
A teraz si na okamih predstavme, že naša aplikácia je niečím užitočnejším ako chat-bot a uskutočňuje platby nie inému botu, ale inej aplikácii alebo zariadeniu pripojenému na Internet. Alebo ide o desiatky, či dokonca stovky bezvýznamných platieb každú sekundu medzi zariadeniami, službami, obchodmi alebo nejakými poskytovateľmi služieb. To je moc mikroplatieb, takto by mal vyzerať Internet vecí. Už existujú projekty ako ktoré pretvárajú tieto myšlienky na realitu a čoskoro uvidíme veľké, podľa môjho názoru, zmeny v oblasti, ktorú teraz nazývame elektronický obchod.
Ak sa Vám páčil tento príspevok a chcete vidieť bitcoiny v akcii — .
Len registrovaní používatelia sa môžu zúčastniť prieskumu. , prosím.
Zaujímajú vás čisto technické články o bitcoine a príbuznom softvéri?
Áno
Nie
Mňa viac zaujímajú trhové aspekty kryptomien.
Hlasovalo 8 používateľov. Zdržalo sa 4 používateľov.
Zdroj: habr.com
