CZ překlad:
Škálování blockchainu a jak se k tomu staví Cardano
Veřejné konsensuální distribuované sítě (blockchain) obecně bojují o vyšší adopci. Vyšší adopce je kriticky závislá na schopnosti protokolu více škálovat. Pojďme si laicky vysvětlit co to škálování přesně je, jaké jsou rozdíly mezi PoW a PoS a jak se k tomu staví Cardano.
JAK DEFINUJEME ŠKÁLOVATELNOST
Standardní Wiki definice může znít takto:
Škálovatelnost je schopnost jakéhokoliv systému zvládnout rostoucí množství práce přidáním dalších zdrojů do systému.
Škálovatelnost je schopnost zvládat vyřizování většího množství požadavků s rostoucí uživatelskou základnou. Růst uživatelů často dosahuje bodu, kdy je třeba přidat zdroje (nový hardware), aby se kvalita služeb udržela na očekávané úrovni. Požadavek na zvýšení škálovatelnosti často znamená další náklady.
Jen málo služeb nebo protokolů je od počátku budováno pro masovou adopci. Úspěch služby je obtížné dopředu předvídat. Počet budoucích uživatelů se dopředu odhaduje jen těžko. Služba se tedy často jen spustí a čeká se, co přijde. Jakmile se služba stává populárnější, uživatelé se mohou setkat se zpomalením systému. Je to proto, že počet uživatelů roste a stávající hardware je přetížen a nezvládne zvládat nové požadavky. Dané řešení má jen omezené schopnosti.
Zkusme jednu analogii z reálného světa. Představte si úředníka na poště. Úředník zvládne odbavit 10 zákazníků za hodinu. Díky osmihodinové pracovní době je to 80 zákazníků denně. Pokud přijde na poštu 50 lidí denně, bude úředník praci v pohodě stíhat. Jakmile přijde 100 lidí denně, úředník se nezastaví. Jakmile však na poštu dorazí 200 lidí denně, úředník nemůže nápor práce zvládnout. Zákazníci nebudou spokojeni a úředník pravděpodobně onemocní.
Práci úředníka můžete považovat za síťovou kapacitu, která zvládne odbavit určitý počet uživatelů denně. Přemýšlejte o zákaznících jako o transakcích. Výkon sítě tak může být měřen podle počtu transakcí zpracovaných za dané časové období, jako je třeba počet spracovaných transakcí za sekundu (TPS). Podle naší analogie by to byl počet zákazníků za den (CPD).
V tradičním světě centralizovaných síťových služeb (klient-server) se hardware může škálovat vertikálně a horizontálně. Vertikální škálování znamená přidání většího výpočetního výkonu a paměti do systému. Horizontální škálování zahrnuje přidání nových nodů do systému, které budou provádět stejnou práci. Výkon se tak násobí. Škálovat se dá horizontálně i vertikálně současně.
V naší analogii můžeme úředníkovi pomoc nákupem rychlejšího počítače, použitím rychlejší databáze nebo nahrazením tradičního psacího stroje počítačem. To by bylo vertikální škálování. Nebo můžeme škálovat horizontálně, což by vyžadovalo zaměstnávání dalšího úředníka. V případě horizontálního škálování by jeden úředník dokázal navíc odbavit asi jen o 20 zákazníků víc a dosáhl by na 100 spokojeně odbavených zákazníků denně. V případě vertikálního škálování by dokázali dva úředníci zvládnout 160 zákazníků denně, tři úředníci 240 zákazníků atd.
PROBLÉMY SE ŠKÁLOVÁNÍM BLOCKCHAINU
Blockchain je postaven na distribuované síti, která vyžaduje většinový konsenzus pro změně dat. To velmi komplikuje škálovatelnost, protože rozhodnutí musí být v ideálním případě učiněno současně na několika místech zeměkoule a to v krátkém časovém období.
Vraťme se k naší analogii. Představte si, že všichni úředníci se musí setkat na konci dne, aby se navzájem podívali a ověřili si práci, kterou odvedli pro zákazníky. Každý jednotlivý dokument pro jednoho zákazníka by se potvrdil nebo odmítnul. V případě dvou úředníků by každý úředník musel kromě své práce zkontrolovat a schválit 80 dokumentů svému kolegovi. Představte si, že jedna chyba v dokumentech by měla za následek odmítnutí celodenní práce (analogie k transakcím v bloku, kde blok je celodenní práce). Nyní si představte, že tito úředníci nesedí v jedné kanceláři, ale musí si navzájem posílat dokumenty třeba poštou a poté poslat odpověď. Práce by byla velmi pomalá a přidání nového úředníka by jen zvýšilo složitost.
Přidání nového nodu do sítě nebo zvýšení jeho výkonu nemusí vůbec ovlivnit propustnost sítě. Výkon se může dokonce zhoršit, protože bude nutné dosáhnout konsensu mezi více entitami, což je vždy náročnější. Nody, které se účastní konsensu, jsou distribuovány globálně a potřebují data, aby se mohly rozhodnout. Distribuce dat po celém světě vyžaduje určitý čas. Protokol musí být navržen tak, aby minimalizoval požadavky na komunikaci.
V případě konsensuálních distribuovaných sítí je schopnost sítě a rychlost přenosu dat velkým omezením. Rozumně lze po celém světě distribuovat jen několik MB za desítky sekund. Současně, čím větší blok dat, tím pomalejší se šíří a celková rychlost sítě v daném návrhu může být omezena nejpomalejším nodem (tím nejvzdálenějším nebo se špatným internetovým připojením). Má-li být síť rychlá (mít rychlé transakce a finalitu bloku), je nutné usilovat o co nejnižší čas bloku.
Předpokládejme, že běžná transakce může mít 250 bajtů, takže 1 MB blok může obsahovat asi 4 000 transakcí. Pokud je čas bloku nastaven na 10 minut a převedeme to na transakce za sekundu, dostaneme 6,66 TPS. Pokud je čas bloku pouze 20 sekund, dostaneme 200 TPS při stejné velikosti bloku.
Čas bloku má přímý vliv na požadované místo pro uložení dat. Čím je čas bloku nižší, tím rychleji se zaplňuje úložiště. Pokud by bloky byly vždy plné, tak při čase bloku 10 minut naroste blockchain asi o 144 MB za den. V případě 20 vteřinového času bloku by to bylo 4.320 MB za den. Je zjevné, ne všichni budou schopni ukládat tak velké a rychle rostoucí množství dat. Proto je zapotřebí přistoupit k opatření, které vysoké nároky na úložiště zmenší. Do úvahy mohou připadat tyto metody: data pruning (ořezávání historie), subscriptions (např. držení dat pouze v rámci existence účtu), compression (zhušťování dat), partitioning (rozdělení dat na více celků, kde jednotlivé nody budou držet jen část blockchainu a v případě potřeby si zbytek stáhnout od ostatních nodů), sidechains, sharding (rozdělení konsensu sítě na více paralelních částí, tedy také rozdělení dat).
Některé konsensus protokoly fungují na bázi hlasování o přidání bloku v uzavřené skupině. Jeden náhodný node navrhne blok a zbývající nody (včetně navrhovatele) se zajímají o to, co si ostatní myslí o navrhovaném bloku, a na základě výsledků přidají nebo nepřidají blok do svého blockchainu. S počtem entit roste složitost. S počtem uživatelů objem dat, které se musí přenášet. Je proto nezbytné stanovit horní hranici počtu entit zapojených do konsensu. Jedním z dalších přístupů je koncept jednoho náhodně vybraného navrhovatele bloku mezi neomezeným počtem zájemců a dalších entit v roli schvalovatelů. Mezi nody neprobíhá složitá komunikace, proto počet nodů podílejících se na konsensu není omezen. Existují také jiné přístupy a některé dokonce s konceptem bloků nepracují. Bloky jsou velmi vhodné pro interní synchronizaci protokolů, ale nejsou podmínkou pro vytvoření konsensuální distribuované sítě.
BLOCKCHAINOVÉ TRILEMMA
Slavné blockchain trilemma je jednou z největších překážek škálování a většího využití blockchainu v praxi. Trilemma je v zásadě trojice vlastností, díky kterým můžeme posuzovat kvalitu distribuovaných sítí. Těmito vlastnostmi jsou škálovatelnost, míra decentralizace a bezpečnost.
V kontextu distribuovaných sítí, a zejména v případě blockchainu, projekty často používají výše popsaný koncept, kdy jedna náhodně vybraná entita navrhuje blok s transakcemi a všechny ostatní nody slouží jako kontrolní orgán v rámci daného kroku (pro daný blok). Právo na vytvoření bloku se náhodně rotuje mezi nody nebo pooly.
Stupeň decentralizace tak lze posoudit podle počtu entit, které mohou získat právo na zařazení transakcí do bloku a jeho produkce. Dále je možné posoudit počet nodů, které tyto bloky pouze validují a vloží do vlastního blockchainu. Je třeba poznamenat, že právo na vytvoření nového bloku je mnohem silnější než právo na validaci navrhovaných bloků, protože navrhovatelé bloků aktivně vytvářejí nové bloky, zatímco validátoři pouze sledují tuto aktivitu a nemohou rychle vytvořit blok v případě problému, nebo nějak aktivně zabránit problému, kvůli kterému blok sami nepřidali. Je potřeba si uvědomit, že na blok mohou navázat jen entity, které mají potřebné oprávnění v dané síti (často potřebný počet mincí či velký hashrate). Ve většině sítí nemůže blok vytvořit kdokoliv, komu se zachce. Samotné odmítnutí bloku full nodem z jejich pohledu nic neřeší. Sice mají aktuální verzi blockchainu, ale nemohou vidět žádné nové bloky. Je tak v jejich zájmu zařídit se tak, aby mohli rostoucí chain sledovat a to může vyžadovat nějaký čas na zjištění, co se vlastně děje. Pokud budou třeba pooly dále vytvářet bloky a full nody budou tyto bloky z nějakého důvodu odmítat, může to být pro síť jako celek problém.
Aby byl protokol považován za bezpečný, musí být odolný vůči útokům z krátkodobého hlediska a dlouhodobě neměnný z hlediska dlouhodobého. Protokol musí být schopen předcházet, případně zabránit krátkodobým útokům, nebo musí být schopen zotavení se, aniž by provedl změny v předchozích stavu ledgeru. Ledger musí zůstat za každých podmínek neměnný.
JAK ŠKÁLOVAT BLOCKCHAIN PROJEKTY
Jak vidíte, tým daného projektu musí dbát nejen o zlepšení škálovatelnosti, ale musí zůstat silný také v decentralizaci a bezpečnosti. Tým musí tyto vlastnosti dobře vyvážit. Proto je velmi obtížné zlepšit škálovatelnost. Tým musí vždy usilovat také o udržení vysoké úrovně decentralizace a bezpečnosti a tyto vlastnosti se mohou vzájemně omezovat. Design protokolu se s tím musí co nejlépe vypořádat a nepreferovat příliš jednu vlastnost na úkor druhých. Jeden protokol může být super bezpečný bez schopnosti škálovat, druhý bude podobně bezpečný a současně bude třeba 100x lépe škálovat. V budoucnosti se mohou uplatnit oba projekty a v tuto chvíli se nedá říct, jaké vlastnosti budou více preferované uživateli. Využití se také liší, takže platí, že uživatelé si vybírají nejvíce vhodný projekt pro daný problém. Obráceně to moc nefunguje. Pokud se daná síť pro řešení problému nehodí, nebude se zkrátka využívat, pokud existují vhodnější alternativy.
Snahy o zvýšení škálovatelnosti často vedou ke snížení decentralizace. Projekt s nízkou decentralizací lze jen stěží považovat za bezpečný. Decentralizace je klíčovým prvkem distribuovaných sítí. Právo vyrábět bloky by nemělo být nastaveno na nízký počet, jak je to vidět u řady DPoS projektů (např: 21 nodů v EOSu, 26 u Tronu). Nebo jinými slovy, může to tak být, ale otázkou je, do jaké míry lze systém považovat za decentralizovaný.
Některé projekty nemají omezený počet nodů schopných produkovat bloky, ale síť může mít tendenci ke zvyšování centralizace díky nerovnoměrnému, neřízenému či neomezenému delegování moci určitým entitám (většinou poolům). To lze vidět v projektech PoW a PoS. Pokud sítě pracují s konceptem poolů, kterým ostatní účastníci konsensu v síti delegují moc prostřednictvím hashrate nebo mincí. Zde je důležité, aby se projekty nějak vyrovnaly s potenciální rostoucí mocí poolů. Moc je vždy zneužitelná a je pouze otázoku času, kdy se to projeví.
Je tu ještě jeden aspekt. Pro dosažení vysoké propustnosti potřebuje síť výkonný hardware a ten musí být využíván rozumně. Pokud je počet nodů fixní, jako je tomu v případě DPoS, existuje tlak, aby byly tyto nody velmi výkonné. nody jsou tedy finančně dostupné pro omezenou skupinu lidí a síť může mít tendenci k vyšší centralizaci. Z pohledu decentralizace je chytré řešit škálování sítě tak, že zvyšováním počtu průměrných nodů se také navyšuje schopnost zpracovávat více transakcí. S rostoucím využíváním sítě je přirozené škálovat přidáním hardwaru. Současně však nasmí být obětována decentralizace. Dobře navržená distribuovaná síť by proto měla být tvořena velkým počtem nezávislých a finančně dostupných nodů, přičemž by měla být schopna zvýšit propustnost transakcí (tedy škálovat). A to je pro tým velká výzva.
PoW a PoS jsou velmi podobné systémy v tom smyslu, že lidé delegují moc na vybrané pooly. Majitelé poolů mají vlastní hashrate nebo mince, takže si mohou udržet svou pozici prostřednictvím svého bohatství. Obecně platí, že pokud máte moc, můžete snadno posílit svou pozici. V případě distribuovaných sítí tomu tak je, protože provozovatelé poolů získávají provizi za své služby.
Přidání full nodu do sítě PoW nezvyšuje schopnost zpracovávat více transakcí. Většina full nodů ověřuje pouze bloky, které pooly produkují. Přidáním dalšího ASIC mineru se síť stane více bezpečná a odolná vůči útokům skrze hashrate (známý 51% útok). Přidání full nodu nebo ASIC mineru zvyšuje pouze bezpečnost konsensu. Decentralizace nebo škálovatelnost se však nezvýší. Ba co víc, zvyžováním hashrate se síť více centralizuje, neboť ze systému dále vypuzuje menší těžaře.
Pokud jde o ekonomický model, pouze lidé s vlastním ASIC miner mají privilegium účastnit se konsensu a zabezpečení sítě, za což jsou odměňováni. Vlastníci full nodů nejsou sítí finančně odměňováni. Motivace ke spuštění vlastního full nodu je často pouze touha po větší finanční svobodě. To je však dobrá motivace a mnoho lidí to dělá.
V PoW jde většina hodnoty nových mincí na pokrytí nákladů na těžbu (platba za energii). Dnes je těžba centralizována ve velkých halách a domácí těžaři jsou vzácností. Nevýhodou PoW je, že provozovatel poolu je ekonomicky motivován ke zvyšování svého podílu moci, protože čím větší je míra hashrate, tím více odměn může pool získat. Neexistuje žádný horní limit velikosti poolu. Protože hashrate může neustále růst, je obtížné tento limit definovat. V rámci PoW sítě bývá založení nového poolu velmi drahé, pokud má pool získat třeba 5% podíl z celkové velikosti hashrate.
Jak asi víte, PoW je velmi bezpečný, protože se musí najít správný hash pro přidání bloku a to trvá v průměru 10 minut, kdy se po celou dobu konzumuje velké množství energie. Čas bloku je tak nedotknutelný. U PoW tak může tým zvážit pouze zvětšení velikosti bloku za účelem zvýšit škálování na první vrstvě, ale možnosti jsou dost omezené kvůli latenci sítě a udržení spravedlivosti nad utvářením konsensu. To znamená, že škálování na první vrstvě je pro sítě PoW téměř nemožné, nebo velmi omezené. Současně není příliš vysoká ani decentralizace a to díky existenci velkých poolů a neexistujího mechanismu, který by ekonomicky vedl k omezení jejich velikosti. Zvýšení škálovatelnosti PoW by znamenalo velké zásahy do designu protokolu. Nemožné to není, ale změně často brání složitost či nechuť se do změn vůbec pustit.
V sítích jako je Cardano, které využívá PoS, vlastní síť držitelé mincí - tedy stakeholdeři. To má výhody jak z hlediska decentralizace, tak z hlediska škálovatelnosti. Decentralizace sítě v podstatě přirozeně roste s tím, jak se mince více distribuují mezi stakeholdery. Tohle je velmi moudré, neboť se dá předpokládat, že mince se zkrátka budou v čase více rozmělňovat mezi uživateli. A protože konsenzus odměňuje nejen majitele poolů, ale také všechny majitele mincí, kteří je delegují na vybraný pool, jsou lidé ekonomicky motivováni k získání a držení těchto mincí. Vlastníci full nodů jsou také odměňováni sítí za jejich účast na konsensu, pokud delegují ADA mince poolu. Nutno však dodat, že to dělat nemusí a mohou používat třeba pěněženku Yoroi. Stejnou odměnu získají také bez udržování blockchainu.
PoS není nákladný systém, co se týče spotřeby energie, takže pokud je síť používaná a zpracovává velké množství transakcí, síť z poplatků snadno uživí sama sebe (náklady na provozo nodů + provize pool operátorům). Kromě toho bude také dostatek finančních prostředků na odměnu stakeholderů. Držení mincí tak může být profitabilní.
Chce-li se projekt vyhnout problému vytváření pouze několika velkých poolů, existuje koncept saturace poolů (řekněme nasycení mocí skrze delegované mince). Saturace je schopnost protokolu definovat požadovaný (ne vynucený) počet poolů a ekonomicky motivovat či podporovat tento požadavek. Pokud je požadavek nastaven na 1000, bude systém ekonomicky výhodný pro velký počet účastněných stran právě v případě, že bude existovat 1000 poolů stejné velikosti (těsně před saturací). Lidé si mohou aktivně vybrat pool podle poplatku provozovatele poolu, jeho pověsti, aktivitě v komunitě, velikosti či míře saturace a dalších parametrů.
Jeden subjekt vždy může nakoupit velké množství mincí a založit více poolů prostřednictvím svého vlastního bohatství (bez nutnosti spoléhat se na delegátory a jejich mince). Tomu nelze zabránit a v praxi to určitě uvidíme. Díky konceptu saturace však bude relativně snadné vytvořit nový pool. Například jen tisícina z počtu stakovaných mincí (použitých pro konsensus) bude stačit k založení nového poolu v plné síle.
Jak ještě uvidíte níže, co se týče škálovatelnosti, protokol je navržen v první fázi tak, že síť dává právo produkovat nový blok náhodně jednomu z 1000 poolů. Blok je pak rovnou šířen na další nody, které jej ověřují. Samotná distribuce bloku tedy současně slouží k jeho schválení ostatními nody v síti. Neexistuje žádná složitá debata mezi nody o přijetí bloku. Je to vlastně velmi podobné systému PoW. Jediný rozdíl je v tom, že Cardano síť rozhoduje o tom, kdo bude mít na starosti vytvoření a produkci bloku (rozhoduje o slot lídrech v dané epoše). Díky tomu se může zkrátit čas bloku na sekundy (20 sekund v test-netu Shelley). Nastavení saturačního bodu lze změnit a snadno zvýšit. V budoucnosti bude možné nastavit jej na 2000 nebo 5000, takže bude ekonomicky výhodné vytvořit více poolů. O změnách by se mělo hlasovat (samozřejmě by neměly hlasovat velryby, kterým může vyhovovat nižší číslo). To může systému poskytnout potřebný výpočetní výkon. Navíc s takto vysokým počtem nezávislých entit může být využit koncept shardingu a míra decentralizace tím nebude trpět.
Sharding je schopnost protokolu dospět k distribuované paralelní shodě. Představte si například, že síť je rozdělena do několika podsítí (shardů), ve kterých budou transakce schváleny, a nakonec síť zajistí, aby všechny shardy dosáhly validního konsensu. Sharding může být elegantním řešením škálovatelnosti první vrstvy a my si ho více popíšeme v našem dalším článku.
CARDANO CONSENSUS
V Cardano PoS můžeme sledovat následující konsensuální posloupnost:
-
Na začátku každé epochy rozhodne síť, kdo bude produkovat bloky v jednotlivých slotech (slot leader). Výběr je založen na výběru ADA mince, respektive síť ukáže na konkrétní Lovelace, která určí daný pool (pool, pro který je Lovelace delegováná, nebo ji vlastní majitel poolu).
-
Právě byl přidán poslední blok. Síť se přesune do následného slotu, takže nějaký nový node dostane právo na vytvoření bloku. Musí si to ale ověřit.
-
Na začátku každého slotu se nody zeptají, zda právě oni získali právo na produkci bloku v daném slotu. Pokud ho daný node získá, dostane také důkaz o získání tohoto práva.
-
Vybraný node může vytvořit blok a podepsat jej tak, aby ostatní nody dokázaly ověřit, že node produkují blok toto právo skutečně získal. Vybraný node nemusí z nějakého důvodu vytvořit blok, takže slot může zůstat prázdný. Žádný jiný node není schopen vyrobit platný blok v daném slotu, protože jej nemůže správně podepsat (nedostane od sítě právo, kterým by to dokázal).
-
Pokud vybraný node vytvořil blok, sdílí jej na další nody. Důkaz o získání práva na výrobu bloku je součástí nového bloku právě kvůli ověření.
-
Ostatní nody přijímají blok a mohou ověřit, že blok byl vytvořen správným nodem a na základě toho může rozhodnout, zda bude blok zahrnut do vlastního blockchainu.
-
Proces pokračuje od kroku 2 v dané epoše.
Jak vidíte, na rozdíl od PoW, během procesu výroby bloku se neztrácí čas při určování, kdo bude blok produkovat. V dané epoše je vše dopředu jasné, takže pool zjistí, zda mu bylo uděleno právo vyrobit blok v daném slotu, a pokud ano, pool může blok okamžitě vyrobit a přidat důkaz, že právo získal. Blok je poté distribuován, což je fáze jeho přijetí sítí. Kvůli krátkému času bloku tolik nevadí, že nějaký node nevyužije práva na produkci bloku.
ZÁVĚR
Cardano bude dále pracovat na škálovatelnosti v rámci konsensu Ouroboros Hydra. Stále však může být nutné vytvořit druhé vrstvy či side-chainy, abychom mohli globálně škálovat na miliardu uživatelů. V rámci druhých vrstev je však stále třeba zabývat se decentralizací. Druhé vrstvy jsou dobré pro časté transakce mezi dvěma uživateli. Nejsou úplně vhodné jako zástupné řešení škálovatelnosti, neboť vždy budou existovat centralizované nody, které musí sledovat celkový stav neustále se měnící sítě, aby našli dobrou cestu (route) pro směřování transakce. Není možné snažit se vybudovat decentralizovanou budoucnost na centralizované infrastruktuře. To nebude fungovat. Decentralizace je důležitá nejen jako obrana proti nepříteli zvenčí, ale také proti nepříteli či zneužití moci v rámci systému samotného. Na to se často zapomíná. Přílišná moc v rámci sítě může znamenat shromažďování uživatelských dat, je to zajímavé místo pro útok (sběr dat, DOS útok), je to potenciální bod selhání systému, umožňuje to entitám zvyšovat poplatky nebo cenzurovat transakce. Nejlepší řešení všech těchto problémů je vždy jen decentralizace, nic jiného.
Decentralizace, spojená se škálováním, může k blockchainu přivést nové lidi. Uživatelská přívětivost, rychlé a levné transakce jsou nezbytností pro vyšší adopci. Lidé jsou zvyklí na centralizované systémy, které nabízejí rychlost a snadné použití. Blockchain to musí také umět, jinak jej lidé nebudou používat jako alternativu k současnému finančnímu systému.
Originální text v AJ je zde: