Poznámka: Tato stránka je značně zastaralá a z velké části neudržovaná; kvůli dřívějším incidentům s editací nebyla příliš podrobena vzájemnému hodnocení.

Plný uzel Bitcoinu by mohl být upraven tak, aby škáloval na mnohem vyšší rychlosti transakcí, než jaké jsou dnes k vidění, za předpokladu, že uvedený uzel běží na špičkových serverech, nikoli na stolním počítači. Bitcoin byl navržen tak, aby podporoval lehké klienty, kteří zpracovávají pouze malé části blokového řetězce (více informací o tom najdete níže ve zjednodušeném ověřování plateb).

Vezměte prosím na vědomí, že tato stránka existuje proto, aby poskytla výpočty o škálovatelnosti plného uzlu Bitcoinu a transakcí v blokovém řetězci bez ohledu na bezpečnost sítě a decentralizaci. Jejím účelem není diskutovat o škálovatelnosti alternativních protokolů nebo se snažit shrnout filozofické debaty. Pokud se tomu chcete věnovat, vytvořte si alternativní stránky.

Poznámka pro čtenáře

Když technici slyší o tom, jak funguje bitcoin, často se zastaví u slova „flooding“ a řeknou: „Panebože, to přece nemůže škálovat!“. Účelem tohoto článku je vzít extrémní příklad, špičkovou rychlost transakcí Visa, a ukázat, že bitcoin by mohl technicky dosáhnout takové rychlosti bez jakéhokoli pochybného zdůvodnění, změn v návrhu jádra nebo neexistujících překryvů. Jako takový je to pouze extrémní příklad – nikoliv plán, jak bude bitcoin růst, aby uspokojil širší potřeby (jako decentralizovaný systém je to veřejnost používající bitcoin, kdo rozhodne o tom, jak bitcoin poroste) – je to pouze argument, který ukazuje, že design jádra bitcoinu může škálovat mnohem lépe, než by inteligentní člověk na první pohled odhadl.

Dan správně kritizuje zde prezentovanou analýzu – poukazuje na to, že provoz v tomto měřítku by výrazně omezil decentralizovanou povahu bitcoinu: Pokud budete muset mít mnoho terabajtů diskového prostoru, abyste mohli provozovat „plně validující“ uzel, pak to bude dělat méně lidí a všichni, kteří to nebudou dělat, budou muset věřit těm, kteří to budou dělat poctivě. Zdá se, že Dan (podle jeho slajdů) zašel s tímto argumentem příliš daleko: zdá se, že naznačuje, že to znamená, že bitcoiny budou kontrolovány takovými centrálními bankami, které jsou dnes běžné. Jeho analýza selhává ze dvou důvodů (a druhý je chybou této stránky, která je trochu zavádějící):

První je, že i v astronomickém měřítku, které je zde prezentováno, je požadovaná kapacita v rámci možností (bohatých) soukromých osob a určitě by byla v nějaké budoucí době, kdy by taková kapacita byla potřeba. Systém, který staví soukromé osoby nebo alespoň malé skupiny soukromých subjektů na roveň centrálním bankám, lze jen stěží nazvat centralizovaným, i když by byl méně decentralizovaný než dnešní bitcoin. Systém by se také nemohl dostat do takového rozsahu, aniž by se uživatelé bitcoinu kolektivně dohodli na zvýšení maximální velikosti bloku, takže se nejedná o výsledek, ke kterému by mohlo dojít bez souhlasu uživatelů bitcoinu.

Druhé a nejdůležitější je, že zde popsané předpokládané škálování se zabývá tím, že bitcoin nahradí víza. To je špatné srovnání, protože bitcoin sám o sobě není dokonalou náhradou víza z důvodů zcela nesouvisejících se škálováním: Bitcoin například nenabízí okamžité transakce, kredit nebo různé mechanismy proti podvodům (které někteří lidé chtějí, i když ne všichni). Bitcoin je plnohodnotnější náhradou šeků, bankovních převodů, peněžních poukázek, zlatých mincí, CD, spořicích účtů atd. a v případě širokého rozšíření pravděpodobně nahradí i použití kreditních karet, kterým by tyto ostatní věci posloužily lépe, kdyby fungovaly lépe online.

