¿Qué son los nSequence?

El código de operación nSequence, es un sistema que deja bloqueos de tiempo en Bitcoin. Nos sirve para programar ciertas condiciones en las transacciones que deben cumplirse primeramente, a fin de que esa transacción se pueda admitir en internet de forma terminante. Una gran potencilidad de programación que Bitcoin nos ofrece para gran cantidad de casos de usos.

Uno de los bloqueos de tiempo o bien TimeLock más particulares de Bitcoin es nSequence. Este es un bloqueo de tiempo relativo que opera a nivel de transacción y que deja la utilización de los números de secuencia de entradas para programar un bloqueo de tiempo en las transacciones de Bitcoin.

Los nSequence dejan que una entrada pueda precisar cuál es el tiempo más temprano en el que se puede agregar a un bloque. O sea, evitan la confirmación de una transacción hasta el momento en que no transcurra una cierta edad en las salidas de la transacción. Esta edad se puede medir en bloques confirmados o bien en tiempo pasado.

Así mismo, los nSequence dejan la creación y programación de múltiples condiciones de tiempo sobre exactamente la misma transacción Bitcoin utilizando Bitcoin Script. Las que, pese a ser diferentes, se hallarán relacionadas entre sí, con lo que deben cumplirse en totalidad a fin de que la transacción pueda ser ratificada y también incluida en un bloque de la blockchain. En el caso de que todas y cada una de las condiciones establecidas no se cumplan, sencillamente la transacción no va a poder ser ratificada. Por consiguiente, esta transacción va a ser rechazada por la red.

¿De qué manera marchan las nSequence?

Los nSequence utilizan solo dieciocho bits de los treinta y dos bits libres en el campo de secuencia de cada transacción. Con esto se sostienen los catorce bits sobrantes en reserva para futuras implementaciones. Con lo que los nSequence son unos de los bloqueos de tiempo o bien TimeLock más ligeros que existen en internet Bitcoin.

Así mismo, de los dieciocho bits que emplean, dieciseis bits se emplean para configurar de los tiempos de bloqueo. Lo que hace que estos bloqueos de tiempo estén limitados a un total de sesenta y cinco y quinientos treinta y cinco unidades de bloques libres. O bien a un tiempo de dieciocho horas, lo que equivale a sesenta y cuatro y ochocientos segundos.

Entonces, si bien en un comienzo los nSequence fueron incorporados para permitir la modificación de las transacciones en la mempool de Bitcoin. Y dejaran el remplazo de una transacción antes que esta fuera finalizada o bien confirmada. Esto es, en la actualidad se emplean como un tiempo de bloqueo relativo. Esto impide que una transacción pueda ser extraída hasta el momento en que no se alcancen las condiciones establecidas. Dichas condiciones pueden ser un intervalo de tiempo definido o bien una altura de bloque. Esto aplica incñuso cuando sus firmas digitales sean totalmente válidas.

En tal caso, si el valor de nSequence es mayor que 0xEFFFFFFF, no hay acuerdo sobre el número de secuencia, por lo que la transacción va a poder ser incluida en cualquier bloque con todas y cada una de las circunstancias posibles. Al paso que si el valor de nSequence es menor o bien igual que 0xEFFFFFFF, entonces quiere decir que hay un tiempo de bloqueo. Donde el bit número veintidos de la secuencia es quien determina si el bloqueo está basado en un intervalo de tiempo o bien en la altura de bloque.

Si este bit tiene el valor de “1”, entonces el tiempo de bloqueo está basado en un intervalo de tiempo; al paso que si su valor no está establecido se le considera como “0” y hace referencia a un número o bien altura de bloque.

Puesta en marcha de los nSequence: activación del BIP 68

El BIP 68 que lleva por nombre “Tiempo de bloqueo relativo usando números de secuencia impuestos por consenso”. Este le dio un nuevo término y definición a los números de secuencia para las transacciones de Bitcoin con una versión mayor o bien igual a “2”. Dejando que estos números de secuencia se puedan volver a utilizar para nuevos casos de empleo. Así como asimismo para futuras implementaciones sin romper con su funcionalidad.

Así mismo, en el BIP 68 se define que el intervalo de tiempo se mide empezando con la mediana del tiempo pasado (MTP) del bloque precedente al salir y concluye con la mediana del tiempo pasado (MTP) del bloque precedente. La mediana del tiempo pasado (MTP) se define en el BIP 113, que detalla la MTP como punto y final para los cálculos del tiempo de bloqueo.

Interpretación de un nSequence

La interpretación del tiempo de bloqueo se efectúa contando los bits desde el bit número dieciseis en la secuencia nSequence.

Por otra parte, cuando el tiempo de bloqueo está basado en un intervalo de tiempo, entonces el bloqueo se desarrolla como una restricción mínima al mismo tiempo del bloque sobre la antigüedad de la entrada. Al tiempo que si el tiempo de bloqueo está basado en bloques, este se interpreta como una restricción mínima a la altura del bloque sobre la antigüedad de la entrada.

