Timelock es un término general para cuatro mecanismos: nLockTime de toda la transacción, OP_CHECKLOCKTIMEVERIFY (CLTV/BIP65), nSequence relativo según BIP68 y OP_CHECKSEQUENCEVERIFY (CSV/BIP112). Las comprobaciones de tiempo utilizan BIP113 Tiempo medio pasado. (Median Time Past)
Bitcoin tiene dos capas absolutas y dos relativas. nLockTime limita toda la transacción, CLTV es una rama de script específica, BIP68 le da a la entrada una edad relativa y CSV permite que el script solicite esta edad.
nLockTime es un campo de 32 bits. Cero significa que no hay bloqueo absoluto. Si todas las entradas tienen nSequence = 0xffffffff, se ignora un nLockTime no cumplido; por lo tanto, se necesita al menos una secuencia no final para un bloqueo efectivo.
Los valores por debajo de LOCKTIME_THRESHOLD = 500.000.000 de altura media del bloque, los valores a partir de este límite son una marca de tiempo de Unix. Los límites sólo cambian la interpretación de un mismo campo.
El tiempo de bloqueo se compara con el tiempo medio pasado del bloque anterior, no con la marca de tiempo elegida libremente del bloque candidato. Bitcoin Core usa GetMedianTimePast cuando busca el siguiente bloque.
OP_CHECKLOCKTIMEVERIFY de BIP65 requiere que el gasto de nLockTime de la transacción alcance una cantidad o tiempo específico y que la entrada correspondiente no sea definitiva. CLTV en sí no envía nada ni se desbloquea automáticamente.
Para las transacciones de la versión 2+, BIP68 interpreta nSequence como un retraso relativo desde la antigüedad del UTXO gastado, en bloques o unidades de 512 segundos. Desactivar bandera puede desactivar esta lógica relativa para la entrada.
OP_CHECKSEQUENCEVERIFY de BIP112 permite que la rama del script solicite una edad relativa mínima. Es adecuado para líneas de recuperación y penalización abiertas solo después del retraso, incluidas las construcciones Lightning.
SEQUENCE_FINAL = 0xffffffff puede neutralizar nLockTime en todas las entradas. La bandera de desactivación BIP68 es otro bit con un significado diferente; CSV trata un operando que contiene este indicador como NOP.
Alcanzar altura o tiempo sólo cambiará la validez. La billetera aún necesita almacenar o crear la transacción, firmarla, cumplir con otras condiciones del Script, pagar tarifas, promocionar y obtener confirmación.
Verifique nLockTime, versión de transacción y nSequence de cada entrada y en script CLTV o CSV. decoderrawtransaction mostrará el campo y testmempoolaccept le dirá si el candidato es actualmente aceptable.
Para obtener la imagen más completa, lee esta entrada junto con CHECKLOCKTIMEVERIFY, CHECKSEQUENCEVERIFY, Lightning Network, Payment Channel, Transacción, Bitcoin Script. También enlazan con esta entrada Confirmación, Bitcoin Script, HTLC, CHECKLOCKTIMEVERIFY.