🇸🇰 Cardano a sharding

Cardano a sharding

Cardano je monolitický blockchain a upgrade Ouroboros Leios to nezmení. Mnohé projektové tímy blockchainu implementovali sharding v snahe dosiahnuť vyššiu škálovateľnosť. Aj Cardano by teoreticky mohlo mať jedného dňa sharding. Určite sa tak však nestane skôr ako po implementácii Ouroboros Leios. Poďme preskúmať rozdiely medzi monolitickým a sharded blockchainom z pohľadu konsenzu. Táto téma je komplexná, preto sa zámerne zameriame len na niektoré aspekty. V záujme zjednodušenia pre čitateľa si článok nekladie za cieľ poskytnúť úplné a komplexné informácie.

Výzvy pre monolitický a sharded blockchain

Monolitický blockchain rieši všetky základné komponenty systému, ako je konsenzus, dostupnosť údajov a vykonávanie, v tej istej vrstve alebo priestore. Všetky uzly zúčastňujúce sa na konsenze siete zdieľajú jeden priestor, v ktorom spoločne overujú transakcie a bloky.

Sharded blockchain rozdeľuje systém na menšie podskupiny nazývané shards. Každý shard môže spracúvať časť transakcií nezávisle a paralelne. Uzly sú rozdelené medzi jednotlivé shardy. Ak by bolo v sieti 1000 uzlov a 10 shardov, 100 uzlov by bolo rozdelených do každého shardu podľa špecifických pravidiel.

Časti však nie sú navzájom nezávislé, pretože sú stále súčasťou jedného systému. Každý systém, či už monolitický alebo využívajúci sharding, musí udržiavať jeden platný globálny stav.

Globálny stav je reprezentáciou vlastníctva a prevodu aktív v blockchaine. Globálny stav uchovávajú a aktualizujú uzly, ktoré sa zúčastňujú na konsenze. Nezabúdajte, že jednou z kľúčových inovácií, ktoré blockchain prináša, je ochrana pred útokmi dvojitej spotreby. Zložité je riadenie tejto úlohy v rámci distribuovanej siete. Pre centralizovaný server je to jednoduchá úloha.

Z hľadiska bezpečnosti musia všetky uzly v sieti poznať globálny stav.

V monolitickom blockchaine je globálny stav uložený vo všetkých uzloch, čo uľahčuje udržiavanie konzistencie a úplnosti údajov v danom okamihu. To však kladie nároky na uzly z hľadiska zdrojov (úložisko, šírka pásma, výpočty). Monolitický systém môže mať tendenciu k centralizácii, vyššie nároky na výkon uzlov a je veľmi ťažké (ak nie takmer nemožné) dosiahnuť vysokú škálovateľnosť.

V sharded blockchaine je ťažšie udržať konzistenciu globálneho stavu, pretože sa udržiava v jednotlivých shardoch. Každý shard má len čiastočnú znalosť globálneho stavu, pretože nemá všetky údaje. Musí existovať nejaký synchronizačný mechanizmus (protokol), ktorý zabezpečí, že globálny stav je konzistentný vo všetkých shardoch. To prináša zložitosť a problémy z hľadiska bezpečnosti. Na druhej strane je relatívne jednoduché dosiahnuť vysokú škálovateľnosť, keďže transakcie sa overujú v shardoch. Počet oddielov je však obmedzený potrebou komunikácie medzi oddielmi.

Monolitický blockchain môže mať jednoduchší konsenzus a je transparentnejší. V prípade Cardano to po prechode na Ouroboros Leios nebude platiť, pretože budú existovať 3 verzie blokov s rôznym časovaním. Ďalšou výhodou je jednoduchšia bezpečnosť vďaka vyššej dostupnosti údajov. Ľahšie sa zabezpečí odolnosť voči útokom typu double-spend a replay. Vďaka vyššej dostupnosti údajov je podstatne jednoduchšie zabezpečiť bezpečnosť. Monolitický blockchain je vysoko odolný voči double-spend a replay útokom.

Najväčšou výzvou pre monolitické blockchainy je dosiahnutie rýchlej finality transakcií (a blokov) bez obetovania decentralizácie a bezpečnosti. Zložitosť (vyššie komunikačné požiadavky) môže rásť s počtom uzlov, čo obmedzuje škálovateľnosť.

Dodajme, že Cardano využíva konsenzus v Nakamotovom štýle, t. j. pravdepodobnostnú finalitu. Konečnosť transakcií je teda v porovnaní so sieťami s preukázateľnou konečnosťou (Ethereum) pomalá.

