45 / 691REORG

Reorg

Réorganisation de la chaîne

Une réorganisation de la chaîne remplace l’extrémité active de la blockchain d’un nœud par une autre branche valide dont le Proof of Work cumulé est supérieur ; les anciens blocs de cette extrémité sont déconnectés et la branche gagnante est connectée.

Une réorganisation est une modification locale du chainstate, pas une modification des règles de consensus de Bitcoin. Un Full Node applique ses propres règles de validation et active la branche présentant le chainwork cumulé le plus élevé parmi celles qui les respectent. Si cette branche diverge en amont de la pointe actuelle, le nœud annule les modifications des UTXO dues aux blocs déconnectés, applique la branche alternative et réévalue les transactions concernées vis-à-vis du mempool.

Bitcoin Core ne choisit pas simplement la branche la plus haute ou la plus populaire. Lors de son activation, la chaîne candidate doit respecter les règles de consensus du nœud ; davantage de chainwork ne rend pas valide un bloc invalide. FindMostWorkChain sélectionne le candidat présentant le plus de travail et dont aucune invalidité n’est connue. Cela ne signifie pas encore une validation complète : d’autres contrôles ont lieu lors de la connexion des blocs dans ActivateBestChain. Les branches dont l’invalidité est connue sont écartées. [Bitcoin Core v29.0 — chain activation and mempool reconciliation]

Le point de divergence est le dernier bloc commun à la chaîne actuellement active et à la branche alternative. La profondeur d’une réorganisation se décrit généralement par le nombre de blocs à l’extrémité de la chaîne active qu’il faut déconnecter pour revenir à cet ancêtre commun. Une réorganisation d’un bloc remplace la pointe ; une réorganisation plus profonde annule plusieurs blocs confirmés. La profondeur est relative à la vue d’un nœud donné. [Bitcoin Core v29.0 — chain activation and mempool reconciliation]

DisconnectTip et la logique de validation qui suit annulent les effets des blocs déconnectés dans l’ordre inverse. Les UTXO dépensés sont restaurés et les sorties créées par le bloc retiré cessent d’être confirmées. C’est pourquoi Bitcoin Core conserve des données d’annulation : il doit pouvoir reconstruire l’UTXO set exactement au point de divergence. [Bitcoin Core v29.0 — chain activation and mempool reconciliation]

Après le retour en arrière, ConnectTip connecte les blocs de la branche au chainwork supérieur dans l’ordre des blocs, de la hauteur la plus basse à la plus haute. Chaque transaction est à nouveau validée par rapport à l’UTXO set reconstruit et aux règles applicables à la hauteur correspondante. Le résultat est un chainstate correspondant à une seule histoire précise, et non un mélange de transactions issues des deux branches. [Bitcoin Core v29.0 — chain activation and mempool reconciliation]

Les transactions des blocs déconnectés ne disparaissent pas nécessairement. Bitcoin Core tente de réinsérer dans le mempool les transactions admissibles autres que les transactions coinbase. Une transaction peut déjà figurer dans la nouvelle branche ; une autre peut être en conflit, perdre ses entrées, ne plus être finale ou ne pas respecter la politique du mempool. Un portefeuille doit donc prévoir qu’une réorganisation puisse annuler une confirmation. [Bitcoin Core v29.0 — chain activation and mempool reconciliation]

La transaction coinbase fait exception : elle ne retourne pas dans le mempool après la déconnexion du bloc. Selon les règles de consensus, une sortie coinbase créée à la hauteur h peut être dépensée au plus tôt dans le bloc h + 100. Lorsque la pointe est à la hauteur h + 99, le bloc d’origine compte 100 confirmations et la condition de maturité permet d’inclure la dépense dans le bloc suivant. Si une réorganisation retire le bloc contenant la coinbase, la récompense de ce bloc disparaît du chainstate actif. Les transactions ultérieures qui dépendaient de l’histoire retirée peuvent également être invalides. [Bitcoin Core v29.0 — chain activation and mempool reconciliation] [Bitcoin Core v29.0 — coinbase maturity validation] [Bitcoin Core v29.0 — confirmation depth]

Le nombre de confirmations inclut le bloc contenant la transaction ainsi que tous les blocs suivants dans la chaîne actuellement active du nœud concerné. Une transaction située dans la pointe actuelle compte une confirmation. Chaque bloc supplémentaire augmente généralement le travail nécessaire pour remplacer l’histoire, mais aucun nombre fini de confirmations ne crée une finalité mathématiquement absolue. Les plateformes d’échange et les commerçants choisissent donc leur seuil en fonction de la valeur du paiement et de leur modèle de risque. [Bitcoin Core v29.0 — confirmation depth] [Bitcoin whitepaper — Sections 5 and 11]

Une courte réorganisation peut survenir naturellement lorsque deux mineurs trouvent presque simultanément des blocs concurrents et que différentes parties du réseau suivent temporairement des pointes différentes ; la branche au chainwork inférieur devient alors obsolète, ou stale. Une attaque par double dépense emploie intentionnellement le même mécanisme. La procédure technique de sélection de la chaîne est identique ; la cause et l’objectif économique diffèrent. [Bitcoin Developer Guide — Block Chain] [Bitcoin whitepaper — Sections 5 and 11]

Une réorganisation se déroule au sein d’un même ensemble de règles : le nœud choisit parmi les branches qu’il considère comme valides. Un Hard Fork modifie au contraire les règles de validité de sorte que l’ancien et le nouveau logiciel peuvent déjà être en désaccord sur la validité d’un bloc. Une réorganisation n’est donc pas, en elle-même, une modification du consensus. [Bitcoin Developer Guide — Block Chain]

Dans Bitcoin Core v29.0, les étapes sont explicites : FindMostWorkChain trouve le candidat au chainwork le plus élevé dont aucune invalidité n’est connue ; ActivateBestChainStep peut déconnecter la pointe actuelle ; ConnectTip vérifie et connecte les blocs alternatifs ; et MaybeUpdateMempoolForReorg réexamine les transactions des blocs déconnectés. L’activation peut révéler l’invalidité du candidat et poursuivre la recherche d’une autre branche. Une réorganisation importante nécessite de traiter davantage de blocs déconnectés et connectés, ce qui peut prolonger le traitement effectué par ActivateBestChain. [Bitcoin Core v29.0 — chain activation and mempool reconciliation]

Pour une vision complète, lisez aussi Confirmation, Proof of Work, Stale Block, Double dépense, Full Node, UTXO. Cette entrée est également citée par Confirmation, Double dépense, Transaction coinbase, Soft Fork.

DOC · 001Bitcoin Core v29.0 — chain activation and mempool reconciliationSource primaire ↗DOC · 002Bitcoin Core v29.0 — coinbase maturity validationSource primaire ↗DOC · 003Bitcoin Core v29.0 — confirmation depthSource primaire ↗DOC · 004Bitcoin Developer Guide — Block ChainDocumentation ↗DOC · 005Bitcoin whitepaper — Sections 5 and 11Source primaire ↗
Sources d’abord · Pas un conseil financier