script : Pourquoi OP_CHECKLOCKTIMEVERIFY est-il désactivé par le numéro de séquence maximal  ?


nLockTime

tx.nLockTime

tx.nLockTime est validé par la fonction IsFinalTx() dans src/main.cpp  :

nLockTime == 0) return true nLockTime < ((int64_t)tx (int64_t)nBlockHeight : nBlockTime)) renvoie vrai  tx où txin.IsFinal() est dans src/primitives/transaction.h  : Si le temps de verrouillage tx est inférieur au seuil, il est traité comme une hauteur de bloc et s'il est supérieur au seuil, il est traité comme un horodatage. Dans les deux cas, la valeur du temps de verrouillage de la transaction doit être inférieure à la contrainte pertinente. S'il est plus grand, les mineurs doivent attendre avant d'inclure la transaction dans un bloc. La seule façon de contourner cette contrainte de temps de verrouillage de transaction est de désactiver complètement le temps de verrouillage de transaction en définissant tous les numéros de séquence txin sur maxint. Lorsque cela est fait, les mineurs incluront immédiatement la transaction, même si le temps de verrouillage n'a pas encore été atteint. L'idée avec le temps de verrouillage de la transaction est qu'avant que la transaction ne soit verrouillée (c'est-à-dire avant que la hauteur du bloc ou l'horodatage ne rattrape le temps de verrouillage tx), quelqu'un peut apporter des modifications à la transaction. Chaque fois qu'ils font un changement, ils doivent incrémenter le numéro de séquence pour faire savoir aux mineurs quel amendement vient après l'autre. Un cas d'utilisation pour cela pourrait être un testament numérique. Si vous souhaitez transmettre votre argent à quelqu'un d'autre spécifiquement en cas de décès, vous pouvez créer une transaction avec une durée de blocage d'un an à partir de maintenant, puis la donner à quelques amis. En cas de décès, ils peuvent diffuser cette transaction sur le réseau après un an et les fonds seront envoyés en conséquence. Diffuser la transaction avant cette période d'un an ne leur permettrait pas de recevoir des fonds, puisque les mineurs ignoreront la transaction jusqu'à ce que la période de temps devienne valide (et évidemment les amis ne peuvent pas modifier la fonctionnalité de cette transaction puisqu'elle est signée par votre clé privée que vous ne divulguez jamais). Si vous ne mourez pas, vous pouvez dépenser les fonds à une adresse différente de votre choix en diffusant une transaction différente sur le réseau. Vos amis ne pourront alors pas utiliser la transaction d'origine que vous leur avez donnée car il s'agirait d'une double dépense, ce que les mineurs ne permettent pas. Pour la transaction que vous diffusez pour annuler le testament, vous devez modifier le temps de verrouillage pour le faire plus tôt et incrémenter le numéro de séquence. Vous pouvez également définir le temps de verrouillage sur 0 ou définir le numéro de séquence sur maxint pour passer immédiatement. /h2>

script : Pourquoi OP_CHECKLOCKTIMEVERIFY est-il désactivé par le numéro de séquence maximal  ?

Il est validé dans la fonction EvalScript() dans src/script/interpreter.cpp :

//

qui s’appuie sur la fonction CheckLockTime() dans le même fichier  :

//// Enfin mais tester uniquement cette entrée minimise les données // requises pour prouver l’exécution correcte de CHECKLOCKTIMEVERIFY

Ici, le temps de verrouillage de la transaction est comparé à une valeur sur la pile. Pour valider avec succès, les deux doivent être du même côté du seuil (c’est-à-dire que les deux doivent être interprétés comme une hauteur de bloc, ou les deux comme un horodatage), et le script ne validera que si la valeur de la pile est inférieure au temps de verrouillage tx. Ou pour le dire autrement, le script ne validera que si le temps de verrouillage de la transaction a dépassé la valeur de la pile.

Notez que la valeur de pile utilisée pour la comparaison est plus utile lorsqu’elle est placée dans le scriptPubKey. Le temps de verrouillage utilisé pour la comparaison avec la valeur de la pile est celui de la transaction de signature. Cela oblige le dépensier à attendre le bloc ou l’horodatage pour dépenser les fonds.

la validation du script doit échouer lorsque le temps de verrouillage tx est désactivé par le numéro de séquence.