Jak funguje Lightning Network #2: Genialita reverzní transakce

Minule jsme načali extrémně zajímavý mechanismus, tzv. Lightning Network. V dnešním dlouhém a přesném článku (2000 w.) si v podstatě řekneme to, co obrovské většině bitcoinové komunity dělá velké problémy pochopit – tedy kryptografické řešení celého procesu.

Zdroj: https://www.youtube.com/watch?v=mXgxAaXw-18

Jak to funguje, detailněji

Takže, jak funguje Lightning Network? Dnes (i příště) to rozdělím spirálovitě do tematických otoček, což znamená, že v každém kole vám na schéma plateb navleču a prozradím detailnější informace.

Principů, jak kryptograficky funguje Lightning Network, je více – dnes si však ukážeme pouze ten nejběžnější (a bohužel nejkomplikovanější). Abyste měli motivaci to číst, tak vám řeknu, že kdo pochopí Lightning Network, může pochopit i streaming money princip, streaming data princip, jedno z řešení škálovatelnosti i protokol Eltoo – vše samozřejmě naprosto průkopnického rázu.

První otočka

Seznámení s postupem

  1. Funding transakce

Na začátku stojí zakládací transakce (funding transakce), v níž je uvedeno, že Alice a Bob posílají své Bitcoiny (5 BTC a 5 BTC, celkem 10 BTC v kanálu) na vícepodpisovou (multisig) adresu. Tuto transakci však nepodepíší, protože zde existuje riziko, že pokud druhá strana přestane komunikovat, tak první strana nemůže získat zpět své prostředky, jelikož k tomu je nutný i druhý podpis. Není to pravděpodobné, ale stát se to může třeba v případě, že by Bob chtěla Alici uškodit, úmyslně si nechala na multisig adresu poslat mnohonásobně méně Bitcoinů, a pak utnula komunikaci.

Jak zakládací transakce vypadá detailněji? Vstup jsou prostředky z obyčejných adres Alice a Boba a výstup – tedy kam dále putují – je multisig adresa. Každá transakce totiž musí mít výstup a vstup.

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

Ilustrace multisigu. Poznamenám, že není možné po podpisu změnit obsah transakce, což je jeden z klíčových bodů Bitcoinu (je to jako byste potom povolili změnit po podpisu smlouvu). Tučně černě ohraničený je výstup a pokus Alice odeslat si Bitcoiny z multisigu na vlastní pěst je v horní části modře ohraničené transakce.

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

Na tomto obrázku je demonstrováno, jak fungují Bitcoinové transakce – nelze vyslat transakci do sítě a čekat, že bude úspěšně potvrzena, dokud není potvrzen její vstup. Zeleně je konečná destinace Bitcoinů. Každý obdélník je transakce – nahoře vstup (input), dole výstup (output). Každý výstup se v následující transakci stává vstupem.

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

Zde je navíc vysvětlen konflikt, který by nastal v případě vyslání dvou neslučitelných transakcí – bude potvrzena pouze jedna (by the way lze zařídit, která).

  1. První commitment transakce

Následuje první závazná transakce (commitment transakce). Ta má dvě verze a každý z účastníků kanálu tu svou pošle podepsanou kamarádovi. Oba mají tedy částečně podepsanou transakci (reverzní transakci), která rozděluje Bitcoiny po první změně, což znamená, že tato transakce již odráží první off-chain (mimo blockchain) platbu – Bob prodal Alici první sklenku vína nebo naopak apod.

Druhá strana, která obdržela napůl podepsanou transakci, svůj podpis nepřipojuje a transakci nevyšle na blockchain.

Nyní každá verze závazné transakce, jak Alicina, tak Bobova, má jinou bilanci než funding transakce. Celkové prostředky na kanálu se nemohou vypařit ani přibýt – např. nová bilance bude vypadat jako:

Alice: 4 BTC

Bob: 6 BTC

