Taproot : tout comprendre de la nouvelle mise à jour de Bitcoin

La mise à jour Taproot en quelques mots

Taproot est la première mise à jour d’ampleur du protocole Bitcoin depuis la mise en place de SegWit en 2017. Elle apportera essentiellement des améliorations en termes de confidentialité et d’efficacité des transactions, notamment lorsque ces-dernières impliquent des scripts complexes. Pour l’utilisateur moyen, elle passera donc relativement inaperçu, tandis qu’elle apportera de nombreux avantages dans le cadre d’une utilisation plus avancée de Bitcoin.

Les nouveautés apportées par Taproot

Quelques rappels sur les transactions Bitcoin

Pour bien comprendre les apports de Taproot, il faut prendre le temps de se pencher sur le fonctionnement des transactions Bitcoin. Classiquement, lorsqu’on souhaite dépenser des bitcoins dans une transaction, il faut signer cette transaction avec la clé privée correspondant à l’adresse où se trouvent ces bitcoins. C’est un fonctionnement auquel tous les utilisateurs réguliers de Bitcoin sont habitués, mais il ne s’agit en fait que d’un cas particulier du mécanisme général des transactions Bitcoin.

En effet, en toute généralité, pour dépenser des bitcoins il faut remplir toutes les conditions nécessaires du script qui verrouille ces bitcoins. Ainsi, dans le cas courant où l’on dépense des bitcoins en signant la transaction, c’est tout simplement parce que la condition à remplir pour déverrouiller le script est de fournir une signature provenant de la bonne clé privée. Mais il existe d’innombrables autres possibilités, avec des scripts aux conditions plus complexes :

  • timelock, où les fonds ne pourront être dépensés qu’une fois passé un certain bloc (ils sont bloqués jusqu’à une “date” définie),
  • multi-signature, où plusieurs signatures parmi un quorum de signatures sont nécessaires pour pouvoir déplacer les fonds,
  • des scripts plus “exotiques”, où n’importe qui fournissant un nombre secret peut dépenser les bitcoins
  • etc, etc.

Il est bien entendu possible de combiner ces conditions dans des scripts complexes, où plusieurs moyens différents permettent de déverrouiller les fonds. C’est par exemple le cas dans l’exemple ci-dessous, où plusieurs “chemins” sont possibles pour dépenser les 0.01 BTC.

illustration of a Bitcoin script with mutliple conditions
Dans cet exemple, il y a trois possibilités pour déverrouiller le script et dépenser les fonds : Alice et Bob signent tous les deux la transaction ; Alice signe seule et elle attend l’expiration d’un timelock ; Bob signe seul, doit fournir un nombre secret et attendre l’expiration d’un timelock.

Cependant, lorsqu’on déverrouille le script, il faut révéler l’intégralité des conditions possibles, même celles qui n’ont pas été utilisées, en plus de la preuve que la condition qui a effectivement servi a bien été satisfaite. Ce fonctionnement présente un double désavantage, à la fois en terme de confidentialité (puisque cela impose de révéler des conditions du script “pour rien”) et en terme d’espace de bloc et donc de frais de transactions (puisque les conditions inutilisées sont tout de même affichées dans le bloc). Ces aspects sont en passe de changer considérablement avec l’arrivée de Taproot.

Confidentialité et efficacité avec Taproot

La mise à jour Taproot apporte notamment deux éléments qui vont dans ce sens :

  • les signatures de Schnorr, un “nouvel” algorithme de signature, plus performant à bien des égards qu’ECDSA (l’algorithme actuel sur Bitcoin), bien que tous deux appartiennent à la même famille des courbes elliptiques,
  • une implémentation de MAST (Merkelized Abstract Syntax Tree), nommée Taproot. Il faut donc distinguer la mise à jour globale et cet élément particulier de celle-ci, qui portent le même nom.

Les signatures de Schnorr ne sont pas seulement plus performantes (comprendre : plus rapidement vérifiables), elles présentent surtout une caractéristique de linéarité très intéressante pour les adresses et transactions multisignatures, qui deviendront indiscernables des adresses et transactions monosignatures, plus classiques. Combinées avec MAST, elles permettront également de ne révéler que la partie réellement utilisée d’un script, économisant ainsi de l’espace dans le bloc et conservant le secret quant aux autres conditions du script.

Dans notre exemple précédent, si Alice dépense seule les 0.01 BTC, avec le timelock, seule cette double condition “Alice signe ET le timelock a expiré” sera visible d’un observateur extérieur, qui n’aura aucune idée que les mêmes bitcoins pouvaient également être dépensé de 2 autres façons. C’est un gain important à la fois en termes de discrétion et d’économie sur les frais de transactions.

Ces gains, on l’a vu, s’appliquent également sur les transactions multi-signatures. Non seulement une transaction multi-signature ressemblera à n’importe quelle transaction simple, mais en plus elle bénéficiera de frais bien moins élevés comparé à actuellement.

