Actu-crypto

🔒
❌ About FreshRSS
There are new articles available, click to refresh the page.
Before yesterdayComprendre la cryptomonnaie

Bitcoin en 2023 : Ordinals, BRC-20, frais et censure

December 31st 2023 at 09:30

L'année 2023 dans Bitcoin a été marquée par l'émergence et le succÚs des métaprotocoles Ordinals et BRC-20. Ce ne sont en effet pas les demandes d'ETF qui ont animé le plus les discussions au cours de cette année, mais la création et l'échange de jetons fongibles et non fongibles (NFT) par l'intermédiaire de ces standards. Cela s'explique par la vague spéculative ayant eu lieu à propos de ces jetons, et par l'encombrement de l'espace de bloc qu'elle a entraßné, menant à une hausse des frais de transaction considérable. Une certaine tension s'est installée et fait ressurgir des questions comme celle de l'utilisation légitime du protocole ou celle de la censure. C'est ce dont nous parlerons ici, en guise de rétrospective.

Ordinals, le protocole d'inscription et de transfert de NFT

Le protocole Ordinals a Ă©tĂ© conçu par Casey Rodarmor, dĂ©veloppeur reconnu dans la communautĂ© de Bitcoin. Ce protocole permet l'Ă©mission et le transfert de jetons non fongibles, aussi appelĂ©s NFT pour non-fungible tokens. La particularitĂ© de ces « artĂ©facts numĂ©riques » est que toutes leurs donnĂ©es sont inscrites sur la chaĂźne de blocs et qu'ils sont suivis et transfĂ©rĂ©s via une numĂ©rotation des satoshis par nombres ordinaux, d'oĂč le nom du protocole. CrĂ©er des NFT sur la chaĂźne de BTC Ă©tait dĂ©jĂ  possible depuis 2014 par le biais du mĂ©taprotocole Counterparty, mais le contenu liĂ© n'Ă©tait pas conservĂ© sur la chaĂźne.

Cette possibilitĂ© d'inscription, mĂȘme si elle existait antĂ©rieurement sous une forme plus indirecte, a Ă©tĂ© largement facilitĂ©e par la mise Ă  niveau Schnorr-Taproot qui s'est produite le 14 novembre 2021. En effet, les inscriptions Ordinals sont rĂ©alisĂ©es au sein d'un script de dĂ©verouillage placĂ© dans le tĂ©moin de la transaction et Ă©crit Ă  l'aide de Tapscript. Les inscriptions sont identifiĂ©es Ă  l'aide de la structure particuliĂšre du script et en particulier par l'indicateur ord.

Elles bĂ©nĂ©ficient du calcul des frais liĂ© Ă  SegWit qui pondĂšre les donnĂ©es du tĂ©moin de façon quatre fois moins importante que les autres donnĂ©es de la transaction. Cette caractĂ©ristique donne a cette mĂ©thode un avantage par rapport au schĂ©ma d'inscription de donnĂ©es NULLDATA, qui utilise l'opĂ©rateur OP_RETURN pour stocker des donnĂ©es dans des sorties « classiques » indĂ©pensables. De plus, le fait de passer par Tapscript permettent Ă  ces inscriptions de ne pas ĂȘtre limitĂ©es en taille par les restrictions des scripts classiques : celle des 3,6 ko standards, dont le respect est nĂ©cessaire Ă  la bonne diffusion de la transaction sur le rĂ©seau (rĂšgle de mempool), et celle des 10 ko obligatoires, qui doit ĂȘtre respectĂ©e pour l'inclusion dans un bloc (rĂšgle de consensus). La taille d'une inscription Ordinals est donc plafonnĂ©e uniquement par la taille limite des blocs.

Le protocole Ordinals a été lancé officiellement le 20 janvier 2023 (UTC). Il a provoqué immédiatement le débat, comme en témoigne l'article de Pourtreaux publié le 25. Le 2 février, une image de prÚs de 4 Mo a été incluse dans le bloc 774 628, suscitant l'émoi dans la communauté. Il s'agissait d'une image des « Taproot Wizards », détournement du mÚme de la Magic Internet Money contenant notamment les lunettes de soleil usuellement arborées par Udi Wertheimer, l'un des instigateurs de cette tendance. Le bloc était le plus gros bloc jamais miné sur BTC et l'est toujours aujourd'hui.

Ordinals a connu un succÚs fulgurant. Présenté comme une nouveauté, ce modÚle a tout de suite plu aux artistes et aux spéculateurs en tous genres. Son succÚs a été tel que le sujet a été abordé par la presse généraliste, particuliÚrement friande de ce genre de phénomÚne. Mais il a vite été remplacé par un protocole autrement plus viral : la norme BRC-20.

BRC-20 : des jetons fongibles basés sur les inscriptions Ordinals

Le succĂšs d'Ordinals a donnĂ© des idĂ©es aux gens. Ç'a Ă©tĂ© le cas du dĂ©veloppeur et analyste domo qui a dĂ©voilĂ© le standard BRC-20 le 9 mars 2023 (UTC). Les jetons BRC-20, appelĂ©s comme tels en rĂ©fĂ©rence Ă  la norme ERC-20 prĂ©sente sur Ethereum, sont des jetons fongibles, c'est-Ă -dire que chaque unitĂ© du jeton est interchangeable avec une autre.

Le principe du standard BRC-20 est d'inscrire des fichiers JSON sur la chaĂźne afin d'effectuer des opĂ©rations sur les unitĂ©s de compte. Trois fonctions existent : deploy, qui permet de crĂ©er un nouveau jeton sur le rĂ©seau, mint, qui permet de forger de nouvelles unitĂ©s, et transfer, qui permet de transfĂ©rer les unitĂ©s en notre possession. Chaque jeton a son sigle boursier, son plafond d'unitĂ©s en circulation et sa limite d'Ă©mission par transaction. À titre d'illustration, voici le fichier de dĂ©ploiement du jeton ordi (le premier jeton crĂ©Ă© par domo lui-mĂȘme et leader actuel du marchĂ© des BRC-20) inscrit le 8 mars dans le bloc 779 832 :

{ 
  "p": "brc-20",
  "op": "deploy",
  "tick": "ordi",
  "max": "21000000",
  "lim": "1000"
}

Là encore, les jetons fongibles sur Bitcoin ne forment pas quelque chose d'entiÚrement nouveau. En 2013-2014, on pouvait déjà émettre et utiliser des piÚces colorées, qui ont d'ailleurs eu leur petit succÚs à l'époque, à l'instar des Open Assets de Coinprism, des CoinSpark assets de Coin Sciences, et des Colored Coins de Colu. Les BRC-20 nous rappellent aussi les user currencies qu'il était possible de créer sur le protocole Mastercoin (aujourd'hui appelé Omni), dont faisait partie notamment le stablecoin Tether USD (émis initialement sous le nom de Realcoin en 2014).

L'avantage de la norme BRC-20 est qu'elle est trĂšs simple et qu'elle se fonde sur un protocole existant trĂšs Ă  la mode. Cependant, elle constitue aussi une piĂštre implĂ©mentation de jetons, non optimisĂ©e. Par exemple, les transferts nĂ©cessitent deux transactions : l'une pour autoriser le transfert par le biais d'un nouveau fichier JSON et l'autre pour effectuer le dĂ©placement des satoshis Ă  l'adresse souhaitĂ©e. Il est donc nĂ©cessaire de rĂ©Ă©crire Ă  chaque fois toutes les donnĂ©es liĂ©es au jeton (l'indicateur ord, le format du fichier, et le fichier lui-mĂȘme) sur la chaĂźne. De plus, des clients d'indexation doivent ĂȘtre dĂ©ployĂ©s pour suivre la distribution des jetons, ce qui est une charge non nĂ©gligeable.

DĂšs le dĂ©but, domo lui-mĂȘme expliquait dans un avertissement prĂ©cĂ©dant la description technique de son protocole :

« Il s'agit uniquement d'une norme expĂ©rimentale amusante dĂ©montrant qu'il est possible de crĂ©er des Ă©tats de solde en dehors de la chaĂźne Ă  l'aide d'inscriptions. Elle ne doit en aucun cas ĂȘtre considĂ©rĂ©e comme LA norme pour la fongibilitĂ© sur Bitcoin avec Ordinals, car je pense qu'il est trĂšs certainement possible de faire des meilleurs choix de conception et des optimisations. Par consĂ©quent, il s'agit d'une expĂ©rience extrĂȘmement Ă©volutive, et je dĂ©conseille fortement de prendre des dĂ©cisions financiĂšres Ă  partir de ce modĂšle. »

domo, brc-20 experiment, 10 mars 2023

La rĂ©elle particularitĂ© des BRC-20 est leur procĂ©dĂ© d'Ă©mission. En effet, les jetons sont forgĂ©s par des transactions Bitcoin, contenant l'inscription liĂ©e Ă  l'instruction mint. Une limite d'Ă©mission par transaction est dĂ©terminĂ©e dĂšs le dĂ©but (pour l'ordi il s'agit de 1000 unitĂ©s) ainsi qu'un plafond total (21 millions pour l'ordi). N'importe qui peut donc participer Ă  la crĂ©ation initiale des jetons. Une fois qu'ils ont tous Ă©tĂ© forgĂ©s, il n'est plus possible d'en crĂ©er de nouveaux, Ă  moins de modifier la norme BRC-20 elle-mĂȘme.

Cette particularitĂ© donne une certaine raretĂ© aux unitĂ©s et c'est ce qui semble plaire. À ma connaissance, aucun BRC-20 n'a de cas d'utilisation revendiquĂ©. Il s'agit essentiellement de memecoins servant de support Ă  la spĂ©culation.

L'envolée des frais de transaction

Comme on le sait, la taille des blocs de BTC est limitĂ©e par un paramĂštre appelĂ© la limite de poids. Le poids d'une transaction est dĂ©fini comme Ă©tant la moyenne pondĂ©rĂ©e de la taille des donnĂ©es de base et de la taille du tĂ©moin contenant les signatures, cette derniĂšre impactant quatre fois moins la mĂ©trique. Le poids d'un bloc est la somme du poids des transactions qu'il contient. Le total est limitĂ© Ă  4 millions d'unitĂ©s, ce qui correspond Ă  environ 1,8 Mo pour un bloc contenant des transactions « normales » et qui peut aller jusqu'Ă  4 Mo pour un bloc incluant des transactions « atypiques ». MĂȘme si cette limite est complexe Ă  apprĂ©hender, elle rend l'espace de bloc rare, ce qui peut soumettre les utilisateurs Ă  une rude concurrence pour la confirmation de leurs transactions et conduire Ă  une hausse significative des frais.

Le succĂšs des Ordinals, et a fortiori des BRC-20, a eu pour effet de remplir l'espace de bloc disponible. DĂšs fĂ©vrier, les inscriptions ont abreuvĂ© les mempools des nƓuds et ont commencĂ© Ă  prendre la place des transactions financiĂšres dans les blocs de la chaĂźne. Puis les jetons BRC-20 ont progressivement supplantĂ© les artĂ©facts numĂ©riques au sein des blocs, faisant monter les frais en flĂšche au dĂ©but du mois de mai.

Cette tendance s'explique par le fonctionnement particulier de ces jetons, décrit ci-dessus. Ces derniers sont forgés par les utilisateurs qui publient des transactions : quand leur prix monte sur le marché, il est rentable de publier de nouvelles transactions pour s'en procurer, ce qui mÚne in fine à un encombrement de l'espace de bloc.

Ainsi, c'est la spĂ©culation autour de ces jetons qui est responsable de la montĂ©e record des frais qui a suivi. Cette spĂ©culation a Ă©tĂ© nourrie par le dĂ©ploiement de places de marchĂ©. DĂšs avril, des services d'Ă©change ont commencĂ© Ă  Ă©merger, comme Ordswap OTC ou UniSat Marketplace. RelayX, un service de swap fonctionnant sur Bitcoin SV, s'est vite adaptĂ© pour prendre en charge les principaux BRC-20. Puis des plateformes de change reconnues sont rentrĂ©es dans la dance : Gate.io a commencer Ă  intĂ©grer les BRC-20 Ă  son offre avec l'ordi le 8 mai, BitMart l'a fait le 9 mai, OKX le 20 mai et KuCoin le 1er juin. À l'automne, aprĂšs quelques mois d'accalmie, la tendance est revenue. C'est alors que Binance a listĂ© l'ordi le 7 novembre 2023, ce qui a lancĂ© une nouvelle vague spĂ©culative. Le cours du jeton ordi est passĂ© de 0,10 $ en avril Ă  prĂšs de 20 $ en mai, puis est redescendu et est remontĂ© pour atteindre 75 $ le 26 dĂ©cembre.

Les frais de transaction sont montés en conséquence. Ils ont connu un premier pic en mai, mois durant lequel les frais médians ont pu atteindre 20 $ par transaction au maximum. Puis une nouvelle hausse à eu lieu durant l'automne, bien plus importante et durable que la précédente, et les frais médians ont ainsi effleuré les 25 $ le 16 décembre !

Évolution des frais mĂ©dias sur BTC en 2023 (cliquer pour agrandir). Source : BitInfoCharts.

Ces épisodes de hausse de frais ont posé des problÚmes fondamentaux, non pas en raison de leur niveau mais de leur volatilité. AprÚs tout, les frais médians gravitaient autour des 50 centimes pendant toute l'année, et personne ne s'attendait à ce qu'ils descendent. C'est leur variation brutale qui vient perturber le bon fonctionnement du systÚme : du jour au lendemain, certains cas d'usage sont anéantis et certaines piÚces (UTXO) deviennent « indépensables ».

