Aller au contenu
buybitcoinsmart

Glossaire / Protocole et mises à jour

Heure médiane du passé

Aussi appelé MTP.

Qu'est-ce que l'heure médiane du passé ?
L'heure médiane du passé est l'horloge de consensus du bitcoin : la médiane des onze horodatages de blocs précédents, et la valeur à laquelle tout verrou temporel est comparé.

Spécifié dans BIP-113.

Les nœuds prennent les horodatages des onze blocs qui précèdent celui qu'ils valident, les trient et retiennent la valeur du milieu comme heure courante. Cette médiane se situe environ six blocs en arrière, ce qui la place à peu près une heure derrière l'horloge murale. Un bitcoin verrouillé jusqu'à midi devient donc dépensable plutôt vers une heure de l'après-midi.

Comment cela fonctionne

L'heure médiane du passé provient d'une fonction appelée GetMedianTimePast, qui remonte onze entrées de blocs, copie chaque horodatage dans un tableau, le trie et renvoie l'élément du milieu.

La constante définie par le BIP-113 est nMedianTimeSpan = 11, si bien que le résultat est toujours le sixième plus petit de onze nombres. Le tri est ce qui rend le résultat fiable. L'horodatage d'un bloc peut être antérieur à celui de son parent, mais les règles de consensus imposent déjà que tout nouvel horodatage soit supérieur à la médiane des onze qui le précèdent, de sorte que la médiane ne peut qu'avancer. Fausser un seul horodatage n'apporte donc presque rien à un mineur.

Le problème que le BIP-113 a corrigé était une incitation plutôt qu'un bug. Selon l'ancienne règle, l'éligibilité d'une transaction était jugée par rapport à l'horodatage du bloc qui l'inclut, un nombre que le mineur écrit, ce que la section motivation du BIP appelle "a perverse incentive for miners to lie about the time of their blocks in order to collect more fees". Le correctif a consisté en une substitution : les appels de consensus à IsFinalTx prennent GetMedianTimePast du bloc précédent au lieu de l'heure du bloc lui-même, et la règle couvre toutes les transactions, la coinbase comprise.

Le changement a été déployé comme soft fork versionbits BIP9 sur le bit 0, la signalisation sur le réseau principal s'ouvrant à minuit le 1er mai 2016 UTC et expirant un an plus tard, et il a été déployé aux côtés des BIP68 et BIP112 afin que les trois règles de verrou temporel arrivent en un seul ensemble.

Où le voit-on

L'heure médiane du passé apparaît dans la sortie RPC de Bitcoin Core sous la forme d'un champ nommé mediantime, juste à côté du champ time brut.

getblock renvoie les deux pour n'importe quel bloc, et getblockchaininfo indique l'heure médiane de la pointe à côté de l'horodatage de la pointe, ce qui est le moyen le plus rapide d'observer le décalage d'une heure sur un nœud en direct. getchaintxstats va plus loin et mesure l'étendue de sa fenêtre comme la différence entre les heures médianes de deux blocs plutôt qu'entre leurs heures d'en-tête, si bien qu'un horodatage faussé à l'une ou l'autre extrémité ne déplace presque pas le résultat.

L'endroit où cela pose problème est le mempool. CheckFinalTxAtTip de Bitcoin Core évalue un candidat par rapport à l'heure médiane du passé de la pointe courante et à une hauteur supérieure d'un bloc, si bien qu'un portefeuille qui diffuse à l'instant où une échéance passe reçoit un rejet au lieu d'un relais, et doit réessayer jusqu'à ce que la médiane rattrape l'horloge accrochée à votre mur.

Les verrous temporels relatifs héritent de la même horloge aux deux extrémités. Le BIP-68 mesure un verrou de séquence fondé sur le temps, compté en unités de 512 secondes, depuis l'heure médiane du passé du bloc précédant celui qui a miné le bitcoin jusqu'à l'heure médiane du passé du bloc précédant la dépense, de sorte que le décalage apparaît deux fois et s'annule en grande partie.

Heure médiane du passé vs l'horodatage d'en-tête de bloc

L'heure médiane du passé est calculée à partir de onze horodatages d'en-tête mais n'est stockée dans aucun bloc, tandis qu'un horodatage d'en-tête est un champ que le mineur écrit et que chaque nœud conserve pour toujours.

Bitcoin utilise les deux, pour des tâches différentes. Les verrous temporels utilisent la médiane, parce qu'elle avance de façon monotone et ne peut pas être tirée vers l'avant pour un revenu de frais. Le recalcul de la difficulté lit toujours les heures d'en-tête brutes : Bitcoin Core prend l'heure du bloc du dernier bloc de la fenêtre de 14 jours, soustrait l'heure du bloc du premier, et recalcule la cible à partir de cette différence. Deux horloges sur une même chaîne peuvent sembler désordonnées, et c'est délibéré. Un recalcul veut le temps écoulé réel sur deux semaines de blocs, tandis qu'un verrou temporel veut un nombre qu'aucun mineur ne peut déplacer.

À ne pas confondre avec

Questions fréquentes

Pourquoi une transaction verrouillée dans le temps est-elle confirmée environ une heure après l'heure que j'ai fixée ?

Parce que le bitcoin compare les verrous temporels à l'heure médiane du passé, la médiane des onze horodatages de blocs précédents, qui se situe environ une heure derrière l'horloge murale. Le BIP-113 le dit dans sa section compatibilité. Si le moment exact compte, fixez l'échéance une heure plus tôt que l'effet souhaité.

L'heure médiane du passé est-elle stockée dans un bloc ?

Non, chaque nœud calcule lui-même l'heure médiane du passé à partir des onze horodatages de blocs qui précèdent le bloc qu'il valide. Bitcoin Core expose le résultat sous le champ mediantime dans getblock et getblockchaininfo, mais aucune partie des données du bloc ne le porte.

L'heure médiane du passé affecte-t-elle un achat ordinaire de bitcoin ?

Non, un retrait ordinaire sur une plateforme d'échange ou un paiement depuis un portefeuille ne comporte aucun verrou temporel, donc l'heure médiane du passé ne le retarde jamais. Elle ne compte que lorsqu'une dépense dépend d'un verrou temporel, d'un script OP_CHECKLOCKTIMEVERIFY ou d'un verrou temporel relatif fondé sur le temps.

À lire ensuite

Termes associés

Plus de termes : Protocole et mises à jour

Lire cette page en anglais