Jak funguje Lightning Network #3: Základní proces detailněji

Jak funguje Lightning Network #3: Základní proces detailněji

Minule jsme probrali, jak proces řeší kryptografie, a určitě vás mezitím napadla řada palčivých otázek na načasování, finanční hledisko atd. Ještě jsme nepřešli k vytvoření sítě a bavíme se pouze o kanálech mezi dvěma lidmi.

Zdroj: https://www.devteam.space/blog/5-best-smart-contract-platforms-for-2019/

Opakování

Jak to vlastně bylo, že? Vzpomínáte si?

Na začátku seriálu jsem říkal, že téma rozdělím na tzv. otočky pomyslné spirály, což zůstává. Seznam důležitých bodů procesů v kanálu poslouží jako stať – a v každé otočce doplním vždy další část detailnějších informací (minule byla První otočka). Proč? Protože jinak byste z toho měli za chvíli naprostý guláš. Nelze říct o jednom bodu úplně všechno, a až pak se přesunout na bod další, protože byste mezi tím ztratili pointu.

Slovník

  • Kryptoměnová transakce – má vstup, který když podepíše vlastník vstupní adresy, odešle prostředky na výstup (výstupní adresu), kde je k manipulaci již potřeba podpisu jiného účastníka
  • Multisig adresa – adresa, která pro manipulaci s prostředky vyžaduje více podpisů
  • Multisig 2-of-2 – typ multisig adresy používané v Lightning networku, která vyžaduje minimálně dva podpisy ze dvou
  • Funding (zakládací) transakce – transakce, jež odesílá prostředky na multisig adresu
  • Commitment transakce – druh „směnky“, kterou si účastníci částečně podepisují a navzájem odesílají
  • Secret – tajné číslo, které funguje jako aktivační token
  • Secret hash – jeho kryptografický otisk (z otisku spočítat secret je v rozumném čase považováno za nemožné, protože jde o tzv. jednosměrnou matematickou funkci)

Event list

Jak jdou děje za sebou, od založení kanálu, přes několik výměn až po uzavření kanálu?

  1. Otevření kanálu – vytvoření funding transakce
  2. Výměna otisků secretů a vytvoření commitment transakcí na jejich základě
  3. Podepsání první commitment transakce
  4. Podepsání funding transakce a její odvysílání na blockchain (žádné další transakce až do uzavření kanálu se na blockchain vysílat nebudou – probíhají tzv. off-chain, instantně a bez blockchainového potvrzování)
  5. Výměna otisků secretů, vytvoření další commitment transakce, podepsání
  6. Až teď výměna secretů
  7. Bod 5. a 6. vícekrát
  8. Uzavření kanálu
    1. Vyslání nejnovější commitment transakce do blockchainu
    2. Vypršení času, který má podvedená strana na prokázání secretu toho druhého, a přijmutí podvodu
    3. Prokázání secretu a odebrání všech prostředků podvodné straně
Zdroj: https://bitcoinmagazine.com/articles/understanding-the-lightning-network-part-building-a-bidirectional-payment-channel-1464710791/

Výchozí podmínky

  • Lightning Node spojení přes síť blockchainu
  • Žádná důvěra mezi účastníky kanálu
  • Fungující blockchain, který podporuje timelocky a multisigy
  • Při otevřeném kanálu permanentní sledování blockchainu
  • On-line stavy připojených uzlů v kanálu

Zamezení zamrazení funding multisigu

Commitment transakce zabrání zamrazení multisigu, kam si každý z účastníků posílá počáteční „kredit“ v kanálu, protože je podepsána dříve. A jak vypadá? Stručně, jde přece o opakování.

Obsahuje trik se secretem a odesílá se předpodepsaná odesílatelem. Pokud chce jedna ze stran dostat z multisigu své prostředky, stačí, aby tuto transakci dokončila svým podpisem a vyslala na blockchain (a nesmí samozřejmě podvádět, jinak bude penalizována atd.).

Proto se commitment podepisuje dříve, jinak by se mohlo stát, že druhá strana náhle zmizí a zamrazí tím pádem prostředky obou.