Uživatelé bitcoinu někdy tuto skutečnost příliš rychle zamlčují, protože lidé ji příliš rychle označují za vadu, ale to je nespravedlivé. Žádný systém není ideální pro všechna použití a Bitcoin má širší spektrum vlastností než většina peněžních nástrojů. Pokud bitcoinová komunita není ochotna poukázat na to, že některé věci by lépe řešily jiné systémy, pak se snadno stává, že se objeví argumenty typu strawman:

Je triviální vybudovat systémy zpracování plateb a kreditní systémy _nad_ bitcoinem, a to jak klasické (jako je samotná Visa!), tak „decentralizované“, jako je Lightning. Tyto systémy by mohly zpracovávat vyšší objemy transakcí s nižšími náklady a často se vyrovnávat s bitcoinem, který je podporuje. Mohly by využívat jiné techniky s jinými kompromisy než bitcoin, ale stále by byly podporovány a denominovány bitcoinem, takže by si stále užívaly jeho nedostatku centrální kontroly. Počátky toho vidíme již dnes u bitcoinových směnáren a peněženkových služeb umožňujících okamžité platby mezi členy.

Tyto služby by získaly výhodu stabilní měny bitcoin odolné vůči inflaci, uživatelé by získali výhody okamžitých transakcí, kreditu a ochrany proti podvodům, bitcoin celkově by se těšil lepšímu škálování z vyloženého objemu transakcí, aniž by byla ohrožena jeho decentralizovaná povaha. Ve světě, kde by byl bitcoin široce používán, by systémy zpracování plateb měly pravděpodobně nižší ceny, protože by musely konkurovat transakcím se surovým bitcoinem, mohly by si také dovolit nižší cenu, protože časté vypořádání bitcoinů (a transakce s nulovou důvěrou v bitcoinovou úschovu) by snížily jejich riziko. To platí dvojnásob, protože bitcoin by se pravděpodobně mohl škálovat tak, aby je zcela nahradil, i když by to nebyl nejlepší nápad kvůli výslednému snížení decentralizace.

Cíle škálovatelnosti

VISA zpracovává v průměru kolem 2 000 transakcí za sekundu (tps), takže říkejme tomu denní špička 4 000 tps. Její špičková kapacita je přibližně 56 000 transakcí za sekundu, ve skutečnosti však nikdy nevyužívá více než zhruba třetinu této kapacity, a to ani v období nákupní špičky.

PayPal naproti tomu koncem roku 2014 zpracoval přibližně 10 milionů transakcí denně při průměrné rychlosti 115 tps.

Vezměme si jako výchozí cíl 4 000 tps. Je zřejmé, že pokud bychom chtěli Bitcoin škálovat na všechny ekonomické transakce po celém světě, včetně hotovosti, bylo by to mnohem více, možná spíše v řádu několika set tisíc tps. A potřeba být schopen odolat útokům DoS (s nimiž se VISA nemusí potýkat) znamená, že bychom chtěli škálovat daleko nad rámec standardních špičkových rychlostí. Přesto nám výběr cíle umožní provést několik základních výpočtů, i když je to trochu libovolné.

Dnes je síť Bitcoin omezena na trvalou rychlost 7 tps kvůli tomu, že bitcoinový protokol omezuje velikost bloku na 1 MB.

CPU

Protokol má dvě části. Uzly posílají ostatním uzlům zprávy „inv“, kterými jim oznamují, že mají novou transakci. Pokud přijímající uzel tuto transakci nemá, vyžádá si ji pomocí zprávy „getdata“.

