Objectif : Comprendre le protocole de consensus de Bitcoin et le cycle de vie d’une transaction.
Bitcoin, c’est plus qu’une monnaie numérique. C’est un réseau distribué où les nœuds s’accordent sur un registre sans autorité centrale.
Comment les nœuds s’accordent-ils ? Comment une transaction devient-elle “officielle” ?
Le consensus, c’est la manière dont les nœuds s’entendent sur l’état de la blockchain.
Chaque bloc contient :
- Le hash du bloc précédent
- Le Merkle Root (MR) — hash de toutes les transactions
Chaque bloc référence le précédent par son hash, formant une chaîne ininterrompue.
Chaque bloc doit prouver qu’un travail computationnel important a été réalisé.
- Créer un ordre canonique de blocs.
- Empêcher les pairs malveillants de réécrire l’histoire.
- Les mineurs cherchent un hash commençant par un certain nombre de zéros.
- Ce calcul est aléatoire → difficile à réussir → mais facile à vérifier.
flowchart TD
A["Start Mining"] --> B["Choose Nonce"]
B --> C["Hash(Block Header)"]
C --> D{"Hash < Target ?"}
D -->|No| B
D -->|Yes| E["Block Validated"]
Beaucoup pensent que les mineurs “créent” des bitcoins. En réalité, ils déterminent l’ordre des blocs.
- Le bloc doit avoir une preuve de travail valide
- La chaîne la plus longue (ou avec le plus de travail cumulé) est choisie
“Les mineurs ordonnent, les nœuds décident.”
Les transactions enchaînent des entrées et des sorties plutôt que d’envoyer des "jetons".
“Les bitcoins ne se déplacent pas de wallet à wallet, ils passent d’une transaction à la suivante.”
Deux modèles :
- Compte/adresse : A paie B directement (banques, Ethereum, etc.)
- UTXO : chaque paiement crée de nouveaux “outputs” dépensables
Une transaction est composée d’entrées (inputs) et de sorties (outputs), où chaque sortie peut devenir l’entrée d’une nouvelle transaction.
Chaque nouvelle transaction “dépense” un output existant.
- Alice crée une paire clé privée / clé publique
- Elle partage une adresse dérivée du hash de sa clé publique
- Bob crée une transaction vers cette adresse
- Il la diffuse sur le réseau
- Les nœuds la valident et l’ajoutent à un bloc
sequenceDiagram
participant Alice
participant Bob
participant Réseau
Alice->>Bob: Donne son adresse (h(pk))
Bob->>Réseau: Diffuse une transaction vers Alice
Réseau->>Réseau: Ajoute la transaction dans un bloc
Alice->>Réseau: Observe son nouvel output
Quand Alice voudra dépenser son output, elle créera signatureScript avec sa clé privée.
Chaque output possède un pkScript : un script de verrouillage.
Pour le dépenser, il faut fournir un signatureScript valide.
Le réseau vérifie que la signature correspond bien à la clé publique autorisée.
Vérification :
- Le nœud exécute le
signatureScript - Il vérifie que le hash de la pk dans le
signatureScriptcorrespond aupkHashde l'output - Il vérifie que la signature est correspond à la
pkautorisée, ce qui implique que la signature a été réalisée avec laskcorrespondante.
| Élément | Rôle |
|---|---|
| Mineurs | Ordonnent les blocs via PoW |
| Nœuds | Vérifient les transactions et le consensus |
| UTXO | Représente les “billets numériques” individuels |
| Signature Script | Prouve la propriété d’un output |
Bitcoin repose sur :
- Une chaîne de blocs immuable
- Une preuve de travail coûteuse
- Un modèle de transactions vérifiables
- Un consensus distribué sans autorité centrale
“La confiance n’est plus dans les institutions, mais dans le code et les mathématiques.”