đŸ‡«đŸ‡· Le "Combinateur" facilite la bifurcation vers Shelley

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/

1 Like