Au coeur du Bitcoin
Andreas M. Antonopoulos
First Interactive, O'Reilly®
Introductionxiii
À qui s'adresse ce livrexiii
Pourquoi des insectes sur la couverture ?xiv
Conventions utilisées dans ce livrexiv
Exemples du livrexv
Adresses Bitcoin et transactions de ce livrexvi
Contacter l'auteurxvi
Remerciementsxvi
Version préliminaire de publication (Contributions GitHub)xix
Glossairexxiii
1. Introduction à Bitcoin1
Qu'est-ce que Bitcoin ?1
Historique de Bitcoin4
Les usages du Bitcoin, ses utilisateurs et leurs scénarios5
Comment débuter6
Choisir un portefeuille Bitcoin6
Démarrage rapide9
Acquérir votre premier bitcoin11
Trouver le prix actuel du bitcoin12
Envoyer et recevoir du bitcoin13
2. Comment fonctionne Bitcoin15
Transactions, blocs, minage et blockchain15
Panorama de Bitcoin15
Acheter un café16
Les transactions Bitcoin18
Entrées et sorties de transactions18
Chaînes de transactions19
Rendre la monnaie20
Formes communes de transactions21
Construire une transaction22
Sélectionner les bonnes entrées23
Création des sorties24
Ajouter la transaction dans le registre25
Transmettre la transaction25
Le minage du bitcoin27
Minage des transactions et génération des blocs28
Dépenser la transaction30
3. Bitcoin Core : l'implémentation de référence33
L'environnement de développement Bitcoin34
Compilation de Bitcoin Core à partir du code source35
Choisir une version de Bitcoin Core35
Configurer le Bitcoin Core Build36
Compiler les exécutables Bitcoin Core39
Lancer un noeud Bitcoin Core40
Exécuter Bitcoin Core pour la première fois41
Configurer le noeud Bitcoin Core42
L'API Bitcoin Core46
Obtenir des informations sur le statut du client Bitcoin Core47
Explorer et décoder les transactions48
Explorer les blocs50
Utiliser l'interface de programmation Bitcoin Core51
Clients, librairies et boîte à outils alternatifs54
C/C++54
JavaScript54
Java54
Python55
Ruby55
Go55
Rust55
C#55
Objective-C55
4. Clés, adresses et signatures57
Introduction57
Cryptographie à clé publique et cryptomonnaie58
Clés privées et publiques59
Clés privées60
Clés publiques62
Explication de la cryptographie sur les courbes elliptiques62
Générer une clé publique65
Les adresses Bitcoin67
Encoder en Base58 et en Base58Check69
Les différents formats de clés73
Implémentation de clés et d'adresses en Python80
Clés et adresses avancées83
Clés privées cryptées (BIP-38)83
Pay-to-Script Hash (P2SH) et adresses multisig85
Adresses personnalisées86
Portefeuille en papier91
5. Les portefeuilles97
Aperçu de la technologie du portefeuille97
Les portefeuilles non déterministes (aléatoires)98
Portefeuilles déterministes (à graine)99
Portefeuilles HD (BIP-32/BIP-44)100
Graines et codes mnémoniques (BIP-39)101
Les meilleures pratiques du portefeuille102
Utiliser un portefeuille Bitcoin102
Détails de la technologie de portefeuille104
Mots de code mnémoniques (BIP-39)104
Générer des mots mnémoniques105
Du mnémonique à la graine106
Créer un portefeuille HD à partir de la graine111
Utilisation d'une clé publique étendue sur un magasin Web116
6. Les transactions123
Transactions en détail123
Les transactions en arrière-plan124
Sorties et entrées de transaction125
Résultats de transaction127
Entrées de transaction129
Les frais de transaction133
Ajout de frais aux transactions136
Scripts de transaction et langage de script137
Turing-incomplet138
Vérification sans état138
Construction du script (verrouillage + déverrouillage)138
Pay-to-Public-Key-Hash (P2PKH)143
Signatures numériques (ECDSA)145
Fonctionnement des signatures numériques146
Vérification de la signature148
Types de hachage de signature (SIGHASH)148
Fonction mathématique ECDSA151
L'importance du caractère aléatoire dans les signatures152
Adresses, soldes et autres abstractions de Bitcoin152
7. Transactions et scripts avancés157
Multisignature157
Un bogue dans l'exécution de Checkmultisig158
Pay-to-Script-Hash (P2SH)159
Adresses P2SH162
Avantages de P2SH162
Script de remboursement et validation162
Sortie d'enregistrement de données (Return)163
Timelocks165
Transaction locktime (nLocktime)165
Les limitations d'une transaction locktime166
Vérifier le temps de verrouillage166
Timelocks relatifs168
Timelocks relatifs avec nSequence169
Timelocks relatifs avec CSV171
Median-Time-Past171
Défense timelock contre le fee sniping172
Scripts avec contrôle de flux (clauses conditionnelles)173
Clauses conditionnelles avec les opcodes Verify174
Utilisation du contrôle de flux dans les scripts175
Exemple de script complexe176
8. Le réseau Bitcoin179
L'architecture réseau pair-à-pair179
Types de noeuds et leur rôle180
Le réseau étendu Bitcoin183
Réseaux de relais Bitcoin183
Découverte du réseau185
Noeuds complets189
Échange d'« inventaire »190
Noeuds de vérification de paiement simplifiée (SPV)192
Filtres de Bloom194
Comment fonctionnent les filtres de Bloom195
Comment les noeuds SPV utilisent les filtres de Bloom199
Noeuds SPV et confidentialité200
Connexions cryptées et authentifiées201
Transport Tor201
Authentification et cryptage de pair-à-pair202
Pool de transactions202
9. La blockchain205
La structure d'un bloc206
L'en-tête de bloc207
Identificateurs de blocs : hash d'en-tête de bloc et hauteur de bloc207
Le bloc de genèse208
La liaison des blocs dans la blockchain209
Les arbres de Merkle210
Arbres de Merkle et vérification de paiement simplifiée (SPV)217
Les blockchains de test Bitcoin218
Testnet - Terrain de test Bitcoin218
Segnet, le testnet du Segregated Witness220
Regtest, la blockchain locale220
Utilisation de blockchains de test pour le développement221
10. Minage et consensus223
L'économie Bitcoin et la création monétaire224
Le consensus décentralisé227
Vérification indépendante des transactions228
Les noeuds de minage229
Agréger les transactions dans des blocs230
La transaction coinbase231
Récompense et frais coinbase233
Structure de la transaction coinbase234
Les données coinbase235
Construire l'en-tête de bloc237
Miner le bloc238
L'algorithme preuve de travail239
Représentation de l'objectif244
Réobjectiver pour ajuster la difficulté245
Miner le bloc avec succès247
Valider un nouveau bloc248
Assemblage et sélection des chaînes de blocs249
Les forks de blockchain250
Le minage et la course au hachage257
La solution du nonce supplémentaire259
Les pools de minage260
Les attaques par consensus264
Changer les règles de consensus267
Hard forks267
Hard forks : logiciel, réseau, minage et chaîne269
Mineurs divergents et difficultés270
Hard forks controversés271
Les soft forks272
Critiques des soft forks273
Signalisation de soft fork à la version de bloc274
Développement du logiciel de consensus278
11. La sécurité Bitcoin281
Principes de sécurité281
Développer des systèmes Bitcoin en toute sécurité282
Les racines de la confiance283
Les bonnes pratiques de sécurité utilisateur284
Stockage physique du bitcoin285
Portefeuilles matériels285
Équilibre du risque286
Diversifier les risques286
Multisignature et gouvernance286
La survie287
Conclusion287
12. Les applications blockchain289
Blocs de construction (primitifs)289
Applications à partir de blocs de construction292
Pièces colorées293
Utiliser des pièces colorées293
Émettre des pièces colorées294
Transactions avec des pièces colorées295
Counterparty298
Canaux de paiement et canaux d'état299
Canaux d'état : concepts de base et terminologie299
Exemple de canal de paiement simple301
Créer des chaînes sans confiance304
Engagements révocables asymétriques307
Contrats de verrouillage de temps de hachage311
Canaux de paiement routés (réseau Lightning)312
Exemple de base du réseau Lightning313
Routage et transport du réseau Lightning316
Avantages du réseau Lightning318
Conclusion319
Annexe A. Le livre blanc de Bitcoin par Satoshi Nakamoto321
Bitcoin, un système de paiement électronique pair-à-pair321
Introduction322
Les transactions322
Serveur d'horodatage323
Preuve de travail324
Réseau325
Incitation326
Économiser de l'espace disque326
La vérification de paiement simplifiée327
Combiner et fractionner les valeurs328
Confidentialité328
Calculs329
Conclusion332
Licence332
Annexe B. Opérateurs de langage de script de transaction, constantes et symboles335
Annexe C. Les propositions d'amélioration Bitcoin341
Annexe D. Segregated Witness (Témoin séparé)347
Pourquoi le Segregated Witness ?348
Comment fonctionne Segregated Witness ?349
Soft Fork (rétrocompatibilité)350
Exemples de sorties et de transactions de Segregated Witness350
P2WPKH350
Création du portefeuille P2WPKH351
P2WSH352
Différencier P2PKH et P2WSH353
Mise à niveau vers Segregated Witness353
Incorporer le Segregated Witness à l'intérieur de P2SH354
P2WPKH dans P2SH355
P2WSH dans P2SH355
Les adresses Segregated Witness356
Identifiants de transaction356
Le nouvel algorithme de signature de Segregated Witness357
Incitations économiques pour le Segregated Witness358
Annexe E. Bitcore361
Liste des fonctionnalités de Bitcore361
Exemples de la librairie Bitcore362
Prérequis362
Exemples de portefeuilles utilisant bitcore-lib362
Annexe F. pycoin, ku et tx365
Utilitaire clé (KU)365
Utilité de transaction (TX)371
Annexe G. Commandes pour Bitcoin Explorer (bx)375
Exemples d'utilisations de commandes bx377
Index379