Jak funguje Bitcoin?

· 10 min read

Bitcoin je koncept digitální měny, se kterým v roce 2009 přišel legendární a záhadný Satoshi Nakamoto. Jako infrastrukturu využívá technologii blockchainu a funguje decentralizovaně, přímo mezi lidmi. Whitepaper, který Nakamoto napsal a v němž tento koncept vysvětlil, by si měl přečíst každý, kdo chce pochopit bitcoin a kryptoměny obecně. Nevysvětluje totiž jen bitcoin jako myšlenku, ale i to, jak může systém odolný vůči byzantským chybám fungovat v decentralizovaném prostředí.

Především by měl každý, kdo se o Bitcoin zajímá, vědět, že tím největším faktorem, díky němuž koncept bitcoinu ožil, je technologie blockchainu — a měl by pochopit, jak tato technologie funguje.

Co je blockchain?

Blockchain je řetězec bloků, z nichž každý obsahuje data, a nedohlíží na něj ani jej neřídí žádná centrální autorita. Tyto řetězce informací jsou kryptograficky zabezpečené a díky své decentralizované struktuře je nelze umlčet. Blockchain v zásadě používá dvě datové struktury: ukazatele (pointery) a spojové seznamy.

Ukazatele

Ukazatele jsou proměnné, které udávají, kde se nachází jiná proměnná. Za normálních okolností proměnné v programování obsahují data. (V příkladu int a = 10 má celočíselná proměnná a hodnotu 10.) Ukazatel naproti tomu žádnou hodnotu neuchovává — místo toho ukazuje na adresu proměnné, která daná data drží.

Spojové seznamy

Spojové seznamy patří mezi nejdůležitější jednotky datových struktur a zhruba vypadají takto.

Posloupnost bloků, z nichž každý obsahuje určitá data a pomocí ukazatele je propojen s dalším blokem. Proměnná ukazatele obsahuje adresu následujícího uzlu, a tím zajišťuje spojení. Jak jsme viděli u koncového uzlu, poslední ukazatel neobsahuje žádná data.

Důležité je, že každý ukazatel obsahuje adresu následujícího bloku. Kde je tedy ukazatel na první blok? První blok se nazývá genesis blok a jeho ukazatel je uvnitř samotného systému.

Hashový ukazatel je ukazatel, který obsahuje hash předchozího bloku.

Hash je proces, který vezme data libovolné délky a pomocí určité funkce z nich bez ohledu na jejich obsah vytvoří výsledek vždy stejné délky. U Bitcoinu se jako data bere převodní transakce a ta se prožene algoritmem SHA-256, který vytvoří výsledek pevné délky. Bez ohledu na délku vstupu vrací algoritmus SHA-256 vždy výsledek dlouhý 256 bitů.

Blockchain je ve své nejjednodušší podobě spojový seznam, jak ukazuje obrázek níže.

Blockchain je spojový seznam, v němž každý blok obsahuje data a hashový ukazatel odkazující na blok, který mu předchází. Co je tedy hashový ukazatel? Hashové ukazatele se velmi podobají běžným ukazatelům, jenže kromě adresy předchozího bloku obsahují také hash dat v tomto bloku. Právě tento malý rozdíl v uspořádání dělá technologii blockchainu tak bezpečnou.

Předpokládejme na chvíli, že útočník chce zaútočit na blok 3 a změnit data v něm. Kvůli vlastnostem hashovací funkce se i ta nejmenší změna dat projeví ve výsledku jako neuvěřitelně velký rozdíl. Sebemenší zásah do dat v bloku 3 změní hash uložený v bloku 2, změna v bloku 2 ovlivní hash v bloku 1, a celý řetězec by se tak musel přepsat, což je nemožné. Právě proto blockchain nelze umlčet.

Co je těžba?

Těžba je proces nutný k vytváření nových bitcoinů. Těžba bitcoinu funguje na principu Proof of Work — POW. Zjednodušeně řečeno: vyřešit úlohu má být velmi obtížné, ale jakmile ji vyřešíte, správnost vašeho řešení musí jít ověřit velmi snadno.

