Au cœur du Bitcoin

Andreas M. Antonopoulos

Au cœur du Bitcoin

Traduction française publiée et vendue avec l’autorisation de O’Reilly Media, Inc. de Mastering Bitcoin 2nd Edition ISBN 9781491954386 © 2017 Andreas M. Antonopoulos, LLC.

© 2019 Éditions First, un département d’Édi8

12, avenue d’Italie

75013 Paris – France

Tél. : 01 44 16 09 00

Fax : 01 44 16 09 01

Courriel : firstinfo@editionsfirst.fr

Site Internet : www.editionsfirst.fr

ISBN : 978-2-412-03745-4

ISBN numérique : 9782412043370

Dépôt légal : octobre 2019

Traduction de l’anglais : Laurent Leloup

Avec la contribution de Daniel Ichbiah

Mise en page : Pierre Brandeis

Cette œuvre est protégée par le droit d’auteur et strictement réservée à l’usage privé du client. Toute reproduction ou diffusion au profit de tiers, à titre gratuit ou onéreux, de tout ou partie de cette œuvre est strictement interdite et constitue une contrefaçon prévue par les articles L 335-2 et suivants du Code de la propriété intellectuelle. L’éditeur se réserve le droit de poursuivre toute atteinte à ses droits de propriété intellectuelle devant les juridictions civiles ou pénales.

Ce livre numérique a été converti initialement au format EPUB par Isako www.isako.com à partir de l'édition papier du même ouvrage.

Introduction

Je suis tombé sur le Bitcoin pour la première fois mi-2011. Ma réaction immédiate a été plus ou moins : « Pfft ! Monnaie ringarde ! » Et je l’ai ignoré pendant six mois, sans saisir son importance. C’est une réaction que j’ai vue se répéter chez beaucoup des personnes les plus intelligentes que je connaisse, ce qui me console quelque peu. La deuxième fois que je suis tombé sur le Bitcoin, lors d’une discussion sur une liste de diffusion, j’ai décidé de lire le livre blanc rédigé par Satoshi Nakamoto afin d’étudier la source faisant autorité et de voir de quoi il s’agissait. Je me souviens encore du moment où j’ai fini de lire ces neuf pages, lorsque j’ai réalisé que le Bitcoin n’était pas simplement une monnaie numérique, mais un réseau de confiance qui pourrait également servir de base à bien plus que de simples devises. La prise de conscience que « ce n’est pas de l’argent, c’est un réseau de confiance décentralisé », m’a propulsé dans un périple de quatre mois pour dévorer toutes les informations que je pouvais trouver sur les bitcoins. Je suis devenu obsédé et fasciné, passant 12 heures ou plus par jour collé à un écran, lisant, écrivant, codant et apprenant autant que je pouvais. Je suis sorti de cet état second avec plus de 10 kilos de moins par manque de repas consistants, déterminé à me consacrer au travail sur le Bitcoin.

Deux ans plus tard, après avoir créé un certain nombre de petites startups pour explorer divers services et produits liés au Bitcoin, j’ai décidé qu’il était temps d’écrire mon premier livre. Le Bitcoin était le sujet qui m’avait plongé dans une frénésie de créativité et absorbé mes pensées. C’était la technologie la plus excitante que j’avais rencontrée depuis Internet. Il était maintenant temps de partager ma passion pour cette technologie incroyable avec un public plus large.

À qui s’adresse ce livre

Ce livre est principalement destiné aux codeurs. Si vous savez utiliser un langage de programmation, ce livre vous enseignera comment les monnaies cryptographiques fonctionnent, comment les utiliser, et comment développer des logiciels qui s’en servent. Les premiers chapitres peuvent aussi constituer une introduction approfondie sur le Bitcoin pour les non-codeurs – ceux qui essaient de comprendre les mécanismes internes de Bitcoin et des cryptomonnaies.

Pourquoi des insectes sur la couverture ?

La « fourmi coupe-feuille » est une espèce qui présente un comportement très complexe dans un super-organisme appelé une colonie, mais chacune des fourmis opère selon un ensemble de règles simples conduites par les interactions sociales et les échanges de senteurs chimiques (les phéromones). Selon Wikipédia : « Comparées aux humains, les fourmis coupe-feuille forment les sociétés animales les plus grandes et les plus complexes du monde. » Les fourmis coupe-feuille ne mangent pas les feuilles, mais les utilisent plutôt pour cultiver un champignon, qui est la principale source alimentaire de la colonie. Vous comprenez ? Ces fourmis cultivent !

Bien que les fourmis forment une société basée sur les castes et aient une reine pour produire des enfants, il n’y a pas d’autorité centrale ni de chef dans une colonie de fourmis. Le comportement très intelligent et sophistiqué d’une colonie de plusieurs millions de membres est une propriété émergente de l’interaction des individus dans un réseau social.

La nature démontre que les systèmes décentralisés peuvent être résilients et produire une complexité émergente et une sophistication incroyable sans avoir besoin d’une autorité centrale, d’une hiérarchie ou de composants complexes.

