Chyba v klientovi Nethermind sundala 8 % validátorů v síti Ethereum. To by mělo být vnímáno jako varování pro všechny blockchainové sítě ve které dominuje jední klient. Mnoho sítí, včetně Cardano, čelí riziku fatálního selhání sítě. Pokud chyba způsobí fatální zhroucení klienta, síť již nemusí být schopna vytvářet bloky. Tomuto riziku lze předejít různorodostí klientů. Decentralizace není jen o produkci bloků nebo týmovém managementu, ale také o rozmanitosti týmů budující klienty. Pojďme si toto často opomíjené téma vysvětlit.
Jeden tým, jeden klient
Blockchainové sítě buduje tým dodávající software, takzvaného klienta, který implementuje pravidla protokolu. Tým zná nejlépe návrh protokolu a definuje klíčové prvky, jako je měnová politika a mechanismus odměn.
Dobrovolníci (operátoři) instalují tohoto klienta na své uzly. Síť se postupně stává více distribuovanou a decentralizovanou. Čím více klientských uzlů je v síti, tím odolnější bude síť vůči selhání jednoho uzlu.
Toto je běžný a očekávaný scénář. Výsledkem je distribuovaná síť, ve které mají všichni operátoři stejného klienta ze stejného týmu.
Nody produkující nové bloky jsou více důležité než nody uživatelů kteří neprodukují bloky. Důležitý tedy není jen počet nodů v síti, ale také decentralizace. Decentralizace je rozhodujícím faktorem co se týká nodů které jsou pro síť významné (a představují single point of failure).
V kontextu Cardano (ale i Bitcoinu) to znamená, že čím více poolů síť má, tím je odolnější. Později si vysvětlíme, jakou roli v tom hraje klient.
V síti Cardano jsou náhodně vylosovaní vedoucí slotů, kteří razí bloky. Pokud náhodou vylosovaný leader slotu nevyrazí blok kvůli problému s uzlem nebo internetovým připojením, příliš to nevadí. V příštím kole bude vylosován jiný vedoucí slotu, kterému se pravděpodobně podaří vyrazit nový blok.
Zdá se, že síť je odolná vůči selhání jednotlivých uzlů.
Taková síť však není imunní vůči kritickým chybám ve zdrojovém kódu klienta. Chyba může způsobit selhání všech klientů přibližně ve stejnou dobu. V takovém případě může dojít k úplnému zastavení ražby nových bloků. Uživatelé nebudou moci odesílat nové transakce, protože v síti nemusí být žádný uzel, který by je dokázal zpracovat (dočasně je uložit do mem-poolu).
Na obrázku vidíte, že všechny uzly v síti selhaly a jsou nedostupné. Nové bloky se nerazí. Uživatelé spolu nemohou interagovat.
Pokud je provoz sítě závislý na implementaci jednoho klienta, je riziko selhání poměrně vysoké.
Klientská implementace může být kvalitní, což snižuje riziko. Tým IOG používá při vývoji klientů formální metody, což je dobrá zpráva. Bohužel riziko selhání je stále reálné.
Proč je důležitá rozmanitost klientů?
Preventivním opatřením proti selhání sítě je rozmanitost klientů. Musí být více klientů, které budou implementovat jiné týmy (třeba v jiném programovacím jazyce).
Různí klienti musí být vzájemně kompatibilní. To znamená, že budou fungovat úplně stejně, pokud jde o komunikační protokol a pravidla sítě. Klienti se musí navenek chovat stejně, ale uvnitř mohou fungovat odlišně.
Původní tým (v případě Cardana je to IOG) musí zpřístupnit formální specifikaci protokolu.
Ostatní týmy musí vědět, jak klienta implementovat. Pro týmy je poměrně obtížné sledovat fungování klienta na základě síťové komunikace nebo ze zdrojového kódu původní implementace, který je volně veřejně dostupný všem. Vždy je lepší mít v ruce formální specifikaci.
Formální specifikace jsou zásadní, protože poskytují jasný a jednoznačný popis toho, jak by měl protokol fungovat. To zahrnuje podrobnosti o chování protokolu, jeho očekávaných vstupech a výstupech a posloupnosti operací, které by měl provádět.
Mít formální specifikaci je výhodné pro týmy implementující klienta. Poskytuje referenční bod, který může vést proces vývoje a pomoci zajistit, aby byl klient implementován správně.
Na obrázku níže můžete vidět, že původní tým kromě klientské implementace zveřejnil i formální specifikaci protokolu. Tři další týmy, označené A, B a C, vydaly tři klienty A, B a C.
Důležitá je nejen existence alternativních klientských implementací, ale také jejich osvojení operátory (node operátory).
V ideálním případě by zastoupení jednotlivých klientů v síti bylo co nejvíce proporcionální. V našem příkladu by tedy každý klient měl 25% zastoupení v síti.
Na obrázku níže vidíte síť, ve které nemá žádný klient dominanci. Operátoři využívají 4 implementace (verze) klienta, každá s 25% zastoupením v síti. Tato síť je výrazně odolnější vůči fatálnímu selhání konkrétního klienta.
Pokud by došlo k fatálnímu selhání implementace jednoho klienta a uzel nebyl schopen obnovit svou činnost, bylo by postiženo pouze 25 % uzlů v síti. Zbývající uzly s jinou verzí klienta, tedy 75 % uzlů v síti, by nadále fungovaly. Zpomalila by se, ale nezastavila produkce bloků.
Na obrázku níže můžete vidět situaci, kdy implementace klienta A selže. Síť je schopna pokračovat v ražení bloků díky dalším klientským implementacím.
Je nepravděpodobné, že různé týmy udělají stejnou chybu při implementaci a zavedou chybu, která může zničit celý uzel. Více klientských implementací je ochranou proti identické chybě ve zdrojovém kódu.
Chyba může v kódu existovat po dlouhou dobu, aniž by si jí někdo všiml a aniž by se projevila. Některé neobvyklé okolnosti v síti mohou způsobit, že se chyba objeví. Může se například objevit neobvyklá transakce, která způsobí selhání uzlu během ověřování kvůli bugu.
Můžeme konstatovat, že síť využívající více nezávislých konsensuálních a realizačních klientů zajišťuje, že většina uzlů fungují efektivně, bezpečně a bez přerušení. Tohoto stavu je dosaženo i v případě fatálního selhání jedné z mnoha verzí klienta (za předpokladu že tato verze nemá dominantní postvení). To přispívá k odolné síti tím, že eliminuje jednotlivé body selhání s příliš mnoha uzly provozujícími stejný klientský software.
Když na různých klientech pracuje více týmů z různých částí světa, snižuje se riziko jediného bodu selhání. Tím myslím selhání jednoho týmu. Je to proto, že každý tým by pravděpodobně měl svůj vlastní jedinečný přístup k řešení problémů, což přispívá k robustnosti sítě.
Rozmanitost klientů, pro někoho možná trochu překvapivě, zvyšuje decentralizaci sítě.
Často se diskutuje o tom, jak decentralizovat řízení týmu (např. tým IOG). V této debatě se zapomíná na to, že vliv týmu IOG je založen na tom, že jejich implementace klienta Cardano má dominantní postavení v síti Cardano.
Mít více týmů zajišťuje, že žádný tým nebude mít nepřiměřený vliv na vývoj nebo směřování sítě. To je v souladu se zásadou decentralizace, jejímž cílem je zabránit tomu, aby jakýkoli jednotlivý subjekt měl příliš velkou kontrolu.
Pokud existuje pouze jediný tým který kontroluje vývoj klienta s dominantním postavením v síti, jedná se určitou formu centralizace. Tým je single point of failure a současně (často) nevolená entita jenž kontroluje směřování a vlastnosti protokolu.
Mít více týmů přináší mnoho otázek. Kdo by měl například financovat rozvoj alternativních klientů? Kdo a jak by měly týmy mezi sebou koordinovat? Jak motivovat operátory, aby využívali alternativní klienty a ne původního klienta z nejstaršího (původního) týmu?
Operátoři nodů mají tendenci používat klienta od týmu jenž spustil síť, neboť tento tým zná protokol nejlépe a klient je nejvíce otestovaný časem. Je to logické chování jenž však vede k centralizaci a výše popsaným rizikům.
Více klientů Cardano na obzoru
V ekosystému Cardano plánuje několik týmů vybudovat alternativního klienta Cardano. Týmy jsou do značné míry závislé na financování od Catalystu.
Tým budovající implementaci TypeScript je pravděpodobně nejdále. Jejich verze se ještě zdaleka nestává plnohodnotným klientem, ale základní operace jako načítání bloků a synchronizaci řetězce zvládá.
Možná by Cardano Foundation a Emurgo mohly zvážit alternativní klientskou implementaci. Tyto subjekty získaly část prostředků z počátečního prodeje ADA, takže by měly zajištěné financování.
Případně by to mohli zvážit i členové organizace Intersect.
Vybudování alternativního klienta je složité a nákladné. Kromě toho IOG pravidelně nasazuje upgrady. To přidává nové funkce. Všichni stávající klienti budou muset v budoucnu držet krok s klientem z týmu IOG. V praxi to znamená implementaci všech upgradů (veškeré potřebné funkcionality).
Mít více klientů v síti také znamená být ostražitější ohledně upgradů sítě. Upgrady sítě jsou aktuálně řešeny hard-fork kombinátorem. Tento proces může zkomplikovat širší různorodost klientů.
Z výše uvedeného vyplývá, že týmy budující alternativní klienty Cardano by měly být nedílnou součástí ekosystému, včetně financování, pro které by měly být velmi pravděpodobně použity ADA coiny z projektové pokladny.
To je výzva pro komunitu. Decentralizace je odpovědností komunity, takže by měla zajistit, že Cardano bude decentralizováno na klientské úrovni.
Závěr
Všechny hlavní blockchainy, včetně Bitcoinu a Etherea, čelí riziku fatálního selhání, protože jejich fungování závisí na jedné dominantní verzi klienta z týmu, který síť spustil.
Ethereum si vede nejlépe v rozmanitosti klientů. Existuje 5 alternativních klientů Ethereum, kteří mají více než 1% podíl. Klient Geth má však téměř 80% přítomnost v síti. Bitcoin je v podstatě závislý na původní (upravené) verzi klienta vytvořené Satoshim. Cardano je závislý na klientovi od týmu IOG.
Může se objevit anomálie, která způsobí fatální selhání sítě. V případě Cardana se tak stalo v lednu 2023. Došlo však k automatickému restartu a postižené uzly byly v provozu během několika minut. Provoz sítě nebyl výrazně narušen. Síť se „uzdravila“ sama.
Ethereum už mělo několik incidentů. U jednoho z nich síť nedokázala finalizovat bloky. Síť Solana vyžaduje čas od času restart.
Pokud se mají blockchainové sítě stát finanční páteří světa, je nutné zajistit jejich 100% spolehlivost. To v současné době není zaručeno. Komunita Cardano by se měla zamyslet nad tím, jaké kroky vedou k vyšší diverzitě klientů.
Článek připravili Cardanians s podporou od Cexplorer.
Přečtěte si originál v AJ: https://cexplorer.io/article/understanding-the-diversity-of-clients
1 post - 1 participant