Verkle stromy
Verkle trees (sloučenina termínů „Vector commitment“ a „Merkle Trees“) jsou datová struktura, která může být použita k vylepšení uzlů na Ethereu tak, aby už nemusely ukládat velké množství stavových dat, aniž by ztratily schopnost ověřovat bloky.
Bezstavovost
Verkle trees jsou klíčovým krokem na cestě k bezstavovým klientům na Ethereu. Bezstavové klienty jsou takové, které nemusí uchovávat celou stavovou databázi, aby mohly ověřovat příchozí bloky. Místo používání vlastní lokální kopie stavových dat Etherea používají bezstavové klienty k ověření bloků „svědka“ stavových dat, který je doručen společně s blokem. Svědek je soubor jednotlivých částí stavových dat, které jsou potřeba k provedení konkrétní sady transakcí, a kryptografický důkaz, že je svědek skutečně součástí úplných dat. Svědek je používán místo stavové databáze. Svědci musí být dostatečně malí, aby mohli být bezpečně vysíláni po síti včas na zpracování validátory během 12sekundového slotu, jinak to nebude fungovat. Současná struktura stavových dat není vhodná, protože svědci jsou příliš velcí. Verkle trees tento problém řeší tím, že umožňují malé svědky, což odstraňuje jednu z hlavních překážek pro bezstavové klienty.
Co je svědek a proč ho potřebujeme?
Ověření bloku znamená opětovné provedení transakcí obsažených v bloku, aplikování změn na stavový trie Etherea a výpočet nového hashe kořene. Ověřený blok je ten, jehož vypočítaný stav hashe kořene je stejný jako ten, který byl poskytnut s blokem (protože to znamená, že navrhovatel bloku skutečně provedl výpočty, které tvrdí, že provedl). Po klientech Ethereum v současné době vyžaduje přístup k celému stavovému trie, což je velká datová struktura, která musí být uchovávána lokálně. Svědek obsahuje pouze fragmenty stavových dat potřebné k realizaci transakcí v bloku. Validátor může k ověření, že navrhovatel bloku správně provedl transakce v bloku a aktualizoval stav, použít pouze tyto fragmenty. To však znamená, že svědek musí být přenášen mezi síťovými uzly na Ethereu dostatečně rychle, aby byl přijat a zpracován každým jedním uzlem bezpečně během 12sekundového slotu. Pokud je svědek příliš velký, může trvat některým uzlům příliš dlouho, než si jej stáhnou a udrží se aktuální s řetězcem. To je centralizující prvek, protože to znamená, že pouze uzly s rychlým internetovým připojením mohou účinně ověřovat bloky. S Verkle trees není potřeba mít stav uložený na pevném disku. Vše, co potřebujete k ověření bloku, je obsaženo přímo v bloku. Bohužel, svědci, které lze vyprodukovat z Merkle trie, jsou příliš velcí na to, aby podporovali bezstavové klienty.
Proč Verkle trees umožňují menší svědky?
Struktura Merkle trie umožňuje nastavit velikost svědků velkou – až moc velkou na to, aby byla bezpečně vysílána mezi síťovými uzly během 12sekundového slotu. Důvodem je, že svědek je cesta spojující data, která jsou uložena v listech, s kořenovým hashem. K ověření dat je třeba mít nejen všechny mezičlánkové hashe, které spojují každý list s kořenem, ale také všechny „sourozenecké“ uzly. Každý uzel zapojený do důkazu má sourozence, který je hashován s ním, aby vytvořil další hash o úroveň výše v trie. To je spousta dat. Verkle trees zmenš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í hashe kořene. Ještě větší efektivnosti prostoru lze dosáhnout použitím silného polynomiálního závazkového schématu namísto hashového vektorového závazku. Polynomiální závazek umožňuje svědkovi zachovávat stejnou velikost bez ohledu na počet listů, které prokazuje.
Podle polynomiálního závazkového schématu mají svědci spravovatelné velikosti, které lze snadno přenášet po 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.
Jaká je struktura Verkle tree?
Verkle trees jsou (key, value)
, tedy páry klíč-hodnota, kde klíče jsou 32bajtové prvky složené z 31bajtového kmene a jednoho bajtu přípony. Tyto klíče jsou uspořádány do uzlů prodloužení a vnitřních uzlů. Uzly prodloužení představují jediný kmen pro 256 dětí s různými příponami. Vnitřní uzly mají také 256 dětí, ale mohou to být jiné uzly prodloužení. Hlavní rozdíl mezi strukturou Verkle tree a Merkle tree je v tom, že Verkle tree je mnohem plošší, což znamená, že v něm je méně mezičlánkových uzlů spojujících list s kořenem, a tedy je méně dat potřeba k vytvoření důkazu.
Další informace o struktuře Verkle trees(opens in a new tab)
Aktuální průběh
Testovací sítě Verkle tree jsou již v provozu, ale vyžadují značné aktualizace klientů, které podporují Verkle stromy. I vy můžete pomoci urychlit tento vývoj tím, že spustíte své kontrakty na testnetech nebo spustíte testnetové klienty.
Prozkoumejte testovací síť Verkle Gen Devnet 2(opens in a new tab)
Sledujte, jak Guillaume Ballet vysvětluje testovací síť Condrieu Verkle(opens in a new tab) (poznámka: testovací síť Condrieu byla důkaz prací a nyní byla nahrazen testovací sítí Verkle Gen Devnet 2).
Další informace
- Verkle trees pro bezstavovost(opens in a new tab)
- Dankrad Feist vysvětluje Verkle trees na PEEPanEIP(opens in a new tab)
- Guillaume Ballet vysvětluje Verkle trees na ETHGlobal(opens in a new tab)
- „Jak Verkle trees činí Ethereum štíhlejším a efektivnějším“ od Guillauma Balleta na Devconu 6(opens in a new tab)
- Piper Merriam o bezstavových klientech z ETHDenver 2020(opens in a new tab)
- Dankrad Feist vysvětluje Verkle trees a bezstavovost v podcastu Zero Knowledge(opens in a new tab)
- Vitalik Buterin o Verkle trees(opens in a new tab)
- Dankrad Feist o Verkle trees(opens in a new tab)
- Dokumentace k EIP Verkle trees(opens in a new tab)