Najväčšou výhodou sharded blockchainu je vysoká škálovateľnosť dosiahnutá vďaka paralelizácii pri overovaní transakcií. Inými slovami, overovanie transakcií je rozdelené medzi niekoľko čiastočne nezávislých skupín uzlov (shards). To má ďalšie výhody, pretože znižuje požiadavky na úložisko, šírku pásma a výpočtový výkon jednotlivých uzlov. Sieť môže byť viac decentralizovaná a môže byť ekonomickejšie prevádzkovať vlastný uzol. Nevýhodou je zložitosť, najmä pokiaľ ide o synchronizáciu a správu shardov, komunikáciu medzi shardmi, riešenie konfliktov medzi shardmi atď. Najväčšou výzvou pre tímy vytvárajúce sharding je dosiahnutie vysokej bezpečnosti a spoľahlivosti v relatívne zložitom systéme, ktorý je závislý od internetu.

Režijné náklady na komunikáciu medzi jednotlivými hardmi

Pozrime sa teraz na sharded blockchain z pohľadu aktív a aplikácií. Je zrejmé, že ak by na jeden shard pripadal len obmedzený počet aplikácií a aktív (v extrémnom prípade jedna aplikácia a jeden typ tokenu na shard), utrpela by používateľská prívetivosť a použiteľnosť systému. Nemá zmysel mať napríklad v jednom sharde len mince ADA, v druhom sharde HOSKY a v treťom sharde DJED. Ako by mohla decentralizovaná burza fungovať v takomto prostredí? Do ktorého shardu by ste ju umiestnili?

Tento problém sa rieši komunikáciou medzi jednotlivými shardmi. Je to proces, ktorý umožňuje shardom vymieňať si informácie a koordinovať akcie v systéme. Do medzistrediskových transakcií sa zapájajú viaceré strednopisy. Je potrebné zabezpečiť atomicitu a konzistenciu medzi jednotlivými oddielmi. Ukážme si to prostredníctvom niekoľkých jednoduchých príkladov.

Ak chce Alica poslať token X z oddielu 1 Bobovi na oddiel 2, systém musí zabezpečiť, aby bola transakcia platná, konečná a konzistentná na oboch oddieloch a aby Alica nemohla token X dvakrát minúť na iných oddieloch. Ako vidíte, uzly v jednom sharde nie sú schopné túto transakciu potvrdiť a vyhlásiť ju za konečnú (kompletnú). Je potrebné, aby uzly z oboch shardov transakciu potvrdili. Je tiež potrebné zabezpečiť, aby sa token X neutratil v iných oddieloch. Aj ostatné uzly (z iných shardov) by mali mať aspoň čiastočnú vedomosť o stave tokenu X. Pamätáte si, keď som hovoril o globálnom stave?

V prípade aplikácií je to veľmi podobné. Inteligentné kontrakty medzi jednotlivými shardmi vyžadujú komunikáciu medzi viacerými shardmi a údaje (alebo logiku) z iných shardov. Napríklad, ak chce inteligentný kontrakt DEX (nasadený na sharde 3) vymeniť token X zo shardu 1 za token Y zo shardu 2, systém musí zabezpečiť, aby inteligentný kontrakt mal prístup k údajom a stavu tokenu X a tokenu Y na ich príslušných shardoch a aby sa výmena vykonala atomicky a konzistentne naprieč shardmi.

Teraz si skúste predstaviť, čo to všetko znamená v kontexte škálovateľnosti, časovej synchronizácie shardov, ukladania (dostupnosť údajov), komunikácie (šírka pásma), riešenia konfliktov, prevencie útokov, udržiavania globálneho stavu atď. Synchronizácia medzi jednotlivými oddielmi je proces, ktorý zabezpečuje, aby všetky oddiely mali konzistentný a aktuálny pohľad na globálny stav systému.

Závislosť shardu od iných shardov pri overovaní cross-shardových transakcií (alebo smart kontraktov) je neželanou (ale nevyhnutnou) vlastnosťou, pretože shard nie je úplne autonómny (nezávislý od svojho okolia). Ak má jeden shard problémy (napríklad v dôsledku útoku, sieťových problémov alebo nižšieho výkonu), môže to ovplyvniť ostatné shardy, t. j. celý systém. Sieťový konsenzus preto musí byť navrhnutý veľmi starostlivo a musí zohľadňovať tieto eventuality.

Pre tímy, ktoré sa snažia implementovať konsenzus sharding, existuje jedna veľká výzva. Čo ak si veľký (nadpolovičný) počet transakcií vyžaduje komunikáciu medzi jednotlivými shardmi? V takom prípade nemusí byť sharded blockchain taký efektívny, ako sa pôvodne predpokladalo. Našťastie sharded blockchains už existujú, takže môžeme pozorovať a porovnávať jednotlivé implementácie.

