Naar hoofdinhoud gaan

Pagina laatst bijgewerkt: 12 augustus 2024

Verkle-bomen

Verkle trees (een combinatie van een “vectorverbintenis” en “Merkle Trees”) zijn een gegevensstructuur die gebruikt kan worden om Ethereumnodes te upgraden zodat ze kunnen stoppen met het opslaan van grote hoeveelheden statusgegevens zonder de mogelijkheid te verliezen om blocks te valideren.

Statelessness

Verkle Trees zijn een kritieke stap op weg naar statusloze Ethereum-clients. Statusloze clients zijn clients die niet de hele statusdatabase hoeven op te slaan om binnenkomende blocks te valideren. In plaats van hun eigen lokale kopie van de status van Ethereum te gebruiken om blocks te verifiëren, gebruiken statusloze clients een “getuige” van de statusgegevens die samen met de block aankomt. Een getuige is een verzameling van individuele stukken van de statusgegevens die nodig zijn om een bepaalde reeks transacties uit te voeren, en een cryptografisch bewijs dat de getuige werkelijk deel uitmaakt van de volledige gegevens. De getuige wordt gebruikt in plaats van de staatsdatabase. Om dit te laten werken, moeten de getuigen erg klein zijn, zodat ze veilig en op tijd over het netwerk kunnen worden uitgezonden zodat validators ze binnen een slot van 12 seconden kunnen verwerken. De huidige statusgegevensstructuur is niet geschikt omdat getuigen te groot zijn. Verkle Trees lossen dit probleem op door kleine getuigen toe te staan, waardoor één van de belangrijkste hindernissen voor statusloze clients uit de weg wordt geruimd.

Wat is een getuige en waarom hebben we ze nodig?

Het verifiëren van een block betekent het opnieuw uitvoeren van de transacties in de block, het aanbrengen van de veranderingen in de state trie van Ethereum en het berekenen van de nieuwe root hash. Een geverifieerde block is een block waarvan de berekende hash van de state root hetzelfde is als degene die bij het block zit (omdat dit betekent dat de voorsteller van het block echt de berekening heeft gedaan waarvan hij/zij zegt dat hij/zij het heeft gedaan). Bij de huidige clients van Ethereum vereist het bijwerken van de status toegang tot de volledige state trie, wat een grote gegevensstructuur is die lokaal moet worden opgeslagen. Een getuige bevat alleen de fragmenten van de statusgegevens die nodig zijn om de transacties in de block uit te voeren. Een validator kan vervolgens alleen gebruik maken van die fragmenten om te verifiëren dat de blockvoorsteller de blocktransacties heeft uitgevoerd en de status correct heeft bijgewerkt. Dit betekent echter dat de getuige snel genoeg moet worden overgedragen tussen de verschillende gebruikers op het netwerk van Ethereum om veilig te worden ontvangen en verwerkt door elke node binnen een tijdspanne van 12 seconden. Als de getuige te groot is, kan het bij sommige nodes te lang duren om het te downloaden en de chain bij te benen. Dit is een centraliserende kracht omdat het betekent dat alleen nodes met een snelle internetverbinding kunnen deelnemen aan het valideren van blocks. Met Verkle trees is het niet nodig om de status op uw harde schijf te hebben. Alles wat u nodig hebt om een block te verifiëren zit in de block zelf. Helaas zijn de getuigen die geproduceerd kunnen worden uit Merkle tries te groot om statusloze clients te ondersteunen.

Waarom maken Verkle Trees kleinere getuigen mogelijk?

De structuur van een Merkle Trie maakt de getuigen erg groot. Te groot om dit veilig uit te zenden tussen de verschillende gebruikers binnen een slot van 12 seconden. Dit komt omdat de getuige een pad is dat de gegevens, die in de leaves (bladeren) zitten, verbindt met de hash van de root. Om de gegevens te verifiëren, zijn niet alleen alle tussenliggende hashes nodig die elk blad met de wortel verbinden, maar ook alle verwante nodes. Elke node in het bewijs heeft een verwante node waarmee hij gehasht wordt om de volgende hash in de trie te maken. Dat zijn een hoop gegevens. Verkle Trees verkleinen de grootte van de getuige door de afstand tussen de bladeren van de boom en de wortel te verkorten en ook door de noodzaak te elimineren om verwante nodes voor te stellen voor het verifiëren van de hash van de wortel. Er wordt nog meer ruimte gewonnen door een krachtig polynomiaal verbintenisschema te gebruiken in plaats van de vectorverbintenis in hash-stijl. De polynomiale verbintenis zorgt ervoor dat de getuige een vaste grootte heeft, ongeacht het aantal bladeren dat hij/zij bewijst.

Onder het polynomiale verbintenisschema hebben de getuigen een beheersbare grootte die gemakkelijk kan worden overgedragen op het peer-to-peer netwerk. Hierdoor kunnen clients statusveranderingen in elke block verifiëren met een minimale hoeveelheid gegevens.

Wat is de structuur van een Verkle Tree?

Verkle Trees zijn (key,value) paren waarbij de sleutels elementen van 32 bytes zijn die bestaan uit een stam van 31 bytes en een enkele byte suffix. Deze sleutels zijn georganiseerd in extensie-nodes en binnenste nodes. Extensie-nodes staan voor een enkele stam voor 256 afstammelingen met verschillende suffixen. Binnenste nodes hebben ook 256 afstammelingen, maar dit kunnen andere extensie-nodes zijn. Het belangrijkste verschil tussen de Verkle Tree en de Merkle Tree-structuur is dat de Verkle Tree veel platter is, wat betekent dat er minder tussenliggende nodes zijn die een blad met de wortel verbinden, en dat er dus minder gegevens nodig zijn om een bewijs te genereren.

Ontdek meer over de structuur van Verkle Trees(opens in a new tab)

Huidige vooruitgang

De testnetten van Verkle Trees zijn al in gebruik genomen, maar er zijn nog steeds belangrijke updates van clients nodig om Verkle Trees te ondersteunen. U kunt helpen de voortgang te versnellen door contracten op de testnets te implementeren of testnetclients uit te voeren.

Ontdek het Verkle Gen Devnet 6 testnet(opens in a new tab)

Kijk hoe Guillaume Ballet het Condrieu Verkle-testnet uitlegt(opens in a new tab) (merk op dat het Condrieu-testnet proof-of-work was en nu is vervangen door het Verkle Gen Devnet 6 testnet).

Verder lezen

Was dit artikel nuttig?