Přejít na hlavní obsah

Verkle stromy

Upravit stránku (opens in a new tab)

Verkle stromy (složenina z „vektorový závazek“ (Vector commitment) a „Merkleův strom“ (Merkle tree)) jsou datová struktura, kterou lze použít k aktualizaci uzlů Etherea tak, aby mohly přestat ukládat velké množství stavových dat, aniž by ztratily schopnost validovat bloky.

Bezstavovost

Verkle stromy jsou kritickým krokem na cestě k bezstavovým klientům Etherea. Bezstavoví klienti jsou ti, kteří nemusí ukládat celou stavovou databázi, aby mohli validovat příchozí bloky. Místo použití vlastní lokální kopie stavu Etherea k ověření bloků používají bezstavoví klienti „svědka“ stavových dat, který dorazí s blokem. Svědek je sbírka jednotlivých částí stavových dat, které jsou nutné k provedení určité sady transakcí, a kryptografický důkaz, že svědek je skutečně součástí úplných dat. Svědek se používá místo stavové databáze. Aby to fungovalo, musí být svědci velmi malí, aby mohli být bezpečně vysíláni po síti včas, aby je validátoři stihli zpracovat během 12sekundového slotu. Současná struktura stavových dat není vhodná, protože svědci jsou příliš velcí. Verkle stromy tento problém řeší tím, že umožňují malé svědky, čímž odstraňují jednu z hlavních překážek pro bezstavové klienty.

Klienti Etherea v současnosti používají k ukládání svých stavových dat datovou strukturu známou jako Patricia Merkle Trie. Informace o jednotlivých účtech jsou uloženy jako listy v trii a páry listů jsou opakovaně hashovány, dokud nezůstane pouze jediný hash. Tento konečný hash je známý jako „kořen“ (root). K ověření bloků klienti Etherea provedou všechny transakce v bloku a aktualizují svou lokální stavovou trii. Blok je považován za platný, pokud je kořen lokálního stromu identický s tím, který poskytl navrhovatel bloku, protože jakékoli rozdíly ve výpočtu provedeném navrhovatelem bloku a validujícím uzlem by způsobily, že by se kořenový hash zcela lišil. Problém s tímto přístupem je, že ověřování blockchainu vyžaduje, aby každý klient ukládal celou stavovou trii pro hlavní blok (head block) a několik historických bloků (výchozí nastavení v Geth je uchovávat stavová data pro 128 bloků za hlavním blokem). To vyžaduje, aby klienti měli přístup k velkému množství diskového prostoru, což je překážkou pro provozování plných uzlů na levném hardwaru s nízkým výkonem. Řešením je aktualizovat stavovou trii na efektivnější strukturu (Verkle strom), kterou lze shrnout pomocí malého „svědka“ dat, jenž může být sdílen místo úplných stavových dat. Přeformátování stavových dat do Verkle stromu je odrazovým můstkem pro přechod na bezstavové klienty.

Co je to svědek a proč je potřebujeme?

Ověření bloku znamená opětovné provedení transakcí obsažených v bloku, aplikování změn na stavovou trii Etherea a výpočet nového kořenového hashe. Ověřený blok je takový, jehož vypočítaný kořenový hash stavu je stejný jako ten, který byl poskytnut s blokem (protože to znamená, že navrhovatel bloku skutečně provedl výpočet, o kterém tvrdí, že jej provedl). V dnešních klientech Etherea vyžaduje aktualizace stavu přístup k celé stavové trii, což je velká datová struktura, která musí být uložena lokálně. Svědek obsahuje pouze fragmenty stavových dat, které jsou nutné k provedení transakcí v bloku. Validátor pak může použít pouze tyto fragmenty k ověření, že navrhovatel bloku provedl transakce bloku a správně aktualizoval stav. To však znamená, že svědek musí být přenášen mezi peery v síti Ethereum dostatečně rychle, aby jej každý uzel bezpečně přijal a zpracoval během 12sekundového slotu. Pokud je svědek příliš velký, může některým uzlům trvat příliš dlouho, než si jej stáhnou a udrží krok s řetězcem. To je centralizační síla, protože to znamená, že se na validaci bloků mohou podílet pouze uzly s rychlým připojením k internetu. S Verkle stromy není nutné mít stav uložený na pevném disku; vše, co potřebujete k ověření bloku, je obsaženo v samotném bloku. Bohužel, svědci, které lze vytvořit z Merkleových trií, jsou příliš velcí na to, aby podporovali bezstavové klienty.