Velké náklady představuje kryptografické vyhledávání a vyhledávání v blokovém řetězci spojené s ověřením transakce. Ověření transakce znamená nějaké hashování a nějaké ověření podpisu ECDSA. RIPEMD-160 běží rychlostí 106 megabajtů/s (pro jednoduchost říkejme 100) a SHA256 je na tom přibližně stejně. Takže hašování 1 megabajtu by mělo trvat asi 10 milisekund a hašování 1 kilobajtu by trvalo 0,01 milisekundy – dost rychle na to, abychom to mohli ignorovat.

Bitcoin je v současné době schopen (s několika jednoduchými optimalizacemi, které jsou prototypové, ale ještě nejsou sloučené) provést asi 8000 ověření podpisu za sekundu na čtyřjádrovém procesoru Intel Core i7-2670QM 2,2Ghz. Průměrný počet vstupů na transakci je přibližně 2, takže musíme snížit rychlost na polovinu. To znamená, že 4000 tps je snadno dosažitelných z hlediska procesoru s jedním poměrně mainstreamovým procesorem.

Jak vidíme, znamená to, že pokud je uzlům Bitcoinu umožněno maximálně využít alespoň 4 jádra strojů, na kterých běží, nedojde nám kapacita procesoru pro ověřování podpisů, pokud Bitcoin nezpracovává 100krát větší provoz než PayPal. Od konce roku 2015 síť zpracovává 1,5 transakce za sekundu, takže i za předpokladu enormního růstu popularity této úrovně ještě dlouho nedosáhneme.

Bitcoin samozřejmě dělá i jiné věci než jen kontrolu podpisů, nejzřejměji správu databáze. Používáme LevelDB, která dělá většinu těžké práce v samostatném vlákně a je schopná velmi vysokého zatížení při čtení/zápisu. Celkovému využití procesoru Bitcoinu dominuje ECDSA.

Síť

Předpokládejme průměrnou rychlost 2000tps, tedy jen VISA. Velikost transakcí se pohybuje od zhruba 0,2 kilobajtu do více než 1 kilobajtu, ale dnes je to v průměru půl kilobajtu.

To znamená, že je třeba udržet krok s přibližně 8 megabity/sekundu transakčních dat (2000tps * 512 bajtů) / 1024 bajtů v kilobajtu / 1024 kilobajtů v megabajtu = 0,97 megabajtu za sekundu * 8 = 7,8 megabitů/sekundu.

Taková šířka pásma je dnes již běžná i pro připojení domácností a rozhodně je na spodní hranici toho, co by vám poskytovatelé kolokace měli poskytnout.

Když jsou bloky vyřešeny, současný protokol odešle transakce znovu, i když je peer již viděl v době vysílání. Oprava tak, aby bloky byly jen seznamem hashů, by tento problém vyřešila a šířka pásma potřebná pro vysílání bloků by byla zanedbatelná. Takže i když tato optimalizace není dnes plně implementována, neuvažujeme zde o šířce pásma pro přenos bloků.

Uložení

Při velmi vysokých rychlostech transakcí může mít každý blok velikost přes půl gigabajtu.

U většiny plně validujících uzlů není nutné ukládat celý řetězec. Satoshi ve svém článku popisuje „prořezávání“, tedy způsob, jak odstranit nepotřebné údaje o plně utracených transakcích. Tím se sníží množství dat, které je potřeba pro plně validující uzel, na pouhou velikost aktuální velikosti neutraceného výstupu plus nějaká další data, která jsou potřeba pro zpracování re-orgace. K říjnu 2012 (blok 203258) proběhlo 7 979 231 transakcí, nicméně velikost nespotřebované výstupní sady je menší než 100 MB, což je dostatečně malá velikost, aby se snadno vešla do paměti RAM i na poměrně staré počítače.

Pouze malý počet archivačních uzlů potřebuje uchovávat celý řetězec sahající zpět ke genetickému bloku. Tyto uzly lze použít k zavádění nových plně validních uzlů od nuly, ale jinak jsou zbytečné.

