Leçons 1/4 · 15 min
Que veut dire « définitif » ?
Un paiement qui disparaît
Kofi vend des téléphones à Douala. Un client lui envoie 500 unités sur une blockchain (chiffres fictifs). Quelques minutes plus tard, le paiement apparaît dans le portefeuille de Kofi, dans un bloc tout récent. Il remet le téléphone. Une heure après, le paiement a disparu de la chaîne : le bloc qui le contenait a été abandonné par le réseau. Il n'y a eu aucun bogue. Kofi a pris « vu dans un bloc » pour « définitif ». Ce sont deux choses différentes.
Les mots, un par un
- Bloc : un lot de transactions que le réseau accepte ensemble. Chaque bloc contient l'empreinte de son parent (atelier 104), ce qui forme une chaîne.
- Bifurcation (fork) : deux blocs différents qui désignent le même parent. Cause honnête et fréquente : deux proposants produisent un bloc presque en même temps, et la latence du réseau (atelier 107) empêche chacun de voir l'autre à temps.
- Règle de choix de branche (fork-choice rule) : la règle que chaque nœud applique pour désigner la « pointe » de la chaîne qu'il suit. Tous les nœuds appliquent la même règle, mais ils ne voient pas forcément les mêmes blocs au même instant.
- Réorganisation (reorg) : un nœud abandonne sa branche actuelle pour une autre que sa règle juge meilleure. Les blocs abandonnés deviennent des blocs périmés (stale, ou « orphelins » dans l'usage courant). Leurs transactions retournent en attente, sauf si la nouvelle branche les contient déjà (vous verrez cette file d'attente, le mempool, à l'atelier 110).
- Finalité : le moment à partir duquel un bloc ne sera plus annulé, sous des hypothèses énoncées.
Deux sortes de finalité
La finalité probabiliste : plus il y a de blocs empilés au-dessus du vôtre, plus il devient improbable qu'une branche concurrente le remplace. La probabilité diminue à chaque bloc, mais elle n'est jamais exactement zéro. C'est le cas de Bitcoin.
La finalité déterministe : le protocole contient une étape explicite qui déclare un bloc finalisé. Après cette étape, annuler le bloc exige de violer l'hypothèse de sécurité du protocole (par exemple « plus d'un tiers des validateurs agissent de façon malveillante »). C'est le cas des protocoles BFT comme Tendermint/CometBFT.
| Question | Probabiliste | Déterministe |
|---|---|---|
| Quand est-ce « final » ? | Quand le risque devient négligeable pour vous | Quand le protocole le déclare |
| Valeur de la garantie | Une probabilité qui décroît | Tout ou rien, sous une hypothèse |
| Qui décide du niveau de risque ? | Le receveur (combien de confirmations attendre) | Le protocole |
Exemple détaillé : compter les confirmations
Une transaction entre dans le bloc de hauteur 800. Quand le bloc 800 est la pointe, elle a 1 confirmation. Quand la pointe est au bloc 805, elle en a 6 (le bloc 800 et les cinq suivants). Une confirmation est donc simplement le nombre de blocs, le sien compris, au bout de la branche qui contient la transaction. Le nombre « 6 » utilisé pour Bitcoin est une habitude répandue, pas une règle du protocole : chaque receveur choisit son seuil selon la valeur en jeu.
Ce que cela ne garantit PAS
- La finalité déterministe n'est pas inconditionnelle : si l'hypothèse (par exemple « moins d'un tiers de fautifs ») est fausse, la garantie tombe.
- « Finalisé » ne dit rien sur le monde réel : un paiement finalisé reste un paiement envoyé à la mauvaise adresse si vous vous êtes trompé.
- Le mot « finalisé » affiché par un nœud reflète ce que ce nœud a vu. Un nœud éclipsé (atelier 107) peut vous montrer une version fausse de la chaîne.
À retenir
Un bloc est une proposition ; la finalité est un jugement sur le risque qu'il soit remplacé. Probabiliste : le risque décroît. Déterministe : le protocole le ramène à une hypothèse énoncée.
