Ako spustiť mikroplatby vo svojej aplikácii

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í. Výber zdrojov o Bitcoine je dostupný na tomto odkaze, 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…

Ako spustiť mikroplatby vo svojej aplikácii
alebo takto…

Ako spustiť mikroplatby vo svojej aplikácii
Č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“.

Ako spustiť mikroplatby vo svojej aplikáciiAko spustiť mikroplatby vo svojej aplikáciiAko spustiť mikroplatby vo svojej aplikácii

Keď už máte bitcoiny (alebo skôr satoshi-y(?)) — spustíme @atomic_tipbot 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.

Ako spustiť mikroplatby vo svojej aplikáciiAko spustiť mikroplatby vo svojej aplikáciiAko spustiť mikroplatby vo svojej aplikácii

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 Python Telegram Bot. No a samozrejme, samotný bot s otvoreným zdrojom.

Ako systém spracovania platieb a riešenia UX úloh, voľba padla (v skutočnosti, nie je veľa možností) na BTCPayServer, na ktorý dokumentácia je na tomto odkazu.

Ak hľadáte riešenia na spracovanie udalostí platieb priamo, mali by ste sa pozrieť na Electrum CLI manuálne stránky pre tzv. on-chain platby, a pre okamžité mikro-platby (Lightning) sú riešenia ako Lightning-charge alebo Sparko.

Tak je self-hosted alebo nie!?

Áno, je to pravda. V svojej aplikácii používam bezplatný hosting BTCPayServer — BTCPayJungle, 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 Electrum, 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 c-lightning 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 nový vyťažený blok so zahrnutými transakciami. (Na Habr je dokonca BitFury, 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

Ako spustiť mikroplatby vo svojej aplikácii

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.

Ako spustiť mikroplatby vo svojej aplikácii

*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 na používanie dobre vyladenej obálky 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.

Ako spustiť mikroplatby vo svojej aplikácii Ako spustiť mikroplatby vo svojej aplikácii

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: sat2.io a lnsms.world.

Č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 BOLT11 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 Althea 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 — pošlite mi na pohár piva a mäkké francúzske pečivo.

Len registrovaní používatelia sa môžu zúčastniť prieskumu. Prihláste sa, 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

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster