Article de Griffin Ichiba Hotchkiss sur blog.ethereum.org, traduit par Jean Zundel
Cet article â toujours aussi technique â revient sur lâamĂ©lioration du rĂ©seau Ethereum actuel, celui qui tourne en production en attendant les bouleversements dâETH 2.0. Le sommet de Paris a permis de mieux dĂ©gager les grandes lignes de la recherche, rĂ©sumĂ©es ici dans une nouvelle version de ce fameux arbre des technologies.
DĂ©solĂ© pour le retard de cet article ; certaines distractions inĂ©vitables sont rĂ©cemment venues perturber ma vie, tout comme la vĂŽtre certainement. JâespĂšre que vous faites du mieux que vous pouvez dans ces circonstances et je vous supplie de monter votre niveau dâempathie Ă 11 dans les mois qui viennent et dâaider autant que possible les gens Ă risque dans votre communautĂ©.Â
Cela dit, parlons de Stateless Ethereum et des changements dans lâarbre des technologies !
Dâun point de vue graphique, lâarbre a Ă©tĂ© complĂštement retravaillĂ©, mais si vous le comparez Ă lâoriginal, vous remarquerez quâune grande partie du contenu est identique. Dans un souci dâexhaustivitĂ© et pour Ă©viter toute confusion, cet article passera en revue tous les sujets : vous pouvez aussi bien fermer cet onglet que vous venez dâouvrir en arriĂšre-plan. Sans plus attendre, je vous prĂ©sente lâArbre des Technologies Du Sans Ătat mis Ă jour :
Chaque Ă©tape majeure en rose reprĂ©sente une catĂ©gorie dĂ©finie Ă grosses mailles qui doit ĂȘtre « rĂ©solue » avant de passer aux suivantes. Elles sont volontairement un peu vagues, et ne reprĂ©sentent pas dâEIP ni de fonctionnalitĂ© homogĂšne, bien que certaines dâentre elles puissent y correspondre.
Les petits Ă©lĂ©ments en violet reprĂ©sentent des dĂ©pendances plus spĂ©cifiques qui mĂšneront au « dĂ©blocage » des Ă©tapes. Elles sont requises dans le sens oĂč elles doivent ĂȘtre pleinement comprises avant que lâĂ©tape puisse ĂȘtre considĂ©rĂ©e comme atteinte, mais elles nâont pas besoin dâĂȘtre implĂ©mentĂ©es ou acceptĂ©es. Par exemple, il est possible quâaprĂšs certaines recherches, nous dĂ©couvrions que la merklisation du code ne rĂ©duise pas suffisamment la taille des signatures tĂ©moins (les witnesses) pour justifier le temps et les efforts nĂ©cessaires Ă leur implĂ©mentation ; nous le considĂ©rerions comme « fini », parce quâil ne serait plus nĂ©cessaire de lâĂ©tudier.
Comme vous pouvez dĂ©jĂ le deviner, les cases en vert reprĂ©sentent les « quĂȘtes parallĂšles » qui seraient thĂ©oriquement utiles pour Stateless Ethereum, mais quâun chercheur peut ne pas considĂ©rer comme prioritaires. Dâautres pourront ĂȘtre dĂ©couvertes en chemin ; je les ajouterai au fur et Ă mesure.
Nous avons aussi des Ă©lĂ©ments en jaune qui tombent dans la catĂ©gorie des outils. Encore inexistants, ils nous aideront Ă valider des hypothĂšses et des implĂ©mentations de test, et, plus gĂ©nĂ©ralement, ils accĂ©lĂšreront les travaux. IdĂ©alement, ces outils seront dâune qualitĂ© suffisante et seront assez correctement maintenus pour bĂ©nĂ©ficier Ă tout lâĂ©cosystĂšme des dĂ©veloppeurs, y compris hors du contexte de Stateless Ethereum.
Un autre protocole de synchronisation
La plus importante des leçons Ă retenir du sommet est que la synchronisation est la premiĂšre Ă©tape majeure pour Stateless Ethereum. Plus prĂ©cisĂ©ment, nous devons trouver un moyen pour que les nouveaux nĆuds rĂ©cupĂšrent le trie dâĂ©tat actuel sans se reposer sur la primitive rĂ©seau GetNodeData
. Tant quâune autre mĂ©thode nâa pas Ă©tĂ© trouvĂ©e (beam sync et fast sync en dĂ©pendent), les efforts pour arriver Ă Stateless Ethereum seront entravĂ©s voire contre-productifs. Il nous faut maintenant creuser un peu ce sujet pour expliquer en quoi il pose problĂšme. Si vous nâĂȘtes pas familier avec les bases de lâĂ©tat dans Ethereum, je recommande de consulter mes prĂ©cĂ©dents articles dans cettes sĂ©rie.
Dâabord, dĂ©mystifions ce jargon. Il nâexiste pas vraiment de dĂ©finition technique pour le terme « primitive rĂ©seau » dans ce contexte, sinon « la grammaire de base des communications rĂ©seau dâEthereum ». Un client demande « Hola, quelles sont les donnĂ©es du nĆud avec le hash 0xtoto
? Et un pair peut rĂ©pondre « Hmm, câest 0xlulu
». Dans la plupart des cas, la rĂ©ponse contient des hashs supplĂ©mentaires de nĆuds fils dans le trie, que lâon peut ensuite requĂȘter de la mĂȘme maniĂšre. Ce jeu de colin-maillard continue jusquâĂ ce que le requĂ©rant soit satisfait, gĂ©nĂ©ralement aprĂšs avoir demandĂ© chacun des 400 millions de nĆuds dans le trie dâĂ©tat actuel.
Cette synchronisation peut quand mĂȘme ĂȘtre rapide parce quâun client est Ă©videmment multi-tĂąches et peut demander Ă de nombreux autres nĆuds complets des fragments diffĂ©rents de lâĂ©tat en mĂȘme temps. Mais il reste un problĂšme plus fondamental dĂ» Ă la façon dont fonctionne la primitive : ceux qui demandent lâĂ©tat â les leechers â le font Ă leur convenance, et il ne peuvent obtenir ce dont ils ont besoin que de seeders, des nĆuds avec un Ă©tat complet. Cette relation asymĂ©trique constitue la base du fonctionnement actuel et, jusquâici, tout va bien en raison de deux faits liĂ©s concernant le rĂ©seau. Dâabord, il existe un nombre suffisant de nĆuds complets qui prĂ©sentent lâĂ©tat aux requĂȘtes. Ensuite, ceux qui demandent lâĂ©tat finissent par devenir des nĆuds complets, et la demande dâĂ©tat se limite dâelle-mĂȘme.
Nous voyons maintenant en quoi cela reprĂ©sente un problĂšme pour un Ethereum sans Ă©tat : dans ce dernier paradigme, les nĆuds qui ne conservent pas les donnĂ©es de lâĂ©tat vont demander continĂ»ment des donnĂ©es. Sâil est plus facile de faire tourner un nĆud sans Ă©tat quâun nĆud complet (câest le cas), nous pouvons nous attendre Ă ce que le nombre de ceux-lĂ dĂ©passe rapidement le nombre de ceux-ci, jusquâĂ ce que le rĂ©seau soit finalement incapable de propager assez rapidement lâĂ©tat. AĂŻe.
Nous nâavons pas le temps dâaller plus avant dans les dĂ©tails. Je vous renvoie Ă la prĂ©sentation de ce problĂšme par Piper, et nous allons pouvoir passer aux solutions Ă©mergentes, quâil sâagisse dâamĂ©liorer le protocole de synchronisation de lâĂ©tat, dâattĂ©nuer le problĂšme ou de le rĂ©soudre complĂštement. Voici les trois protocoles les plus prometteurs :
Ethereum Snapshot Protocol (SNAP). Nous en avons dĂ©jĂ parlĂ©, mais je lâavais appelĂ© state tiling, « mosaĂŻque de lâĂ©tat ». Il a Ă©tĂ© plus longuement dĂ©crit par Peter dans le repo devp2p. Snap sĂ©pare lâĂ©tat en quelques parties de grande taille avec leurs preuves (de lâordre de 10000 nĆuds de trie) qui peuvent ĂȘtre rĂ©assemblĂ©es pour constituer un nĆud complet, et en un court laps de temps obtenir une image presque valide de lâĂ©tat en accolant une centaine de racines dâĂ©tat similaires. Pour finir, le client complĂšte cette image en repassant Ă getNodeData
, ceci jusquâĂ obtenir un Ă©tat valide.
Fire Queenâs Sync. Pas de grand changement depuis ce qui en a Ă©tĂ© dit dans le premier article sur lâarbre des technologies, sinon pour le nom, qui est une combinaison de firehose (bouche dâincendie) et Red Queenâs. Ce sont des propositions trĂšs similaires de remplacement de getNodeData
par un autre ensemble de primitives pour divers aspects de lâĂ©tat.
Merry-go-round. Il sâagit dâune nouvelle idĂ©e exposĂ©e rapidement sur ethresear.ch et plus concrĂštement dĂ©crite dans les notes. Dans cette synchronisation en manĂšge, tout lâĂ©tat est passĂ© dans un ordre prĂ©dĂ©terminĂ©, afin que tous les participants diffusent la mĂȘme partie de lâĂ©tat au mĂȘme moment. Pour synchroniser tout lâĂ©tat, il faut terminer une « rĂ©volution » complĂšte sur le manĂšge en ayant couvert toutes les parties de lâĂ©tat. Ce concept possĂšde quelques propriĂ©tĂ©s intĂ©ressantes. Dâabord, il permet aux nouveaux nĆuds de contribuer immĂ©diatement Ă la propagation de lâĂ©tat au lieu de ne devenir utiles au rĂ©seau quâaprĂšs une synchronisation complĂšte. Ensuite, il inverse le modĂšle actuel de synchronisation gouvernĂ©e par la demande oĂč ceux qui nâont pas de donnĂ©es peuvent demander des parties de lâĂ©tat Ă volontĂ©. Ces nouveaux nĆuds sauraient quelles parties de lâĂ©tat seraient offertes Ă un moment donnĂ© et pourraient sâajuster en consĂ©quence.
La derniĂšre mĂ©thode de synchronisation qui vaille la peine dâĂȘtre mentionnĂ©e ici est beam sync, maintenant supportĂ©e par deux clients. Beam sync repose toujours sur getNodeData
, mais il offre un point dâentrĂ©e idĂ©al pour expĂ©rimenter et collecter des donnĂ©es pour les autres mĂ©thodes de synchronisation. Il faut noter quâil reste de nombreuses inconnues concernant la synchronisation et quâil est important de multiplier les approches diffĂ©rentes pour rĂ©soudre ce problĂšme. Les prochains mois pourront ressembler Ă une sorte de hackathon, dont les idĂ©es seront prototypĂ©es et testĂ©es. IdĂ©alement, les meilleurs aspects de chacun de ces protocoles pourront ĂȘtre assemblĂ©s dans un nouveau standard pour Stateless Ethereum.
Prototype de spécification de signature
Il existe une Ă©bauche dans le repository des spĂ©cifications pour Stateless Ethereum qui dĂ©crit Ă un haut niveau la structure dâune signature tĂ©moin de bloc, et les sĂ©mantiques de crĂ©ation et de modification depuis le trie dâĂ©tat. Le but de ce document est de dĂ©finir sans ambiguĂŻtĂ© les signatures afin que les programmeurs, quelque soit le langage utilisĂ©, puissent Ă©crire leur propre implĂ©mentation avec une bonne probabilitĂ© dâaboutir au mĂȘme rĂ©sultat quâune autre Ă©crite dâaprĂšs les mĂȘmes spĂ©cifications.
Comme je lâai mentionnĂ© dans le dernier call digest, il ne semble pas quâil y ait des inconvĂ©nients Ă Ă©crire une implĂ©mentation de rĂ©fĂ©rence pour les signatures tĂ©moins de bloc et Ă lâincorporer dans les clients existant Ă fins de tests. Une fonctionnalitĂ© de prototype de signature serait une option externe Ă activer, et quelques testeurs sur le rĂ©seau produisant et relayant les signatures fourniraient des informations intĂ©ressantes que les chercheurs pourraient intĂ©grer dans les amĂ©liorations ultĂ©rieures.
Deux problĂšmes doivent ĂȘtre « rĂ©solus » avant que les signatures soient assez rĂ©silientes pour ĂȘtre considĂ©rĂ©es prĂȘtes pour une gĂ©nĂ©ralisation de leur usage.
Indexation des signatures. Celle-ci est relativement simple : nous avons besoin dâune maniĂšre fiable de dĂ©terminer si la signature correspond Ă un bloc donnĂ© et Ă son Ă©tat associĂ©. Cela pourrait ĂȘtre aussi simple quâun champ witnessHash
dans lâen-tĂȘte du bloc, ou bien quelque chose similaire mais dâune autre maniĂšre.
Validation de transactions sans Ă©tat. Câest un problĂšme intĂ©ressant apparu dĂšs le dĂ©part et dĂ©crit exhaustivement sur les forums de etheresear.ch. En bref, les clients doivent rapidement vĂ©rifier si les transactions entrantes (qui attendent dâĂȘtre minĂ©es) sont au moins Ă©ligibles pour ĂȘtre incluses dans un futur bloc. Cela empĂȘche les attaquants de spammer le rĂ©seau par des transactions invalides. La vĂ©rification actuelle, cependant, demande dâaccĂ©der Ă des donnĂ©es faisant partie de lâĂ©tat, Ă savoir le nonce et le solde du compte de lâexpĂ©diteur. Un client sans Ă©tat ne pourra pas effectuer cette vĂ©rification.
Il y a certainement plus de pain sur la planche que ces deux problĂšmes spĂ©cifiques qui nous attendent avant que de pouvoir disposer dâun prototype fonctionnel de signatures, mais ces deux-lĂ doivent absolument ĂȘtre rĂ©solus pour mettre Ă disposition un prototype viable de nĆud beam sync prĂšs de chez vous.
EVM
Comme dans la version originelle de lâarbre des technologies, des changements seront nĂ©cessaires Ă lâintĂ©rieur de lâabstraction de lâEVM. Les signatures, en particulier, doivent ĂȘtre gĂ©nĂ©rĂ©es et propagĂ©es Ă travers le rĂ©seau, et cette activitĂ© doit ĂȘtre prise en compte dans les opĂ©rations de lâEVM. Les sujets liĂ©s Ă cette Ă©tape sont liĂ©s aux incitations et aux coĂ»ts induits, ainsi quâĂ la façon de les estimer et de les implĂ©menter avec un impact minimal sur les couches supĂ©rieures.
Prise en compte du gaz des signatures. Rien ne change par rapport aux articles prĂ©cĂ©dents. Chaque transaction sera responsable dâune petite partie de la signature du bloc. La gĂ©nĂ©ration dâicelle implique des calculs effectuĂ©s par le mineur du bloc et se verra donc associer un coĂ»t en gaz, payĂ© par lâĂ©metteur de la transaction.
Merklisation du code. Lâune des principales composantes dâune signature est le code qui lâaccompagne. Sans cela, une transaction contenant un appel Ă un contrat devrait contenir le code complet de celui-ci pour vĂ©rifier son codeHash
, ce qui peut reprĂ©senter beaucoup de donnĂ©es selon le contrat. La « merklisation » du code consiste Ă Ă©clater le bytecode du contrat pour que seule la portion du code appelĂ© soit requise pour gĂ©nĂ©rer et vĂ©rifier la signature tĂ©moin dâune transaction. Cette technique rĂ©duit drastiquement la taille moyenne des signatures tĂ©moins, mais nâa pas encore Ă©tĂ© Ă©tudiĂ©e Ă fond.
Les changements de UNGAS / Versionless Ethereum ont maintenant Ă©tĂ© retirĂ©s du « chemin critique » de Stateless Ethereum. Ces fonctionnalitĂ©s restent potentiellement intĂ©ressantes mais il est devenu clair au cours du sommet que leurs mĂ©rites et leurs particularitĂ©s peuvent et doivent ĂȘtre traitĂ©s indĂ©pendamment des buts du sans-Ă©tat.
La transition vers un trie binaire
Le passage Ă une structure de trie binaire de lâĂ©tat est la clef pour obtenir des tailles de signatures assez petites pour ĂȘtre diffusĂ©es dans le rĂ©seau sans se heurter Ă des problĂšmes de bande passante ou de latence. On devrait thĂ©oriquement obtenir au moins une rĂ©duction dâun facteur 3, mais elle devrait ĂȘtre en pratique moins importante (Ă cause de la taille du code des contrats dans les signatures, dâoĂč lâimportance potentielle de la merklisation du code).
La transition vers une reprĂ©sentation des donnĂ©es complĂštement diffĂ©rente constitue un changement radical, et lâactivation de cette transition par un hard fork sera un processus dĂ©licat. Deux stratĂ©gies soulignĂ©es dans lâarticle prĂ©cĂ©dent restent inchangĂ©es :
Progressive. Le trie dâĂ©tat sĂ©naire serait transformĂ© petit Ă petit sur une longue pĂ©riode de temps. Toute transaction, toute exĂ©cution de lâEVM touchant Ă une partie de lâĂ©tat encoderait de ce fait les changements de lâĂ©tat dans la nouvelle forme binaire. Cela implique lâadoption dâune structure de trie « hybride » laissant les parties dormantes de lâĂ©tat dans leur reprĂ©sentation sĂ©naire actuelle. Le processus resterait de fait toujours incomplet et complexifierait lâimplĂ©mentation des clients, mais isolerait en grande partie les utilisateurs et les dĂ©veloppeurs dâapplications des changements opĂ©rĂ©s en couche 0.
En masse. Cette stratĂ©gie calculerait une nouvelle reprĂ©sentation binaire du trie de lâĂ©tat Ă un moment prĂ©dĂ©terminĂ©, puis continuerait sous forme binaire une fois le nouvel Ă©tat calculĂ©. Bien que plus simple Ă mettre en Ćuvre, une action de masse demande la coordination de tous les opĂ©rateurs de nĆuds, et elle impliquerait presque certainement une perturbation limitĂ©e du rĂ©seau en affectant les utilisateurs et les dĂ©veloppeurs pendant la transition.
Il existe cependant une nouvelle proposition de transition qui offre un compromis entre ces deux stratégies. Elle est intégralement décrite sur les forums de ethresear.ch.
Overlay. Dans ce scĂ©nario de superposition, les nouvelles valeurs issues de transactions aprĂšs un certain temps sont stockĂ©es directement dans un arbre binaire situĂ© « au-dessus » du sĂ©naire, alors que lâarbre sĂ©naire « historique » est converti en tĂąche dâarriĂšre-plan. Quand la couche de base aura Ă©tĂ© complĂštement convertie, les deux pourront ĂȘtre fusionnĂ©es.
Un facteur supplĂ©mentaire Ă prendre en compte pour la transition vers un trie binaire est lâorganisation de la base de donnĂ©es des clients. Actuellement, tous les clients utilisent lâapproche « naĂŻve » pour le trie dâĂ©tat, en stockant chaque nĆud du trie sous forme de paire [clef, valeur] oĂč le hash du nĆud est la clef. Il est possible que la stratĂ©gie de transition puisse offrir aux clients lâopportunitĂ© de basculer vers une autre structure de base de donnĂ©es, suivant en cela lâexemple de turbo-geth.
Un vrai Ethereum sans Ă©tat
Les derniĂšres parties de lâarbre sâassembleront aprĂšs avoir testĂ© et amĂ©liorĂ© le prototype de signature tĂ©moin, effectuĂ© les changements nĂ©cessaires sur lâEVM et passĂ© le trie dâĂ©tat en binaire. Ces quĂȘtes plus lointaines et ces quĂȘtes parallĂšles doivent ĂȘtre rĂ©alisĂ©es Ă la fin, mais il vaut mieux ne pas trop y penser avant que des sujets plus pressants aient Ă©tĂ© terminĂ©s.
Signatures obligatoires. Les signatures tĂ©moins doivent ĂȘtre gĂ©nĂ©rĂ©es par les mineurs, et on ne sait pas si ceux-ci vont chercher Ă Ă©viter les quelques millisecondes de gĂ©nĂ©ration de la signature. Cela peut ĂȘtre en partie compensĂ© en ajustant les frais que les mineurs touchent des signatures partielles incluses avec les transactions, mais le moyen le plus sĂ»r est de lâintĂ©grer au protocole dâEthereum. Ce changement ne peut se produire quâaprĂšs nous ĂȘtre assurĂ©s que tout fonctionne comme prĂ©vu, et il se retrouve donc Ă la fin de lâarbre.
DĂ©coupage des signatures. Autre fonctionnalitĂ© Ă envisager, la possibilitĂ© pour un rĂ©seau sans Ă©tat de diffuser des morceaux de signatures au lieu de blocs entiers. Cela bĂ©nĂ©ficierait surtout aux nĆuds Ă Ă©tat partiel, qui pourraient choisir de conserver les parties de lâĂ©tat qui les intĂ©ressent en premier lieu puis de rĂ©cupĂ©rer dâautres parties pour dâautres transactions.
Accumulateurs historiques. Conçus Ă lâorigine comme un systĂšme mathĂ©matique vaudou Ă divulgation nulle de connaissance, un accumulateur historique faciliterait grandement la vĂ©rification dâune signature historique. Cela permettrait Ă un nĆud sans Ă©tat dâeffectuer des requĂȘtes et des vĂ©rifications sur, par exemple, le solde historique dâun compte qui lâintĂ©resse, sans avoir besoin de rĂ©cupĂ©rer une partie spĂ©cifique dâĂ©tat archivĂ©.
DonnĂ©es de chaĂźne sur DHT. Bien que lâidĂ©e dâun rĂ©seau de distribution de donnĂ©es dâĂ©tat par table de hachage ait Ă©tĂ© plus ou moins abandonnĂ©, il resterait utile et plus facile Ă implĂ©menter pour les donnĂ©es de chaĂźne historiques comme les reçus de transactions. Cela pourrait fournir une autre approche pour permettre aux clients sans Ă©tat dâaccĂ©der Ă volontĂ© aux anciennes donnĂ©es qui seraient normalement obtenues depuis un nĆud archive.
Restez chez vous, restez en ligne
Merci dâavoir lu, et merci pour tous les commentaires positifs que jâai rĂ©cemment reçu sur ces mises Ă jour. Jâai quelque chose de plus⊠magique en prĂ©vision pour les articles suivants sur la recherche concernant Stateless Ethereum, que je posterai occasionnellement sur le forum Fellowship of the Ethereum Magicians, ainsi que sur ce blog quand je le jugerai utile. En attendant, restez Ă distance et lavez-vous souvent les mains !
Comme toujours, si vous avez des retours, des questions ou des requĂȘtes de nouveaux sujets, vous pouvez joindre @gichiba ou @JHancock sur Twitter.