130 / 736CSV

CSV

Attendre depuis la confirmation de fonds précis

On veut parfois attendre que des bitcoins aient passé un certain temps dans la chaîne, plutôt qu’une date fixe. CSV aide à imposer ce délai. Il ne commence ni à la création du portefeuille ni à la signature du paiement.

CSV désigne OP_CHECKSEQUENCEVERIFY dans Bitcoin Script. Avec BIP 68, il permet un verrou relatif : une voie de dépense devient utilisable lorsque la sortie confirmée est assez ancienne. Une sortie est un montant reçu assorti de conditions de dépense. Attendre ne remplace pas une signature et n’envoie pas d’argent.

Anna et Pierre conservent leurs bitcoins sous contrôle commun et peuvent les dépenser s’ils sont tous les deux d’accord. Ils veulent aussi une voie de secours qu’Anna puisse utiliser seule, mais après un délai compté depuis la confirmation de la sortie concernée. CSV aide à faire respecter cette condition. Contrairement à CLTV, qui vise une hauteur ou une heure fixe, la limite n’est pas un point prédéterminé dans toute l’histoire. Elle dépend des fonds concernés. Créer un portefeuille, préparer une signature ou laisser patienter une transaction non confirmée ne remplace pas ce point de départ. Un portefeuille est une application ou un appareil permettant de recevoir et d’envoyer des bitcoins. [1] [2] [8]

Un bloc regroupe des transactions en un lot ajouté à l’historique commun. La hauteur d’un bloc désigne sa position dans la chaîne. Imaginons une sortie confirmée à la hauteur 900000 et un délai exigé de 10 blocs. Pour ce verrou, le premier bloc de dépense possible est 900010. Un écart de seulement 9 blocs est insuffisant. Ce n’est pas la promesse d’un nombre précis de minutes : les blocs n’arrivent pas à intervalles réguliers. Un âge suffisant ne vaut pas non plus confirmation du paiement. La transaction doit être valide par ailleurs, et un mineur doit réellement l’inclure dans un bloc. [2] [4] [9]

Le délai peut aussi être codé par pas de 512 secondes. Le code 2 représente alors 1024 secondes. Mais on ne compare pas deux horloges d’ordinateur. Le départ est le Median Time Past du bloc précédant celui qui a confirmé la sortie ; l’autre extrémité est le Median Time Past du bloc précédant le bloc candidat. Il s’agit de l’horodatage central des derniers blocs, jusqu’à 11, après classement. L’écart entre ces médianes doit atteindre le délai exigé. Ce n’est pas un réveil précis en heure locale. [2] [4] [7]

Un portefeuille peut réunir plusieurs montants reçus auparavant pour effectuer un paiement. Chaque entrée de transaction fait référence à une sortie reçue auparavant, dont l’âge se mesure depuis sa confirmation dans la chaîne. Le champ nSequence appartient à l’entrée elle-même. Ce champ porte l’information utilisée pour l’attente relative. Il ne suffit pas qu’une partie des fonds soit assez ancienne : tous les verrous applicables à la transaction doivent être satisfaits. Une réorganisation peut aussi déplacer la confirmation dans la chaîne. Avoir été dépensable auparavant n’est donc pas une propriété irréversible des fonds. Lors d’une réorganisation, le réseau adopte une autre branche valide de la chaîne, qui remplace une partie de l’historique précédent. [2] [4] [9]

Un Full Node vérifie lui-même les règles par des contrôles liés. CSV, selon BIP 112, compare l’argument du script au nSequence de l’entrée qui dépense la sortie. Il ne calcule pas lui-même l’âge ; BIP 68 s’en charge lors de la validation de la transaction. Pour un argument ordinaire sans indicateur de désactivation, la version de transaction doit être au moins 2 et le bit 31 de nSequence doit être désactivé. Un bit est un petit interrupteur dans un champ numérique. Un argument négatif, une version plus ancienne ou un nSequence incompatible font échouer le contrôle. [1] [2] [3]

Le bit 22 indique comment lire le délai. Désactivé, il signifie que l’unité est le bloc ; activé, il impose des pas de 512 secondes. L’argument du script et nSequence doivent utiliser le même type. C’est comme comparer des mesures : un nombre plus grand ne suffit pas si un côté compte des kilomètres et l’autre des heures. Ici, l’incompatibilité porte sur un nombre de blocs et une durée. [1] [2] [3]

Les 16 bits de poids faible portent la durée. Le masque 0x0000ffff permet de sélectionner cette partie du champ numérique. CSV la compare en tenant compte du type de délai ; un grand nSequence ne signifie pas automatiquement une attente plus longue. Après sélection des bits concernés, l’exigence du script ne doit pas dépasser la valeur de l’entrée. Cette limite technique compte pour les concepteurs de portefeuilles. L’utilisateur ne devrait pas la régler à la main sans comprendre l’ensemble de la procédure. [1] [2] [3]

Un délai nul n’ajoute aucune attente, mais les autres vérifications de CSV ordinaire restent applicables. Le cas est différent lorsque l’argument non négatif du script lui-même a son bit 31 activé. CSV se comporte alors comme un NOP, une instruction sans effet sur le verrou relatif. Un tel argument n’impose pas d’attente. Il faut le distinguer du même indicateur dans nSequence de l’entrée : avec un argument ordinaire, celui-ci doit être désactivé. [1] [3]

Si la voie de secours d’Anna exige sa signature, elle doit encore la fournir après le délai. La clé privée est une valeur numérique secrète qui permet de créer cette signature. Une clé privée perdue ne revient pas et une autre branche peut toujours autoriser une dépense plus tôt. Lors de l’exécution, CSV laisse son argument sur la pile, l’espace de travail où s’empilent les données ; OP_DROP suit souvent pour le retirer. Retirer cette donnée n’autorise personne à prendre l’argent. Les signatures et les autres conditions du chemin choisi le déterminent. [1] [3] [5]

BIP 112 a introduit CSV en remplaçant OP_NOP3, aux côtés de BIP 68 et BIP 113. Cette possibilité est active, pas simplement envisagée. Elle sert notamment dans les canaux de paiement de Lightning Network, où un délai peut laisser à l’autre partie le temps de réagir ; il n’organise pas cette réaction. Après l’attente, la transaction doit encore être diffusée et confirmée. Les frais, les données disponibles et l’état de la chaîne comptent toujours. Bitcoin Core v29.0 et les spécifications indiquées détaillent les vérifications. [1] [2] [6]

Pour une vision complète, lisez aussi CLTV, Opcode, Timelock, Bitcoin Script, Bitcoin, Full Node. Cette entrée est également citée par Confirmation, Timelock, HTLC, Opcode.

DOC · 001BIP 112 — OP_CHECKSEQUENCEVERIFYSpécification DOC · 002BIP 68 — Relative lock-timeSpécification DOC · 003Bitcoin Core v29.0 — Script interpreterDocumentation DOC · 004Bitcoin Core v29.0 — Transaction sequence locksDocumentation DOC · 005Bitcoin Developer Reference — TransactionsDocumentation DOC · 006Bitcoin Core 0.12.1 — BIP 68/112/113 release notesDocumentation DOC · 007BIP 113 — Median time-past lock-time calculationsSpécification DOC · 008BIP 65 — OP_CHECKLOCKTIMEVERIFYSpécification DOC · 009Bitcoin Developer Guide — Block ChainDocumentation
Révisé le: Sources d’abord · Pas un conseil financier