Auteur : Anthony Quinn
Traduction : @psychomb
Depuis que le lancement du testnet incitatif (ITN) a marquĂ© lâarrivĂ©e de lâĂšre Shelley lâannĂ©e derniĂšre, la plateforme Cardano est entrĂ©e dans une pĂ©riode de dĂ©veloppement rapide. Le protocole de consensus Ouroboros Classic fait vivre Cardano Byron et la cryptomonnaie ada depuis 30 mois, et nous allons bientĂŽt passer Ă Ouroboros Praos. Câest la version de notre protocole de preuve dâenjeu (PoS) qui, dans un premier temps, permettra Ă Shelley de fonctionner au fur et Ă mesure de la dĂ©centralisation de Cardano. Il intĂšgre le processus de mise dâenjeu avec des rĂ©compenses monĂ©taires pour les dĂ©tenteurs dâada et les propriĂ©taires de groupe dâenjeu.
Nous avons mis Ă jour Cardano le 20 fĂ©vrier dernier avec une bifurcation (ou âhard forkâ) qui a fait passer le rĂ©seau principal du protocole de consensus original, Ouroboros Classic, Ă une version mise Ă jour, Ouroboros BFT. Cette bifurcation utilisant Ouroboros BFT, une version allĂ©gĂ©e du protocole conçue pour nous aider Ă passer Ă Praos, a entamĂ© une pĂ©riode de transition tout en empĂȘchant tout comportement malveillant. Beaucoup ne lâont probablement mĂȘme pas remarquĂ©. Pour les utilisateurs du portefeuille Daedalus, cela signifiait une mise Ă jour logicielle standard. Les plateformes dâĂ©changes devaient faire la mise Ă jour manuellement, mais elles avaient plusieurs semaines pour le faire et nous Ă©tions lĂ pour les aider.
LâĂ©vĂ©nement suivant a Ă©tĂ© le âByron rebootâ, le 30 mars. Ce dernier a permis la mise en place dâun code totalement nouveau pour de nombreux composants de Cardano, y compris un nouveau nĆud pour soutenir la dĂ©lĂ©gation et la dĂ©centralisation, ainsi que les futures fonctionnalitĂ©s de Shelley. Un grand avantage de ce nouveau code est quâil a Ă©tĂ© conçu pour ĂȘtre modulaire, de sorte que de nombreux composants peuvent ĂȘtre modifiĂ©s sans affecter les autres.
Ouroboros BFT servira Ă son tour de point de dĂ©part pour la bifurcation Shelley, qui se produira une fois que nous serons satisfaits du rĂ©seau de test Haskell (âTestnet Haskellâ). Cette deuxiĂšme bifurcation sera un processus similaire Ă celle du mois de fĂ©vrier pour les plasteformes dâĂ©changes, les dĂ©tenteurs dâada et les utilisateurs de portefeuilles, et sera aussi, espĂ©rons-le, non-Ă©vĂ©nement tout comme la premiĂšre.
Cependant, si tout semble lisse en surface, beaucoup dâactivitĂ©s se dĂ©roulent cachĂ©es. Comme un canard qui nage sereinement dans un Ă©tang - alors que ses pattes pagaient furieusement sous les eaux calmes - nos ingĂ©nieurs travaillent au maximum.
Nous avons donc rĂ©uni deux des principaux ingĂ©nieurs du projet Cardano, Duncan Coutts et Edsko de Vries, pour savoir comment ils sây sont pris. Duncan est le responsable de lâarchitecture de Cardano depuis trois ans, et Ă eux deux, Duncan et Edsko cumulent 35 ans dâexpĂ©riences de Haskell, le langage de programmation utilisĂ© pour dĂ©velopper Cardano.
Duncan, comment vous y ĂȘtes-vous pris ?
Comme dĂ©crit dans la feuille de route Cardano, les ingĂ©nieurs dâI.O.H.K. croient en des mises Ă jour de code sans heurts. Au lieu dâessayer de faire le saut de Ouroboros Classic Ă Praos en une seule mise Ă jour - ce qui aurait Ă©tĂ© une tĂąche incroyablement complexe - il sâagit ici dâune approche en deux Ă©tapes utilisant Ouroboros BFT comme intermĂ©diaire (figure ci-dessous). Le code BFT est compatible Ă la fois avec les nĆuds fĂ©dĂ©rĂ©s de lâĂšre Byron et les nĆuds de type Shelley mis en place lors du redĂ©marrage de Byron (Byron Reboot). Câest comme une course de relais : un coureur (dans notre cas, exĂ©cutant un protocole) entre dans la zone de transfert oĂč lâautre coureur lâattend ; ils synchronisent leurs vitesses (de sorte quâelles sont parfaitement compatibles entre elles) et se passent le tĂ©moin (le rĂ©seau principal), puis le nouveau coureur avec le tĂ©moin continue Ă partir de cette zone de transfert pour le tour suivant.
Le programme Daedalus Flight nous a permis de dĂ©velopper et de tester rapidement un nouveau portefeuille et, une fois que tout le monde lâutilise sur le rĂ©seau principal, et que nous avons fini de changer les nĆuds principaux, lâancien code devient alors inutile. Nous sommes actuellement dans cette phase de transition, avec un nouveau portefeuille Daedalus sur le rĂ©seau principal, sorti le 24 avril.
Notre objectif est dâavoir une âentrĂ©e gracieuse dans Shelleyâ, comme le dĂ©crit Charles Hoskinson, C.E.O. dâI.O.H.K., dans sa vidĂ©o concernant la bifurcation Ă venir. Un outil essentiel pour y parvenir a Ă©tĂ© la crĂ©ation dâun combinateur de bifurcation.
Cela ressemble Ă un nom de machine infernale. Quâest-ce que câest ?
Un combinateur est juste un terme technique dĂ©signant quelque chose qui arrange plusieurs choses entre elles. Par exemple, lâaddition est une combinatoire sur des nombres. Un combinateur de bifurcation combine deux protocoles en un seul. Nous appelons cela une combinaison sĂ©quentielle des deux protocoles parce quâil exĂ©cute le premier protocole pendant un certain temps et Ă un moment donnĂ©, il passe au second. Dans notre cas, il sâagit de deux versions dâOuroboros lorsque nous passons de Ouroboros BTF Ă Praos.
Lâastuce a consistĂ© en lâutilisation de modules distincts, faisant leur travail le plus indĂ©pendamment possible les uns des autres et aussi de la blockchain. La simplicitĂ© est ici la clĂ©, ainsi que lâabstraction - processus qui consiste Ă Ă©liminer les dĂ©tails. La plupart des modules de consensus nâont mĂȘme pas besoin de savoir quâils traitent une cryptomonnaie et pourraient mettre Ă peu prĂšs nâimporte quoi sur une blockchain. Par exemple, nous avons organisĂ© des sĂ©minaires en utilisant lâexemple dâun registre de PokĂ©mons sur une blockchain Ouroboros. La seule chose qui diffĂšre, ce sont les rĂšgles du registre ; le consensus est le mĂȘme. Il suffit de le mettre en place - âlâinstancierâ dans le jargon de la programmation - avec les rĂšgles permettant de jouer aux PokĂ©mons plutĂŽt que pour gĂ©rer une comptabilitĂ© de type UTXO [pour les lecteurs ayant un intĂ©rĂȘt technique, Edsko approfondira le processus dââabstractionâ et les combinateurs dans un prochain billet de blog].
Quand vous le dites, cela a lâair simple
En rĂ©alitĂ©, câest dĂ©licat parce que Cardano gĂšre la cryptomonnaie ada, et plein dâautres choses en mĂȘme temps. Imaginez vous changer toutes les roues dâune voiture pendant que vous roulez avec en plus une une caravane. Nous devons donc nous assurer que nous pouvons le faire de maniĂšre totalement sĂ»re.
Nous aurions pu nous attaquer Ă ce problĂšme de maniĂšre ponctuelle, mais il Ă©tait logique de le faire de maniĂšre gĂ©nĂ©rique en utilisant un combinateur de protocole. Nous avons choisi cette voie parce que nous obtenons un meilleur rĂ©sultat et que les tests qui sont essentiels pour garantir le fonctionnement du code sont beaucoup plus faciles. De plus, il y aura dâautres bifurcations difficiles Ă venir, ce qui a rendu ce choix encore plus clair. Par exemple, lorsque nous approcherons du point culminant du dĂ©veloppement de Cardano et que nous traverserons pour cela les Ă©poques Goguen, Basho et Voltaire, il y faudra prĂ©voir au moins une bifurcation Ă chacune de ces Ă©tapes.
Comment avez-vous fait face aux difficultés ?
Eh bien, tout dâabord, nous avons dĂ» le faire sans nous tourner vers la recherche. Les chercheurs dĂ©crivent un seulement un protocole en tant que chose parfaite et autonome. Mais nous nâen sommes pas lĂ . Nous essayons de faire fonctionner Ouroboros Praos aprĂšs avoir commencĂ© avec une blockchain qui utilisait quelque chose dâautre. Ce sur quoi Edsko travaille, passer dâun protocole Ă lâautre de maniĂšre gĂ©nĂ©rique, nâest tout simplement pas Ă©tudiĂ© par la recherche. Et câest difficile, câest compliquĂ©. Tous les dĂ©tails nĂ©cessitent beaucoup de rĂ©flexion, de se creuser la tĂȘte. Mais passer dâun code Cardano Ă lâautre nâest pas le genre de chose que les universitaires peuvent sâattendre Ă voir publiĂ©. Cela nâa pas dâaspect nouveau et est donc considĂ©rĂ© comme une simple question de mise en Ćuvre.
Edsko, pouvez-vous nous donner un exemple ?
Comme lâa dit Duncan, pour les chercheurs, ces questions de mise en Ćuvre sont insignifiantes, mais les traiter reprĂ©sente 99 % de ce que nous faisons. Prenez le problĂšme du temps pour une blockchain. Câest ce contre quoi je me suis battu pendant quelques semaines. Le temps est divisĂ© en crĂ©neaux oĂč la blockchain peut contenir au maximum un bloc par crĂ©neau. Dans le monde rĂ©el, nous devons souvent faire la conversion entre le nombre de crĂ©neaux et le temps rĂ©el, par exemple lorsquâun nĆud doit savoir que câest son tour de gĂ©nĂ©rer le bloc suivant. Câest fondamental pour Cardano, mais la longueur dâun crĂ©neau changera aprĂšs la bifurcation. Pour Byron, un crĂ©neau dure 20 secondes ; pour Shelley, il sera de deux secondes, voire peut-ĂȘtre mĂȘme dâune seconde. Pour compliquer les choses, le moment exact de la bifurcation est dĂ©cidĂ© sur la blockchain elle-mĂȘme. Or, je dois savoir quand le point de bascule est atteint. Câest un dilemme : pour faire des conversions de crĂ©neaux en temps, jâai besoin de connaĂźtre lâĂ©tat de la blockchain, mais pour en connaĂźtre lâĂ©tat, jâai besoin de connaĂźtre les conversions de crĂ©neaux !
Câest un vĂ©ritable dilemme de la poule et de lâĆuf, avec de nombreuses choses complexes Ă dĂ©mĂȘler. Nous devons ĂȘtre trĂšs prĂ©cis dans notre façon de faire les choses. Câest peut-ĂȘtre insignifiant en thĂ©orie, mais il est trĂšs difficile de dĂ©mĂȘler les choses et de sâassurer que ce nâest pas un problĂšme circulaire.
Nous ne pouvons pas nous permettre de nous tromper, alors comment savez-vous que vous avez raison ?
Duncan : Câest une excellente question. Ma rĂ©ponse est que lâon attaque cela sur deux plans. Le premier est intellectuel : vous analysez le problĂšme, vous faites les calculs, vous discutez avec vos collĂšgues et vous luttez avec ce problĂšme jusquâĂ ce que vous puissiez voir comment tout cela sâassemble. DeuxiĂšmement, nous faisons tous nos tests avec QuickCheck pour nous assurer que le code fait bien ce que nous pensons quâil fait. Nous effectuons des tests approfondis qui nous amĂšnent vraiment dans des cas de figure inhabituels auxquels personne ne pourrait penser, y compris dans le cas de ce changement de consensus. Nous pouvons effectuer 100 000 tests chaque fois que nous changeons une ligne de code. [Lars BrĂŒnjes a Ă©crit sur la façon dont John Hughes, un des crĂ©ateurs de Haskell, a aidĂ© I.O.H.K. Ă dĂ©velopper ses stratĂ©gies de test].
Edsko : Oui, je suis dâaccord avec ces deux points. En ce qui concerne le combinateur, je rĂ©sous ces choses en pensant aux garanties que le code que jâĂ©cris doit fournir, et aux garanties quâil doit, Ă son tour, obtenir du registre. Jâesquisse une preuve mathĂ©matique que ce raisonnement âsi - alorsâ est effectivement justifiĂ©, puis je me tourne vers les Ă©quipes de la mĂ©thode formelle. Les Ă©quipes de mĂ©thodes formelles sont les personnes qui Ă©tablissent les rĂšgles mathĂ©matiques qui dĂ©crivent la blockchain et elles peuvent ensuite en modifier les rĂšgles de maniĂšre Ă ce quâelles fournissent les garanties requises.
En ce qui concerne le deuxiĂšme point de Duncan, je sais que le problĂšme de temps que jâai mentionnĂ© plus haut est correct en rĂ©flĂ©chissant bien, mathĂ©matiquement, et en testant. Il est facile de prendre des dĂ©cisions en matiĂšre de temps lorsque nous disposons de toute la blockchain, mais câest difficile lorsque nous devons faire des prĂ©visions sur lâavenir. Heureusement, la façon dont nous organisons les choses me permet de crĂ©er facilement des blockchains de tests. Ainsi, je peux crĂ©er une blockchain complĂšte, puis la couper en deux. Je prends la premiĂšre moitiĂ© et je la considĂšre comme Ă©tant dans le prĂ©sent ; et je place lâautre moitiĂ© dans le futur. Ensuite, je peux utiliser le âprĂ©sentâ (premiĂšre moitiĂ©) pour faire des prĂ©dictions sur le âfuturâ (deuxiĂšme moitiĂ©) et vĂ©rifier ces prĂ©dictions par rapport Ă lâensemble (sur lequel les calculs sont faciles). Si les deux correspondent, je sais que tout est correct.
Quand avez-vous commencé à travailler là -dessus ?
Juste aprĂšs que Duncan eut lâidĂ©e gĂ©niale dâOuroboros BFT. Jâai donc pensĂ© au combinateur pendant environ 18 mois. CâĂ©tait un objectif de conception dĂšs le dĂ©but de notre réécriture modulaire dâOuroboros Ă partir dâoctobre 2018, avec mes premiĂšres lignes de code dans le dĂ©pĂŽt GitHub. Nous avons eu une dĂ©monstration du prototype avec Ouroboros BFT et Praos peu aprĂšs, en dĂ©cembre 2018.
Et combien de personnes ont été impliquées ?
Duncan : Beaucoup de gens ont travaillĂ© sur le code de consensus, mais chaque fois que nous avons quelque chose de vraiment difficile, comme ce combinateur, nous le donnons Ă Edsko : câest notre ingĂ©nieur logiciel hors pair ! Câest de la programmation Haskell telle de lâescalade libre, sans les cordes de sĂ©curitĂ© apportĂ©es par les mĂ©thodes formelles.
Un dernier mot ?
Duncan : Le code qui fonctionnait il y a un mois est en train dâĂȘtre supprimĂ© et bientĂŽt il nâexistera plus. Une fois que tout le monde aura basculĂ© sur le nouveau code sur le rĂ©seau et que nous aurons fini de changer les nĆuds principaux, lâancien code sera inutile. Nous sommes actuellement dans cette phase de transition et personne ne crie que le ciel nous tombe sur la tĂȘte. Personne ne lâa remarquĂ©.
Edsko : Câest une belle rĂ©ussite en soi. LâidĂ©e de Ouroboros BFT Ă©tait cruciale pour la transition, mais elle ne sera plus pertinente une fois que nous aurons fait la transition vers Shelley. Cela a Ă©tĂ© une façon pour nous de nous dĂ©barrasser vĂ©ritablement de lâancien code, ce qui est souvent trĂšs difficile Ă faire, comme les banques le savent Ă leurs dĂ©pens.
Duncan : Et si tout fonctionne bien, vous ne remarquerez rien.
Traduction de : https://iohk.io/en/blog/posts/2020/05/07/combinator-makes-easy-work-of-shelley-hard-fork/