Než se dostaneme k tomu, jak Bitcoin POW jako koncept využil, zkusme pochopit, proč kryptoměny takový systém vůbec potřebují.

Před Bitcoinem vznikly různé digitální měny, jenže když v digitálním prostředí vytváříte decentralizovanou síť fungující přímo mezi lidmi, největším problémem je logický hlavolam zvaný problém byzantských generálů. A protože se Nakamotovi podařilo tento problém v bitcoinu vyřešit pomocí POW, mohl bitcoin začít žít a daří se mu dodnes.

Problém byzantských generálů

Pokračujme vysvětlením problému byzantských generálů, který se často objevuje i v akademických pracích. Byzantští generálové plánující útok na nepřátelské město mají dva problémy:

Generálové jsou od sebe velmi daleko, takže není možné, aby obléhání řídila jedna centrální autorita.

Nepřítel má také silnou armádu, takže úspěchu lze dosáhnout jen tehdy, když všichni generálové zaútočí ve stejnou chvíli.

Zatímco obléhající armády obkličují město, každá z nich předává rozkaz od armády po své pravici armádě po své levici a takto se udržuje komunikace. Problém je ale v tom, že když přijde rozkaz „útočíme ve středu“, některá armáda nemusí být připravena a pošle zpět zprávu: ne, útok v pátek. Nebo může být voják se zprávou zajat nepřítelem, případně může být obsah zprávy pozměněn. V takto nedůvěryhodném prostředí každý útok selže, pokud se nepodaří dokonalá koordinace.

Tentýž logický problém se týká i blockchainových sítí, které tvoří infrastrukturu kryptoměn, jako je bitcoin. Jde o neuvěřitelně rozsáhlé sítě — jak můžeme důvěřovat každému jednotlivci v nich? Chceme někomu poslat 4 ethery, ale jak si můžeme být jistí, že z toho někdo se zlým úmyslem neudělá 40 etherů?

Satoshimu Nakamotovi se tento logický problém podařilo vyřešit zavedením protokolu proof of work. Podívejme se, jak funguje:

Když chce obléhající armáda předat armádě po své levici zprávu „útočíme v pondělí“, musí projít těmito kroky;

Nejprve se původní zprávě přiřadí náhodná, jednorázově vygenerovaná hodnota zvaná „nonce“. Nonce může být jakákoli hodnota v šestnáctkové soustavě.

Poté se text zprávy s přiřazenou hodnotou nonce prožene hashovací funkcí a získá se výsledek. V tomto smyšleném útoku předpokládejme, že se velitelé dohodli, že si mezi sebou budou bezpečně sdílet jen ty výsledky hashovací funkce, jejichž prvních 5 znaků tvoří nuly.

Pokud výsledek hashovací funkce odpovídá požadavku, předají zprávu dalšímu generálovi. Pokud výsledek neodpovídá, je nutné náhodně změnit přiřazenou hodnotu nonce a proces opakovat, dokud nevznikne výsledek začínající pěti nulami. Takový systém vyžaduje neuvěřitelně dlouhý čas a hodně výpočetního výkonu.

Pokud je voják se zprávou zajat nebo se obsah zprávy změní, hash se kvůli vlastnostem hashovací funkce zásadně promění. Generálové si při kontrole zprávy všimnou, že prvních pět znaků hashe nejsou nuly, a od útoku ustoupí.

Ačkoli je to velmi nepravděpodobné, každá hashovací funkce může vytvořit kolidující výsledky. Teoreticky by u dvou různých vstupů A a B nemělo být možné, aby platilo H(A) = H(B), ale v reálném nasazení není žádná hashovací funkce zcela odolná vůči kolizím.

Co se tedy stane v tomto nepravděpodobném případě, kdy je voják se zprávou zajat, zpráva pozměněna a hash přesto vyjde přesně tak, jak generálové očekávají? Byl by to samozřejmě časově náročný proces, ale není nemožný. Proti tomu generálové využívají svou početní převahu.