a table displaying some ofnthe
Une estimation des poids (et donc des frais) pour les inputs et outputs de transactions mono-signatures et multi-signatures 2-pour-3, par murchandamus. On notera au passage que pour certaines transactions mono-signatures avec plus d’outputs que d’inputs, l’expéditeur n’est finalement pas forcément gagnant. Cependant, pour des transactions multi-signatures, le gain est très net.

Le déroulement de la mise à jour Taproot

La mise à jour Taproot est un soft fork. Cela signifie qu’elle modifie certaines règles de consensus tout en conservant une compatibilité avec les nœuds ne faisant pas la mise à jour et qui continueraient donc à suivre uniquement les anciennes règles du protocole. Une transaction suivant les règles de Taproot sera donc vue comme valide même par des nœuds n’ayant pas fait la mise à jour, mais l’inverse n’est pas forcément vrai et certaines transactions suivant les anciennes règles pourraient être perçues comme invalides par les nœuds mis à jour.

Le code de Taproot est d’ores et déjà présent dans Bitcoin Core, l’implémentation principale de Bitcoin. Il faut maintenant qu’il soit activé, c’est-à-dire que les nœuds se coordonnent pour commencer à appliquer les règles de Taproot tous en même temps. En effet, en l’absence d’une telle coordination, les mises à jour de Bitcoin seraient chaotiques, avec des disparités importantes dans les règles à appliquer et donc, finalement, un consensus éclaté.

Avec l’expérience acquise lors de l’épisode SegWit, c’est ce point précis de l’activation qui a été (et est toujours) la source de débats animés. Ainsi, même si Taproot fait consensus et que personne ne s’oppose à son activation dans Bitcoin, les avis sont plus divisés quant à la manière de le faire.

Un long débat sur le processus d’activation

Lors d’un soft fork, deux grands mécanismes d’activation sont possibles. D’un côté, la mise à jour peut-être activée par les mineurs : on parle alors de Miner Activated Soft Fork (MASF). L’idée est la suivante : les mineurs ont un certain temps pour mettre à jour leur nœud vers la nouvelle version incorporant Taproot. Une fois qu’un mineur (ou, en pratique, une pool de minage) a effectué la mise-à-jour, il commence à l’indiquer dans tous les blocs qu’il produit. Cela permet à l’ensemble du réseau de suivre facilement, en observant les blocs, quel pourcentage du hashrate total de Bitcoin a fait la mise à jour et est prêt à appliquer les nouvelles règles associées. Si un certain seuil est atteint (pour Taproot il s’agit de 90% du hashrate) alors la mise à jour est activée et tous les nœuds utilisant la dernière version commencent à en appliquer les règles. Si la durée prédéfinie est dépassée sans que le seuil ne soit atteint, alors le soft fork est annulé (bien que l’on puisse ensuite retomber sur un autre mécanisme d’activation).

Un autre mécanisme possible est l’activation par les utilisateurs ou User Activated Soft Fork (UASF). C’est ce mécanisme qui a été utilisé en 2017 pour SegWit, lorsque l’activation par les mineurs a échoué. L’idée est assez simple : on définit une date, le flag day, à partir de laquelle tous les nœuds ayant la mise à jour commencent à appliquer les nouvelles règles, que les mineurs soient prêts ou non. Si une majorité économique de nœuds active la mise à jour de la sorte, cela force les mineurs à se mettre à jour également, car certains de leurs blocs risquent d’être considéré comme invalides par les nœuds à jour et seront donc refusés par ces derniers.

an illustration of a temporary fork when 2 sets of consensus rules exist in the Bitcoin network
Si un mineur n’ayant pas mis à jour vers Taproot publie un bloc 4′ contenant une transaction invalide vis-à-vis des nouvelles règles introduites par Taproot, son bloc sera refusé par l’ensemble des nœuds du réseau à jour. Ces-derniers accepteront par contre le bloc 4, construit au-dessus du bloc 3 et ne présentant aucune transaction invalide à leurs yeux. Eventuellement, la chaîne “Taproot” deviendra la plus longue et le mineur du bloc 4′ la rejoindra automatiquement.

Dans le cas de Taproot, le débat a fini par se cristalliser sur un point précis : que faire en cas d’échec de l’activation par les mineurs au bout du temps imparti ? Il s’agit plus précisément de définir le comportement des nœuds ayant la mise à jour, dans le cas où l’activation par les mineurs échouerait. Devraient-ils ne rien faire, en attendant de décider d’un nouveau mécanisme d’activation, ou les nœuds devraient-ils au contraire automatiquement commencer à appliquer les règles de Taproot, et tenter de procéder ainsi à un UASF ? Ce comportement est conditionné par une variable dans le code du client Bitcoin, nommée LOT pour Lock-in On Timeout (“verrouiller en cas d’expiration”). Si cette variable est définie sur “faux” (false), les nœuds ne font rien si le seuil de 90% du hashrate signalant être prêt n’est pas atteint. Si cela devait arriver, on repartirait alors certainement dans de nouvelles discussions pour décider quoi faire. À l’inverse, si cette variable est définie sur “vrai” (true), alors les nœuds appliqueront automatiquement les règles de Taproot dès l’expiration de la période d’activation par les mineurs, que le seuil des 90% ait été atteint ou non.

