Minulý týden jsem strávil vývojem své první veřejné aplikace – Telegram bota, který funguje jako Bitcoinová peněženka a umožňuje "posílat mincí" dalším členům skupinových chatů a také provádět externí Bitcoinové platby sobě nebo jiným tzv. "Lightning Apps". Předpokládám, že čtenář je obeznámen s Bitcoinem a Telegramem, protože se budu snažit psát stručně, aniž bych se příliš zabýval detaily. , a Telegram je prostředek pro okamžitou výměnu zpráv na mobilních zařízeních a PC, který umožňuje na své platformě vytvářet malé aplikace (chat boty).
Jaké jsou klíčové funkce této aplikace?
- Umožňuje odměnit nebo povzbudit rozhovor opravdu materiální hodnotou, a ne jen "virtuálním lajkem", to povyšuje elektronickou komunikaci na úplně novou úroveň
- Skutečný příklad aplikace, která může finančně interagovat s jinými aplikacemi pomocí otevřeného platebního protokolu
- Všechny komponenty aplikace jsou projekty s otevřeným zdrojovým kódem a lze je měnit a používat pro své úkoly. Aplikace nepoužívá uzavřená nebo komerční řešení, přestože spadá do oblasti elektronického obchodování, kterou dnes těžko nazveme otevřenou.
A jak to aplikovat v praxi?
tak nějak…

nebo tak…

Co znamenají ta čísla? To jsou jednotky bitcoinu – satoshi. Podle burzovních cen ze středu roku 2019 je 1000 satoshi přibližně $0.06. Satoshi je možné utratit online nebo snadno vyměnit za národní měnu. Právě z tohoto důvodu (likvidita) to nejsou jen další "záznam v databázi" nebo "body, které můžete utratit v obchodech našich partnerů", a opravdové internetové peníze.
*chci hned poznamenat, že některá slova nebo fráze se záměrně snažím nenapsat v ruštině – buď neznám přesný překlad v některých případech, nebo se mi tento překlad zdá klamný spíše než správný
Může se objevit otázka, jak používat takovou aplikaci, pokud nemáte bitcoiny. Ty si můžete snadno zakoupit v malém množství na jedné z mnoha burz nebo směnáren, a také od kamaráda-bitcoiner nebo dokonce dostat mince od aktuálních uživatelů bota. Mnoho peněženek na telefonu nabízí možnost koupit bitcoiny přímo „bez odchodu od pokladny“.



Jakmile se obohaťujete bitcoiny (místo toho spíše satoshi-ami(?)) — spouštíme a děláme /deposit.
Bot v odpověď se zeptá, kolik satoshi vložit na účet a pošle k úhradě fakturu, kterou lze zaplatit mobilní peněženkou naskenováním QR kódu nebo stisknutím tlačítka („otevřít v peněžence“) na stránce faktury.