Podvádění

Podvádění je vysílání neaktuálních commitment transakcí. Kanály si mezi sebou posílají prostředky obousměrně, takže pro jednu ze stran může být finančně výhodnější vyslat starou transakci.

Zneplatnění minulého stavu

Protože commitment v sobě má zabudovanou penalizační transakci, minulý stav se zneplatní výměnou aktivačních tokenů této penalizace (secretů). Tato transakce se zároveň spustí právě tehdy, kdy jedna ze stran vědomě podvádí, protože podepisuje starší commitment. Zneplatnění je postaveno na předpokladu, že strany nechtějí přijít o všechno, protože penalizační transakce všechny prostředky převede podvedené straně.

Stať

  1. Otevření kanálu
  2. Commitment transakce
  3. Penalizace

Záludné otázky

Než se vrhneme na další otočky, tak zodpovím otázky, které do nich nelze smysluplně zařadit.

  • Co to ten kanál vlastně je?

No, to není nic jiného než velmi matoucí název pro spojení. Když se řekne kanál, většina lidí si představí něco neukončeného nebo permanentně otevřeného, co síť zatěžuje, ale tak to vůbec není. Kanál je sice jakési „otevřené“ spojení, ale myšleno jen abstraktně jako dva lidé, co na sebe mají adresu. A proto si místo kanálu představte jen zápis do blockchainu na začátku a na konci jako vylovení loďky z proudu řeky – když je loďka mimo, řeku nezatěžuje, když na ní pluje, tak už zase ano.

  • Je to bezpečné?

Lightning Network závisí na bezpečnosti blockchainu. Uzly jako počítače mohou být náchylnější k virům, protože jsou po celou dobu otevření kanálu online. A je nutné sledovat blockchain. Jinak je LN celkem bezpečný.

  • Je to škálovatelné?

LN síť sama o sobě ano. Čím více spojených uzlů, tím lépe (levněji a rychleji). Ale síť závisí na blockchainu, který není škálovatelný. Z tohoto hlediska je LN pouze optimalizační řešení problému škálovatelnosti.

Transakce jsou třeba pouze „při uvítání nového člena“. Přibývání nových kanálů je zcela určitě podstatně pomalejší proces než přibývání běžných transakcí. Otázkou je, jak rychle se bude tato frekvence zvyšovat.

Při škálování jde vždycky o vzájemné porovnání růstu dvou hodnot – u kryptoměn se ptáme, jak rychle roste zatížení každého plnohodnotného uzle se zvyšujícím se počtem transakcí, přidáváme-li do sítě uzly další.

Abych byl konkrétnější, pokud frekvence zakládání nových uzlů zůstane 7 tps (transactions per second – transakcí za sekundu), kterým odpovídá jeden blok za deset minut, tak by podle odhadu Novinky.cz trvalo připojení 3,5 miliardy chytrých zařízení asi šestnáct let. To mě vede k přesvědčení, že Lightning Network je zatím dobrý nápad, ale problém neřeší.

Druhá otočka

Z pohledu blockchainu a v případě podvodu.

  1. Otevření kanálu

Dva lidé poslali Bitcoiny na multisig. Nyní je třeba podpisu obou, aby mohli s prostředky manipulovat.

  1. Commitment transakce

V blockchainu se nic neděje.

  1. Penalizace

Oba podepsali transakci z multisigu1. Z prvního výstupu šly Bitcoiny protistraně. Druhý výstup poslal zbylé Bitcoiny na další adresu (to jsem v minulém díle neřekl), která má dvě možnosti a jde o tzv. RSMC kontrakt (Revocable Sequence Maturity Contracts – odvolatelné sekvenční splatné kontrakty). Od chvíle, kdy v ní Bitcoiny přistály a tato transakce byla nahrána na blockchain, tak se počítá určitý počet bloků (tzn. od zahrnutí této transakce do blockchainu), resp. tiká decentralizovaný čas – tzv. CSV zámek (CheckSequenceVerify). První z možností po jeho uplynutí připíše Bitcoiny na adresu účastníka, který celý tento proces zahájil svým prvotním podpisem1. To se ale nestalo a nastala druhá možnost – protistrana poskytla secret. Teď jde proto zbytek peněž, který původně náležel první straně, straně druhé.