Un compromis entre le deux camps a été (plus ou moins) atteint avec une nouvelle proposition intermédiaire : le Speedy Trial (“procès expéditif”). Les mineurs ont trois mois pour signaler être prêts pour la mise à jour et que soit atteint le seuil de 90% du hashrate se signalant sur une période de 2016 blocs consécutifs (environ 2 semaines). Si au cours d’une période ce seuil est atteint, alors l’activation de Taproot est acquise et aura lieu automatiquement au bloc 709 632 (donc en novembre a priori). Si au bout de la sixième période, et donc après 3 mois, les 90% ne sont toujours pas atteint, alors l’activation échoue et les différentes parties prenantes devront de nouveau se mettre d’accord sur une méthode d’activation. Ce délai de 3 mois, raccourci par rapport au MASF habituel, a donc pour objectif de permettre aux utilisateurs d’éventuellement lancer un UASF si le MASF échoue sans avoir eu à perdre une année entière.

Ce compromis n’a pas convaincu tous les promoteurs de LOT=true, comme on peut s’en douter. Certains d’entre eux ont donc lancé un client Bitcoin alternatif à Bitcoin Core, qui est en tout point identique à Bitcoin Core à ceci prêt que LOT y est défini sur “vrai”. Les nœuds utilisant ce client suivront donc le calendrier de Speedy Trial comme tous les autres mais, en cas d’échec, ils commenceront malgré tout à appliquer les règles de Taproot à partir du bloc 709 632.

Le signalement suit son cours

Le signalement dans le cadre de Speedy Trial a débuté comme prévu au bloc 681 408, miné le 1er mai dernier aux alentours de 22h30. Lorsqu’un mineur a mis à jour son (ou ses) nœuds et est donc prêt à activer les règles de Taproot, il l’indique dans le numéro de version du bloc. Il faut donc bien comprendre que l’activation par les mineurs n’est pas un vote par ces-derniers indiquant s’ils cautionnent ou non Taproot (cette discussion a déjà eu lieu). Il s’agit simplement d’un moyen de s’assurer que suffisamment de mineurs sont prêts avant d’activer réellement Taproot, afin que la mise à jour soit aussi douce que possible.

Il est donc possible de suivre l’activation de Taproot par les mineurs en observant les blocs produits. Le site taproot.watch propose une visualisation de l’activation, où les blocs signalant Taproot sont indiqués en vert. Comme on le remarque, il est déjà acquis que Taproot ne sera pas activé lors de la première période, car plus de 10% des blocs de cette-dernière ne signalaient pas Taproot. C’était cependant attendu et bon nombre d’observateurs estiment que l’activation a plus de chances d’arriver autour de la troisième période.

screenshot from taproot(dot)watch website
A l’heure où la capture d’écran a été prise, 27% des blocs de la première période de 2016 blocs ne signalait pas Taproot, excluant de fait toute possibilité que Taproot soit activé dès cette première période. Mais pas d’inquiétude, il en reste 5 autres !

En bref

  • Taproot est un soft fork de Bitcoin qui apporte plusieurs améliorations, dont notamment les signatures de Schnorr et une implémentation de MAST nommée (Taproot),
  • Les principaux bénéfices de cette mise à jour du protocole seront
    • des frais de transaction plus faibles (en particulier pour les transactions multi-signatures ou utilisant des scripts complexes),
    • une meilleure confidentialité (adresses multi-signatures indiscernables des adresse simples, non-divulgation de l’intégralité du script lorsqu’il est déverrouillé, etc.),
  • La première tentative pour activer Taproot sur le réseau Bitcoin a début le 2 mai dernier, au travers du Speedy Trial. Il s’agit d’une activation par les mineurs (MASF) se déroulant sur 3 mois, découpés en 6 périodes de 2016 blocs. Le seuil d’activation est de 90% des blocs signalant Taproot sur une période donnée.
  • Certains utilisateurs ont décidé de faire tourner une version alternative de Bitcoin Core, qui activera Taproot (UASF) à partir de novembre, quelle que soit l’issue du MASF.

Sources

Article précédent

Cosmos et Polkadot intéressent la Banque Centrale européenne

Article suivant

Transférer ses crypto d’un Exchange à un wallet (Coinbase, Binance, Ledger)

Articles qui pourraient vous intéresser
Total
11
Share