En el primer caso, un nSequence basado en un tiempo “n” puede ser incluido en cualquiera de los bloques que sean producidos 512*n segundos tras la data de extracción de la salida gastada o bien de la MTP del bloque precedente que lo extrajo. Para los bloqueos de tiempo basados en tiempo, se eligió una escala de quinientos doce segundos puesto que los bloques de Bitcoin son producidos cada diez minutos, lo que equivale a seiscientos segundos. Esto deja que se pueda codificar exactamente la misma cantidad de tiempo con el número de bits libres en los dos casos. Tanto cuando se empleen bloqueos de tiempo basados en bloques o bien cuando se usen los bloqueos de tiempo basados en intervalos de tiempo.

Para el segundo caso, donde el tiempo de bloqueo está basado en bloques, el nSequence señala una entrada que se puede incluir tras “n” cantidad de bloques tras la data de extracción de la salida gastada o bien de cualquier bloque siguiente a este.

¿Cuánto sabes, criptonauta?

¿Los nSequence pueden representar algún inconveniente de seguridad por permitir alterar transacciones en la mempool?

Implementaciones de nSequence

Bloqueo de tiempo CHECKSEQUENCEVERIFY

El bloqueo de tiempo relativo nSequence se puede incorporar en el código OP_CHECKSEQUENCEVERIFY. Este código deja hacer un bloqueo del gasto sobre una salida en concreto de una transacción. Esto hasta tanto no se cumplan ciertas condiciones. Como lograr determinados bloques o bien un intervalo de tiempo definido desde la extracción de la transacción que contiene dicha salida.

En este caso, en el momento en que un usuario usa y gasta las UTXO en una entrada de transacción, se debe establecer que el valor de nSequence en esa entrada sea mayor o bien igual que el factor establecido en CHECKSEQUENCEVERIFY. Como asimismo el formato del valor de nSequence debe coincidir con el valor de CHECKSEQUENCEVERIFY. O sea, si CHECKSEQUENCEVERIFY está concretado en concepto de bloques, el valor de nSequence asimismo ha de estar basado en bloques.

Colored Coins

Las colored coins son un procedimiento de identificación que deja representar y reconocer algunos activos del planeta real en la blockchain de Bitcoin. Con el propósito de eludir las manipulaciones y falsificaciones que estos activos puede padecer aprovechan las propiedades y peculiaridades que ofrece la tecnología blockchain para su protección y resguardo.

Aunque hoy día ha perdido mucha popularidad con el nacimiento de Ethereum y los tokens ERC-20, esta clase de transacciones que se crea  en la blockchain de Bitcoin son marcadas de tal manera que se puedan distinguir entre el resto de transacciones que ocurren en la blockchain de Bitcoin. Para lo que se usa un valor de etiqueta en el campo nSequence de la primera entrada de la transacción. Y si bien nSequence siempre y en toda circunstancia está presente en las transacciones, en un caso así no se usa como bloqueo sino más bien como identificador, usando seis de sus bits para formar y codificar el valor de etiqueta.

Canales de pago Decker-Wattenhofer

Los canales de pago dúplex se describen por vez primera en los documentos de Christian Decker y Roger Wattenhofer. Esta clase de canal de pago requiere el empleo de nSequence. Como su nombre lo señala, un canal de pago dúplex se compone de 2 canales de pago unidireccionales, uno en las dos direcciones.

Estos canales emplean una estructura llamada “árbol de invalidación” de transacciones fuera de la cadena. Una propiedad entre la transacción de financiación y las transacciones de finalización del canal de pago. Las transacciones del árbol de invalidación asimismo utilizan el tiempo de bloqueo relativo; la primera versión de la transacción tiene un tiempo de bloqueo relativo grande. Y la próxima versión de la transacción (que inutiliza la primera) emplea un tiempo de bloqueo relativo sutilmente menor, y de este modo consecutivamente. Asimismo hay una transacción de “inicio” que comienza el tiempo de espera para el tiempo de bloqueo relativo.

La secuencia de transacciones es así:

Financiación -> Comienzo -> Árbol de invalidación -> Canal de pago.

Gracias a esto, es posible crear canales de pago seguros con un funcionamiento semejante al ofrecido por Lightning Network, si bien técnicamente más complejos en su funcionamiento.

bitcoin
Bitcoin (BTC) $ 62,360.00
ethereum
Ethereum (ETH) $ 3,806.25
binance-coin
Binance Coin (BNB) $ 486.71
tether
Tether (USDT) $ 0.998312
cardano
Cardano (ADA) $ 2.12
xrp
XRP (XRP) $ 1.08
solana
Solana (SOL) $ 156.12
polkadot
Polkadot (DOT) $ 40.49
usd-coin
USD Coin (USDC) $ 0.997984
dogecoin
Dogecoin (DOGE) $ 0.244720