Ces périodes de congestion du réseau ont également montré les limites des solutions de seconde couche ayant pour but de résoudre le problÚme du passage à l'échelle. En effet, les hausses des frais ont perturbé l'usage du réseau Lightning, en décuplant parfois le coût d'ouverture et de fermeture des canaux. Les soldes trop petits et les canaux à la capacité trop faible perdaient leur caractéristique de minimisation de la confiance, ceux-ci étant à la merci d'une fermeture non coopérative par un tiers.

La tentation de la censure

Le succĂšs des NFT Ordinals et des jetons BRC-20 a dĂ©clenchĂ© un fort rejet, qui a Ă©tĂ© exprimĂ© sous sa forme la plus extrĂȘme par le dĂ©veloppeur luke-jr, contributeur de longue date Ă  Bitcoin Core et mainteneur de l'implĂ©mentation alternative Bitcoin Knots. En effet, en limitant l'espace de blocs et en faisant augmenter les frais, ces Ă©pisodes ont rĂ©duit l'utilitĂ© de Bitcoin en tant que monnaie, ce qui n'a pas manquĂ© d'attiser les tensions. En raison de leur caractĂšre principalement spĂ©culatif, ces jetons ont Ă©tĂ© qualifiĂ©s de « spam », de « dĂ©ni de service » ou d'« attaque ». La possibilitĂ© d'inscription a Ă©tĂ© elle appelĂ©e un « bug » et une « vulnĂ©rabilitĂ© ».

Ce rejet a fait naĂźtre la tentation de procĂ©der Ă  des actions concrĂštes pour limiter voire supprimer cette activitĂ© jugĂ©e indĂ©sirable. Ces actions prĂ©conisĂ©es ont Ă©tĂ© communĂ©ment appelĂ©es de la censure, mĂȘme si chacune d'entre elles s'appliquait Ă  un niveau diffĂ©rent.

La premiĂšre action proposĂ©e Ă©tait le non-relai des transactions contenant des inscriptions Ordinals dans les mempools des nƓuds. Cette proposition s'est matĂ©rialisĂ©e par un « correctif » appelĂ© Ordirespector, publiĂ© par luke-jr le 1er fĂ©vrier pour Bitcoin Core et adaptĂ© pour Umbrel et Citadel deux semaines plus tard. NĂ©anmoins, la mesure s'arrĂȘtait au relai de ces transactions : il s'agissait d'une rĂšgle de gestion pratique, un filtrage au niveau de la mempool du nƓud, et les blocs contenant des inscriptions Ordinals continuaient Ă  ĂȘtre acceptĂ©s. Une utilisation gĂ©nĂ©ralisĂ©e de ce « correctif » aurait permis de gĂȘner la diffusion des inscriptions jusqu'aux mineurs, sans pour autant l'empĂȘcher totalement : on peut parfaitement imaginer que les mineurs, ayant intĂ©rĂȘt Ă  miner ces transactions en raison de leurs frais, auraient pu mettre en place un nƓud public spĂ©cial pour les recevoir.

La deuxiĂšme action prĂ©conisĂ©e et appliquĂ©e a Ă©tĂ© le dĂ©ploiement de ce rejet au sein d'une coopĂ©rative miniĂšre, menant Ă  la production de blocs ne contenant pas d'inscription Ordinals. Le dĂ©ploiement a Ă©tĂ© rĂ©alisĂ© au sein de la coopĂ©rative Ocean, lancĂ©e le 28 novembre 2023 par luke-jr et Jack Dorsey (ancien PDG de Twitter), qui se voulait ĂȘtre l'hĂ©ritiĂšre de l'ancienne coopĂ©rative Eligius, gĂ©rĂ©e par le mĂȘme luke-jr entre 2011 et 2017. Ocean se basait initialement sur Bitcoin Knots, qui rejetait les inscriptions Ordinals : cela fait que les quelques blocs qu'elle a produit en 2023 ne contenaient pas ces inscriptions mais uniquement des « transactions financiĂšres rĂ©elles » (ce qui impliquait tout de mĂȘme les transferts de NFT). De plus, l'implĂ©mentation limitait aussi les sorties NULLDATA Ă  40 octets de donnĂ©es utiles, de sorte qu'elle ignorait aussi d'autres transactions comme les transactions de rĂ©partition (« tx0 ») du service de mĂ©lange Whirlpool de Samourai Wallet. Il s'agit ici d'une censure passive, qui consiste Ă  confirmer des transactions selon une logique non strictement Ă©conomique. Depuis le 21 dĂ©cembre cependant, Ocean est revenu sur cette mesure et les hacheurs de la coopĂ©rative peuvent dĂ©sormais choisir la politique qu'ils appliquent Ă  leurs blocs entre trois possibilitĂ©s (Knots, Core + Ordisrespector, Core par dĂ©faut).

Enfin, la troisiĂšme proposition d'action a Ă©tĂ© celle de procĂ©der Ă  un soft fork pour remĂ©dier au problĂšme d'Ordinals, partiellement ou totalement. Ce soft fork aurait Ă©tĂ© appliquĂ© par les mineurs (vraisemblablement) suite Ă  la demande d'une partie de l'Ă©conomie. Il s'agissait ni plus ni moins de rĂ©aliser une censure active des transactions contenant des inscriptions, en invalidant les blocs incluant de telles transactions. Ce soft fork aurait pu conduire Ă  une scission dans le cas oĂč il n'aurait pas Ă©tĂ© appliquĂ© par la puissance de calcul majoritaire.

Heureusement, un tel soft fork n'a pas eu lieu et il est peu probable qu'on en arrive lĂ . Cependant, si cette solution peut paraĂźtre drastique et contraire aux principes de Bitcoin, elle n'est pas impossible et il est toujours enrichissant de voir comment elle peut Ă©merger, y compris au sein de la communautĂ© de Bitcoin elle-mĂȘme. Les gens trouvent toujours des raisons pour vouloir censurer l'autre. À titre d'illustration, en janvier 2012, luke-jr avait rĂ©alisĂ© une attaque de censure complĂšte avec sa coopĂ©rative Eligius contre le systĂšme Coiledcoin, qui Ă©tait minĂ© en combinaison avec Bitcoin ; il n'est pas exclus qu'il recommence un jour si le besoin s'en fait ressentir.

Désapprouver et décourager, mais ne pas rejeter

Les protocoles Ordinals et BRC-20 ont donc marqué l'année 2023. Ils ont fait augmenter les frais de maniÚre drastique et fait surgir des discussions qui ne manqueront pas de réapparaßtre dans les années à venir. La censure a probablement été le sujet central, celle-ci trouvant des partisans plus ou moins zélés au sein de la communauté.

Rappelons que l'essence de Bitcoin est la rĂ©sistance Ă  la censure. Se proposer de juger quelles transactions sont lĂ©gitimes ou pas en commençant Ă  appliquer des mesures, c'est s'engager sur une pente savonneuse. MĂȘme si l'entrave de la diffusion sur le rĂ©seau et le filtrage des transactions au sein des blocs ne forment un problĂšme grave, ces actions prĂ©parent le terrain pour une forme de censure autrement plus menaçante : la censure active imposĂ©e par le rĂ©gulateur financier aux diffĂ©rentes coopĂ©ratives conformistes.

Cela Ă©tant dit, ne pas prĂŽner la censure des inscriptions ne veut pas dire qu'elles ne doivent pas ĂȘtre critiquĂ©es. Les jetons BRC-20 par exemple sont des objets spĂ©culatifs illustrant la dĂ©gĂ©nĂ©rescence du monde de la cryptomonnaie, dĂ©gĂ©nĂ©rescence qui a pour effet de perturber l'adoption durable et pĂ©renne des commerçants. Ne pas les empĂȘcher ne signifie pas les approuver : tout ce qu'un bitcoineur peut faire (si tant est qu'il doive faire quelque chose), c'est dĂ©courager cette tendance, en l'ignorant en premier lieu, puis en expliquant calmement Ă  quel point elle est superficielle et sans fondement, et qu'elle a vocation Ă  tomber dans l'oubli comme tous les autres engouements futiles avant elle. Bitcoin, de son cĂŽtĂ©, survivra.

Bitcoin, principe de la chaßne la plus longue et preuve de travail accumulée

July 2nd 2022 at 09:30

Satoshi Nakamoto a conceptualisĂ© Bitcoin en 2008 et a inventĂ© au passage un algorithme de consensus novateur fondĂ© sur la preuve de travail. Ce dernier permet aux nƓuds du rĂ©seau pair-Ă -pair d'arriver Ă  un accord sur le registre de propriĂ©tĂ© et d'assurer le traitement dĂ©centralisĂ© des transactions.

Mais cet algorithme est parfois le sujet d'une certaine confusion. D'un cĂŽtĂ©, il arrive qu'on le confonde avec le mĂ©canisme de preuve de travail lui-mĂȘme, ou bien avec la fonction de hachage SHA-256 qui intervient dans le procĂ©dĂ©. De l'autre, une erreur rĂ©pandue est de penser qu'il repose sur une application naĂŻve du principe de la « chaĂźne la plus longue », tel que dĂ©crit dans le livre blanc de Bitcoin. Voyons ce qu'il en est rĂ©ellement.

 

La preuve de travail

Contrairement Ă  ce que l'on pense, la preuve de travail n'est pas un moyen d'arriver au consensus sur le rĂ©seau, mĂȘme si elle joue un rĂŽle essentiel dans ce processus.

La preuve de travail est en effet un mĂ©canisme de rĂ©sistance aux attaques Sybil, qui empĂȘche un acteur de multiplier les identitĂ©s Ă  l'excĂšs pour prendre le contrĂŽle du rĂ©seau, ici la confirmation des transactions. Une attaque Sybil est une attaque intervenant au sein d'un rĂ©seau ouvert basĂ© sur un systĂšme de rĂ©putation qui consiste Ă  se dupliquer Ă  moindre coĂ»t pour en altĂ©rer le fonctionnement. C'est un problĂšme particuliĂšrement prĂ©sent sur les mĂ©dias sociaux par exemple, oĂč les comptes de robots sont utilisĂ©s en masse pour augmenter la visibilitĂ© d'un contenu donnĂ©.

La preuve de travail rĂ©sout ce problĂšme en demandant aux utilisateurs de dĂ©montrer de maniĂšre objective et quantifiable qu’ils ont dĂ©pensĂ© de l’énergie et en discriminant ainsi les participants entre eux1. Dans le cas de Bitcoin, elle sĂ©lectionne le mineur qui choisit le nouveau bloc de transactions Ă©tant ajoutĂ© Ă  la chaĂźne. Comme l'Ă©crivait Satoshi :

« La preuve de travail rĂ©sout [...] le problĂšme de la dĂ©termination de la reprĂ©sentation dans la prise de dĂ©cision majoritaire. Si la majoritĂ© Ă©tait basĂ©e sur le principe de vote par adresse IP (une adresse IP, une voix), elle pourrait ĂȘtre dĂ©tournĂ©e par toute personne capable de s'octroyer de nombreuses adresses IP. La preuve de travail est essentiellement basĂ©e sur la puissance de calcul : un processeur, une voix. La dĂ©cision majoritaire est reprĂ©sentĂ©e par la chaĂźne la plus longue, sur laquelle le plus grand effort de preuve de travail a Ă©tĂ© investi. »

L'idée est de requérir une dépense d'énergie externe pour ajouter un bloc à la chaßne, en échange de quoi le mineur reçoit une récompense composée de bitcoins issus de la création monétaire et des frais de transaction.

Plus prĂ©cisĂ©ment, la preuve de travail est rĂ©alisĂ©e par les hachages successifs de l'entĂȘte du bloc candidat via la double application2 de la fonction de hachage SHA-256, qui produit des empreintes de 256 bits, soit 32 octets. La preuve consiste Ă  trouver une empreinte qui soit infĂ©rieure Ă  une valeur cible dĂ©terminĂ©e par le protocole, ce qui constitue une collision partielle de la fonction de hachage et rappelle Hashcash. En termes mathĂ©matiques, il s'agit de trouver un nonce (n) tel que :

SHA256d( ENTÊTE( n ) ) â©œ valeur_cible

Puisque la fonction de hachage est supposée impossible à inverser algorithmiquement, le mineur doit se contenter d'essayer un grand nombre de possibilités au hasard pour trouver une empreinte satisfaisant cette inégalité. La probabilité de tomber sur un résultat correct étant connue, cela permet d'estimer une quantité moyenne de travail effectué pour arriver à la solution.

L'empreinte résultante commence nécessairement par un grand nombre de zéros et constitue l'identifiant du bloc. Par exemple, le bloc 630 000 de la chaßne de BTC a pour identifiant :

000000000000000000024bead8df69990852c202db0e0097c1a12ea637d7e96d

Ainsi, la preuve de travail est le bloc lui-mĂȘme et chaque membre du rĂ©seau peut la vĂ©rifier facilement en calculant son identifiant.

 

Le principe de la chaĂźne la plus longue

Un algorithme de consensus est un mécanisme permettant de parvenir à un accord au sein d'un réseau distribué, qui résout de ce fait le problÚme des généraux byzantins. Dans le cas des cryptomonnaies, il s'agit de se mettre d'accord sur le registre de propriété qui décrit qui possÚde quoi. L'algorithme de consensus de Bitcoin s'appelle l'algorithme de consensus de Nakamoto par preuve de travail, en hommage à son créateur, Satoshi Nakamoto.

