Aller au contenu
buybitcoinsmart

Glossaire / Protocole et mises à jour

OP_CHECKLOCKTIMEVERIFY

Aussi appelé CLTV, BIP65.

Qu'est-ce qu'OP_CHECKLOCKTIMEVERIFY ?
OP_CHECKLOCKTIMEVERIFY est l'opcode de script qui empêche une pièce d'être dépensée avant une hauteur de bloc ou une date donnée, peu importe qui détient la clé.

Spécifié dans BIP-65.

Un verrou temporel inscrit dans la pièce plutôt que dans la transaction qui la dépense. Peter Todd l'a spécifié dans le BIP65, où il a repris l'emplacement de l'ancien opcode sans effet NOP2, et la règle est appliquée depuis le bloc 388 381 en décembre 2015. Si vous avez déjà mis en place un plan de succession ou un chemin de récupération, cet opcode est ce qui maintient la porte fermée.

Comment cela fonctionne

OP_CHECKLOCKTIMEVERIFY lit un nombre sur la pile du script, le compare au champ locktime de la transaction qui tente de dépenser la pièce, et interrompt tout le script si la dépense est prématurée.

Le BIP65 énumère cinq façons dont la vérification échoue : la pile est vide, l'élément du haut est négatif, l'élément et le locktime de la transaction ne s'accordent pas sur le fait de compter des blocs ou des secondes, l'élément est supérieur au locktime de la transaction, ou le numéro de séquence de l'entrée est fixé à 0xffffffff. Cette dernière condition ferme un trou évident. Un locktime est entièrement ignoré lorsque toutes les entrées sont marquées comme finales, donc sans elle celui qui dépense pourrait simplement désactiver l'échéance et repartir avec l'argent.

Deux détails surprennent ceux qui lisent un tel script pour la première fois. L'opcode ne consomme pas le nombre qu'il vérifie, donc les scripts réels le font suivre d'OP_DROP pour nettoyer la pile. Et il accepte un opérande de cinq octets plutôt que les quatre habituels, parce que la plus grande valeur qu'il peut avoir à comparer est 2**32-1, toute la plage du champ qu'il vérifie.

La mécanique du soft fork était du type ordinaire. Redéfinir un opcode sans effet est invisible pour un logiciel qui n'a pas été mis à jour : un ancien nœud exécute l'opcode, ne fait rien et accepte le bloc quand même. L'activation a utilisé les seuils de signalement des mineurs de l'époque, 750 blocs en 1 000 pour commencer l'application et 950 en 1 000 pour la rendre obligatoire.

Où vous le rencontrez

OP_CHECKLOCKTIMEVERIFY apparaît partout où de l'argent doit rester immobile jusqu'à une certaine date.

Les portefeuilles de succession et de récupération en sont le cas le plus clair. Un descriptor peut indiquer que votre propre clé dépense à tout moment tandis qu'une clé de sauvegarde ne dépense qu'après une hauteur donnée, ce qui offre à un héritier un chemin qui ne nécessite la coopération de personne et aucun avocat tenant une enveloppe scellée. Miniscript l'écrit sous la forme du fragment after(), et les portefeuilles qui le prennent en charge vous montrent la hauteur en langage clair plutôt qu'en script brut.

Lightning l'utilise pour l'échéance absolue d'un paiement routé. Une facture BOLT11 porte un delta d'expiration final, 18 blocs par défaut, et les contrats hachés le long de la route sont empilés au-dessus de ce chiffre afin que chaque saut puisse récupérer ses fonds dans un ordre fixe si le paiement ne se termine jamais.

Le séquestre et les remboursements sans tiers suivent la même forme : payez dans un script maintenant, et si la contrepartie ne signe jamais, récupérez l'argent une fois l'échéance passée. L'opcode est aussi la réponse honnête à quiconque vend un « coffre à verrouillage temporel » comme produit, car c'est tout ce qu'un tel produit peut être.

OP_CHECKLOCKTIMEVERIFY vs OP_CHECKSEQUENCEVERIFY

OP_CHECKLOCKTIMEVERIFY nomme un instant ; OP_CHECKSEQUENCEVERIFY nomme une durée. L'un dit « pas avant décembre », l'autre dit « pas avant 144 blocs après la confirmation de cette pièce précise », et seul le second démarre son compte à rebours quand la pièce arrive. Le BIP112 a défini la forme relative et elle s'est activée au bloc 419 328 en juillet 2016, environ sept mois après son homologue absolu. Les protocoles contractuels utilisent les deux, souvent dans un même script : une échéance absolue pour borner tout l'accord, et un délai relatif pour garantir à une partie une fenêtre de réaction.

À ne pas confondre avec

Questions fréquentes

OP_CHECKLOCKTIMEVERIFY verrouille-t-il mes bitcoins si j'utilise un portefeuille ordinaire ?

Non. Les portefeuilles ordinaires ne construisent jamais de sorties qui l'utilisent, donc rien de ce que vous achetez sur une plateforme d'échange et retirez ne portera de verrou temporel. Vous ne rencontrez l'opcode que si vous mettez délibérément en place un script de succession, de coffre ou de séquestre.

Quelle est la différence entre un locktime et OP_CHECKLOCKTIMEVERIFY ?

Un locktime est choisi par celui qui construit la transaction de dépense, donc il ne lie personne. OP_CHECKLOCKTIMEVERIFY se trouve dans le script de la sortie elle-même, ce qui signifie que chaque dépense future de cette pièce doit respecter l'échéance, quoi que veuille le signataire.

À lire ensuite

Termes associés

Plus de termes : Protocole et mises à jour

Lire cette page en anglais