Tento problém lze překonat tak, že místo jednoho generála, který postupně předává zprávu zprava doleva, pošlou zprávu doleva tři generálové současně. Pokud generálové ze svých vlastních zpráv vytvoří jednu souhrnnou zprávu, proženou ji hashovací funkcí, výsledku přiřadí hodnotu nonce a znovu jej vloží do hashovací funkce, musí tentokrát prvních šest znaků výsledku tvořit nuly.

V této fázi už je najít nonce takové zprávy a změnit její obsah vážnou ztrátou času.

Úkol generálů, kteří zprávu přijímají, je naproti tomu snadný; stačí přidat k hashi hodnotu nonce, kterou dostali, a porovnat výsledky. Tento krok je velmi rychlá a jednoduchá operace. A právě tato myšlenka je mechanismem principu proof of work.

Najít hodnotu nonce pro odpovídající hash vyžaduje obrovský výpočetní výkon a čas

Naproti tomu prohlédnout si výsledky a zjistit, zda tu není zlý úmysl, zabere jen velmi málo času.

Přesně takto těžaři uplatňují protokol proof of work při těžbě Bitcoinu. Svým výpočetním výkonem řeší kryptografickou úlohu, která je před nimi, a vytvářejí další blok. V bitcoinovém blockchainu vzniká blok každých 10 minut.

Jak probíhají převody v bitcoinové síti?

Řekněme, že John chce poslat Daveovi nějaké bitcoiny. Jak takový převod proběhne? Bitcoinové převody fungují úplně jinak než převody fiat peněz. Kdyby chtěl John dát Daveovi 10 USD, fyzicky by vytáhl bankovku z peněženky, podal mu ji a převod by byl hotový. U bitcoinu je to jiné — není to nic, co bychom fyzicky vlastnili. Co máme, je důkaz, že bitcoin vlastníme.

Jsou dvě věci, které bychom měli vědět a mít na paměti;

Těžaři potvrzují a zabezpečují převodní transakce daty, která umístí do bloku, jejž vytvářejí. Za tuto službu si účtují poplatek.

U fiat měn neznáme a nesledujeme historii žádné bankovky, kterou máme v ruce. Neexistuje na to praktický způsob. U bitcoinu je naproti tomu každý převod zaznamenán v síti.

Ve světle těchto informací se podívejme na bitcoinový převod mezi Johnem a Davem. Ten má dvě části; vstup a výstup (input–output).

Aby John mohl převod provést, musí mít bitcoiny z předchozích převodů. Jak jsme uvedli, všechny převody se zaznamenávají v bitcoinové síti.

John musí posbírat bitcoiny z převodů, které dříve obdržel pod označením TR(0), TR(1) a TR(2), vytvořit z nich nový převod s názvem TR(INPUT) a poslat jej Daveovi. TR(INPUT) se tak stává vstupními daty nového převodu.

Zhruba takto vypadá bitcoinový převod z pohledu vstupu.

Výstupní data budou jednoduše obsahovat množství bitcoinů, které má mít Dave po novém převodu, a zbývající drobné, které se vracejí Johnovi jako hodnota TR(INPUT) v jeho příštím převodu.

Pokud nepočítáme část s drobnými, obsahuje tento proces jediný výstup, ale jsou možné i převody s několika výstupy. Toto vyprávění jednoduše ukazuje, jak probíhá převod v bitcoinové síti. Aby však vše proběhlo úspěšně, musí být splněny určité podmínky.

Podmínky, které musí převody splňovat:

TR(INPUT) > TR(OUTPUT). Vstupní převod musí být vždy větší než výstupní. U každého převodu se rozdíl mezi vstupem a výstupem (výstup + drobné) vyplácí těžařům jako poplatek. Tedy: Poplatek za těžbu = TR(INPUT) - (TR(OUTPUT) + DROBNÉ)