Konečnosť transakcií v kontexte škálovateľnosti

Na pochopenie tejto témy je potrebné pochopiť konečnosť transakcií v kontexte škálovateľnosti. Konečnosť znamená, že keď je transakcia potvrdená sieťou, nie je možné ju vrátiť alebo zmeniť. Tým sa zabezpečuje bezpečnosť a integrita systému a zabraňuje sa dvojitým výdavkom alebo replay útokom.

Konečnosť ovplyvňuje výkonnosť a efektívnosť systému, pretože znižuje latenciu a réžiu čakania na potvrdenie alebo riešenie konfliktov.

Jednoducho povedané, kým transakcia X nie je finálna, aktívum, ktoré bolo prevedené transakciou X, nemá istého vlastníka (môže ním byť pôvodný odosielateľ alebo nový príjemca). Je zrejmé, že opätovné použitie tohto aktíva (s neistým vlastníkom) pre ďalšiu transakciu Y je “riskantné”, pretože ak sa predchádzajúca transakcia X vráti, mala by sa vrátiť aj transakcia Y (ktorú sa niekto práve snaží odoslať). Problém by sa dal reťaziť. Pre blockchain je ťažké revertovať jednu transakciu, takže by bolo potrebné revertovať celý blok. Tým by sa výrazne narušila konzistencia údajov.

Konečnosť je dôležitá pre škálovateľnosť vo všeobecnosti, ale najmä pre sharded blockchainy, pretože umožňuje rýchlejšie a jednoduchšie cross-shard transakcie. Ak transakcie nie sú finálne, môžu vytvárať nekonzistentnosti alebo konflikty medzi shardmi, čo môže ovplyvniť škálovateľnosť a bezpečnosť systému. Napríklad, ak čriepok 1 potvrdí transakciu, ktorou Alica prevedie token X Bobovi, ale čriepok 2 ju ešte nepotvrdí, Alica sa môže pokúsiť minúť token X znova na čriepku 2, čo spôsobí dvojité míňanie. Aby sa tomu predišlo, systém musí zabezpečiť, aby bola transakcia na obidvoch oddieloch dokončená skôr, ako Alici alebo Bobovi umožní použiť token X na iných oddieloch.

Ďalším dôvodom, prečo je konečnosť dôležitá pre škálovateľnosť, je to, že umožňuje efektívnejšie a flexibilnejšie protokoly konsenzu. Konsenzuálne protokoly sú pravidlá, ktoré určujú, ako sa uzly dohodnú na stave blockchainu a riešia konflikty. Ak transakcie nie sú finálne, môžu vytvárať forky alebo reorgy, čo môže ovplyvniť škálovateľnosť a bezpečnosť systému.

Ak napríklad uzol A potvrdí blok, ktorý obsahuje transakciu T1, ale uzol B potvrdí iný blok, ktorý obsahuje transakciu T2, môžu v blockchaine vytvoriť fork, čo môže spôsobiť zmätok alebo nekonzistentnosť. Na vyriešenie tohto problému musí systém používať konsenzuálny protokol, ktorý dokáže zvládnuť forky alebo reorgy (napr. pravidlo najdlhšieho reťazca). Tieto protokoly však môžu byť pomalé, nákladné alebo zložité, čo môže obmedziť škálovateľnosť a výkonnosť systému.

Sharded blockchain nemôže fungovať efektívne a spoľahlivo, ak nie je zabezpečená rýchla konečnosť transakcií (preukázateľná konečnosť), a to nielen v rámci shardov, ale aj pri komunikácii medzi shardmi.

Ako vypočítať priepustnosť systému?

Je ťažké odhadnúť, ktorý systém môže mať vyššiu priepustnosť. Problém spočíva v tom, že transakcie nemožno overovať nezávisle, t. j. paralelne. Medzi UTXO a blockchainom založeným na účtoch existujú určité rozdiely, ale k tomu sa ešte dostaneme. Ak je na validáciu transakcií potrebná komunikácia medzi reťazcami, prináša to réžiu a latenciu, čo znižuje priepustnosť. Nie je možné vypočítať celkovú priepustnosť sharded systému vynásobením priepustnosti shardu počtom shardov.

Podobne nie je možné vypočítať priepustnosť monolitických systémov vynásobením kapacity spracovania na validátor počtom validátorov. Validátory môžu mať rôznu kapacitu spracovania, takže je možné, že najmenej výkonný validátor ovplyvní celkovú výkonnosť systému. Závisí to aj od konkrétneho konsenzu.