Proč Verkle stromy umožňují menší svědky?

Struktura Merkleovy trie způsobuje, že velikosti svědků jsou velmi velké – příliš velké na to, aby mohly být bezpečně vysílány mezi peery během 12sekundového slotu. Je to proto, že svědek je cesta spojující data, která jsou uložena v listech, s kořenovým hashem. K ověření dat je nutné mít nejen všechny mezilehlé hashe, které spojují každý list s kořenem, ale také všechny „sourozenecké“ uzly. Každý uzel v důkazu má sourozence, se kterým je hashován, aby se vytvořil další hash výše v trii. To je spousta dat. Verkle stromy snižují velikost svědka zkrácením vzdálenosti mezi listy stromu a jeho kořenem a také eliminací potřeby poskytovat sourozenecké uzly pro ověření kořenového hashe. Ještě větší prostorové efektivity bude dosaženo použitím výkonného schématu polynomiálního závazku (polynomial commitment) namísto vektorového závazku založeného na hashi. Polynomiální závazek umožňuje, aby měl svědek pevnou velikost bez ohledu na počet listů, které dokazuje.

V rámci schématu polynomiálního závazku mají svědci zvládnutelné velikosti, které lze snadno přenášet v peer-to-peer síti. To umožňuje klientům ověřovat změny stavu v každém bloku s minimálním množstvím dat.

Velikost svědka se liší v závislosti na počtu listů, které obsahuje. Za předpokladu, že svědek pokrývá 1000 listů, svědek pro Merkleovu trii by měl asi 3,5 MB (za předpokladu 7 úrovní trie). Svědek pro stejná data ve Verkle stromu (za předpokladu 4 úrovní stromu) by měl asi 150 kB – asi 23x méně. Toto zmenšení velikosti svědka umožní, aby byli svědci bezstavových klientů přijatelně malí. Polynomiální svědci mají velikost 0,128–1 kB v závislosti na tom, jaký konkrétní polynomiální závazek je použit.

Jaká je struktura Verkle stromu?

Verkle stromy jsou páry (key,value), kde klíče jsou 32bajtové prvky složené z 31bajtového kmene (stem) a jednobajtové přípony (suffix). Tyto klíče jsou organizovány do rozšiřujících (extension) uzlů a vnitřních (inner) uzlů. Rozšiřující uzly představují jeden kmen pro 256 potomků s různými příponami. Vnitřní uzly mají také 256 potomků, ale mohou to být další rozšiřující uzly. Hlavní rozdíl mezi strukturou Verkle stromu a Merkleova stromu spočívá v tom, že Verkle strom je mnohem plošší, což znamená, že existuje méně mezilehlých uzlů spojujících list s kořenem, a proto je ke generování důkazu potřeba méně dat.

Diagram of a Verkle tree data structure

Přečtěte si více o struktuře Verkle stromů (opens in a new tab)

Současný pokrok

Testnety Verkle stromů jsou již v provozu, ale stále existují podstatné nevyřízené aktualizace klientů, které jsou nutné pro podporu Verkle stromů. Pokrok můžete pomoci urychlit nasazením kontraktů na testnety nebo spuštěním testnetových klientů.

Podívejte se, jak Guillaume Ballet vysvětluje testnet Condrieu Verkle (opens in a new tab) (všimněte si, že testnet Condrieu byl důkaz prací (PoW) a nyní byl nahrazen testnetem Verkle Gen Devnet 6).

Další čtení

Poslední aktualizace stránky: 6. června 2026