Primárním limitujícím faktorem výkonu Bitcoinu je vyhledávání na disku, jakmile se sada výstupů nespotřebovaných transakcí přestane vejít do paměti. Jakmile budou pevné disky postupně vyřazeny ve prospěch SSD, je docela dobře možné, že se přístup k sadě UTXO nikdy nestane vážným úzkým hrdlem.

Optimalizace

Výše uvedený popis platí pro současný software s předpokládanými pouze drobnými optimalizacemi (takovými, které může provést a provedl jeden člověk za několik týdnů).

V budoucnu je však možné provést ještě větší optimalizace za cenu určité dodatečné složitosti.

CPU

Existují algoritmy pro urychlení dávkového ověřování nad podpisy eliptických křivek. Je možné kontrolovat jejich podpisy současně pro dvojnásobné zrychlení. Jedná se o poněkud složitější implementaci.

Zjednodušené ověřování plateb

Je možné vytvořit implementaci Bitcoinu, která neověřuje vše, ale spoléhá se buď na připojení k důvěryhodnému uzlu, nebo vkládá důvěru ve vysokou obtížnost jako zástupný důkaz platnosti. Implementací tohoto režimu je bitcoinj.

V režimu zjednodušeného ověřování plateb (SPV), pojmenovaném podle části Satoshiho článku, která jej popisuje, se klienti připojují k libovolnému plnému uzlu a stahují pouze hlavičky bloků. Ověřují, zda se hlavičky řetězců správně spojují dohromady a zda je obtížnost dostatečně vysoká. Poté si vyžádají transakce odpovídající určitým vzorům od vzdáleného uzlu (tj. platby na své adresy), který poskytne kopie těchto transakcí spolu s Merklovou větví spojující je s blokem, ve kterém se objevily. To využívá strukturu Merkleho stromu k tomu, aby bylo možné prokázat zařazení, aniž by bylo nutné znát celý obsah bloku.

Jako další optimalizace mohou být hlavičky bloků, které jsou pohřbeny dostatečně hluboko, po určité době zahozeny (např. skutečně stačí ukládat až 2016 hlaviček).

Úroveň obtížnosti potřebná k získání jistoty, že vám vzdálený uzel nepodává fiktivní transakce, závisí na vašem modelu ohrožení. Pokud se připojujete k uzlu, o kterém je známo, že je spolehlivý, na obtížnosti nezáleží. Pokud si chcete vybrat náhodný uzel, náklady útočníka na vytěžení sekvence bloků obsahující falešné transakce by měly být vyšší než hodnota, kterou získá tím, že vás podvede. Změnou toho, jak hluboko musí být blok zakopán, můžete vyměnit čas potvrzení za náklady na útok.

Programy implementující tento přístup mohou mít pevnou režii ukládání/sítě v nulovém případě nepoužívání a využití zdrojů úměrné přijatým/odeslaným transakcím.

Viz také:

Související práce

Existuje několik návrhů na optimalizaci škálovatelnosti Bitcoinu. Některé z nich vyžadují alt-chain / hard fork.

  • Konečná komprese blockchainu – myšlenka, že blockchain lze komprimovat, aby se dosáhlo „trust-free lite nodes“
  • Dokument Finite Blockchain, který popisuje rozdělení blockchainu na tři datové struktury, z nichž každá je vhodnější pro svůj účel. Těmito třemi datovými strukturami jsou konečný blockchain (uchovává N bloků do minulosti), „strom účtů“, který uchovává zůstatek účtu pro každou adresu s nenulovým zůstatkem, a „řetězec důkazů“, který je (stále rostoucí) zeštíhlenou verzí blockchainu.
  • Lightning Network, alternativní protokol pro zúčtování transakcí, ve kterém uzly mezi sebou zřizují mikroplatební kanály a občas se vyrovnávají na blockchainu. Běžní uživatelé komunikují především nebo pouze s platebními kanály a blockchain používají pouze pro velké převody a chladicí úložiště.

admin

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

lg