Bitcoin běží od roku 2013 bez jediného výpadku. Nedochází u něj k žádným pravidelným odstávkám z důvodu upgradu, jak vám měsíc co měsíc píší banky. Přesto se ani jemu problémy nevyhnuly, byť se to dělo jen v jeho začátcích. Kolik zásadních problémů bylo a co se stalo?

V historii Bitcoinu existují pouze dva roky, které neměly “uptime” 100 %. Těmi problémovými jsou roky 2010 a 2013.

Miliardy nových bitcoinů v roce 2010

První výpadek Bitcoinu v srpnu 2010 byl způsoben integer overflow chybou v kódu, která umožnila vytvořit miliardy bitcoinů mimo limit 21 milionů mincí. Došlo k tomu v bloku 74638, kde vstup transakce ve výši 0,5 BTC vytvořil výstupy o velikosti 184 467 440 737,09551616 BTC odeslané na tří adresy (dvě po ~92 miliardách bitcoinů a třetí za 0,01 BTC).

Co se stalo?

Kód Bitcoinu kontroloval součet výstupů transakce proti vstupu, ale používal 64bitový signed integer (int64), kde při součtu velkých výstupů došlo k přetečení do záporné hodnoty, což prošlo validací.

Laické vysvětlení

V Bitcoinu platí u transakcí pravidlo: kolik peněz dáte dovnitř (input), tolik maximálně můžete vyplatit ven (výstupy). V tomto případě útočník vložil 0,5 BTC (50 milionů satoshi) a pak navrhl výstupy tak obrovské (každý po desítkách miliard BTC), že jejich součet překročil hranici, kterou program dokázal správně zpracovat v daném „počítadle“ (64bitové číslo).

Součet pak přetekl (overflow) a místo obrovského kladného čísla se stal malým záporným číslem. To pak prošlo kontrolou, protože součet výstupů byl záporný, tedy menší než vstup 0,5 BTC a transakce byla tím pádem platná. Tak vzniklo 184 miliard bitcoinů z ničeho.

Řešení

Do 5 hodin Satoshi Nakamoto a Gavin Andresen vydali patch (commit d4c6b90), který odmítá transakce s přetečeným výstupem nebo výstupy většími než 21 milionů BTC. Síť se rozdělila – „špatný“ chain pokračoval na blocích z 74638, ale „dobrý“ chain ho díky většině upgradovaných uzlů předběhl na bloku číslo 74691. Špatná transakce tak z historie na blockchainu zmizela.

Tip

Kde koupit bitcoin?

Zkuste zdejší směnárnu ⭐️⭐️⭐️⭐️⭐️️
Bez registrace a rovnou do vaší peněženky

Koupit bitcoin

Hádka uzlů v roce 2013

Druhý výpadek Bitcoinu proběhl 11. března 2013 a trval asi 6,5 hodiny. Způsobila ho nekompatibilita mezi verzemi Bitcoin Core 0.7 a 0.8, což vedlo k dočasnému rozdělení blockchainu na dvě verze.

Technická příčina

Problém nastal při optimalizaci kódu verze 0.7: změnil se způsob serializace (ukládání dat do bloku) u transakcí s časovými zámky (nLockTime) a velikostí bloku (nTime). Uzly jedoucí na verzi 0.8 validovaly bloky podle starých pravidel a odmítaly nové bloky jako neplatné, zatímco uzly na verzi 0.7 je přijímaly. Výsledkem byly dva oddělené chainy – delší na verzi 0.7 a kratší na 0.8.

Zjednodušeně řečeno se stalo to, že do té doby zapisovali všichni do účetní knihy položky podle stejných pravidel. Najednou nová verze softwaru začala psát částky trochu jinak – nezměnila je úplně, ale formát zápisu (serializace) byl trochu jiný. Starší uzly to ale nepochopily a řekly si, že jsou to nevalidní transakce a zahazovaly je.

Nakonec ale většina uzlů upgradovala na novou verzi Bitcoin Core, přijala delší řetězec a starý zmizel. Žádné peníze se sice neztratily, ale při tomto problému už reagovala i cena bitcoinu. Strach z technických problémů sítě vyvolal paniku mezi investory, což zesílilo prodejní tlak a cena výrazně klesla – přibližně o 23 % z 48 dolarů na 37 dolarů. Obnova důvěry ale trvala jen pár hodin s cena se rychle zotavila.

Hardforky Bitcoinu

V minulosti došlo ještě k několika hardforkům, kdy se blockchain rozdělil na dva. Nešlo už ale o žádné výpadky, ale o snahu části komunity “vylepšovat” Bitcoin směrem, se kterým většina nesouhlasila. Neúspěšní vylepšovatelé si tak udělali vlastní verzi Bitcoinu, kde své úpravy prosadili a pod nejrůznějšími názvy se pokoušeli provozovat “lepší” Bitcoin. Asi nejznámější je Bitcoin Cash nebo Bitcoin Satoshi Vision. Žádný z nich ale nebyl úspěšný a nyní živoří v zapomnění.

Čtěte dále:

Líbilo? Pomohl vám článek?

Dejte to najevo pár satoshi. Potěší mě libovolná částka.

Ukázat adresu