Je to deset – ani více, ani méně. Z kanálu se nic neztratí ani nepřibyde. Případný větší počet na transakci by těžaři odmítli a v druhém případě to souvisí s principem Bitcoinové transakce jako takové (Bitcoiny de fakto nelze dělit – když odešlu jeden Bitcoin z deseti, tak nebudu mít devět; můžu poslat pouze všechno, resp. když nezaplatím vším, tak si zbytek musím poslat zpátky, více zde – bohužel anglicky).

  1. Výměna secret hashe

Taková podoba prvních commitment transakcí by ale nestačila. Teď vám řeknu něco, co vám bude dávat smysl o kousek později, tak nebuďte zděšeni.

Alice i Bob si vymění před vytvoření první commitment transakce tzv. otisk tajného čísla (secret hash). Při vytvoření transakce zahrnou do jejího druhého výstupu (na obrázku níže jako „to: ___“) díky secret hashi i požadavek na samotný (resp. původní) secret – tajné číslo. Co to znamená? Vyměněné secret hashe fungují jako zámečky, které se odemknou jen při zadání správného secretu.

A jak vypadá první výstup? Příklad na Alici, která následující prvotní commitment transakci podepíše a odešle Bobovi, je takový:

Vstup multisig adresa (ano, správně – první commitment transakce utrácí ze vstupu, tedy z funding transakce, který ještě není v tu dobu podepsán), již předpodepsaná Alicí, výstupy jsou dva. První jí okamžitě po podpisu této transakce Bobem posílá její část bilance (protože je to multisig), a druhý výstup má dvě možnosti: buď po podpisu této možnosti Bobem odešle Bobovi jeho díl, ale až za 1000 bloků (časový zámek, vysvětlíme si níže) po podpisu, nebo pošle Alici Bobův podíl na bilanci, pokud zadá Bobův secret. Samotné secrety si ale nikdo dosud nevyměnil.

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

Složitý obrázek – všímejte si pouze toho, co vám říkám. V třetím sloupci vidíte, jak se Alicina a Bobova verze transakce ve spodních částech rozdvojuje. To jsou ty dva výstupy (outputy, na obrázku označeny jako „To: jméno“), rozdělené tenčí černou čarou – druhý z nich má dvě verze, jak jsme si již řekli. Červenou transakci může dokončit pouze Bob, modrou zase Alice. Alice tedy může dokončit transakci od Boba a zase naopak. Zámeček je secret hash a klíč je secret.

  1. Timelock

Timelock je nezbytný prvek bezpečnosti, zmíněný v bodu výše jako „zpožďovadlo“, protože ve výsledku umožňuje podvedené straně reagovat. Časový zámek provede transakci až poté, co je vyslaná transakce dostatečně hluboko. Dejme tomu 1000 bloků. To je skvělý způsob, jak udat relativní čas.

Zdroj: https://bitcoinmagazine.com/articles/understanding-the-lightning-network-part-building-a-bidirectional-payment-channel-1464710791/
  1. Bezpečné podepsání funding transakce

Protože oba mají předpodepsané commitment transakce, disponují zadními vrátky právě pro případ, že by druhá strana přestala komunikovat ve snaze zamrazit prvnímu účastníkovi jeho prostředky. Je tedy nyní bezpečné podepsat funding transakci. Ale commitment transakce nedokončují vlastním podpisem.

Když nyní podepíší funding transakci, pošlou si každý 5 a 5 BTC na multisig adresu (viditelné v blockchainu), u níž by normálně zamrazení bylo možné. Tato transakce vstoupí do blockchainu a říká, že na multisig adrese je 10 BTC (teď je nijak nerozděluje, prostě na společné adrese je 10 BTC). Účastníkovi stačí, aby commitment transakci doplnil vlastním podpisem. Tím si např. Alice pošle 4 BTC. Potřebujeme ale mechanismus, který zneplatní minulé commitment transakce pro případ, že by třeba Alice chtěla vyslat do blockchainu tu verzi bilance, kde má více. K tomu se dostaneme dále.