Bitcoin est un réseau de confiance décentralisé très sophistiqué pouvant prendre en charge une multitude de processus financiers. Pourtant, chaque nœud du réseau Bitcoin suit quelques règles mathématiques simples. L’interaction entre de nombreux nœuds est à l’origine de l’émergence d’un comportement sophistiqué, et non de la complexité inhérente ou de la confiance en un seul nœud. À l’instar d’une colonie de fourmis, le réseau Bitcoin est un réseau résilient de nœuds simples qui suivent des règles simples qui, ensemble, peuvent faire des choses étonnantes sans coordination centrale.

Conventions utilisées dans ce livre

Les conventions typographiques suivantes sont utilisées dans ce livre :

Italique

Indique les termes nouveaux, noms et extensions de fichiers.

Largeur constante

Utilisé pour les URL, les adresses e-mail, les listes de programme, ainsi que dans les paragraphes, pour faire référence à des éléments de programme tels que des noms de variable ou de fonction, des bases de données, des types de données, des variables d’environnement, des instructions et des mots-clés.

Largeur constante en gras

Affiche des commandes ou d’autres textes qui doivent être tapés tels quels par l’utilisateur.

Cette icône indique un conseil ou une suggestion.

Cette icône indique une note générale.

Cette icône indique un avertissement ou une mise en garde.

Exemples du livre