Na straně vstupu musí platit TR(0)+TR(1)+TR(2)=TR(INPUT). Jinými slovy, John musí mít dost bitcoinů na to, aby je Daveovi poslal. Pokud jich nemá dost na provedení transakce, těžaři převod odmítnou.

Nyní musí Dave prokázat, že je vlastníkem bitcoinů, které mu byly poslány. John svůj bitcoinový převod zašifroval Daveovým veřejným klíčem. Dave jej může otevřít jedině svým soukromým klíčem.

John zase musí prokázat, že má dost bitcoinů na to, aby je Daveovi poslal. Dělá to tak, že převod, který chce provést, podepíše svým soukromým klíčem. Kdokoli jej může otevřít Johnovým veřejným klíčem a ověřit, že skutečně má potřebné množství bitcoinů. Tento důkaz se nazývá data podpisu.

Vstupní data (včetně dat podpisu) a výstupní data se sečtou a proženou hashovacím algoritmem SHA-256. Výstup tohoto algoritmu se nazývá převod.

Jednu věc je třeba mít na paměti: aby k bitcoinovému převodu došlo, musí těžař, který vytěžil blok, tento převod do bloku fyzicky vložit. Těžař, který blok vytěžil, může získat poplatky za všechny převody, jež do bloku zahrnul. Jak objemy převodů časem rostou, musí převody čekat na nový blok, protože bloky jsou zcela zaplněné. Ti, kdo čekat nechtějí, platí vyšší poplatek za těžbu, díky čemuž jejich převod vyčnívá a je pro těžaře přitažlivější.

Odtud pochází princip replace-by-fee. Funguje jednoduše takto: I když John poslal Daveovi 5 BTC, transakce se do bloku nikdy nedostane a zůstane čekat, protože poplatek za těžbu je nízký. Vrátit ji ani zrušit nelze, protože utracené bitcoiny nejde získat zpět. Pokud však John provede převod na stejnou adresu ve stejné výši BTC a nastaví vyšší poplatek za těžbu, starý převod se považuje za neplatný a na zpracování čeká ten nový.

Budoucnost Bitcoinu a kryptoměn obecně je plná nespočtu možností. Aplikace blockchainu neznají hranic a projekty v tomto oboru jsou den ode dne úspěšnější a bezpečnější.

Na cestě od komoditních peněz přes používání drahých kovů, jako je zlato a stříbro, až k papírovým a nominálním měnám není myšlenka peněz ve virtuálním prostředí nijak zvlášť nová — použitelnou se ale stala až v nedávné historii.

Podle jedněch jde o skupinu v CIA, podle jiných o mimozemšťana, a možná je to skutečně kyberpunk Satoshi Nakamoto. Ať je to kdokoli, nechal na nás, abychom se rozhodli, co dál s jeho myšlenkami a jejich uskutečněním, které zcela promění pohled na naše aktiva i způsob, jak je uchováváme. Otevřel cestu nápadům pokročilejším, než byl ten jeho, a přesvědčil svět, aby se na věc podíval úplně jinak.

Satoshi nezapomněl ukrýt zprávu do genesis bloku, který vytěžil a napsal natvrdo do kódu. Zaznamenal datum 3. ledna 2009 a připojil titulek z britského deníku Times z toho dne, týkající se bank odpovědných za celosvětovou hospodářskou krizi: „Ministr je na pokraji druhé záchranné pomoci bankám“. Těmi slovy si nejspíš utahoval z centrálního bankovnictví. Proč Satoshi v prvním bloku vytvořil tuto adresu, z níž nelze utrácet, není známo. Dosud na ni bylo anonymně odesláno 16 BTC, a proto celková zásoba 21 milionů bitcoinů ve skutečnosti nikdy nenastane.

Bitcoinu stačilo pouhých 9 let, aby dosáhl úrovní, které nahánějí strach centrálním bankám celého světa — a čeká ho ještě dlouhá cesta.

Bitcoin Jak funguje Bitcoin Satoshi Satoshi Nakamoto Nakamoto kryptoměny blockchain Co je blockchain Těžba Co je těžba Bitcoinová síť