Takže, v tomto bodě podepíší funding transakci.

  1. Penalizační transakce

Penalizační transakce je způsob, jak aktualizovat bilanci, a hlavně jak zabránit jednomu z účastníků, aby v průběhu výměn, kdy si začnou posílat více částečně podepsaných commitment transakcí, vyslal do blockchainu minulou neaktuální verzi bilance, kde má zrovna více Bitcoinů. Pro Boba by bylo mezi výměnami např. výhodné vyslat transakci, kde má on 9 BTC a Alice 1 BTC.

Ještě jednou si přečtěte, co jsem již napsal, tedy:

„A jak vypadá první výstup? Příklad na Alici, která následující prvotní commitment transakci podepíše a odešle Bobovi, je takový:

Vstup multisig adresa (ano, správně – první commitment transakce utrácí ze vstupu, tedy z funding transakce, který ještě není v tu dobu podepsán), již předpodepsaná Alicí, výstupy jsou dva. První jí okamžitě po podpisu této transakce Bobem posílá její část bilance (protože je to multisig), a druhý výstup má dvě možnosti: buď po podpisu této možnosti Bobem odešle Bobovi jeho díl, ale až za 1000 bloků (časový zámek, vysvětlíme si níže) po podpisu, nebo pošle Alici Bobův podíl na bilanci, pokud zadá Bobův secret. Samotné secrety si ale nikdo dosud nevyměnil.“

Bob má nyní transakci, která mu ihned po podpisu nedá vůbec nic, ale Alici pošle okamžitě její díl. Pokud podepíše první možnost jejího druhého výstupu, dostane svůj díl až za 1000 bloků od podpisu a Alice se o tomto pokusu dozví, protože náhle u ní přistane její část Bitcoinů.

Druhá možnost druhého výstupu zase říká, že Alice dostane tolik Bitcoinů, kolik v bilanci náleželo Bobovi, pokud zná secret, který si ale dosud přece nevyměnili. A to jde využít!

Představme si, že si vytvořili druhou commitment transakci a chtějí penalizovat toho, kdo by se případně pokusil na blockchain odvysílat starší commitment transakci. Jak to udělají?

Pokud si podepsali druhou verzi bilance, tak si nyní vymění secrety (ne dřív! To by mohlo vést v případě určitých kombinací okolností až k zamrazení prostředků!). A páka je na světě. Pokud někdo v budoucnu vyšle starou commitment transakci, druhá strana má secret, který prvního de facto úplně oškube, a to je dost silná motivace nepodvádět, co myslíte?

Jsem Bob a budu podvádět. Podepíšu si starou transakci a čekám 1000 bloků. Tím podpisem jsem ale aktivoval i možnost, že Alice zadá můj secret. Alici přistanou z ničeho nic Bitcoiny, protože bedlivě sleduje blockchain (pro Lightning Network bude klíčové neustále sledovat, co se děje na blockchainu, což sice není záležitost nijak nákladná, ale přece jen nutná). V tu chvíli ví, že je aktivovaná podmínka, co jí pošle Bobovy peníze – stačí zadat před vypršením času jeho secret.

Pokud by to náhodou nestihla, tak na multisig adrese už Bobovy peníze nebudou (podmínka nebude mít z čeho brát) a Alice má smůlu.

Co když mi dá špatný secret? No, nevím, k čemu by mu to bylo, ale budiž. Secret můžu přece beztrestně ověřit off-chain – vezmu ho a vyzkouším na samostatně běžící podmínce. Pokud bude výstup TRUE, dal mi pravý secret.

By the way, Bob nemá možnost od sebe výstupy transakce oddělit. Jakmile podepíše multisig na vstupu, nemůže tedy zabránit, aby byl Alici odeslán její díl, ani nemůže podepsat svou čekací možnost bez podpisu multisigu, protože multisig vlastně tuto možnost aktivuje (je to výstup). A taky nemůže podobu transakce změnit, protože ji Alice již podepsala. Je to naprosto geniální mechanismus.

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