Třetí otočka

Real world. Co se děje v reálném světě během jednotlivých kroků?

  1. Otevření kanálu

Jdete do kavárny na kafe, třeba. A máte v plánu ji navštívit vícekrát. Prodavačka (nebo obchod ?) vám sdělí adresu uzlu kavárny v Lightning síti (která je strukturně nad blockchainem). Pro kontrolu a vaši jistotu vám může poslat zprávu podepsanou s pomocí jejího soukromého klíče, což si vy snadno ověříte, protože využijete blockchainu a podpis zkontrolujete přes veřejný klíč poskytnutý kavárnou.

V tuto chvíli víte, s jakým uzlem budete komunikovat. Dojde k vytvoření funding transakce a multisig adresy.

  1. Commitment transakce

Jakmile si navzájem předpodepíšete a pošlete první commitment transakci (a předtím samozřejmě vyměníte hashe secretů), stále jste vy jako zákazník nezaplatil, protože commitment transakce utrácí z adresy (multisig), která ještě neexistuje. „Zaplatíte“ až ve chvíli podepsání funding transakce. Ve stejnou chvíli také dostanete první kafe. Naprosté současnosti těchto jevů (tzv. atomicity) nikdy nelze úplně docílit (pokud nepoužíváme výhradně chytrý majetek, ale i tehdy je to problematické).

Jakmile si dáte druhé kafe, nejprve podepíšete další commitment transakci. A ano, už v této chvíli platíte. Ale servírka vám ho nepřinese, dokud jí nepošlete secret, protože jinak byste mohli na blockchain vyslat první commitment transakci a zaplatit jen za to první kafe.

  1. Penalizace

Penalizace probíhá normálně.

Čtvrtá otočka

Realizace.

  1. Otevření kanálu

Snímání adres zajistí QR kód, bezdrátová technologie, Bluetooth nebo cokoliv dalšího.

  1. Commitment transakce

Příjem secretů zajistí tablet na pultu v kuchyni nebo mobil prodavačky kavárny napojený na místní síť. Podepisování transakcí zajistí mobil zákazníka.

  1. Penalizace

Proběhne zcela normálně.

Pátá otočka

Finanční hledisko procesu. Přece jen jsou potřeba jedna až dvě transakce.

  1. Otevření kanálu

Na multisig adresu posílají prostředky oba, takže každý z nich, jakmile dojde k vyslání této transakce od kohokoliv, zaplatí Bitcoinové síti poplatek.

  1. Commitment transakce

Ty nic nestojí.

  1. Penalizace (příp. uzavření)

Uzavření kanálu zaplatí kapacita multisigu (resp. oba), ale je samozřejmě možné si na začátku procesu dobrovolně vyměnit transakci nebo pozměnit počáteční stav první commitment transakce tak, aby uzavření zaplatil konkrétní účastník. Pokud dojde k uzavření penalizací, je vše jedno, protože další prostředky podvodníka nyní už do kanálu nenacpete.

Šestá otočka

Načasování.

  1. Otevření kanálu

Nejprve bude vyměněna první várka commitment transakcí. Dokud není funding transakce na blockchainu, kanál je zavřený, protože by vysláním došlo k utrácení z multisigu, který ještě neexistuje.

Multisig proto dost pravděpodobně podepíše jeden a pošle druhému. Zda funding transakci dokončil, uvidí na blockchainu.

  1. Commitment transakce

Klíčové jsou výměny commitment transakcí. Pokud jeden z nich pošle secret hash pro tvorbu commitment transakce, ale druhý ne, akce není ohrožena žádným problémem z oblasti teorie her (problémy typu „a co když mu to nedá? A co když on neví, že on to nemá?“ apod.), protože:

  • Ten, kdo s pomocí hashe vytvoří transakci (tzn. ten, kdo pro aktivování penalizace druhého potřebuje znát secret), bude chtít znát i secret
  • V opačném případě zjistí, že něco nehraje a vyšle poslední commitment transakci, od níž nemají vyměněné secrety