Dosiahnutie vysokej škálovateľnosti (a tiež rýchlej finality) v monolitickom blockchaine nie je jednoduché. Existuje mnoho výziev a tímy musia starostlivo vyvažovať kompromisy. Rýchlejšia finálnosť si zvyčajne vyžaduje rýchlejšiu tvorbu a šírenie blokov, čo môže ohroziť bezpečnosť a decentralizáciu systému (riziko forkov alebo reorgov). Rýchlejšia finalizácia si zvyčajne vyžaduje sofistikovanejšie protokoly alebo mechanizmy (na hlasovaní v rámci produkcie každého nového bloku sa musí podieľať veľa uzlov), čo môže ohroziť jednoduchosť a transparentnosť systému. Konsenzus s rýchlou finalizáciou môže vyžadovať viac komunikácie alebo synchronizácie medzi uzlami, čo môže zvýšiť latenciu alebo réžiu.

Sharded blockchains majú v súčasnosti vyššiu priepustnosť (aspoň na papieri), ale ich spoľahlivosť sa prejaví až pri vyššom zaťažení systému, keď je potrebné spracovať cross-shard transakcie.

Ako ovplyvňujú model účtovania a konsenzus škálovateľnosť?

To, čo môže ovplyvniť priepustnosť, je, pre niekoho prekvapivo, účtovný model. Model založený na účtoch, ktorý používa Ethereum a väčšina platforiem SC, neumožňuje paralelné spracovanie transakcií. Počas overovania je potrebné zachovať poradie transakcií (systém udržiava zdieľaný globálny stav). Inými slovami, transakcie sú vzájomne závislé. Pri validácii transakcie je potrebné zohľadniť globálny stav, ktorý musí byť v čase validácie nemenný (atomicita).

Model založený na účtoch si vyžaduje sekvenčné spracovanie transakcií v rámci oddielov, ale aj medzi nimi, pretože každý účet môže závisieť od iných účtov alebo transakcií (alebo byť s nimi v konflikte). Paralelizácia prostredníctvom oddielov môže zlepšiť priepustnosť systému, ale len vtedy, ak je komunikácia medzi oddielmi riešená efektívne.

Cardano používa model Extended-UTXO (alebo jednoducho UTXO/eUTXO), ktorý umožňuje paralelné spracovanie transakcií. Transakcie nie sú počas overovania na sebe závislé. Na ich poradí v bloku nezáleží.

Model UTXO umožňuje paralelnejšie spracovanie transakcií v rámci jednotlivých oddielov a medzi nimi, pretože každý UTXO je nezávislý a môže byť overený bez odkazu na iné UTXO (alebo účty).

Cardano by sa potenciálne mohlo stať sharded blockchainom, ale najprv musí tím implementovať rýchlu konečnosť (dokazateľnú konečnosť). Pri pravdepodobnostnej konečnosti nemá zmysel uvažovať o shardingu. Aspoň z nášho pohľadu. Keď bude implementovaný Ouroboros Leios, bude možné uvažovať o shardingu.

Vráťme sa k finalite transakcií a blokov. Konečnosť je založená na hlasovaní (schvaľovaní) transakcií uzlami. Keď transakciu schváli určité percento uzlov v sieti, stáva sa nezvratnou. Konečnosť blokov (a teda aj transakcií) v sieti Cardano je teraz pomalá, pretože váha sa zvyšuje s každým novým blokom pridaným do blockchainu. Hlasovanie len 10 % uzlov v sieti Cardano (pridanie nového bloku, a tým schválenie všetkých predchádzajúcich blokov) môže trvať až 1 hodinu.

Záver

Škálovateľnosť decentralizovaných blockchainov (L1) je veľmi komplexná téma. Tím a komunita Cardano by mali zvážiť implementáciu shardingu, čo však nie je možné urobiť bez zvýšenia konečnosti transakcií. Musíme počkať na implementáciu Ouroboros Leios a potom možno bude mať zmysel začať uvažovať o shardingu. Účtovný model UTXO je vhodný na sharding, pretože umožňuje paralelizáciu nielen v rámci shardov, ale aj komunikáciu medzi shardmi. Sharding je veľkou technologickou výzvou, keď zvážime zachovanie decentralizácie, bezpečnosti, spoľahlivosti a ďalších vecí, ako je spravodlivosť odmien. Ak sa druhé vrstvy neujmú ako súčasná snaha o zvýšenie škálovateľnosti, nebudeme mať inú možnosť ako zvýšiť škálovateľnosť prvých vrstiev. Napokon, okrem shardingu existujú aj ďalšie zaujímavé spôsoby zvyšovania škálovateľnosti.


Pôvodný článok: Cardano and sharding | Cardano Explorer (cexplorer.io)