Obrázek výše přesně popisuje to, o čem jsem právě mluvil. Tečkované obdélníky čekají na podpis, vyplněné obdélníky jsou podepsané a transakce ve třetím sloupci mají dva výstupy oddělené černou čarou (to se zezelenalým počtem BTC se stane okamžitě). Připojením držitele dané commitment transakce v tomto sloupci lze operovat s prostředky na multisig adrese (druhý sloupec, jména jsou uvedena vedle sebe) dle obsahu transakce, kterou nelze změnit, protože je již předpodepsaná druhou stranou.

Penalizace kanál uzavírá, protože se po ní zapíše konečný stav kanálu do blockchainu.

  1. Aktualizace

Po každé nové výměně secret hashů a commitment transakcí si opět navzájem vymění secrety (resp. bez výměny zůstává pouze ta nejaktuálnější, nejsvrchnější commitment transakce), aby mohli druhého případně penalizovat.

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

Není možné aktivovat penalizaci, dokud jedna ze stran nevyšle na blockchain právě starší commitment transakci, protože by v penalizační transakci chyběl hříšníkův podpis. A také není možné penalizaci vymoci na nejnovější bilanci a vzít celý obsah kanálu, protože od ní si účastníci ještě nevyměnili secrety. To také znamená, že kanál lze zavřít zcela regulérně a výsledek zapsat na blockchain, kde bude mít podobu transakce z multisig founding adresy na adresy Boba a Alice.

  1. (Dobrovolné) Regulérní uzavření kanálu

Jak jsem napsal výše, kanál lze uzavřít neregulérně díky penalizační transakci. Regulérní cesta je pak vyslání nejnovější commitment transakce jednou ze stran (+ kdyby to udělaly zároveň, tak blockchain vezme pouze jednu). Iniciátor uzavření kanálu bude ale stejně muset počkat tisíc bloků, než mu Bitcoiny přijdou ?.

Shrnutí

  1. Vytvoří funding transakci.
  2. Částečně si podepíší první commitment transakci se změnou bilance, čímž zaručí vyzvednutí prostředků i v případě neaktivity druhé strany.
  3. Podepíší si funding transakci.
  4. Při tvorbě commitment transakce si vymění hashe secretů, aby mohli do transakcí zakomponovat penalizační mechanismus.
  5. Začínají výměny jakési „směnky“ – mnoho podepisování dalších commitment transakcí.
  6. Po částečném podepsání další commitment transakce si vymění secrety, které v případě vyslání starší transakce mohou aktivovat penalizaci.
  7. Časový zámek commitment transakce poskytne druhému dostatečný čas k tomu, aby aktivoval penalizační transakci proti prvnímu.
  8. Nejnovější stav je vždy bez penalizace, protože secrety si vyměňují až po částečném podepsání další transakce.
  9. Regulérní uzavření proběhne vysláním pouze nejnovější transakce, u níž ještě nejsou vyměněné secrety.

Závěr

Uf. Dotazy pište do komentářů, rád co nejdříve odpovím. Příště budeme pokračovat Druhou otočkou. Za tento článek vděčím Aaronovi van Wirdumovi z Bitcoin Magazine a jeho vysvětlení LN, které nemá obdoby (i když jsem si dovolil některé pasáže více rozvést), potom Paralelní Polis a Janu Čapkovi a v neposlední řadě i Christinanu Deckerovi, pracujícímu na vývoji Lightning sítě, a Andreasovi Antonopoulosovi – autorovi geniální knihy Mastering Bitcoin.

Zdroje

https://www.youtube.com/watch?v=YSrRpTB-G8w – Bitcoin Meetup Jana Čapka na téma Lightning Network ze dne 6. 6. 2017 v Paralelní Polis

https://bitcoinmagazine.com/articles/understanding-the-lightning-network-part-building-a-bidirectional-payment-channel-1464710791/ – celá první otočka v angličtině

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..