Les exemples sont illustrés en Python, C ++ et à l’aide de la ligne de commande d’un système d’exploitation de type Unix, tel que Linux ou macOS. Tous les extraits de code sont disponibles dans le référentiel Github (https://github.com/bitcoinbook/bitcoinbook) dans le sous-répertoire de code du référentiel principal. Entrez le code du livre, essayez les exemples de code ou soumettez les corrections via GitHub.

Tous les extraits de code peuvent être exécutés sur la plupart des systèmes d’exploitation avec une installation minimale de compilateurs et d’interprètes pour les langues correspondantes. Si nécessaire, nous fournissons des instructions d’installation de base et des exemples pas à pas de la restitution de ces instructions.

Certains extraits de code et la restitution de code ont été reformatés pour des impératifs d’impression. Dans tous les cas, les lignes ont été divisées par une barre oblique inverse (\), suivie d’un caractère de nouvelle ligne. Lors de la transcription des exemples, supprimez ces deux caractères, reliez les lignes et vous obtiendrez des résultats identiques, comme indiqué dans l’exemple.

Tous les extraits de code utilisent des valeurs réelles et des calculs dans la mesure du possible, afin que vous puissiez construire exemple par exemple et voir les mêmes résultats dans tout code que vous écrivez pour calculer les mêmes valeurs. Par exemple, les clés privées et les clés publiques et adresses correspondantes sont toutes réelles. Les exemples de transactions, de blocs et de références de blockchain ont tous été introduits dans la blockchain Bitcoin réelle et font partie du registre public. Vous pouvez donc les consulter sur n’importe quel système Bitcoin.

Adresses Bitcoin et transactions de ce livre

Les adresses Bitcoin, les transactions, les clés, les QR codes et les données blockchain utilisées dans ce livre sont pour la plupart réels. Cela signifie que vous pouvez explorer la blockchain, consulter les transactions proposées à titre d’exemple, les récupérer avec vos propres scripts ou programmes, etc.

Toutefois, notez que les clés privées utilisées pour construire les adresses sont soit imprimées dans ce livre, soit « brûlées ». Cela signifie que si vous envoyez de l’argent à l’une de ces adresses, cet argent sera soit perdu à jamais, soit dans certains cas, quelqu’un ayant lu ce livre, l’aura récupéré en utilisant les clés privées imprimées ici.

N’ENVOYEZ DE L’ARGENT À AUCUNE DES ADRESSES FIGURANT DANS CE LIVRE. Votre argent sera récupéré par un autre lecteur ou perdu pour toujours.

Contacter l’auteur

Vous pouvez me contacter mon site personnel (en anglais) : https://antonopoulos.com/, mais aussi sur les réseaux sociaux :

• Facebook : https://facebook.com/AndreasMAntonopoulos ;

• Twitter : https://twitter.com/aantonop ;

• LinkedIn : https://linkedin.com/company/aantonop.

Des informations à propos de l’édition originale (en langue anglaise) de ce livre, Open Edition et leurs traductions sont disponibles sur : https://bitcoinbook.info/.

Un grand merci à tous mes clients qui soutiennent mon travail par des dons mensuels sur Patreon (https://patreon.com/aantonop).

Remerciements

Ce livre représente les efforts et les contributions de nombreuses personnes. Je suis reconnaissant pour toute l’aide que j’ai reçue d’amis, de collègues et même de parfaits inconnus, qui se sont joints à moi pour écrire le livre technique ultime sur les cryptomonnaies et le Bitcoin.

Il est impossible de faire la distinction entre la technologie Bitcoin et la communauté Bitcoin, et ce livre est autant un produit de cette communauté qu’un livre sur la technologie. Mon travail sur ce livre a été encouragé, acclamé, soutenu et récompensé par toute la communauté Bitcoin du début à la fin. Plus que tout, ce livre m’a permis de faire partie d’une merveilleuse communauté pendant deux ans et je ne saurais trop vous remercier de m’y avoir accepté. Il y a beaucoup trop de personnes pour les citer nommément, celles que j’ai rencontrées lors de conférences, d’événements, de séminaires, de réunions, de réunions pizzas et de petites réunions privées, ainsi que de nombreuses personnes qui ont communiqué avec moi par Twitter, Reddit, bitcointalk.org, GitHub et qui ont eu un impact sur ce livre. Chaque idée, analogie, question, réponse et explication que vous trouvez dans ce livre a été inspirée, testée ou améliorée grâce à mes interactions avec la communauté. Merci à tous pour votre soutien, sans vous ce livre n’aurait pas existé. Je vous suis, pour toujours, reconnaissant.

Bien sûr le parcours pour devenir auteur commence bien avant le premier livre. Ma langue maternelle (et ma scolarité) est le grec. J’ai donc dû suivre un cours de rattrapage en rédaction anglaise au cours de ma première année à l’université. Je tiens à remercier Diana Kordas, ma professeure d’écriture anglaise, qui m’a aidé à développer la confiance et les compétences acquises cette année-là. Plus tard, en tant que professionnel, j’ai développé mes compétences en rédaction technique sur le thème des centres de données, en écrivant pour le magazine Network World. Je tiens à remercier John Dix et John Gallant, qui m’ont donné mon premier travail d’auteur en tant que chroniqueur à Network World, à mon éditeur, Michael Cooney, et à ma collègue, Johna Till Johnson, qui a édité mes chroniques et les a préparées pour publication. Écrire 500 mots par semaine pendant quatre ans m’a permis d’acquérir suffisamment d’expérience pour envisager éventuellement de devenir auteur.

Merci également à ceux qui m’ont soutenu lorsque j’ai proposé le livre à O’Reilly, en fournissant des recommandations et en révisant le manuscrit. Merci en particulier à John Gallant, à Gregory Ness, à Richard Stiennon, à Joel Snyder, à Adam B. Levine, à Sandra Gittlen, à John Dix, à Johna Till Johnson, à Roger Ver et à Jon Matonis. Un remerciement tout particulier à Richard Kagan et à Tymon Mattoszko qui ont examiné les premières versions du manuscrit, et à Matthew Taylor, qui a copié le manuscrit.

Merci à Cricket Liu, auteur de DNS and BIND chez O’Reilly, qui m’a fait connaître O’Reilly. Merci également à Michael Loukides et Allyson MacDonald chez O’Reilly, qui ont travaillé pendant des mois pour que ce livre devienne réalité. Allyson a été particulièrement patiente lorsque les délais ont été dépassés et que les produits livrables ont été retardés à cause des aléas de la vie intervenant dans notre calendrier prévu. Pour la deuxième édition, je remercie Timothy McGovern d’avoir guidé le processus, Kim Cofer d’avoir patiemment édité, et Rebecca Panzer d’avoir illustré de nombreux nouveaux diagrammes.

Les premières versions des premiers chapitres ont été les plus difficiles, car le Bitcoin est un sujet difficile à aborder. Chaque fois que je tirais sur un fil de la technologie Bitcoin, je devais tirer sur le tout. Je me suis souvent retrouvé coincé et un peu abattu alors que je m’efforçais de rendre le sujet facile à comprendre et de créer un récit autour d’un sujet technique aussi dense. Finalement, j’ai décidé de raconter l’histoire de Bitcoin à travers les histoires des personnes utilisant Bitcoin et le livre entier est devenu beaucoup plus facile à écrire. Je dois remercier mon ami et mentor, Richard Kagan, qui m’a aidé à comprendre l’histoire et à surmonter les moments de blocage de l’auteur. Je remercie Pamela Morgan, qui a examiné les premières versions de chaque chapitre de la première et de la deuxième édition du livre et a posé les questions difficiles pour les améliorer. Merci également aux développeurs du groupe Meetup San Francisco Bitcoin Developers, ainsi qu’à Taariq Lewis et Denise Terry, qui ont aidé à tester le contenu. Merci également à Andrew Naugler pour la conception infographique.

Au cours du développement du livre, j’ai publié les premières versions sur GitHub et invité le public à les commenter. Plus d’une centaine de commentaires, suggestions, corrections et contributions ont été soumis en réponse. Ces contributions sont explicitement reconnues, avec mes remerciements, dans la section suivante. Surtout, je remercie sincèrement les rédacteurs bénévoles de GitHub, Ming T. Nguyen (1e édition) et Will Binns (2e édition), qui ont travaillé sans relâche pour rassembler, gérer et résoudre les demandes de tirage, émettre des rapports et corriger les anomalies sur GitHub.

Une fois le livre rédigé, il a fait l’objet de plusieurs examens techniques. Merci à Cricket Liu et Lorne Lantz pour leurs lectures approfondies, leurs commentaires et leur soutien.

Plusieurs développeurs Bitcoin ont contribué à des exemples de code, des critiques, des commentaires et des encouragements. Merci à Amir Taaki et Eric Voskuil pour des extraits de code et de nombreux bons commentaires, Chris Kleeschulte pour sa contribution à l’annexe Bitcore, Vitalik Buterin et Richard Kiss pour leur aide concernant les calculs en courbe elliptique et les contributions au code, Gavin Andresen pour corrections, commentaires et encouragements, Michalis Kargakis pour ses commentaires, ses contributions et sa brève rédaction et Robin Inge pour les soumissions d’errata améliorant le deuxième tirage. Lors de la deuxième édition, de nombreux développeurs de Bitcoin Core m’ont beaucoup aidé, notamment Eric Lombrozo, qui a démystifié Segregated Witness, Luke Dashjr, qui a contribué à l’amélioration du chapitre sur les transactions, Johnson Lau, qui a examiné Segemated Witness et d’autres chapitres, et bien d’autres. Je tiens à remercier Joseph Poon, Tadge Dryja et Olaoluwa Osuntokun qui ont expliqué Lightning Network, révisé mon écriture et répondu aux questions lorsque je me suis retrouvé coincé.

Je dois mon amour des mots et des livres à ma mère, Thérèse, qui m’a élevé dans une maison où des livres étaient présents sur chacun des murs. Ma mère m’a également acheté mon premier ordinateur en 1982, bien qu’elle soit une technophobe autoproclamée. Mon père, Menelaos, un ingénieur civil qui vient de publier son premier livre à l’âge de 80 ans, m’a appris à penser de manière logique et analytique et à aimer les sciences et l’ingénierie.

Merci à tous pour votre soutien tout au long de ce voyage.

Version préliminaire de publication (Contributions GitHub)

De nombreux contributeurs ont proposé des commentaires, des corrections et des ajouts à la version préliminaire de GitHub. Merci à tous pour vos contributions à ce livre.

Vous trouverez ci-dessous une liste des contributeurs notables de GitHub, avec leur identifiant GitHub entre parenthèses :

• Alex Waters (alexwaters)

• Andrew Donald Kennedy (grkvlt)

• bitcoinctf

• Bryan Gmyrek (physicsdude)

• Casey Flynn (cflynn07)

• Chapman Shoop (belovachap)

• Christie D’Anna (avocadobreath)

• Cody Scott (Siecje)

• coinradar

• Cragin Godley (cgodley)

• dallyshalla

• Diego Viola (diegoviola)

• Dirk Jäckel (biafra23)

• Dimitris Tsapakidis (dimitris-t)

• Dmitry Marakasov (AMDmi3)

• drstrangeM

• Ed Eykholt (edeykholt)

• Ed Leafe (EdLeafe)

• Edward Posnak (edposnak)

• Elias Rodrigues (elias19r)

• Eric Voskuil (evoskuil)

• Eric Winchell (winchell)

• Erik Wahlström (erikwam)

• effectsToCause (vericoin)

• Esteban Ordano (eordano)

• ethers

• fabienhinault

• Frank Höger (francyi)

• Gaurav Rana (bitcoinsSG)

• genjix

• halseth

• Holger Schinzel (schinzelh)

• Ioannis Cherouvim (cherouvim)

• Ish Ot Jr. (ishotjr)

• James Addison (jayaddison)

• Jameson Lopp (jlopp)

• Jason Bisterfeldt (jbisterfeldt)

• Javier Rojas (fjrojasgarcia)

• Jeremy Bokobza (bokobza)

• JerJohn15

• Joe Bauers (joebauers)

• joflynn

• Johnson Lau (jl2012)

• Jonathan Cross (jonathancross)

• Jorgeminator

• Kai Bakker (kaibakker)

• Mai-Hsuan Chia (mhchia)

• Marzig (marzig76)

• Maximilian Reichel (phramz)

• Michalis Kargakis (kargakis)

• Michael C. Ippolito (michaelcippolito)

• Mihail Russu (MihailRussu)

• Minh T. Nguyen (enderminh)

• Nagaraj Hubli (nagarajhubli)

• Nekomata (nekomata-3)

• Robert Furse (Rfurse)

• Richard Kiss (richardkiss)

• Ruben Alexander (hizzvizz)

• Sam Ritchie (sritchie)

• Sergej Kotliar (ziggamon)

• Seiichi Uchida (topecongiro)

• Simon de la Rouviere (simondlr)

• Stephan Oeste (Emzy)

• takaya-imai

• Thiago Arrais (thiagoarrais)

• venzen

• Will Binns (wbnns)

• wintercooled

• wjx

• Wojciech Langiewicz (wlk)

• yurigeorgiev4

Glossaire

Ce glossaire succinct contient de nombreux termes en lien avec Bitcoin. Ces termes sont utilisés tout au long du livre. Ajoutez un signet à cette page pour une consultation rapide.

adresse

Une adresse Bitcoin ressemble à 1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV. Elle consiste en une suite de lettres et de chiffres. Il s’agit vraiment d’une version encodée en base58 d’un hachage à 160 bits de clé publique. Tout comme vous demandez à des tiers d’envoyer un courrier électronique à votre adresse électronique, vous demanderiez aux autres de vous envoyer des bitcoins à l’une de vos adresses Bitcoin.

adresse P2SH

Les adresses P2SH sont des codages Base58Check du hachage de 20 octets d’un script. Les adresses P2SH utilisent le préfixe de version « 5 », ce qui donne des adresses codées Base58Check commençant par « 3 ». Les adresses P2SH cachent toute la complexité, de sorte que la personne effectuant un paiement ne voit pas le script.

arbre de Merkle (merkle tree)

Un arbre construit en hachant des données appariées (les feuilles), puis en appariant et en hachant les résultats jusqu’à ce qu’il ne reste qu’un seul hachage, la racine de Merkle. Dans Bitcoin, les feuilles sont presque toujours des transactions d’un seul bloc.

bip (Bitcoin Improvement Proposal)

Un ensemble de propositions que les membres de la communauté ont émises pour améliorer Bitcoin. Par exemple, BIP-21 est une proposition pour améliorer le schéma d’identificateur de ressource uniforme (URI) de Bitcoin.

bitcoin

Le nom de l’unité monétaire (la pièce), du réseau et du logiciel.

bloc

Un groupe de transactions, marqué avec un horodatage et une empreinte du bloc précédent. L’en-tête de bloc est haché pour produire une preuve de travail, validant ainsi les transactions. Les blocs valides sont ajoutés à la blockchain principale par consensus du réseau.

bloc de genèse (genesis block)

Le premier bloc de la blockchain, utilisé pour initialiser la cryptomonnaie.

bloc obsolète (stale block)

Bloc qui a été exploité avec succès mais qui n’est pas inclus dans la meilleure blockchain actuelle, probablement parce qu’un autre bloc de la même hauteur a eu sa chaîne étendue en premier.

bloc orphelin

Bloc dont le bloc parent n’a pas été traité par le nœud local, il ne peut donc pas encore être entièrement validé.

blockchain

Une liste de blocs validés, chacun étant lié à son prédécesseur jusqu’au bloc de genèse.

canaux de paiement

Un canal de micropaiement ou canal de paiement est une classe de techniques conçues pour permettre aux utilisateurs d’effectuer plusieurs transactions en bitcoins sans valider toutes les transactions dans la blockchain Bitcoin. Dans un canal de paiement typique, deux transactions seulement sont ajoutées à la blockchain mais un nombre illimité ou presque illimité de paiements peut être effectué entre les participants.

cible de difficulté (difficulty target)

Une difficulté à laquelle tous les calculs dans le réseau trouveront des blocs toutes les 10 minutes environ.

clé secrète (ou clé privée)

Le numéro secret qui déverrouille le bitcoin envoyé à l’adresse correspondante. Une clé secrète ressemble à ceci :

5J76sF8L5jTtzE96r66Sf8cka9y44wdpJjMwCxR3tzLh3ibVPxh

coinbase

Un champ spécial utilisé comme unique entrée pour les transactions de type coinbase. Le coinbase permet de réclamer la récompense du bloc et fournit jusqu’à 100 octets pour des données arbitraires. Ne pas confondre avec la plateforme de transactions Coinbase.

confirmation

Une fois qu’une transaction est incluse dans un bloc, elle a une confirmation. Dès qu’un autre bloc est extrait sur la même blockchain, la transaction a deux confirmations, etc. Six confirmations ou plus sont considérées comme une preuve suffisante pour qu’une transaction ne puisse pas être annulée.

consensus

Lorsque plusieurs nœuds, généralement la plupart des nœuds du réseau, possèdent les mêmes blocs dans leur meilleure blockchain validée localement. Ne pas confondre avec les règles de consensus.

difficulté

Un paramètre à l’échelle du réseau qui contrôle la quantité de calcul nécessaire pour produire une preuve de travail.

difficulté à recibler (difficulty retargeting)

Un nouveau calcul à l’échelle du réseau de la difficulté qui se produit une fois tous les 2 016 blocs et qui tient compte de la puissance de hachage des 2 016 blocs précédents.

double dépense

La double dépense est le résultat d’une dépense d’argent réussie plus d’une fois. Bitcoin protège contre la double dépense en vérifiant chaque transaction ajoutée à la blockchain pour vous assurer que les entrées de la transaction n’ont pas déjà été dépensées.

ECDSA (Elliptic Curve Digital Signature Algorithm)

Ou algorithme de signature numérique à courbe elliptique. Il s’agit d’un algorithme cryptographique utilisé par Bitcoin pour garantir que les fonds ne peuvent être dépensés que par leurs propriétaires légitimes.

extra nonce

Au fur et à mesure que la difficulté augmentait, les mineurs utilisaient souvent les 4 milliards de valeurs du nonce sans trouver de bloc. Étant donné que le script coinbase peut stocker entre 2 et 100 octets de données, les mineurs ont commencé à utiliser cet espace comme espace de stockage supplémentaire, leur permettant d’explorer une plage beaucoup plus étendue de valeurs d’en-tête de bloc pour trouver des blocs valides.

fork

Le fork, également appelé fork accidentel, se produit lorsque deux blocs ou plus ont la même hauteur de bloc, forçant la blockchain. Cela se produit généralement lorsque deux mineurs ou plus trouvent des blocs presque au même moment. Cela peut aussi arriver dans le cadre d’une attaque.

fork dur (hard fork)

Également connu sous le nom de changement radical, c’est une divergence permanente dans la blockchain. Elle se produit généralement lorsque les nœuds non mis à niveau ne peuvent pas valider les blocs créés par les nœuds mis à niveau qui respectent les nouvelles règles de consensus. Ne pas confondre avec fork, soft fork, fork logiciel ou fork Git.

fork léger (soft fork)

Aussi appelé Soft-Forking Change, fork temporaire de la blockchain, qui survient généralement lorsque des mineurs utilisant des nœuds non mis à niveau ne suivent pas une nouvelle règle de consensus que leurs nœuds ignorent. Ne pas confondre avec fork, hard fork, fork logiciel ou fork Git.

format d’importation de portefeuille (WIF)

Le format d’importation de portefeuille ou WIF (Wallet Import Format) est un format d’échange de données conçu pour permettre l’exportation et l’importation d’une clé privée unique avec un indicateur indiquant si elle utilise ou non une clé publique compressée.

graine de portefeuille HD

La graine de portefeuille HD ou la graine de racine est une valeur potentiellement courte utilisée en tant que graine pour générer la clé privée principale et le code de la chaîne principale d’un portefeuille HD.

hachage (hash)

Empreinte digitale d’une entrée binaire.

hashlocks

Un hashlock est un type d’obstacle qui limite les dépenses d’une sortie jusqu’à ce qu’une donnée spécifiée soit révélée publiquement. Les hashlocks ont la particularité d’être ouverts publiquement. Tout hashlock sécurisé utilisant une même clé peut ainsi être ouvert. Cela permet de créer plusieurs sorties présentant le même hashlock et qui deviennent utilisables en même temps.

honoraires (fees)

L’émetteur d’une transaction inclut souvent des frais au réseau pour traiter la transaction demandée. La plupart des transactions nécessitent des frais minimum de 0,5 mBTC.

HTLC (Hash TimeLock Contract)

Contrat à cadence hachée. Une classe de paiements qui utilise des hashlocks et des timelocks pour obliger le destinataire d’un paiement à accuser réception du paiement avant une date limite en générant une preuve de paiement cryptographique ou à renoncer à sa capacité de réclamer le paiement le retournant au payeur.

KYC (Know Your Customer)

Connaître son client est le processus d’une entreprise qui identifie et vérifie l’identité de ses clients. Le terme est également utilisé pour faire référence au règlement bancaire qui régit ces activités.

LevelDB

LevelDB est un stockage open source valeur-clé sur disque. C’est aussi une bibliothèque légère à usage unique pour la persistance avec des liaisons à de nombreuses plates-formes.

Lightning Network

Lightning Network est une implémentation proposée de contrats à cadence hachée (HTLC) avec des canaux de paiement bidirectionnels permettant aux paiements d’être acheminés en toute sécurité sur plusieurs canaux de paiement pair-à-pair. Cela permet de créer un réseau où n’importe quel « pair » sur le réseau peut payer n’importe quel autre « pair », même s’ils n’ont pas directement de canal ouvert entre eux.

locktime

Locktime, ou plus techniquement nLockTime, est la partie d’une transaction qui indique la première heure ou le premier bloc au moment où cette transaction peut être ajoutée à la blockchain.

mempool

Le mempool Bitcoin (pool de mémoire) est un ensemble de toutes les données de transaction d’un bloc vérifiées par les nœuds Bitcoin, mais non encore confirmées.

minage groupé

Le minage en groupe est une approche de minage où plusieurs clients générateurs contribuent à la génération d’un bloc, puis se partagent la récompense du bloc en fonction de la puissance de traitement fournie.

mineur

Un nœud de réseau qui trouve une preuve de travail valide pour les nouveaux blocs, par hachage répété.

multisignature

Par multisignature (multisig), il faut plus d’une clé pour autoriser une transaction Bitcoin.

Nakamoto, Satoshi

Satoshi Nakamoto est le nom utilisé par la personne ou les personnes qui ont conçu Bitcoin et créé son implémentation de référence originale, Bitcoin Core. Dans le cadre de la mise en œuvre, ils ont également conçu la première base de données blockchain. Ce faisant, ils ont été les premiers à résoudre le problème de la double dépense pour la monnaie numérique. Leur véritable identité reste inconnue.

nonce

Le « nonce » dans un bloc Bitcoin est un champ de 32 bits (4 octets) dont la valeur est définie de sorte que le hachage du bloc contienne une série de zéros non significatifs. Le reste des champs ne peut pas être modifié, car ils ont une signification définie.

OP_RETURN

Un code d’opération utilisé dans l’une des sorties d’une transaction OP_RETURN. Ne pas confondre avec la transaction OP_RETURN.

opcode

Codes d’opération du langage de script Bitcoin qui transmettent des données ou exécutent des fonctions dans un script pubkey ou un script de signature.

P2PKH (Pay To PubKey Hash)

Les transactions qui paient une adresse Bitcoin contiennent des scripts P2PKH (Pay To PubKey Hash). Une sortie verrouillée par un script P2PKH peut être déverrouillée (dépensée) en présentant une clé publique et une signature numérique créée par la clé privée correspondante.

P2SH (Pay-to-Script-Hash)

P2SH est un nouveau type de transaction puissant qui simplifie grandement l’utilisation de scripts de transaction complexes. Avec P2SH, le script complexe qui détaille les conditions de dépense de la sortie (script de rachat) n’est pas présenté dans le script de verrouillage. Au lieu de cela, seul un hachage se trouve dans le script de verrouillage.

P2WPKH (Pay-to-Witness-Public-Key-Hash)

La signature d’un P2WPKH contient les mêmes informations qu’une dépense P2PKH, mais se trouve dans le champ témoin au lieu du champ scriptSig. Le scriptPubKey est également modifié.

P2WSH (Pay-to-Witness-Script-Hash)

La différence entre P2SH et P2WSH concerne le changement d’emplacement de la preuve cryptographique du champ scriptSig vers le champ témoin et la scriptPubKey également modifiée.

pièces colorées (colored coins)

Un protocole open source Bitcoin 2.0 qui permet aux développeurs de créer des actifs numériques en plus de la blockchain Bitcoin en utilisant ses fonctionnalités au-delà de la monnaie.

pool de transactions

Une collection non ordonnée de transactions qui ne sont pas des blocs dans la chaîne principale, mais pour lesquelles nous avons des transactions d’entrée.

portefeuille (ou wallet)

Logiciel contenant toutes vos adresses Bitcoin et vos clés secrètes. Utilisez-le pour envoyer, recevoir et stocker vos bitcoins.

portefeuille HD

Portefeuille utilisant la création de clé déterministe hiérarchique et le protocole de transfert (BIP32).

portefeuille matériel

Un portefeuille matériel est un type spécial de portefeuille Bitcoin qui stocke les clés privées de l’utilisateur dans un périphérique matériel sécurisé.

portefeuille papier

Dans le sens le plus spécifique, un portefeuille papier est un document contenant toutes les données nécessaires pour générer un nombre quelconque de clés privées Bitcoin, formant ainsi un portefeuille de clés. Cependant, les gens utilisent souvent ce terme pour désigner tout moyen de stocker du bitcoin hors ligne en tant que document physique. Cette deuxième définition inclut également les clés papier et les codes rachetables.

preuve de détention (proof-of-stack)

La preuve de détention est une méthode par laquelle un réseau blockchain de cryptomonnaie vise à atteindre un consensus distribué. La preuve de détention demande aux utilisateurs de prouver la propriété d’une certaine quantité de devises (leur « participation » dans la devise).

preuve de travail (proof-of-work)

Un élément de données qui nécessite un calcul important à trouver. Dans Bitcoin, les mineurs doivent trouver une solution numérique à l’algorithme SHA256 qui réponde à une cible du réseau, la cible de la difficulté.

problème des généraux byzantins

Un système informatique fiable doit pouvoir faire face à la défaillance d’un ou de plusieurs de ses composants. Un composant défaillant peut présenter un type de comportement souvent négligé, à savoir l’envoi d’informations conflictuelles à différentes parties du système. Le problème de la gestion de ce type d’échec est exprimé de manière abstraite par le problème des généraux byzantins (Byzantine Generals Problem).

protocole HD

Il s’agit de la création de clé déterministe hiérarchique (Hierarchical Deterministic – HD) et du protocole de transfert (BIP32), qui permettent de créer des clés enfants à partir des clés parents dans une hiérarchie.

protocole Open Assets

Le protocole Open Assets est un protocole simple et puissant, construit sur la blockchain Bitcoin. Il permet l’émission et le transfert d’actifs créés par l’utilisateur. Le protocole Open Assets est une évolution du concept de pièces de monnaie colorées.

racine de Merkle (merkle root)

Nœud racine d’un arbre de Merkle, descendant de toutes les paires hachées de l’arbre. Les en-têtes de bloc doivent inclure une racine de Merkle valide issue de toutes les transactions de ce bloc.

récompense

Un montant inclus dans chaque nouveau bloc en tant que récompense par le réseau au mineur qui a trouvé la solution preuve de travail. Il est actuellement de 12,5 BTC par bloc.

RIPEMD-160

Fonction de hachage cryptographique de 160 bits. RIPEMD-160 est une version renforcée de RIPEMD avec un résultat de hachage de 160 bits et devrait être sécurisée pour les dix prochaines années ou plus.

règles de consensus (consensus rules)

Les règles de validation de bloc que les nœuds complets suivent pour rester en consensus avec les autres nœuds. À ne pas confondre avec le consensus.

réseau

Un réseau pair-à-pair qui propage des transactions et des blocs à chaque nœud Bitcoin du réseau.

satoshi

Un satoshi est la plus petite dénomination de bitcoin pouvant être enregistrée sur la blockchain. Il équivaut à 0,00000001 bitcoin et porte le nom du créateur de Bitcoin, Satoshi Nakamoto.

script

Bitcoin utilise un système de script pour les transactions. De type Forth, Script est simple, basé sur une pile et exécuté de gauche à droite. Il est délibérément non Turing complete, sans boucle.

ScriptPubKey (ou script pubkey)

Script inclus dans les sorties qui définit les conditions à remplir pour que les satoshis soient utilisés. Les données permettant de remplir les conditions peuvent être fournies dans un script de signature.

ScriptSig (ou signature script)

Donnée générée par un expéditeur qui est presque toujours utilisée comme variable pour satisfaire un script pubkey.

Segregated Witness

Proposition de mise à niveau du protocole Bitcoin dans laquelle une innovation technologique sépare les données de signature des transactions Bitcoin. Cette proposition de fork léger induit un changement qui techniquement rend les règles de protocole de Bitcoin plus restrictives.

SHA (Secure Hash Algorithm)

SHA est une famille de fonctions de hachage cryptographique publiées par le National Institute of Standards and Technology (NIST).

sortie (output)

Sortie de transaction ou TxOut qui contient deux champs : un champ de valeur pour transférer zéro satoshi ou plus et un script pubkey pour indiquer les conditions à remplir pour que ces satoshis puissent être dépensés.

sortie de transaction non dépensée (UTXO)

UTXO (unspent transaction output) est une sortie de transaction non dépensée qui peut être utilisée comme entrée dans une nouvelle transaction.

stockage à froid (cold storage)

Désigne une réserve de bitcoins hors ligne. Le stockage à froid est réalisé lorsque les clés privées Bitcoin sont créées et stockées dans un environnement hors ligne sécurisé. Le stockage à froid est important pour quiconque possède des avoirs en bitcoins. Les ordinateurs en ligne sont vulnérables aux pirates informatiques et ne doivent pas être utilisés pour stocker une quantité importante de bitcoins.

timelock

Un timelock est un type d’obstacle qui limite les dépenses de certains bitcoins à une heure ou à une hauteur de bloc spécifiée. Les timelocks figurent en bonne place dans de nombreux contrats Bitcoin, y compris les canaux de paiement et les contrats de timelock hachés.

transaction

En termes simples, un transfert de bitcoins d’une adresse à une autre. Plus précisément, une transaction est une structure de données signée exprimant un transfert de valeur. Les transactions sont transmises sur le réseau Bitcoin, collectées par les mineurs et incluses dans des blocs rendus permanents sur la blockchain.

transaction coinbase

La première transaction dans un bloc. Toujours créée par un mineur, elle comprend une seule base. Ne pas confondre avec Coinbase.

transaction hors chaîne (off-chain)

Une transaction hors chaîne est le mouvement de valeur en dehors de la blockchain. Alors qu’une transaction sur la chaîne (on-chain), généralement appelée simplement une transaction, modifie la blockchain et dépend de celle-ci pour en déterminer la validité, une transaction hors chaîne s’appuie sur d’autres méthodes pour enregistrer et valider la transaction.

transaction OP_RETURN

Un type de transaction relayé et exploité par défaut dans Bitcoin Core 0.9.0 et versions ultérieures qui ajoute des données arbitraires à un script pubkey prouvé indépensable que les nœuds complets ne doivent pas stocker dans leur base de données UTXO. Ne pas confondre avec l’opcode OP_RETURN.

transactions orphelines

Transactions qui ne peuvent pas entrer dans le pool en raison d’une ou plusieurs transactions d’entrée manquantes.

turing complete

Un langage de programme est appelé « Turing complete » s’il est capable d’exécuter n’importe quel programme qu’une machine de Turing peut exécuter avec suffisamment de temps et de mémoire.

vérification de paiement simplifiée (Simplified payment verification –SPV)

Méthode permettant de vérifier que des transactions particulières ont été incluses dans un bloc sans télécharger le bloc entier. Cette méthode est utilisée par certains clients Bitcoin légers.

Certaines définitions fournies ont été obtenues sous une licence CC-BY auprès du Bitcoin Wiki (https://en.bitcoin.it/wiki/Main_Page) ou d’autres sources de documentation open source.

CHAPITRE 1 Introduction à Bitcoin

Qu’est-ce que Bitcoin ?

Bitcoin est un ensemble de concepts et de technologies formant la base d’un écosystème de monnaie numérique. Les unités de monnaie appelées bitcoins sont utilisées pour conserver et transmettre de la valeur parmi les participants du réseau Bitcoin. Les utilisateurs de Bitcoin communiquent entre eux en utilisant le protocole Bitcoin principalement via Internet, bien que d’autres réseaux de transport puissent être utilisés. Le protocole Bitcoin, disponible en tant que logiciel open source, peut être exécuté sur une large gamme de matériels, y compris les ordinateurs portables et les smartphones, rendant cette technologie facilement accessible.

Les utilisateurs peuvent transférer des bitcoins sur le réseau pour faire tout ce qui peut se faire avec des monnaies traditionnelles, acheter ou vendre des biens, envoyer de l’argent à des individus ou des organisations ou faire un crédit. Les bitcoins peuvent être achetés, vendus et échangés contre d’autres monnaies sur des plateformes de change spécialisées. Le bitcoin est dans un sens la forme de monnaie parfaite pour Internet puisqu’elle est rapide, sûre et sans frontière.

Contrairement aux monnaies classiques, les bitcoins sont entièrement virtuels. Il n’existe pas de pièce physique ou même de pièce numérique. Les pièces sont incluses dans les transactions transmettant de la valeur de l’émetteur au destinataire. Les utilisateurs de Bitcoin possèdent des clés qui leur permettent de prouver la possession des bitcoins sur le réseau. Avec ces clés, ils peuvent signer les transactions pour déverrouiller la valeur et la dépenser en la transférant à un autre destinataire. Les clés sont souvent enregistrées dans un portefeuille numérique présent sur l’ordinateur ou le smartphone de chaque utilisateur. La possession d’une clé pouvant signer une transaction est l’unique prérequis pour dépenser des bitcoins, plaçant ainsi le contrôle entièrement entre les mains de chaque utilisateur.

Bitcoin est un système pair-à-pair entièrement distribué. Ainsi, il n’y a aucun serveur ou point de contrôle « central ». Les bitcoins sont créés au travers d’un processus appelé « minage », qui implique de trouver la solution à un problème difficile à résoudre. N’importe quel participant au réseau Bitcoin (c’est-à-dire, n’importe qui utilisant un ordinateur opérant le protocole Bitcoin complet) peut agir en tant que mineur, en utilisant la puissance de calcul de son ordinateur afin de résoudre le problème. Toutes les 10 minutes en moyenne, un mineur de bitcoins est capable de valider les transactions des 10 dernières minutes et est récompensé par un tout nouveau bitcoin. En résumé, le minage de bitcoins décentralise les fonctions d’émission et de compensation de devises d’une banque centrale et ainsi la remplace.