Když zase secret pošle pouze jeden z nich, dojde k podobnému scénáři – druhá strana ukončí kanál vysláním své commitment transakce. A pokud vyšlou nejaktuálnější transakci oba, do blockchainu se zapíše pouze jedna (jinak by šlo o overspending).

  1. Penalizace

Proč penalizace sebere podvodníkovi zrovna všechny jeho prostředky? Protože kdyby bylo výsledkem pouze nějaké „pozastavení a upozornění“ nebo jednoduše „zatrhnutí pokusu podvádět, ale bez pokuty“, tak by bylo možné spamování. Řešení takto krutou penalizací je jednoznačně nejefektivnější z hlediska minimalizace podvodných pokusů na jeden. Penalizace nižší, než v plné výši, by také byla možná, ale zbytečně by mohla proces natahovat.

Sedmá otočka

Ohledně autenticity celého procesu existuje velmi jednoduché řešení – elektronické podepisování úplně každého přenosu uskutečněného přes Lightning kanál.

Když jsem říkal, že si obě strany posílají transakce, resp. že jedna strana pošle předpodepsanou transakci druhé straně, která případně připojí svůj vlastní podpis a vyšle ji na blockchain, mohlo by vás napadnout, a co když někdo něco změní.

K zamezení těchto útoků nám pomůže samotná podstata blockchainu – tedy jistota, že druhá strana si může zobrazit to samé co já, a nikdo to nepozměnil (jen si to představte – posíláte si zprávy, ale najednou se někdo začne vydávat za vás a příjemce to neumí odlišit – to je tragédie). Připravte se, budeme potřebovat trochu fantazie.

  1. Otevření kanálu

Chci si otevřít kanál. A do budoucna budu potřebovat mít jistotu, že částečné transakce, které dostávám od druhé strany, jsou skutečně od té samé strany, s níž mám otevřený kanál. Pokud chci navázat spojení, musím znát jeho adresu v P2P síti. Dostanu informaci (v obchodě, kavárně, kdekoliv), že tato adresa patří právě tomuto kanálu.

Řeknu si, tak jo, pokud tato adresa skutečně náleží tomuto kanálu, má její provozovatel její soukromý kryptografický klíč. Vytvořím nesmyslnou transakci, kterou by blockchain nikdy nevzal, a pošlu ji kanálem. Ozve se mi podepsaná. Podpis díky znalosti adresy ověřím a tím nabudu jistotu, že vlastník této adresy skutečně provozuje i tento kanál.

  1. Commitment transakce

Cokoliv, co mi pošle, ověřím podobným způsobem. Tak nemůže jeho commitmenty nikdo padělat. Má to samozřejmě jeden předpoklad – alespoň na jedné cestě mezi mým uzlem a jeho uzlem do přenášených dat nikdo nezasáhne.

  1. Penalizace

Probíhá normálně.

Pokročilejší dotazy

  • Je LN škálovatelný z hlediska paměti potřebné k uchovávání secretů?

Otázka podobná otázce škálovatelnosti. S počtem transakcí roste lineárně počet secretů, což by neměl být vůbec problém. Ale je fakt, že zneplatnit transakce jiným způsobem bez secretu zatím nikdo nevymyslel a stávající řešení produkuje docela velké množství zbytečných dat.

  • Lze navýšit v průběhu otevření kanálu jeho kapacitu?

Ne. Všechny podepsané commitmenty do doby, než jsme se k tomu rozhodli, by bylo třeba předělat a znova podepsat.

Závěr

Dnes jste se naprosto ponořili do LN, což je dobře, protože příště už se vrhneme na další kapitolu a tyto procesy budeme brát za samozřejmé.

Zdroje

https://bitcoinmagazine.com/articles/understanding-the-lightning-network-part-building-a-bidirectional-payment-channel-1464710791/

Sdílet příspěvek

Napsat komentář

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..