Dans la section 5 du livre blanc, Satoshi décrivait son algorithme en se basant sur le principe de la chaßne la plus longue. Si ce principe est faillible comme on va le voir, il est néanmoins utile pour se représenter le fonctionnement général du consensus. Voici le processus.

 

Coordination

« Les nƓuds considĂšrent toujours que la chaĂźne la plus longue est la chaĂźne correcte, et continuent Ă  travailler pour la prolonger. »

Tout d'abord, le rĂ©seau se comporte de maniĂšre attendue : les nƓuds se coordonnent en sĂ©lectionnant la chaĂźne la plus longue et les mineurs travaillent Ă  la prolonger. Tout se passe bien et il n'y a qu'une seule branche.

 

Embranchement

« Si deux nƓuds transmettent simultanĂ©ment des versions diffĂ©rentes du bloc suivant, certains nƓuds peuvent recevoir l'une ou l'autre version en premier. Dans ce cas, ils travaillent sur la premiĂšre version qu'ils ont reçue, mais conservent l'autre branche au cas oĂč elle deviendrait plus longue. »

Puis, un conflit a lieu. Celui-ci peut ĂȘtre crĂ©Ă© par un acteur malveillant, mais est gĂ©nĂ©ralement engendrĂ© de maniĂšre accidentelle, Ă  cause de la latence du rĂ©seau : deux mineurs valident un bloc Ă  peu prĂšs au mĂȘme moment ce qui fait que les nƓuds ne reçoivent pas le mĂȘme bloc en premier.  On assiste alors Ă  un embranchement (appelĂ© fork en anglais) : deux branches diffĂ©rentes Ă©galement correctes coexistent et il est impossible de dĂ©terminer laquelle il faut prolonger.

Embranchement commun : conflit

Notez que ce type d'embranchement accidentel est commun et se produit de temps en temps sur le réseau pour des raisons de latence.

 

Recoordination

« L'Ă©galitĂ© est rompue lorsque la preuve de travail suivante est trouvĂ©e et qu'une branche devient plus longue ; les nƓuds qui travaillaient sur l'autre branche passent alors sur la chaĂźne la plus longue. »

Le conflit est enfin rĂ©solu lorsqu'une chaĂźne plus longue (contenant une plus grande quantitĂ© de travail accumulĂ©e) est partagĂ©e sur le rĂ©seau. Il se produit alors ce qu'on appelle une recoordination (ou reorganization en anglais) qui rĂ©concilie les nƓuds du rĂ©seau entre eux.

Embranchement commun : recoordination

Les blocs de la branche minoritaire (dits « orphelins ») sont rejetés.

 

Le fonctionnement de cet algorithme de consensus a deux conséquences :

  • La sĂ©curitĂ© de confirmation du rĂ©seau repose sur la supposition qu'une majoritĂ© de la puissance de calcul (« 51 % ») est honnĂȘte, et donc sur la concurrence entre les mineurs ;
  • La sĂ©curitĂ© d'une transaction est statistique, son degrĂ© de finalitĂ© dĂ©pendant de la profondeur Ă  laquelle elle se trouve dans la chaĂźne (un segment plus long sera plus difficile Ă  rĂ©crire pour annuler la transaction).

Bien que l'algorithme de Nakamoto ait des dĂ©fauts, il est important que ce critĂšre objectif reste en place car il fait partie des Ă©lĂ©ments qui donnent Ă  Bitcoin sa robustesse. Si un cloisonnement persistant du rĂ©seau venait Ă  avoir lieu, par exemple dans le cas extrĂȘme oĂč « un pays se [couperait] dĂ©libĂ©rĂ©ment et totalement du reste du monde », alors il serait possible pour les deux parties du rĂ©seau de se rĂ©concilier une fois la connexion rĂ©tablie.

 

L'ajustement de la difficulté et la quantité de travail accumulée

Dans le livre blanc, Satoshi supposait que la chaßne la plus longue, était nécessairement celle sur laquelle « le plus grand effort de preuve de travail [avait] été investi ». C'est pour cela qu'il a implémenté naïvement le principe de la chaßne la plus longue dans le protocole originel. Ce n'est que le 25 juillet 2010, dans la version 0.3.3 du logiciel, qu'il a redéfini l'algorithme de consensus pour prendre en compte la notion de travail.

Le principe strict de la chaßne la plus longue est bien valide lorsque la difficulté de minage est constante, car alors la quantité moyenne d'énergie dépensée est fonction du nombre de blocs minés. Néanmoins, la difficulté dans Bitcoin n'est pas fixe et subit un ajustement régulier pour faire en sorte que le temps de bloc moyen reste de 10 minutes et que la politique monétaire établie soit respectée.

La difficultĂ© du minage est dĂ©finie comme une quantitĂ© Ă©voluant de maniĂšre inversement proportionnelle Ă  la valeur cible du protocole3. Quand la valeur cible diminue, la difficultĂ© Ă  trouver une empreinte satisfaisant l'inĂ©galitĂ© augmente. À l'inverse, quand la valeur cible augmente, la difficultĂ© diminue.

Lorsqu'ils minent un bloc, les mineurs incluent dans le bloc un horodatage (timestamp). Cela permet au rĂ©seau d'avoir une idĂ©e du temps qui passe. Depuis 2016, le temps rĂ©seau est le temps mĂ©dian passĂ© (MTP), qui est dĂ©fini comme la mĂ©diane des horodatages des 11 derniers blocs et qui retarde donc d'environ une heure (6 blocs) sur l'heure UTC. Notez aussi qu'un horodatage ne peut pas se trouver plus de deux heures dans le futur par rapport au temps subjectif du nƓud.

L'ajustement de la difficulté se produit tous les 2016 blocs, c'est-à-dire (hormis grosse variation du taux de hachage) toutes les 2 semaines dans le monde réel. L'algorithme d'ajustement est simple : si le temps mesuré dans la période de 2016 blocs est inférieur à 20 160 minutes (temps attendu), alors la difficulté augmente pour se conformer à la puissance de calcul supposée ; s'il est supérieur, alors la difficulté diminue4. Le reciblage est limité à un facteur 4 (multiplication comme division) pour éviter les instabilités. La difficulté de BTC est aujourd'hui 29 570 milliards de fois plus élevée qu'au lancement du réseau en janvier 2009.

Puisque la difficultĂ© a subi une considĂ©rable hausse, il aurait Ă©tĂ© possible d'exploiter le principe de la chaĂźne la plus longue. Un attaquant disposant d'une certaine puissance de calcul aurait pu gĂ©nĂ©rer une branche partant d'un point de la chaĂźne oĂč la difficultĂ© Ă©tait trĂšs basse5 (typiquement le bloc de genĂšse), en rĂ©Ă©crivant les horodatages pour avoir des intervalles de 10 minutes, et miner une quantitĂ© Ă©norme de blocs Ă  la fin pour rattraper la chaĂźne principale, la difficultĂ© ne pouvant que quadrupler tous les 2016 blocs. L'attaque n'aurait pas Ă©tĂ© gratuite, mais aurait suffi Ă  dĂ©truire Bitcoin dans le cas oĂč une autre solution n'aurait pas Ă©tĂ© trouvĂ©e (ce qui est improbable).

C'est pour cela l'algorithme de consensus a été revu pour prendre en considération le travail, qui est défini comme le nombre moyen de hachages nécessaires pour miner un bloc ou une chaßne de blocs6, plutÎt que la longueur de la chaßne pour arriver à un accord sur le réseau. Depuis le 25 juillet 2010, la chaßne à suivre est ainsi déterminée par sa quantité de travail (ou de « preuve de travail ») : la chaßne correcte est la chaßne possédant le plus de travail accumulé. Aujourd'hui le travail de la chaßne de BTC représente plus de 15 000 yottahachages, soit 15 milliards de milliards de milliards de hachages.

 

Conclusion

Pour que les nƓuds du rĂ©seau se mettent d'accord sur son registre de propriĂ©tĂ©, Bitcoin dispose d'un algorithme de consensus appelĂ© l'algorithme de consensus de Nakamoto par preuve de travail. Cet algorithme est Ă  diffĂ©rencier du concept de preuve de travail qui sert de mĂ©canisme de rĂ©sistance aux attaques Sybil pour sĂ©lectionner les mineurs, de sa mise en Ɠuvre qui consiste Ă  produire une collision partielle d'une fonction de hachage et de la fonction de hachage elle-mĂȘme.

Le consensus se base sur la sélection d'une chaßne de blocs selon sa quantité de travail accumulée, et non strictement de son nombre de blocs comme on l'entend parfois. En effet, si le principe de la chaßne la plus longue tient la route dans une certaine mesure, il ne suffit pas à garantir la robustesse de Bitcoin.

 

Notes