Potvrzením platby ve své peněžence, bot prakticky okamžitě pošle potvrzení o platbě a to se vizuálně zobrazí v rámci faktury.
Do této chvíle jsme se dotkli dvou komponent aplikace — back-end telegram bota a systému zpracování plateb kryptoměnou (spíše jeho front-endu).
Pro vytvoření Telegram bota jsem použil . A samozřejmě, samotný bot .
Jako systém zpracování plateb a řešení UX problémů jsem zvolil (ve skutečnosti, možnost téměř není) na , na který .
Pokud hledáte řešení pro zpracování událostí plateb přímo, měl byste se zaměřit na pro tzv. on-chain platby, a pro okamžité mikro-platby (Lightning) řešení jako nebo .
Takže je to self-hosted nebo ne!?
Ano, je to tak. Ve své aplikaci používám bezplatný hosting BTCPayServer — , ale je to naprosto možné a nevyžaduje to mnoho času k tomu, aby se spustil vlastní zpracovatelský střed. Je však třeba mít na paměti, že budete potřebovat ~500GB dostupných na pevném disku pro ukládání blockchainů Bitcoin (a Litecoin). Také budou potřebné výpočetní a síťové zdroje během synchronizace a v závislosti na vašich potřebách potřebné „obaly“ pro blockchainy, abyste s nimi mohli pohodlně interagovat. BTCPayServer neobsahuje by-design žádné soukromé klíče ani jinou informaci, která by umožnila kontrolovat vaši peněženku.
Pro on-chain (běžné) platby je nutné přidat tzv. xpub klíč peněženky do BTCPayServer pro generování příjmových adres (veřejných klíčů). To umožňuje a zabezpečuje používání BTCPayServer i v „sdílené“ podobě. Všechny tyto xpub klíče a adresy lze snadno získat v kvalitních peněženkách, jako jsou , pro další nastavení zpracování.
Každý, kdo se setkal s Bitcoinem, slyšel, že bitcoin je pomalý a transakce jsou drahé, zejména během šílenství, proto pro okamžité mikroplatby stojí za to používat (off-chain) transakce Lightning Network.
Co je to Lightning Network?
Jedná se o něco jako plugin pro bitcoin, který přidává dodatečnou vrstvu abstrakce a umožňuje provádět okamžité a prakticky bezplatné transakce v síti Bitcoin. To vše je možné díky kryptografické magii s multi-podpisy, často nazývané smart kontrakt. Existuje několik realizací protokolu Lightning Network, já používám implementaci v C.
Hlavní rozdíl mezi on-chain a off-chain (Lightning) platbami spočívá v tom, jak jsou uchovávány. Všechny on-chain transakce se přenášejí přes všechny uzly sítě, dokud jedna z bitcoinových uzlů neoznámí s zahrnutými transakcemi. (Na habru je dokonce , oni právě vyrábějí hardware pro těžbu). Právě proto takové transakce nazýváme on-chain. Takové transakce budou zaznamenány do veřejného blockchainu a zůstanou v něm až do konce jeho existence. Také takové transakce jsou veřejně dostupné a lze je sledovat, monitorovat a analyzovat.
V případě off-chain (Lightning) transakcí probíhá vše jinak. Každý uzel Lightning sítě má jeden (nebo více) on-chain adres, to jsou ty běžné bitcoinové adresy, ze kterých to všechno začíná. Když se na takové adrese objeví bitcoiny, je možné otevřít tzv. lightning kanál k jiné nódě, což znamená, že pomocí kryptografických technik se tyto dvě nody dohodly na dostupnosti prostředků mezi sebou. Později jsou všechny transakce (jak vlastní, tak transakce cizích nodů), které procházejí takovým kanálem, uchovávány pouze na nodech účastníků transakce (a na zprostředkovatelských nodech). Jediné transakce, které se zapisují do blockchainu, jsou transakce o otevření nebo uzavření kanálu. V širším měřítku tak vzniká síť vzájemně propojených nodů, která vytváří mezi účastníky tisíce různých cest pro „přelití“ prostředků z jedné nody do druhé podle určitých přísných pravidel. Prakticky všechny takové transakce jsou uchovávány pouze v databázovém souboru samotných nodů. Právě z tohoto důvodu je nazýváme off-chain.
Na diagramu je vidět vizualizace všech komponent aplikace

Stručně řečeno:
1) Uživatel pošle příkaz botovi v Telegram
2) Telegram odešle zprávu o události python aplikaci bota
3) python-aplikace odesílá dotaz na BTCPayServer
4) BTCPayServer generuje příchozí adresy BTC a LTC, a také posílá dotaz na fakturu k lightning-charge, která následně komunikuje s démonem c-lightning. Na výstupu získáváme krásný HTML formulář pro zpracování platby
5) Uživatel platí fakturu a vidí potvrzení
6) BTCPayServer odesílá notifikaci o platbě faktury (IPN) na zadaný callback_url, v našem případě callbacks.py (další python aplikace pro příjem notifikací)
7) Na základě přijatých údajů se zůstatek uživatele mění
… a pokud se uživatel rozhodl vybrat prostředky (mince, které získal od jiných) …
8) Python aplikace bota čeká na text nebo obrázek QR kódu, a když jsou získána platná data, dojde k platbě utilitoupaylightning.py*, která iniciuje transakci prostřednictvím c-lightning RPC.

*Pro spravedlnost je třeba poznamenat, že moje wrapper paylightning.py není úplně dokončená a může vracet falešně negativní výsledek ve specifických scénářích. Doporučuji v případech blízkých produkčnímu prostředí
Co máme? Uživatelé našeho bota mohou uvnitř skupinového chatu nebo přímo předávat materiální hodnotu bez omezení. A to není vše — díky protokolu Lightning Network, který je v jistém smyslu unifikovanou a zjednodušenou platební sítí, se objevuje možnost posílat stejné peníze, které byly přijaty v chatu, naprosto jiným aplikacím. Například, v Telegramu už existoval první bot pro bitcoiny — @lntxbot. „Jednotný zůstatek“ umožňuje používat kterýkoli z botů podle preferencí konkrétní skupiny chatu (ano, problém je zcela vymyšlený a řešení je docela zbytečné, ale jde o podstatu). Přehodit zůstatek z jednoho bota na jiného nestojí nic a zabere sekundy! Je důležité poznamenat, že tvůrci těchto botů nikdy mezi sebou nesdílí.

