Sequence

El campo que controla locktime, RBF y locktime relativo

El campo sequence está en cada entrada de transacción. Te da control sobre cuándo una transacción puede ser minada o si una transacción puede ser reemplazada mientras está en el mempool.

En términos más técnicos, el campo sequence controla la "finalidad" de una transacción: si está en su estado "final" antes de ser minada. Si no lo está, es posible reemplazarla antes de que llegue a la blockchain.

Estas son las configuraciones más comunes:

Una elección popular es usar 0xFFFFFFFD, que habilita tanto el campo locktime (si quieres usarlo) como el replace-by-fee (generalmente útil).

Si defines el valor máximo 0xFFFFFFFF en todas las entradas, la transacción entera se considera "final" y no puede ser reemplazada ni impedida de ser minada.

Solo necesitas definir uno de los campos sequence para habilitar el locktime o el RBF. Sin embargo, las configuraciones de locktime relativo son específicas de cada entrada.

Locktime

Habilitas el campo locktime de toda la transacción si defines cualquier valor de sequence de las entradas como 0xFFFFFFFE o menor.

Por defecto, la cartera de Bitcoin Core define el sequence de cada entrada como 0xFFFFFFFE. Eso habilita el locktime, pero ninguna otra característica.

Ícono de herramienta Unix Time

Unix Time

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

0d

Replace By Fee (RBF)

Al definir un valor de sequence de 0xFFFFFFFD o menor en alguna entrada, señalas que la transacción puede ser reemplazada (opt-in RBF). Eso permite, mientras la transacción está en el mempool, transmitir una nueva versión que gaste las mismas entradas, pero con una tarifa más alta — útil si la transacción original se atascó por tarifa baja.

Definiendo Tarifas Más Altas

La tarifa de la transacción de reemplazo debe ser suficiente para cubrir la tarifa mínima de retransmisión (minimum relay fee) más el tamaño de las tarifas de las transacciones que reemplaza:

Tarifa Mínima del RBF = Tarifa Mínima de Retransmisión + Tarifa(s) de la(s) Transacción(es) Anterior(es)

La tarifa mínima de retransmisión es la tarifa mínima que debes poner en una transacción para que un nodo la acepte en su mempool. Cada nodo puede definir esta tarifa de forma independiente, pero el valor predeterminado es 1 sat/vbyte. Esto ayuda a evitar que alguien haga spam en la red con transacciones "gratuitas".

Locktime Relativo

El campo sequence también puede interpretarse como un locktime relativo (BIP 68), que impide que una transacción sea minada hasta que la salida que gasta haya alcanzado cierta profundidad (número de bloques) o edad (segundos) en la blockchain. Esto es fundamental para protocolos de capa 2, como Lightning Network.

Sequence

Vea qué recursos (locktime, RBF, locktime relativo) habilita un valor de sequence — o construya un sequence marcando los recursos.

El sequence como aparece en los datos brutos de la transacción

0x
4 bytes
0x
4 bytes
Recursos
Tipo de locktime relativo
segundos

¿Por qué el valor de tiempo se multiplica por 512?

Porque eso crea un rango similar entre definir un número de bloques y un número de segundos. Hay, en promedio, 600 segundos (10 minutos) entre bloques, y el valor máximo para cualquiera de los tipos de locktime relativo es 65535 (0xffff), así que:

Máx. Bloques = 65535 × 600 = 39.321.600 segundos = 455,11 días
Máx. Tiempo  = 65535 × 512 = 33.553.920 segundos = 388,36 días

Así, usando bloques o tiempo, puedes definir un locktime relativo máximo de poco más de un año en el futuro en ambos casos. ¿Y por qué 512 en vez de 600? Porque 512 es 2⁹, lo que significa que puedes hacer un desplazamiento de bits (bitwise left shift) de 9 para convertir el valor a segundos rápidamente.

Historia

¿Para qué se diseñó originalmente el campo sequence?

El campo sequence se diseñó originalmente para permitir el reemplazo de transacciones mientras aún estaban en el mempool. Originalmente, definirías un locktime para algún momento en el futuro y, si cualquiera de los campos sequence estaba por debajo del valor máximo 0xFFFFFFFF, podías reemplazarla por una nueva versión con un valor de sequence más alto. Se esperaba que nodos y mineros retuvieran esas transacciones "no finales" hasta que se alcanzara el locktime, o hasta que llegara un reemplazo con todos los sequence en 0xFFFFFFFF (lo que significaba que finalmente podía minarse).

Sin embargo, no había incentivo para que los mineros mantuvieran esas transacciones no finales en memoria, así que el campo sequence nunca se utilizó plenamente para ese propósito, y Satoshi lo deshabilitó discretamente en 2010, en Bitcoin v0.3.12. Desde entonces, el campo sequence se ha reutilizado varias veces, pero todos los cambios están relacionados con la "finalidad" de la transacción.

Recursos