1. ↑ Il existe d'autres mĂ©canismes de rĂ©sistance aux attaques Sybil dans les systĂšmes cryptoĂ©conomiques, ces derniers reposant soit sur l'identification (auquel cas on parle de « preuve d'autoritĂ© »), soit sur une quantitĂ© d'unitĂ©s internes au systĂšme (auquel cas on parle de « preuve d'enjeu »). La « preuve d'espace » constitue une variante de la preuve de travail, qui repose Ă©galement sur une Ă©nergie externe au systĂšme.

2. ↑ Dans le minage, la fonction de hachage SHA-256 est toujours appliquĂ©e deux fois, supposĂ©ment pour Ă©viter les attaques par extension de longueur. La vĂ©ritable fonction de hachage considĂ©rĂ©e est donc le double SHA-256.

3. ↑ La difficultĂ© est dĂ©finie comme diff = cible_max / cible oĂč la valeur cible maximale du rĂ©seau est :

cible_max = 0x00ffff × 256(0x1d - 3)
          = 0x00000000ffff0000000000000000000000000000000000000000000000000000

4. ↑ La formule d'ajustement de la difficultĂ© est :

nouvelle_cible = ancienne_cible × temps_rĂ©el_Ă©coulĂ© / (14 × 24 × 60 × 60)

Le temps réel écoulé est mesuré à partir des horodatages des 2016 derniers blocs, ce qui correspond à 2015 intervalles de temps. L'algorithme est donc défectueux et surestime la puissance de calcul déployée.

5. ↑ Une telle rĂ©Ă©criture de chaĂźne ne pourrait rĂ©alistiquement pas ĂȘtre faite aujourd'hui, car des points de contrĂŽle ont Ă©tĂ© introduits manuellement dans le code pour empĂȘcher une recoordination trop profonde (pratique initiĂ©e par Satoshi le 17 juillet 2010). Puisque le dernier point de contrĂŽle est le bloc 295 000 minĂ© le 9 avril 2014, la difficultĂ© est trop haute (6 119 726 089) pour pouvoir rattraper le retard pris sur la chaĂźne principale.

Il semble Ă©galement infaisable d'abaisser la difficultĂ© (en espaçant les blocs sur la branche concurrente) pour procĂ©der Ă  la mĂȘme technique par la suite : le retard pris pour rĂ©duire la difficultĂ© serait trop grand.

6. ↑ Le travail d'un bloc est le quotient du nombre d'empreintes possibles (2256) par le nombre d'empreintes satisfaisant le problùme :

travail_du_bloc = 2256 / (cible + 1)

Le travail d'une chaĂźne est la somme des travaux de tous les blocs la composant.

Le bloc de genĂšse de Bitcoin

March 24th 2022 at 09:00

Lorsqu'il a conçu le prototype de Bitcoin en janvier 2009, Satoshi Nakamoto a dû construire un premier bloc à partir duquel la chaßne s'est allongée. Ce bloc il l'a appelé le bloc de genÚse (« genesis block » en anglais) en référence au premier livre de la Torah et de la Bible, qui raconte la création du monde par Dieu.

Par convention, on considÚre qu'il s'agit du bloc de hauteur 0 (ou « bloc 0 ») au-dessus duquel les autres blocs sont successivement empilés. Examinons plus en détail ce que contient cet élément fondateur de Bitcoin en procédant à une dissection minutieuse !

 

Un bloc fondateur

Le bloc de genĂšse est une donnĂ©e essentielle du protocole Bitcoin car il constitue la base Ă  partir de laquelle on peut dĂ©terminer la chaĂźne la plus longue (c'est-Ă -dire celle ayant le plus de preuve de travail accumulĂ©e) et par consĂ©quent la validitĂ© des transactions du registre. Il est thĂ©oriquement le seul bloc Ă  devoir ĂȘtre inscrit en dur dans le protocole, mĂȘme si d'autres l'ont Ă©tĂ© par la suite.

Tel que l'Ă©crivait Satoshi Nakamoto :

« La chaßne de blocs est une structure en forme d'arbre qui a pour racine le bloc de genÚse, chaque bloc pouvant avoir plusieurs candidats à sa suite. »

Bloc de genĂšse embranchements

Le code de novembre 2008 (fourni par Satoshi à Hal Finney, Ray Dillinger et James A. Donald notamment) contenait déjà une premiÚre version du bloc de genÚse, horodatée au 10 septembre 2008, 18:02:08 UTC. Néanmoins, un nouveau bloc a été construit en janvier 2009 spécialement pour le lancement du prototype.

Le bloc de genÚse que nous connaissons est ainsi présent dans la version 0.1 du logiciel de Bitcoin, publiée le 8 janvier 2009. Un commentaire au sein du code le décrit :

Genesis Block:
GetHash()      = 0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
hashMerkleRoot = 0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
txNew.vin[0].scriptSig     = 486604799 4 0x736B6E616220726F662074756F6C69616220646E6F63657320666F206B6E697262206E6F20726F6C6C65636E61684320393030322F6E614A2F33302073656D695420656854
txNew.vout[0].nValue       = 5000000000
txNew.vout[0].scriptPubKey = 0x5F1DF16B2B704C8A578D0BBAF74D385CDE12C11EE50455F3C438EF4C3FBCF649B6DE611FEAE06279A60939E028A8D65C10B73071A6F16719274855FEB0FD8A6704 OP_CHECKSIG
block.nVersion = 1
block.nTime    = 1231006505
block.nBits    = 0x1d00ffff
block.nNonce   = 2083236893
CBlock(hash=000000000019d6, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=4a5e1e, nTime=1231006505, nBits=1d00ffff, nNonce=2083236893, vtx=1)
  CTransaction(hash=4a5e1e, ver=1, vin.size=1, vout.size=1, nLockTime=0)
    CTxIn(COutPoint(000000, -1), coinbase 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73)
    CTxOut(nValue=50.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B)
  vMerkleTree: 4a5e1e

Ce bloc pÚse trÚs exactement 285 octets. Le voici représenté en hexadécimal brut :

0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

Le bloc de genĂšse est composĂ© d'un entĂȘte de 80 octets et d'une unique transaction, la transaction de rĂ©compense. Son identifiant (le rĂ©sultat du hachage de l'entĂȘte par double SHA-256) est 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f. Les zĂ©ros qui dĂ©butent cet identifiant indiquent qu'une preuve de travail a Ă©tĂ© rĂ©alisĂ©e.

Notez que les différentes informations contenues dans le bloc sont souvent transmises avec un ordre des octets inverse (dit « little-endian » ou « petit-boutiste »). Nous donnerons ici les informations dans l'ordre ordinaire (qu'on appelle « big-endian » ou « gros-boutiste ») à l'aide du préfixe 0x.

 

L'entĂȘte

Comme tous les blocs dans le protocole, le bloc de genĂšse possĂšde un entĂȘte donnant 6 informations diffĂ©rentes. Voici cet entĂȘte en dĂ©tail :

01000000 - version
0000000000000000000000000000000000000000000000000000000000000000 - identifiant du bloc précédent
3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a - racine de Merkle
29ab5f49 - horodatage
ffff001d - valeur cible
1dac2b7c - nonce

 

La version du bloc

0x00000001

La version du bloc indique l'ensemble des rÚgles respectées par le bloc. Cette version 1 indiquait un respect des rÚgles du protocole originel défini par Satoshi. D'autres versions ont été introduites plus tard : la version 2 pour l'application du BIP-34 en mars 2013, la version 3 pour l'activation du BIP-66 en juillet 2015, et la version 4 pour celle du BIP-65 en décembre 2015. Le champ de version a par la suite été utilisé pour que les mineurs signalent leur intention d'appliquer un soft fork (conformément au BIP-9).

 

L'identifiant du bloc précédent

0x0000000000000000000000000000000000000000000000000000000000000000

Puisqu'il s'agit du premier bloc de la chaßne, le champ utilisé pour donner l'identifiant du bloc précédent est fixé à zéro par convention.

 

La racine de Merkle

0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b

La racine de Merkle correspond Ă  l'empreinte finale de l'arbre de Merkle des transactions. Puisqu'il n'y a qu'une seule transaction dans le bloc de genĂšse, il s'agit simplement de l'identifiant de cette transaction.

 

L'horodatage

0x495fab29

L'horodatage indique la date et l'heure à laquelle le mineur a trouvé le bloc. Il est donné par le nombre de secondes depuis le 1er janvier 1970 00:00:00 UTC. Ici, le nombre correspond à 1 231 006 505 secondes : le bloc de genÚse est donc horodaté au 3 janvier 2009 à 18:15:05 UTC.

Toutefois, il ne faut pas croire que cet horodatage indique l'instant précis du lancement effectif du réseau. Ce dernier a en effet été réalisé un peu plus tardivement : le bloc 1 est ainsi horodaté au 9 janvier 2009 à 02:54:25 UTC, soit 5 jours, 8 heures, 39 minutes et 20 secondes plus tard.

 

La valeur cible

0x1d00ffff

La valeur cible est la valeur minimale que l'identifiant du bloc peut avoir pour que ce dernier constitue une solution au problÚme de preuve de travail de Bitcoin. Moins cette valeur cible est haute, plus il est facile de trouver une solution et de miner un bloc. Elle est donc inversement proportionnelle à la difficulté du réseau.

La valeur cible du bloc de genĂšse correspond Ă  la plus grande valeur possible dans Bitcoin, ou la difficultĂ© la plus basse pour le dire autrement. Elle est encodĂ©e comme un nombre flottant oĂč le premier octet reprĂ©sente un exposant et oĂč la mantisse est dĂ©terminĂ©e par les 3 octets suivants. Ici, elle est Ă©gale Ă  0x00ffff × 256(0x1d - 3) c'est-Ă -dire 0x00000000ffff0000000000000000000000000000000000000000000000000000.

La preuve de travail du bloc est valide car l'identifiant est effectivement (largement) inférieur à cette valeur cible :

0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f ≀
0x00000000ffff0000000000000000000000000000000000000000000000000000

On définit la difficulté du minage comme l'inverse de la valeur cible multipliée par la valeur cible de base :

difficulté = cible_de_base / cible

La difficulté du bloc de genÚse est donc de 1.

AprÚs le lancement du réseau, la difficulté a stagné à ce niveau pendant prÚs d'un an avant d'enfin commencer à augmenter le 30 décembre 2009.

Au sein du code, le champ de la valeur cible est appelĂ© nBits, car ce paramĂštre dĂ©signait (avant que Satoshi n'en modifie le sens) le nombre de bits de tĂȘte Ă  mettre Ă  zĂ©ro pour que la solution soit valide. Dans la version de novembre 2008, le champ Ă©tait en effet fixĂ© Ă  20, ce qui correspondait Ă  5 zĂ©ros de tĂȘte en reprĂ©sentation hexadĂ©cimale, soit une valeur cible de 0x00000fffff....

 

Le nonce

0x7c2bac1d

Le nonce (mot qui provient de l'expression anglaise « for the nonce » signifiant « pour la circonstance, pour l'occasion ») désigne le nombre que le mineur fait varier pour calculer la preuve de travail. Il n'a aucune signification particuliÚre, étant déterminé au hasard.

 

L'ensemble des transactions

L'ensemble des transactions forme la seconde partie du bloc. Le voici en détail :

01 - nombre de transactions
01000000 - version
01 - nombre d'entrées
0000000000000000000000000000000000000000000000000000000000000000 - identifiant de transaction de la sortie précédente
ffffffff - index de la sortie précédente
4d - taille du script de déverrouillage
04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73 - script de déverrouillage
ffffffff - numéro de séquence
01 - nombre de sorties
00f2052a01000000 - montant
43 - taille du script de verrouillage
4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac - script de verrouillage
00000000 - temps de verrouillage

 

Le nombre de transactions

0x01

Le bloc contient une seule transaction : la transaction de rĂ©compense qui rĂ©munĂšre le mineur (ici Satoshi) pour la preuve de travail rĂ©alisĂ©e. Le bloc ne comporte ainsi aucune autre transaction, tout comme les blocs minĂ©s dans les premiers jours. Il a fallu attendre le 12 janvier et le bloc 170 pour voir la premiĂšre transaction effective du rĂ©seau ĂȘtre confirmĂ©e : celle entre Satoshi et Hal Finney.

Toutes les données restantes du bloc appartiennent à la transaction de récompense.

 

La version de la transaction

0x00000001

La version de la transaction indique comment celle-ci doit ĂȘtre interprĂ©tĂ©e. Elle est fixĂ©e Ă  1 conformĂ©ment au protocole initial. Aujourd'hui, il existe Ă©galement une version 2 qui autorise l'usage des verrous temporels relatifs (voir BIP-68).

 

Le nombre d'entrées de la transaction

0x01

La transaction contient une seule entrée : la base de piÚce, ou coinbase, qui permet de créer ex nihilo les nouveaux bitcoins et de recueillir les frais de transaction. Cette entrée est donc purement superflue, mais permet de conserver une certaine cohérence dans l'implémentation logicielle. Elle est constituée des champs identifiant la sortie précédente (théorique), d'un script de déverrouillage et d'un numéro de séquence.

 

L'identifiant de transaction de la sortie précédente

0x0000000000000000000000000000000000000000000000000000000000000000

Ce champ est utilisé dans les transactions pour dire à quel sortie transactionnelle correspond une entrée, en donnant l'identifiant de la transaction qui a créé la sortie. Puisqu'il s'agit d'une transaction de récompense qui ne fait pas référence à une sortie transactionnelle précédente, ce champ est fixé à 0 par convention.

 

L'index de la sortie précédente

0xffffffff

Ce champ est utilisé dans les transactions pour dire à quel sortie transactionnelle correspond une entrée, en donnant la position de la sortie dans la transaction qui l'a créée. Puisqu'il s'agit d'une transaction de récompense qui ne fait pas référence à une sortie transactionnelle précédente, ce champ est fixé au maximum par convention.

 

Le script de déverrouillage (scriptSig)

0x04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73

Dans Bitcoin, le script de déverouillage est combiné à un script de verrouillage précédent et détermine la validité d'une dépense. Il contient généralement les signatures nécessaires à la dépense d'une piÚce et est par conséquent souvent appelé scriptSig. Dans le cas d'une transaction de récompense, l'entrée ne fait référence à aucune sortie transactionnelle existante et ce script peut donc contenir des données arbitraires.

Ici, le script se présente de la maniÚre suivante :

<valeur cible> <nonce supplémentaire> <chaßne de caractÚres>

Ainsi, il est constitué de trois informations :

  • Tout d'abord, la valeur cible du bloc, donnĂ©e en sens inverse, conformĂ©ment Ă  la façon dont elle est reprĂ©sentĂ©e dans le code : 0xffff001d
  • Ensuite, un nonce supplĂ©mentaire (0x04), ou extra nonce, mis en place par Satoshi dans le code du logiciel. Le nonce supplĂ©mentaire du bloc de genĂšse a pour valeur 4, et ceux des blocs suivants sont croissants : celui du bloc 1 est aussi Ă©gal Ă  4, celui du bloc 2 Ă  11, celui du bloc 3 Ă  14, etc. La variation de ce nonce supplĂ©mentaire au sein des blocs a permis de mettre en Ă©vidence un motif particulier, appelĂ© le « Patoshi Pattern », qui dĂ©termine prĂ©cisĂ©ment les blocs minĂ©s par Satoshi et qui dĂ©montre que sa fortune s'Ă©lĂšve Ă  plus de 1 125 150 bitcoins.
  • Enfin, une chaĂźne de caractĂšres aujourd'hui emblĂ©matique, encodĂ©e en UTF-8, qui est :
    The Times 03/Jan/2009 Chancellor on brink of second bailout for banks

    Cette courte phrase correspond à la une du Times du 3 janvier 2009, qui annonçait que le ministre des finances du Royaume-Uni était sur le point de renflouer les banques pour la deuxiÚme fois. Le Times étant un quotidien anglais, cela a mené à des spéculations quant à l'identité de Satoshi, qui écrivait également dans un anglais britannique.

The Times 3 janvier 2009 chancelier ministre des finances renflouement des banques

Cette phrase présente dans le script de la transaction de récompense possÚde un rÎle double :

  • PremiĂšrement, elle prohibe l'antidatage : sa prĂ©sence dans le premier bloc, Ă  partir duquel toute la chaĂźne est construite, prouve que le rĂ©seau de Bitcoin n'a pas Ă©tĂ© lancĂ© avant le 3 janvier 2009. Cependant, cela ne veut pas dire que le bloc de genĂšse date bien du 3 janvier : en effet, il a pu ĂȘtre construit entre le 3 janvier (date de l'horodatage dĂ©clarĂ©) et le 8 janvier (date de publication du code).
  • DeuxiĂšmement, elle indique symboliquement ce Ă  quoi Bitcoin s'oppose en faisant rĂ©fĂ©rence au contexte monĂ©taire et financier de l'Ă©poque : le renflouement des grandes banques d'investissement par les États et par les banques centrales suite Ă  la crise financiĂšre de 2007-2008. Il est d'ailleurs possible que Satoshi ait choisi cette date prĂ©cisĂ©ment pour sĂ©lectionner cette une.

Ce script de la base de piĂšce est encore utilisĂ© de nos jours par les mineurs pour de multiples raisons. À l'instar de Satoshi, ils peuvent inclure des informations arbitraires dans le bloc et faire passer un message public au monde. Ç'a Ă©tĂ© le cas de la coopĂ©rative F2Pool qui, le 11 mai 2020, a Ă©voquĂ© l'injection de liquiditĂ© de la RĂ©serve FĂ©dĂ©rale en rĂ©action Ă  la crise du covid-19 au sein du bloc 629 999 (le bloc prĂ©cĂ©dant le troisiĂšme halving) :

NYTimes 09/Apr/2020 With $2.3T Injection, Fed's Plan Far Exceeds 2008 Rescue

Les regroupements de mineurs peuvent Ă©galement s'identifier en indiquant leur nom, ce qui permet de juger de la dĂ©centralisation du rĂ©seau, mĂȘme si cette pratique reste purement dĂ©clarative.

Enfin, les mineurs se servent encore de ce champ pour faire varier un nonce supplĂ©mentaire, le nonce de l'entĂȘte ne permettant plus depuis 2012 d'essayer suffisamment de possibilitĂ©s par rapport Ă  la difficultĂ© Ă©levĂ©e du rĂ©seau.

 

Le numéro de séquence (nSequence)

0xffffffff

Le numéro de séquence de l'entrée est maximal, ce qui fait que la transaction est considérée comme finale.

À l'origine, le numĂ©ro de sĂ©quence dans les entrĂ©es avait pour objectif de permettre les Ă©changes rĂ©pĂ©tĂ©s au sein de contrats, tels que les canaux de paiement. Ce modĂšle imaginĂ© par Satoshi n'Ă©tait pas suffisamment sĂ©curisĂ© et a par consĂ©quent Ă©tĂ© abandonnĂ©. Cependant, la rĂšgle de finalitĂ©, qui fait que la transaction est considĂ©rĂ©e comme finale (pas de temps de verrouillage) si les numĂ©ros de sĂ©quence de toutes les entrĂ©es sont maximaux (comme ici), a Ă©tĂ© conservĂ©e.

Aujourd'hui, ce numéro de séquence est utilisé pour déterminer le temps de verrouillage relatif d'une entrée et pour signaler Replace-by-Fee.

 

Le nombre de sorties de la transaction

0x01

La transaction contient une seule sortie, celle créditant Satoshi de son revenu de minage. Cette sortie est constituée d'un montant et d'un script de verrouillage.

 

Le montant

0x000000012a05f200

Le montant de la sortie est donné dans la plus petite unité du systÚme, unité qu'on a appelé le satoshi en hommage au créateur de Bitcoin. Ce montant correspond ici à 5 milliards de satoshis, soit 50 bitcoins. Il s'agit de la limite maximale du taux de création monétaire de l'époque (50 bitcoins par bloc).

 

Le script de verrouillage (scriptPubKey)

0x4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac

Le scrpt de verrouillage est l'ensemble des conditions à fournir pour pouvoir dépenser la piÚce correspondante. Ici, il possÚde la forme :

<clé publique> CHECKSIG

oĂč la clĂ© publique est 04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f. Il s'agit donc d'une sortie transactionnelle de type Pay to Public Key (P2PK), un schĂ©ma utilisĂ© dans les dĂ©buts de Bitcoin, qui demande une simple signature pour dĂ©bloquer les fonds. Cela explique le nom donnĂ© couramment Ă  ce script : scriptPubKey.

Bien souvent, cette sortie est rĂ©trospectivement attribuĂ©e Ă  l'adresse 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa, obtenue en prenant l'empreinte de la clĂ© publique. Cela est nĂ©anmoins purement esthĂ©tique car c'est bien la clĂ© publique elle-mĂȘme qui a servi Ă  recevoir les bitcoins, pas l'adresse.

Fait intĂ©ressant : cette sortie transactionnelle n'est pas considĂ©rĂ©e comme dĂ©pensable par le protocole en raison de la façon dont le bloc de genĂšse est exprimĂ© dans le code. Cette erreur de programmation pourrait ĂȘtre corrigĂ©e par un hard fork, mais cela ne serait ni utile (Satoshi n'a pas touchĂ© Ă  ses bitcoins depuis qu'il a disparu), ni mĂȘme souhaitable (incompatibilitĂ© du protocole). Les 50 premiers bitcoins crĂ©Ă©s sont donc probablement brĂ»lĂ©s Ă  tout jamais.

 

Le temps de verrouillage (nLocktime)

0x00000000

Le temps de verrouillage (donnĂ©e globale appartenant Ă  la transaction) dĂ©termine la date Ă  partir de laquelle cette transaction pourra ĂȘtre confirmĂ©e. En Ă©tant fixĂ© Ă  zĂ©ro, celui-ci est dĂ©sactivĂ©.

 

Les autres chaĂźnes

Si le bloc de genĂšse constitue un fondement du protocole Bitcoin, il sert Ă©galement de base aux diffĂ©rentes branches minoritaires de Bitcoin qui possĂšdent le mĂȘme historique jusqu'Ă  leurs scissions respectives : Bitcoin Cash, Bitcoin SV, Bitcoin Gold ou encore eCash/XEC. D'autres protocoles possĂšdent leur propre bloc de genĂšse et certains d'entre eux ont Ă©galement incorporĂ© la une d'un journal ou d'un magazine pour garantir que le lancement du rĂ©seau ne s'est pas rĂ©alisĂ© avant la date donnĂ©e. Ainsi, le bloc de genĂšse de Litecoin (datant du 7 octobre 2011) contient la phrase suivante :

NY Times 05/Oct/2011 Steve Jobs, Apple’s Visionary, Dies at 56

Celui de Dash (datant du 19 janvier 2014) inclut la une suivante :

Wired 09/Jan/2014 The Grand Experiment Goes Live: Overstock.com Is Now Accepting Bitcoins

 


Source

Bitcoin Wiki, Genesis block

Qu’est-ce qui sĂ©curise Bitcoin ?

November 14th 2020 at 10:30

Bitcoin est un concept de monnaie numĂ©rique fonctionnant sur Internet qui a Ă©tĂ© crĂ©Ă© en 2008 par Satoshi Nakamoto. Mis en application Ă  partir du 3 janvier 2009, il a parcouru un long chemin qui l’a menĂ© Ă  devenir ce qu’il est aujourd’hui, Ă  la fois d’un point de vue technique, Ă©conomique et social. NĂ©anmoins, il existe toujours des incomprĂ©hensions Ă  son Ă©gard, y compris chez ceux qui pensent avoir saisi ses principes de base. C’est en particulier le cas de son modĂšle de sĂ©curitĂ© qui reste flou pour beaucoup de personens.

Dans Bitcoin, une foule de notions interviennent. Le systĂšme est fondĂ© sur un rĂ©seau public et dĂ©centralisĂ© de nƓuds qui font tourner un logiciel open source. Ces nƓuds vĂ©rifient des opĂ©rations cryptographiques et entretiennent un registre distribuĂ© et horodatĂ© appelĂ© la chaĂźne de blocs, registre oĂč sont enregistrĂ©es toutes les transactions d’une unitĂ© de compte, le bitcoin. Au sein de ce rĂ©seau, un certain nombre d’acteurs, appelĂ©s des mineurs, utilisent la puissance de calcul de leurs machines afin de valider les transactions effectuĂ©es par le rĂ©seau, et reçoivent en Ă©change une rĂ©munĂ©ration en bitcoins. Tout cela forme un tout harmonique qui permet Ă  Bitcoin d’exister depuis quasiment douze ans.

Cependant, ce qui sĂ©curise Bitcoin, ce n’est pas la cryptographie, la chaĂźne de blocs, le logiciel libre, la dĂ©centralisation ou la puissance de calcul. Ce qui sĂ©curise Bitcoin, c’est l’action combinĂ©e d’individus, de personnes de chair et d’os mues par leurs intĂ©rĂȘts, de gens qui prennent des dĂ©cisions et qui s’exposent Ă  des risques personnels. Bitcoin est en effet un systĂšme Ă©conomique et, en tant que tel, base sa sĂ©curitĂ© sur le comportement intĂ©ressĂ© des ĂȘtres humains1.

 

Qu’est-ce qui prĂ©serve la qualitĂ© de l’infrastructure logicielle ?

Bitcoin est un protocole de communication qui permet l’existence et la circulation d’une unitĂ© de compte numĂ©rique, le bitcoin. Ce protocole est un ensemble de rĂšgles et ne peut donc pas directement ĂȘtre utilisĂ© par un individu : il faut pour cela qu’il existe une implĂ©mentation logicielle, Ă  savoir un programme qui respecte et vĂ©rifie ces rĂšgles.

L’écosystĂšme autour de Bitcoin repose donc sur ces implĂ©mentations logicielles, qui peuvent ĂȘtre complĂštes (nƓuds du rĂ©seau) ou partielles (portefeuilles lĂ©gers). Bien Ă©videmment, les implĂ©mentations complĂštes sont les plus essentielles Ă  la sĂ©curitĂ© de Bitcoin, puisque ce sont elles qui servent Ă  valider les transactions et Ă  miner les blocs. En particulier, Bitcoin Core, l’implĂ©mentation de rĂ©fĂ©rence de Bitcoin (BTC), joue un rĂŽle central dans l’infrastructure du rĂ©seau.

Comme tous les programmes informatiques complexes, Bitcoin Core n’est pas exempt de faiblesses, ce qui au cours de son histoire s’est matĂ©rialisĂ© par deux incidents majeurs :

  • En aoĂ»t 2010, une faille dans le systĂšme des transactions (value overflow) avait permis Ă  une personne de crĂ©er plus de 184 milliards de bitcoins Ă  partir de rien ! Cet incident avait heureusement pu ĂȘtre corrigĂ© dans les heures qui avaient suivi grĂące Ă  la mobilisation des mineurs qui avaient appliquĂ© un patch correctif. À l’époque, cela n’avait pas Ă©tĂ© dommageable pour Bitcoin, qui ne gĂ©rait que peu de valeur.
  • En mars 2013, un dĂ©faut contenu dans la mise Ă  jour du code avait provoquĂ© la sĂ©paration accidentelle du rĂ©seau pendant plusieurs heures. Bitcoin Ă©tait alors beaucoup plus utilisĂ© et cette sĂ©paration momentanĂ©e avait notamment entraĂźnĂ© la rĂ©alisation d’une double dĂ©pense par un utilisateur.

C’est pour cela qu’il est crucial que le logiciel derriĂšre Bitcoin soit bien maintenu, optimisĂ©, amĂ©liorĂ©. Bitcoin reprĂ©sente aujourd’hui prĂšs de 300 milliards de dollars et dĂ©place des dizaines de milliards de dollars chaque jour, et par consĂ©quent il serait dĂ©sastreux qu’un dysfonctionnement majeur survienne.

Pour assurer la sĂ©curitĂ© du logiciel, il existe donc des dizaines de personnes, identifiĂ©es ou anonymes, qui s’attellent Ă  scruter et Ă  perfectionner le code, Ă  temps plein ou Ă  temps partiel. Puisque Bitcoin Core est un logiciel libre disponible en source ouverte sur Internet, n’importe qui peut consulter le code, vĂ©rifier qu’il est conforme au rĂ©sultat attendu ou mĂȘme proposer de le modifier pour l’amĂ©liorer ! Tel que l’expliquait Satoshi Nakamoto en dĂ©cembre 2009 :

Être accessible en source ouverte signifie que n’importe qui peut examiner le code de maniĂšre indĂ©pendante. S’il s’agissait d’une source fermĂ©e, personne ne pourrait vĂ©rifier la sĂ©curitĂ©. Je pense qu’il est essentiel pour un programme de cette nature d’ĂȘtre open source.

Cette ouverture, couplĂ©e Ă  une dette technique limitĂ©e, donne Ă  Bitcoin une sĂ»retĂ© plus grande que de nombreux systĂšmes informatiques. En effet, au vu des sommes en jeu, la rĂ©compense pour l’exploitation rĂ©ussie d’une faille dans le code serait Ă©norme, ce qui renforce la confiance qu’on peut avoir dans le logiciel au cours du temps (effet Lindy).

De plus, les failles dans le code sont, outre leur raretĂ©, le plus souvent trĂšs subtiles, ce qui fait que ce sont les dĂ©veloppeurs bienveillants qui les dĂ©couvrent et qui les rapportent. On peut par exemple citer le bogue d’inflation trouvĂ© et rĂ©vĂ©lĂ© en septembre 2018 par Awemany, dĂ©veloppeur pour Bitcoin Unlimited, ou la faille permettant des attaques par dĂ©ni de service rapportĂ©e en juin 2018 par Braydon Fuller, dĂ©veloppeur pour Bcoin, et rĂ©vĂ©lĂ©e publiquement plus deux ans plus tard, en septembre 2020.

Enfin, il faut spĂ©cifier que l’infrastructure logicielle n’est pas maintenue gratuitement et qu’elle est soutenue financiĂšrement par les organisations et les individus dont l’activitĂ© dĂ©pend de la qualitĂ© du fonctionnement du rĂ©seau. C’est ainsi que des entreprises impliquĂ©es dans Bitcoin acceptent de rĂ©munĂ©rer les principaux dĂ©veloppeurs de Bitcoin Core, pas par charitĂ©, mais parce qu’elles ont quelque chose Ă  gagner.

Tout ceci fait que la sĂ©cuitĂ© du logiciel s’amĂ©liore au cours du temps, que les vulnĂ©rabilitĂ©s sont dĂ©tectĂ©es et maĂźtrisĂ©es et que, en presque douze ans d’existence, seules deux d’entre elles ont provoquĂ© un incident majeur. Bitcoin ne repose donc pas sur des logiciels magiques qui fonctionneraient parfaitement bien, mais sur l’action des dĂ©veloppeurs qui maintiennent des implĂ©mentations faillibles et sur l’aide des mĂ©cĂšnes qui financent ce dĂ©veloppement.

 

Qu’est-ce qui assure le bon traitement des transactions ?

Bitcoin permet Ă  quiconque d’envoyer des fonds Ă  n’importe qui d’autre, quel que soit le moment, oĂč que se trouve le destinataire dans le monde pourvu qu’il dispose d’un accĂšs Ă  Internet. Il est ainsi rĂ©sistant Ă  la censure, c’est-Ă -dire qu’il est trĂšs difficile pour une entitĂ© d’empĂȘcher arbitrairement une transaction d’ĂȘtre rĂ©alisĂ©e.

La rĂ©sistance Ă  la censure est trĂšs importante car si Bitcoin n’avait pas cette propriĂ©tĂ©, il ne pourrait tout simplement pas survivre. Il deviendrait en effet un systĂšme bancaire comme un autre, soumis aux rĂ©glementations invasives des États : il devrait s’adapter Ă  l’instar de PayPal, ou mourir sous les coups des interventions Ă©tatiques, destin funeste qu’ont connu e-gold ou Liberty Reserve en leur temps.

Le bon traitement des transactions dans Bitcoin implique donc deux garanties qui le distinguent des systĂšmes bancaires traditionnels :

  • Toute transaction qui paie un montant correct de frais ne peut pas ĂȘtre dĂ©laissĂ©e (sĂ©curitĂ© a priori) ;
  • Toute transaction qui a Ă©tĂ© confirmĂ©e doit demeurer dans le registre et ne peut pas faire l’objet d’une double dĂ©pense (sĂ©curitĂ© a posteriori).

Ce bon traitement est assurĂ© par ce qu’on appelle le minage. Les mineurs, qui font partie du rĂ©seau, reçoivent les transactions des utilisateurs et les incluent dans des blocs. Ils rattachent ces blocs Ă  la chaĂźne par la rĂ©solution d’un problĂšme mathĂ©matique nĂ©cessitant une dĂ©pense d’énergie Ă©lectrique (preuve de travail) et sont en Ă©change rĂ©compensĂ©s par les bitcoins nouvellement crĂ©Ă©s (6,25 bitcoins par bloc actuellement) et par les frais payĂ©s par les transactions. Pour dĂ©terminer la chaĂźne valide les nƓuds suivent le principe de la chaĂźne la plus longue, c’est-Ă -dire qu’ils considĂšrent que la chaĂźne contenant le plus de preuve de travail (grosso modo celle avec le plus de blocs) est la chaĂźne valide. Cela permet au rĂ©seau d’arriver Ă  un consensus sur l’état du systĂšme.

Bitcoin repose donc sur la dĂ©pense d’énergie pour fonctionner, car c’est elle qui dĂ©termine le caractĂšre infalsifiable de la chaĂźne et des bitcoins crĂ©Ă©s. Le taux de hachage, qui dĂ©signe le nombre de calculs par seconde rĂ©alisĂ©s par le rĂ©seau, atteint aujourd’hui les 130 EH/s, Ă  savoir 130 milliards de milliards de calculs par seconde. Cette considĂ©rable force de calcul consomme aujourd’hui, selon certaines estimations, plus de 82 TWh par an, soit une dĂ©pense Ă©nergĂ©tique Ă©galant la consommation d’électricitĂ© de pays comme la Belgique ou la Finlande.

 

Taux de hachage Bitcoin BTC 2010 2020
Évolution du taux de hachage de Bitcoin entre 2010 et 2020 (Bitcoin.com Charts)

 

NĂ©anmoins, en dĂ©pit de son rĂŽle central, ce n’est pas sur cette Ă©nergie que se fonde la sĂ©curitĂ© du minage. En effet, la sĂ©curitĂ© vient de la concurrence entre les mineurs, et pas de l’énergie totale dĂ©pensĂ©e. Comme l’écrivait Satoshi Nakamoto dans le livre blanc de Bitcoin en 2008 :

Le systĂšme est sĂ©curisĂ© tant que les nƓuds honnĂȘtes contrĂŽlent collectivement plus de puissance de calcul qu’un groupe de nƓuds qui coopĂ©reraient pour rĂ©aliser une attaque.

L’important ce n’est pas que le taux de hachage de Bitcoin soit le plus haut possible, c’est que les mineurs disposant d’une puissance de calcul non nĂ©gligeable soient « honnĂȘtes », c’est-Ă -dire qui soient prĂȘts Ă  miner systĂ©matiquement toutes les transactions payant un montant correct de frais (pas de censure a priori) et Ă  toujours construire leurs blocs Ă  partir de la plus longue chaĂźne (pas de rĂ©organisation de chaĂźne).

Imaginons (cas pessimiste) que les États membres de l’ONU se mettent d’accord sur la dangerositĂ© de Bitcoin et dĂ©crĂštent l’interdiction de certaines transactions sur Bitcoin, les transactions de mĂ©lange de piĂšces au nom de la lutte contre le blanchiment d’argent par exemple. Dans ce cas, les mineurs pourraient ĂȘtre soumis Ă  de fortes pressions de la part de leurs autoritĂ©s respectives, et devraient faire le choix de continuer Ă  ĂȘtre honnĂȘtes en se dĂ©plaçant dans un pays non concernĂ© ou en minant illĂ©galement, ce qui constitue dans les deux cas un risque, ou de devenir des attaquants en suivant la loi. Cette rĂ©glementation des mineurs par les États permettrait, si leur matĂ©riel reprĂ©sentaient plus de la moitiĂ© de la puissance de calcul du rĂ©seau, d’empĂȘcher toute confirmation d’une transaction illĂ©gale par le biais d’une attaque des 51 % mondiale.

La solution au problĂšme proviendrait des individus et des groupes d’individus qui seraient prĂȘts Ă  miner des transactions dĂ©clarĂ©es comme illĂ©gales, et qui resteraient donc honnĂȘtes du point de vue de Bitcoin. Le risque pris par ces mineurs pourrait alors ĂȘtre compensĂ© par les frais des transactions censurĂ©es, qui pourraient s’avĂ©rer ĂȘtre trĂšs Ă©levĂ©s, surtout si des montants astronomiques Ă©taient en jeu.

C’est pour cela que la bon fonctionnement des transactions vient du comportement des mineurs, pas uniquement de la puissance de calcul du rĂ©seau. Pour que Bitcoin soit correctement sĂ©curisĂ©, il faut donc que les mineurs soient nombreux (partage du risque) et se trouvent Ă  des endroits diffĂ©rents du monde (dĂ©centralisation).

 

Carte de localisation des mineurs avril 2020
Répartition géographique des mineurs utilisant les coopératives BTC.com, Poolin et ViaBTC en avril 2020 (Cambridge Center for Alternative Finance)

 

 

Qu’est-ce qui garantit la limite des 21 millions de bitcoins ?

Lorsqu’on entend parler du bitcoin, il ne faut pas attendre longtemps avant que sa politique monĂ©taire singuliĂšre soit Ă©voquĂ©e. Le bitcoin suit en effet un processus d’émission trĂšs prĂ©cis qui limite sa quantitĂ© d’unitĂ©s en circulation Ă  21 000 000 : les fameux 21 millions de bitcoins.

Bien que le principe soit briĂšvement dĂ©crit dans le livre blanc, cette politique monĂ©taire n’a Ă©tĂ© dĂ©finie rigoureusement par Satoshi Nakamoto que le 8 janvier 2009 dans son annonce du lancement de Bitcoin :

La circulation totale sera de 21 000 000 de piĂšces. Elle sera distribuĂ© aux nƓuds du rĂ©seau lorsqu’ils crĂ©eront des blocs, le montant Ă©tant divisĂ© par deux tous les 4 ans.

les 4 premiÚres années : 10 500 000 piÚces
les 4 années suivantes : 5 250 000 piÚces
les 4 années suivantes : 2 625 000 piÚces
les 4 années suivantes : 1 312 500 piÚces
etc


Cela fait du bitcoin une monnaie dure Ă  produire Ă  l’inverse des monnaies fiat imposĂ©es par les États, comme l’euro ou le dollar, dont la gestion de la masse monĂ©taire est dĂ©lĂ©guĂ©e Ă  des banques centrales. Bitcoin donne ainsi aux individus la possibilitĂ© d’épargner une monnaie qui ne perd pas en valeur au cours du temps, et qui empĂȘche au passage les acteurs financiers proches du pouvoir de profiter de l’effet Cantillon.

La politique monĂ©taire du bitcoin constitue donc une propriĂ©tĂ© rĂ©volutionnaire qui n’a mĂȘme pas Ă©tĂ© appliquĂ©e par le passĂ© et beaucoup la mettent en valeur comme une propriĂ©tĂ© gravĂ©e dans le marbre qui ne pourrait absolument pas ĂȘtre modifiĂ©e. NĂ©anmoins ce n’est pas le cas, et cette « rĂ©sistance Ă  l’inflation » doit ĂȘtre, tout comme la rĂ©sistance Ă  la censure, sĂ©curisĂ©e par des individus qui agissent en ce sens.

Bitcoin est un protocole de communication, un ensemble de rĂšgles qui permettent Ă  des gens de transfĂ©rer de la valeur entre eux, et en cela il peut Ă©voluer. Les rĂšgles de consensus qui dĂ©finissent Bitcoin ne sont en effet pas figĂ©es et peuvent faire l’objet de changements, comme l’ont montrĂ© les diffĂ©rentes amĂ©liorations qui ont jalonnĂ© l’existence de Bitcoin telles que P2SH, les verrous temporels ou SegWit.

De plus, l’évolution du protocole peut se faire dans un sens non prĂ©vu originellement, ce qui a eu lieu Ă  de multiples reprises dans l’histoire des cryptomonnaies.

En juin 2016, Ethereum a ainsi violĂ© l’immuabilitĂ© de sa propre chaĂźne en annulant le piratage d’un contrat autonome (TheDAO) oĂč 3,6 millions d’éthers, qui reprĂ©sentaient plus de 45 millions d’euros. Cette somme dĂ©robĂ©e reprĂ©sentait 4,4 % de la quantitĂ© totale d’éthers en circulation, et une majoritĂ© Ă©conomique (Ă  commencer par Vitalik Buterin) a donc dĂ©cidĂ© de revenir sur ce transfert le 20 juin. Un groupe dissident a refusĂ©, ce qui a crĂ©Ă© une autre chaĂźne oĂč le piratage Ă©tait toujours prĂ©sent, qui s’appelle aujourd’hui Ethereum Classic.

De mĂȘme, Bitcoin a changĂ© depuis ses dĂ©buts et n’est plus le mĂȘme qu’en 2011. Le principal changement n’est pas un modification du protocole en soi, mais un changement de vision : les visions d’une monnaie d’échange et d’un moyen de transfert anonyme, qui Ă©taient prĂ©dominantes aux dĂ©buts de Bitcoin, se sont estompĂ©es au profit de la vision d’un or numĂ©rique qui servirait de monnaie de rĂ©serve. MĂȘme si les premiĂšres visions subsistent au travers du projet Lightning et des logiciels dĂ©diĂ©s Ă  la confidentialitĂ© (Wasabi, Samourai, JoinMarket), elles sont devenues nĂ©anmoins minoritaires dans la communautĂ© de Bitcoin. En effet, les gens s’enthousiasment plus aujourd’hui pour les investissements de grandes entreprises comme MicroStrategy et Square, ou pour l’intĂ©gration 100 % custodiale du bitcoin dans PayPal, que pour l’échange commercial ou pour l’usage rĂ©alisĂ© sur le dark web.

 

Visions de Bitcoin Nic Carter Hasu
Visions de Bitcoin (Nic Carter et Hasu).

 

Ce changement de narration s’est accompagnĂ© d’un maintien conservateur du protocole, notamment par le biais d’une restriction de sa capacitĂ© transactionnelle. Cette restriction a pour effet de prĂ©server la dĂ©centralisation du minage donc la sĂ©curitĂ© de la chaĂźne, mais aussi d’accroĂźtre considĂ©rablement les frais de transaction payĂ©s par les utilisateurs, qui peuvent actuellement ĂȘtre de plusieurs euros en moyenne pour un traitement rapide par le rĂ©seau2.

Face Ă  ces changements, nous sommes donc en droit de nous demander quelle est la force qui empĂȘche la politique monĂ©taire de Bitcoin d’ĂȘtre modifiĂ©e, ce qui nous amĂšne naturellement Ă  la question plus gĂ©nĂ©rale de la gouvernance de Bitcoin, c’est-Ă -dire la maniĂšre dont il est dirigĂ©. Qui dĂ©cide de l’avenir du protocole ?

D’une part, certains pensent que la gouvernance est la prĂ©rogative des dĂ©veloppeurs du protocole, que ceux-ci sont en charge de ce qui doit ou non ĂȘtre intĂ©grĂ©. Pour Bitcoin, ce serait le cas de l’implĂ©mentation de rĂ©fĂ©rence, Bitcoin Core, et de son mainteneur principal, Wladimir van der Laan, qui possĂšdent les droits sur le dĂ©pĂŽt GitHub. Il est en effet vrai que les dĂ©veloppeurs ont une certaine influence sur le protocole en acceptant ou en refusant d’inclure une modification : par effet d’inertie, ils ont un poids dans les choix qui vont ĂȘtre faits, car tout changement non consenti par eux devrait ĂȘtre implĂ©mentĂ© par une nouvelle Ă©quipe peut-ĂȘtre moins expĂ©rimentĂ©e et moins bien financĂ©e. NĂ©anmoins, si un changement majeur et controversĂ© en venait Ă  ĂȘtre proposĂ© (comme le serait probablement une violation de la politique monĂ©taire du bitcoin), les dĂ©veloppeurs n’auraient aucune chance de voir leur modification ĂȘtre acceptĂ©e. C’est notamment ce qui s’est passĂ© pour Bitcoin ABC, l’implĂ©mentation principale du protocole Bitcoin Cash, qui se voit aujourd’hui ĂȘtre exclue pour avoir tentĂ© de rediriger 8 % de la rĂ©compense de bloc Ă  ses fins.

D’autre part, une opinion assez rĂ©pandue suppose que ce sont les mineurs qui doivent dĂ©cider de l’évolution du protocole, notamment par le biais de votes proportionnĂ©s Ă  leur puissance de calcul. Ces mineurs sont en effet garants de l’intĂ©gritĂ© de la chaĂźne de blocs et possĂšdent un rĂŽle majeur dans Bitcoin. Il est donc Ă©vident qu’une version de Bitcoin privilĂ©giĂ©e par les mineurs a plus de chances de prospĂ©rer qu’une version concurrente qui serait plus sensible Ă  la censure. Cependant, ce ne sont pas les mineurs qui possĂšdent le rĂ©el pouvoir sur le protocole, pour la simple et bonne raison que ce ne sont pas eux qui contribuent Ă  valoriser l’unitĂ© de compte. En raisonnant par l’absurde, on pourrait dire que si les mineurs Ă©taient rĂ©ellement en charge du protocole, le systĂšme Ă©conomique de Bitcoin serait vouĂ© Ă  l’échec : ils seraient en effet incitĂ©s Ă  augmenter leurs revenus par la crĂ©ation monĂ©taire Ă  l’instar des banques centrales.

Tout ceci nous amĂšne Ă  la troisiĂšme catĂ©gorie d’acteurs impliquĂ©s dans Bitcoin : les utilisateurs, ou plutĂŽt les marchands, c’est-Ă -dire les personnes qui acceptent le bitcoin comme moyen de paiement pour un bien ou un service. Cette catĂ©gorie des marchands est Ă  prendre au sens large et inclut, outre les commerçants classiques, les Ă©pargnants et les spĂ©culateurs qui Ă©changent de l’euro contre du bitcoin. Le fait est que ce sont ces utilisateurs qui, par l’usage direct ou indirect d’un nƓud complet, dĂ©cident rĂ©ellement de la direction dans laquelle Bitcoin doit aller, car ce sont eux qui apportent de la valeur au bitcoin.

Lorsqu’en novembre 2017 il a Ă©tĂ© question de doubler la capacitĂ© transactionnelle de Bitcoin par le biais d’une mise Ă  niveau appelĂ©e SegWit2X, les utilisateurs ont refusĂ©. Cette proposition, soutenue par la majoritĂ© des mineurs et par une grande part des entreprises du milieu, a Ă©tĂ© annulĂ©e avant son activation au vu de l’impopularitĂ© de celle-ci. Ainsi, c’est le sectarisme des utilisateurs et des dĂ©tenteurs de bitcoins, attisĂ© par un certain nombre d’influenceurs, qui a prĂ©valu dans l’affaire, chose que pressentait Satoshi Nakamoto dĂšs dĂ©cembre 2010 :

Les utilisateurs de Bitcoin pourraient devenir de plus en plus sectaires à propos de la limitation de la taille de la chaüne pour que son accùs reste facile pour beaucoup d’utilisateurs et pour les petits appareils.

Le modĂšle Ă©conomique de Bitcoin est ainsi protĂ©gĂ© par ces marchands qui, par le biais d’une conservation plus ou moins longue, sont incitĂ©s Ă  faire en sorte que la valeur du bitcoin ne baisse pas, et mĂȘme qu’elle augmente. Il est donc dans leur intĂ©rĂȘt de ne pas modifier la politique monĂ©taire dĂ©flationniste du bitcoin. De plus, la limite des 21 millions de bitcoins est un point de Schelling fort qui dĂ©vantagerait toute tentative de changement.

NĂ©anmoins, ce modĂšle n’est pas magique et, tout comme le minage, repose essentiellement sur la rĂ©sistance individuelle des marchands aux pressions, qu’elles soient intĂ©rieures (la proposition d’une Ă©mission monĂ©taire pour protĂ©ger la chaĂźne par exemple) ou extĂ©rieures.

Le cas d’une pression extĂ©rieure est le plus parlant. De maniĂšre pessimiste, on pourrait imaginer qu’un dĂ©cret appliquĂ© par les États membres de l’ONU impose par la loi une crĂ©ation monĂ©taire qui reviendrait Ă  une banque centrale mondiale, et qui rendrait illĂ©gale la version dĂ©flationniste de Bitcoin. Dans ce dernier cas, le destin de Bitcoin serait entre les mains aux marchands, qui devraient faire preuve de courage en refusant ce dĂ©cret et en acceptant le bitcoin interdit, soit en toute illĂ©galitĂ© dans leur pays, soit dans un pays non concernĂ©.

Ainsi, Ă  l’instar du bon traitement des transactions qui est garanti par les mineurs et renforcĂ© par la dĂ©centralisation du minage, la dĂ©fense de la politique monĂ©taire est assurĂ©e par les marchands et affermie grĂące Ă  leur degrĂ© d’indĂ©pendance : moins il y a de marchands capables de continuer leur activitĂ© dans l’illĂ©galitĂ© ou depuis des lieux non rĂ©glementĂ©s, notamment par la gestion de leur propre nƓud complet, moins le bitcoin est rĂ©sistant Ă  l’inflation.

 

Conclusion

Bitcoin est un systĂšme Ă©conomique basĂ© sur l’action d’individus libres. Sa sĂ©curitĂ© ne provient donc pas des concepts sous-jacents Ă  son fonctionnement comme la cryptographie, la chaĂźne de blocs, le logiciel libre, la dĂ©centralisation ou la puissance de calcul, mais de la volontĂ© humaine des personnes qui Ɠuvrent chaque jour Ă  sa survie. Bitcoin ne serait pas lĂ  sans ses dĂ©veloppeurs bienveillants, ses mineurs soucieux de la rĂ©sistance de la chaĂźne et ses marchands prĂȘts Ă  tout pour conserver un protocole sain.

Bitcoin peut ainsi ĂȘtre dĂ©nigrĂ©, rĂ©glementĂ©, interdit, attaquĂ©, combattu, mais il ne pourra pas ĂȘtre dĂ©truit dans son principe tant qu’il y aura des gens derriĂšre lui. C’est pourquoi sa communautĂ© est si cruciale : mĂȘme dans les pires moments de doute, il y aura toujours des personnes prĂȘtes Ă  programmer, Ă  miner et Ă  valoriser le bitcoin. Ainsi, malgrĂ© les restrictions imposĂ©es par les États et les efforts des banques centrales pour le singer, Bitcoin est lĂ  pour rester. Et c’est tant mieux.

 


Notes

1. ↑ Je tire cette rĂ©flexion de la thĂ©orie d’Eric Voskuil et en particulier de son texte sur le principe du partage du risque dans lequel il observe que le risque individuel d’accepter ou de miner le bitcoin dĂ©pend du nombre de gens qui le prennent.

2. ↑ Ces deux changements, relatifs Ă  Bitcoin et Ă  Ethereum, ne sont pas forcĂ©ment de mauvaises Ă©volutions : le monde a probablement besoin d’une rĂ©serve de valeur Ă  hauts frais trĂšs sĂ©curisĂ©e et trĂšs stable (surtout lorsqu’on constate les derniers agissements des États et des banques centrales) et d’une plateforme de contrats autonomes qui puisse ĂȘtre modifiĂ©e socialement dans le cas oĂč 5 % des fonds sont concernĂ©s. NĂ©anmoins, ces changements indiquent que certains principes peuvent s’éroder et que les protocoles peuvent effectivement Ă©voluer dans un sens non prĂ©vu originellement.

Pay to Script Hash (P2SH) pleinement expliqué

July 14th 2020 at 10:00

Bitcoin est un systĂšme de monnaie programmable et constitue la premiĂšre implĂ©mentation de ce qu’on appelle les smart contracts ou contrats autonomes. À chaque transaction, des scripts sont exĂ©cutĂ©s pour vĂ©rifier que les fonds dĂ©pensĂ©s remplissent les conditions voulues par l’utilisateur prĂ©cĂ©dent. De nombreuses conditions sont peuvent ĂȘtre mises en place (divulgation d’un secret, verrou temporel, multisignature), mĂȘme si le plus souvent les fonds sont simplement dĂ©pensĂ©s grĂące Ă  la signature d’un utilisateur unique.

Bitcoin repose sur un modĂšle de piĂšces (UTXO), oĂč chaque piĂšce est verrouillĂ©e par un script incomplet Ă©crit sur la chaĂźne. Lors d’une transaction, les piĂšces de bitcoin en entrĂ©e sont dĂ©verrouillĂ©es par un script complĂ©mentaire. Puis, de nouvelles piĂšces sont crĂ©Ă©es Ă  partir des anciennes grĂące Ă  de naouveaux scripts de verrouillage, ce qui perpĂ©tue le caractĂšre programmable du systĂšme.

Transaction : UTXO et scripts

Lorsque j’ai dĂ©couvert comment les transactions fonctionnaient et ce qu’elles permettaient, j’ai Ă©tĂ© fascinĂ© par l’élĂ©gance de cette solution. NĂ©anmoins, en approfondissant ma recherche, j’ai Ă©tĂ© perturbĂ© par l’existence d’une chose qui diffĂ©rait des autres, une exception : le schĂ©ma Pay to Script Hash, qu’on abrĂšge couramment en P2SH.

 

Les différents schémas : P2PK, P2PKH, P2MS et P2SH

Des scripts sont impliquĂ©s dans chaque transaction du rĂ©seau Bitcoin. Le langage de script est constituĂ© de plus d’une centaine de codes opĂ©ration, de sorte qu’un large Ă©ventail de possibilitĂ©s s’offre Ă  nous vis-Ă -vis des conditions qu’on souhaite imposer.

Cependant, dans le but d’amĂ©liorer la communication entre les diffĂ©rentes applications et de limiter le risque de perte, certains standards de scripts, ou schĂ©mas, ont Ă©mergĂ©.

 

P2PK : Pay to Public Key

Le premier schĂ©ma s’appelle Pay to Public Key (P2PK), qu’on peut traduire littĂ©ralement en français par « payer Ă  la clĂ© publique ». Il s’agit d’envoyer des fonds vers la clĂ© publique (public key) d’un utilisateur, que lui seul pourrait dĂ©penser en signant avec sa clĂ© privĂ©e. Le script de verrouillage (parfois appelĂ© scriptPubKey) permettant ce type d’envoi est :

<clé publique> CHECKSIG

Au moment de la dĂ©pense, l’utilisateur doit utiliser un script de dĂ©verrouillage (parfois appelĂ© scriptSig) contenant simplement sa signature :

<signature>

Pour l’expliquer en français, l’exĂ©cution successive de ces deux scripts permet de vĂ©rifier que la signature fournie par l’utilisateur correspond Ă  sa clĂ© publique, auquel cas elle est valide.

Si le schĂ©ma P2PK Ă©tait utilisĂ© dans les premiers jours de Bitcoin, notamment pour recevoir les gains de minage, il est aujourd’hui tombĂ© en dĂ©suĂ©tude au profit d’un schĂ©ma rival : P2PKH.

 

P2PKH : Pay to Public Key Hash

Pay to Public Key Hash (P2PKH), littĂ©ralement « payer Ă  l’empreinte de la clĂ© publique », est le deuxiĂšme type de schĂ©ma apparu dans Bitcoin dĂšs le dĂ©but, grĂące Ă  la conception de Satoshi Nakamoto. Ce schĂ©ma permet non pas de rĂ©aliser un paiement vers une clĂ© publique, mais vers l’empreinte d’une clĂ© publique, et de faire en sorte que le systĂšme de script de Bitcoin vĂ©rifie quand mĂȘme que la signature correspond Ă  la clĂ© publique lors de la dĂ©pense des fonds. L’empreinte de la clĂ© publique est alors considĂ©rĂ©e comme la donnĂ©e essentielle de l’adresse, qui dans ce cas commence toujours par un 1, comme par exemple 1DzxhUphLFq8FZPGbFgLF8Ssz3hMX9EuMp.

Le script de verrouillage ici est :

DUP HASH160 <empreinte de la clé publique> EQUALVERIFY CHECKSIG

Et le script de déverrouillage est :

<signature> <clé publique>

Pour le dire en français, l’exĂ©cution des deux scripts permet de :

  • VĂ©rifier que le passage de la clĂ© publique fournie par la fonction de hachage HASH160 (l’empreinte) est Ă©gale Ă  l’empreinte qui est spĂ©cifiĂ©e dans le script ;
  • VĂ©rifier la signature fournie correspond Ă  la clĂ© publique fournie.

L’avantage de ce schĂ©ma est qu’il permet d’avoir des adresses plus courtes (l’information Ă  encoder n’est que de 20 octets au lieu de 65 octets pour une clĂ© publique), chose pour laquelle Satoshi Nakamoto l’a implĂ©mentĂ©. De plus, en ne rĂ©vĂ©lant la clĂ© publique qu’au moment de la dĂ©pense, ce schĂ©ma accroĂźt aussi la sĂ©curitĂ© contre la menace (trĂšs hypothĂ©tique) de l’ordinateur quantique.

 

P2MS : Pay To MultiSig

Le schĂ©ma Pay To MultiSig (P2SH), littĂ©ralement « payer Ă  la multisignature », s’est popularisĂ© dĂ©but 2012. Il s’agit essentiellement d’un schĂ©ma qui permet d’exiger la signature de M personnes faisant partie d’un groupe de N participants, via le script de verrouillage :

M <clé publique 1> ... <clé publique N> N CHECKMULTISIG

Le script de déverrouillage correspondant est :

<leurre (0)> <signature 1> ... <signature M>

Pour plus d’informations sur la multisignature, je vous invite à lire mon article sur les adresses multisignatures.

C’est ce schĂ©ma, particuliĂšrement exigeant au niveau de la mise en place, qui a motivĂ© la crĂ©ation du schĂ©ma P2SH.

 

P2SH

Pay to Script Hash (P2SH), littĂ©ralement « payer Ă  l’empreinte du script ». Ce schĂ©ma reprend l’idĂ©e derriĂšre P2PKH, Ă  la seule diffĂ©rence que la donnĂ©e hachĂ©e ici n’est pas une clĂ© publique, mais le script lui-mĂȘme ! Le script en question est alors appelĂ© script de rĂšglement (redeem script) et son empreinte est la donnĂ©e constituante de l’adresse, cette derniĂšre commençant toujours par un 3 Ă  l’instar de 3DyDCGSC59yYY46dnRH7Vw1iKbV8zeW36q.

Ce type de schĂ©ma a pour avantage de permettre Ă  un utilisateur d’y inclure n’importe quel script et de pouvoir recevoir des fonds de la quasi-totalitĂ© des portefeuilles existants. Le fardeau de la construction et du dĂ©verrouillage du script revient donc au dĂ©tenteur de l’adresse, non Ă  celui qui envoie les fonds, ce qui simplifie grandement la communication.

Le script de verrouillage pour le schéma P2SH est :

HASH160 <empreinte du script de rĂšglement> EQUAL

Et le script de déverrouillage est un script de la forme :

[éléments de déverrouillage] <script de rÚglement>

En français, cela veut dire que le systĂšme de script originel de Bitcoin va vĂ©rifier que le hachage du script de rĂšglement est Ă©gal Ă  l’empreinte inscrite dans le script. Et c’est tout.

Comment ça, « c’est tout » ? Le script de rĂšglement n’est pas exĂ©cutĂ© ? N’importe qui connaissant le script pourrait dĂ©penser les bitcoins ?

Comme on va le voir, ce n’est pas le cas et le script de rĂšglement est bien exĂ©cutĂ©, bien que ce ne soit pas indiquĂ© explicitement.

 

RĂšgles et exceptions : OP_EVAL et P2SH

Dans la vie, il y a souvent une maniĂšre Ă©lĂ©gante de faire les choses, qui demande parfois plus d’efforts initiaux mais qui prĂ©serve l’ordre et la simplicitĂ©, et une maniĂšre grossiĂšre, plus facile Ă  implĂ©menter mais qui complique les choses et crĂ©e le dĂ©sordre.

Ainsi, dans le systĂšme lĂ©gislatif d’un pays, il est plus facile de crĂ©er et de faire voter de nouvelles lois execeptionnelles que de rĂ©former en profondeur le systĂšme. Cette tendance Ă  l’inflation lĂ©gislative fait qu’on se retrouve avec des pays comme la France, qui cumule 73 codes juridiques en vigueur et qui vit de 214 taxes et impĂŽts ainsi que d’une myriade de cotisations sociales.

En informatique comme en droit, l’ajout de nouvelles exceptions crĂ©e de la dette technique, rendant le systĂšme plus complexe Ă  apprĂ©hender, plus difficile Ă  maintenir et plus susceptible de ne pas fonctionner comme attendu. P2SH fait partie de ces exceptions.

 

Le code opération mort-né : OP_EVAL

L’idĂ©e d’implĂ©menter un schĂ©ma de script qui utilise l’empreinte d’un autre script comme identifiant est nĂ©e en 2011, afin de reproduire ce qui est rĂ©alisĂ© dans la schĂ©ma P2PKH. Toutefois, cette idĂ©e n’a pas Ă©tĂ© dĂ©veloppĂ©e initialement comme P2SH, mais Ă  travers OP_EVAL, un nouveau code opĂ©ration permettant l’exĂ©cution rĂ©cursive d’un script Ă  l’intĂ©rieur d’un autre script.

L’ajout de ce code opĂ©ration, proposĂ© le 18 octobre 2011 par Gavin Andresen, devait ĂȘtre implĂ©mentĂ© comme un soft fork, via le remplacement de l’instruction nulle OP_NOP1.

Un schéma standard aurait également été ajouté. Le script de verrouillage imaginé pour ce schéma était :

DUP HASH160 <empreinte du script de rĂšglement> EQUALVERIFY EVAL

Le script de déverrouillage correspondant était :

[éléments de déverrouillage] <script de rÚglement>

Pour le dire en français, l’exĂ©cution des deux scripts cĂŽte Ă  cĂŽte aurait permis de :

  • VĂ©rifier que le hachage du script de rĂšglement soit Ă©gal Ă  l’empreinte spĂ©cifiĂ©e dans le script de verrouillage ;
  • VĂ©rifier que l’exĂ©cution du script de rĂšglement combinĂ© aux Ă©lĂ©ments de dĂ©verrouillage soit bien valide.

NĂ©anmoins cette solution n’a pas Ă©tĂ© acceptĂ©e, celle-ci ayant Ă©tĂ© jugĂ©e trop dangereuse au niveau du pouvoir de rĂ©cursion. À la place c’est un autre modĂšle, plus restrictif, qui a prĂ©valu : le schĂ©ma P2SH.

 

Comment fonctionne P2SH ?

P2SH a Ă©tĂ© proposĂ© le 3 janvier 2012 comme alternative Ă  OP_EVAL et Ă  d’autres propositions. Il a Ă©tĂ© intĂ©grĂ© au protocole Bitcoin le 1er avril sous la forme d’un soft fork activĂ© par les mineurs.

L’exĂ©cution de ce type de script fonctionne exactement comme le schĂ©ma liĂ© Ă  OP_EVAL, Ă  l’exception qu’une partie du script n’est pas explicitement indiquĂ©e. D’une part, la vĂ©rification de la correspondance entre l’empreinte indiquĂ©e et le script de rĂšglement est bien rĂ©alisĂ©e par le script de verrouillage. En effet, celui-ci devient (comme on l’a vu) :

DUP HASH160 <empreinte du script de rĂšglement> EQUALVERIFY EVAL

D’autre part, l’évaluation du script de rĂšglement est effectuĂ©e implicitement grĂące Ă  une exception ajoutĂ©e au code source. DĂšs que les nƓuds du rĂ©seau reconnaissent le schĂ©ma, ils l’interprĂštent diffĂ©remment. Ainsi dans Bitcoin Core, on peut observer la condition suivante au sein de la fonction VerifyScript de l’interprĂ©teur :

// Additional validation for spend-to-script-hash transactions:
if ((flags & SCRIPT_VERIFY_P2SH) && scriptPubKey.IsPayToScriptHash())
{
    ...
}

Cette exception permet l’exĂ©cution du script de rĂšglement aprĂšs l’exĂ©cution des deux scripts (dĂ©verrouillage et verrouillage). D’oĂč le fait qu’on indique les Ă©lĂ©ments de dĂ©verrouillage avant de pousser le script de rĂšglement dans le script de dĂ©verrouillage :

[éléments de déverrouillage] <script de rÚglement>

Si cette solution est pratique, elle crĂ©e une complexitĂ© et n’est pas trĂšs Ă©lĂ©gante. Comme l’a dit Gavin Andresen dans l’explication du BIP-16 :

ReconnaĂźtre une forme « spĂ©ciale » de scriptPubKey et rĂ©aliser une validation supplĂ©mentaire quand elle est dĂ©tectĂ©e, c’est laid. Cependant, l’avis gĂ©nĂ©ral est que les alternatives sont soit encore plus laides, soit plus complexes Ă  implĂ©menter, et/ou Ă©tendent le pouvoir du langage d’expression de maniĂšre dangereuse.

L’implĂ©mentation initiale de P2SH a donc compliquĂ© les choses. Mais cela ne s’est pas arrĂȘtĂ© pas lĂ , car l’activation de SegWit en 2017 a ajoutĂ© de la complexitĂ© au modĂšle.

 

SegWit, P2SH-P2WPKH et P2SH-P2WSH

En aoĂ»t 2017, la mise Ă  niveau SegWit a Ă©tĂ© intĂ©grĂ©e Ă  Bitcoin (BTC) sous la forme d’un soft fork. Celle-ci avait pour objectif de corriger la mallĂ©abilitĂ© des transactions, d’augmenter la capacitĂ© transactionnelle, d’amĂ©liorer la vĂ©rification des signatures et de faciliter les modifications futures du protocole.

Pour ce faire, SegWit implĂ©mentait un nouveau modĂšle de transaction, oĂč les signatures sont situĂ©es dans une partie sĂ©parĂ©e de la transaction appelĂ©e le tĂ©moin (d’oĂč le nom de Segregated Witness). Afin d’implĂ©menter ce changement comme un soft fork, il a Ă©tĂ© nĂ©cessaire d’introduire un moyen d’accĂ©der au nouveau type de transaction sans briser la compatibilitĂ© avec les anciennes adresses.

C’est ainsi que 4 nouveaux types d’adresse ont vu le jour : deux nouveaux types « natifs », P2WPKH (Pay to Witness Public Key Hash) et P2WSH (Pay to Witness Script Hash), incompatibles avec portefeuilles ne supportant pas SegWit ; et deux types « imbriquĂ©s » associĂ©s, P2SH-P2WPKH et P2SH-P2WSH, qui permettent la transition grĂące Ă  l’emploi de P2SH.

Pour ces deux derniers types d’adresse, le schĂ©ma utilisĂ© est P2SH avec un script de rĂšglement de la forme :

<version SegWit> <empreinte>

Dans la version 0 de SegWit (la seule qui existe pour le moment), l’empreinte est affectĂ©e Ă  une clĂ© publique ou Ă  un script selon sa longueur : si elle est de 20 octets, elle est interprĂ©tĂ©e comme une empreinte de clĂ© publique ; si elle est de 32 octets, elle est interprĂ©tĂ©e comme une empreinte de script. Cette empreinte est aussi appelĂ©e « programme ».

Ce script est anyone-can-spend puisque le script de rÚglement suffit à déverrouiller la piÚce :

<script de rĂšglement>

Comme pour P2SH, la connaissance du script de rÚglement ne suffit pourtant pas à dépenser les fonds, car une nouvelle exception est ajoutée au code de façon à ce que les éléments de déverrouillage soient transférées dans le témoin. Dans Bitcoin Core, cette exception se traduit par :

// P2SH witness program
if (flags & SCRIPT_VERIFY_WITNESS) {
    ...
}

SegWit a ainsi apportĂ© un nouveau lot de complexitĂ©, et notamment un deuxiĂšme niveau de rĂ©cursion. Dans le cas du schĂ©ma P2SH-P2WSH, on a en effet une sĂ©rie de 3 scripts imbriquĂ©s. Le premier script est le script de dĂ©verrouillage que l’on a prĂ©sentĂ© au dĂ©but de cet article :

HASH160 <empreinte du script de rĂšglement> EQUAL

Le deuxiÚme script est le script de rÚglement spécifique à P2SH :

<version SegWit> <empreinte du script SegWit>

Le troisiĂšme est le script SegWit, indiquĂ© dans le tĂ©moin avec les Ă©lĂ©ments de dĂ©verrouillage au moment de la dĂ©pense des fonds. Par exemple, il peut s’agir d’un script de multisignature comme vu prĂ©cĂ©demment :

2 <clé publique 1> <clé publique 2> 2 CHECKMULTISIG

qu’on complĂšte avec les Ă©lĂ©ments :

0 <signature 1> <signature 2>

 

Conclusion

Pay to Script Hash (P2SH) est donc une maniĂšre imparfaite mais trĂšs pratique de permettre aux utilisateurs de payer Ă  l’empreinte d’un script, c’est-Ă -dire Ă  une adresse simple qui correspond Ă  un script. La rĂ©cursion qui intervient dans l’exĂ©cution du script aurait pu ĂȘtre implĂ©mentĂ©e de maniĂšre plus Ă©lĂ©gante grĂące au code opĂ©ration OP_EVAL, mais ce dernier a Ă©tĂ© jugĂ© trop dangereux par la communautĂ© pour voir le jour.

En ajoutant une nouvelle exception au protocole pour ĂȘtre exĂ©cutĂ©, le schĂ©ma P2SH reprĂ©sente un vecteur de complexitĂ©. De plus, cette complexitĂ© est dĂ©multipliĂ©e par l’incorporation de SegWit, qui ajoute de nouvelles exceptions rigides Ă  P2SH et qui finit de dĂ©tourner complĂštement le fonctionnement originel du systĂšme de script de Bitcoin.

NĂ©anmoins, ce qui est fait est fait, et aujourd’hui ces changements commencent Ă  ĂȘtre connus dans l’écosystĂšme, et on peut donc espĂ©rer que cette complexitĂ© n’impacte pas trop les nouveaux dĂ©veloppeurs. En particulier, le schĂ©ma P2SH est rĂ©pandu dans tout l’écosystĂšme, par les protocoles associĂ©s Ă  Bitcoin tel que Bitcoin Cash, Litecoin ou Dash. Seuls les dĂ©veloppeurs de Bitcoin SV ont se sont opposĂ©s Ă  cette particularitĂ© de maniĂšre catĂ©gorique et ont choisi de dĂ©sactiver P2SH en fĂ©vrier 2020.

Ce qu’il faut retenir de tout ceci, c’est que Bitcoin, au-delĂ  de son aspect technique, est un systĂšme Ă©conomique et social. Il Ă©volue selon les exigences de ses utilisateurs, si bien qu’il est impossible de le comprendre sans apprĂ©hender les dynamiques sous-jacentes qui ont Ă©tĂ© Ă  l’Ɠuvre dans le passĂ©.

 


Sources

Gavin Andresen, BIP-11 (M-of-N Standard Transactions), 18 octobre 2011.
Gavin Andresen, BIP-12 (OP_EVAL), 18 octobre 2011.
Gavin Andresen, BIP-16 (Pay to Script Hash), 3 janvier 2012.
Mike Hearn, On consensus and forks, 12 août 2015.
Eric Lombrozo, Johnson Lau et Pieter Wuille, BIP-141 (Segregated Witness), 21 décembre 2015.

❌