Jednoduše stačí přeposlat zprávu se žádostí o vklad od @lntxbot k @atomic_tipbot a voilà!
To už není jen "přehazování čísel v databázi", ale platba mezi dvěma různými, navzájem nespojenými databázemi. Takže do bota je integrováno již několik "LApps", mezi nimi: a .
Co znamená integrace LApp?
Každá Lightning Network nód je v podstatě bitcoinová peněženka. Má dva zůstatky: on-chain a off-chain. On-chain zůstatek je nezbytný pro otevírání nových kanálů a uchovávání prostředků z uzavřených kanálů. A off-chain zůstatek je právě to, co cirkuluje mezi nody. Hlavními požadavky na nód je příjem a odesílání plateb, proto každá nód jako software má funkce pay a invoice. Ukážu vám, jak to probíhá:
user@ln-node: / % lightning-cli invoice 1000000000 internal_description external_description
{
"payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0",
"expires_at" : 1558709834,
"bolt11" : "lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6"
}
Získáváme „invoice“ specifikace v tomto případě, který je formátem plateb v síti Bitcoin (a Litecoin, mimochodem, také). To je řetězec, který obsahuje informace o příjemci, částce transakce, době vypršení žádosti atd., podrobné informace lze získat spuštěním decodepay na tento řetězec:
user@ln-node: / % lightning-cli decodepay lnbc10m1pwdaj72pp5vnq3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6
{
"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"
}
Aby zapłacić za ten "fakturę", potrzebna jest funkcja 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"
}
Wszystkie stany transakcji są przetwarzane przez całą sieć oraz własny węzeł. Nie ma potrzeby (choć istnieje taka możliwość) kontaktowania się z twórcami aplikacji, która jest odbiorcą płatności, ani żadnym ich API, aby uzyskać informacje o stanie płatności. Nie ma potrzeby sprawdzania stanu płatności w systemie przetwarzania. Nie trzeba czekać na zatwierdzenie transakcji przez bank lub instytucję rządową. W końcu nie ma chargebacków ani innych zewnętrznych czynników, które mogą wpłynąć na saldo na Twoim koncie. To rozwiązanie do przenoszenia wartości przez Internet, bez potrzeby zewnętrznego arbitra, który decyduje, czy transakcja spełnia wymagania (czasem nawet wewnętrzne zasady, o których nie wszyscy uczestnicy są wcześniej poinformowani) czy nie. W Bitcoinie nie ma "wewnętrznych zasad". Jedynymi zasadami, do których należy się stosować, są zasady sieci — otwarte i znane wszystkim.
Tohle to činí skutečným přímé, prakticky bezplatné a okamžité finanční transakce mezi lidmi nebo programy v plně autonomním režimu.
Pokud máte možnost získat platební údaje z externí aplikace, máte příležitost interagovat v rámci finančního smyslu s touto aplikací. Jako příklad lze uvést službu lnsms.world, která umožňuje odeslat SMS na libovolné číslo zaplacením v bitcoinech. Pro integraci této aplikace potřebujeme pouze předat údaje z webového formuláře přímo skriptu pro odesílání SMS — emulovat akce uživatele na webové stránce:
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)
Nevím, proč, ale lnsms odpovídá s HTTP stavovým kódem 201 a vrací fakturu formátu BOLT11. Nuže, to je dostatečné, aby uživatelé bota mohli provádět platby za odeslání SMS ze svého zůstatku, který získali v chatovacích aplikacích. Uživatel ani neví, co se tam děje, prostě zaplatil pár centů za odeslání SMS. A já, jako vývojář, se do podrobností fungování SMS služeb nepouštím. Jen jsem přeposlal platbu a obdržel službu. Lze k tomu přidat marži, nebo to nechat být — to je má volba. Žádné účty, dohody a další API pro drobné úkoly, jako je odesílání SMS.
A teď si na okamžik představme, že naše aplikace je něčím užitečnějším než chatbot a provádí platbu nikoliv jinému botu, ale jiné aplikaci nebo zařízení připojenému k Internetu. Nebo snad se jedná o desítky nebo dokonce stovky nepatrných plateb každou sekundu mezi zařízeními, službami, obchody nebo nějakými poskytovateli služeb. To je síla mikro-plateb, tak by měl vypadat Internet věcí. Už existují projekty jako které tyto nápady uvádějí do života a brzy, podle mého názoru, uvidíme velké změny v oblasti, kterou nyní nazýváme elektronickým obchodem.
Pokud se vám příspěvek líbil a chcete vyzkoušet bitcoiny v akci — .
Pouze registrovaní uživatelé se mohou účastnit ankety. , prosím.
Zajímají vás vyloženě technické články o bitcoinu a souvisejícím softwaru?
Ano
Ne
Mě více zajímají tržní aspekty kryptoměny.
Hlasovalo 8 uživatelů. Zdrželi se 4 uživatelé.
Zdroj: habr.com
