Locktime

Impide que una transacción sea minada antes de una altura o tiempo

El campo locktime permite impedir que una transacción sea minada hasta después de una altura de bloque o un tiempo específico.

Una transacción con locktime en el futuro tampoco será aceptada ni retransmitida por los nodos, así que necesitas almacenarla localmente hasta que el locktime haya pasado. En otras palabras, fijar un locktime es el equivalente a posfechar un cheque.

Uso

¿Cómo funciona el locktime?

El campo locktime tiene 4 bytes y puede contener valores entre 0 (0x00000000) y 4294967295 (0xffffffff). Definir una altura de bloque o un tiempo usa rangos distintos de valores:

ValorSignificado
0 a 499999999Altura de bloque
500000000 a 4294967295Tiempo Unix

Esto se conoce como "locktime absoluto", porque defines una altura o tiempo específico en el futuro. También es posible definir un locktime relativo.

Para que el campo locktime esté habilitado, al menos uno de los valores de sequence de las entradas debe ser 0xfffffffe o menor. Si todos los valores sequence son el máximo 0xffffffff, la transacción se considera "final" y el locktime queda deshabilitado.

Altura

0 a 499999999

Definiendo el locktime entre 0 y 499999999, especificas que la transacción solo puede ser minada después de una altura específica. (Es un rango más que suficiente: la blockchain solo debería llegar a la altura 499.999.999 dentro de unos 9.488 años.)

Tiempo

500000000 a 4294967295

Definiendo el locktime entre 500000000 y 4294967295, especificas que la transacción solo puede ser minada después de un tiempo específico (en Unix Time):

Unix Time

Convierte el número de segundos desde 01/01/1970, 00:00:00 en una fecha.

0d

La restricción de tiempo se basa entonces en el campo de tiempo de la cabecera del bloque (controlado por el minero, y generalmente cercano al tiempo actual).

Ese rango permite definir un locktime entre 05 de noviembre de 1985 y 07 de febrero de 2106.

Ejemplo

¿Dónde está el locktime en los datos brutos?

El campo locktime son siempre los últimos 4 bytes de una transacción. Está en little-endian, así que, en el ejemplo de la transacción f168381d...58bf, el locktime aparece como 500e0c00. Invirtiendo el orden de los bytes, obtenemos 000c0e50, que en decimal es 790096.

Es decir, esa transacción definió el locktime como la altura de bloque 790.096 (y se minó en el bloque siguiente a esa altura).

Recursos