El código de operación CheckSequenceVerify, es una interesante funcionalidad de Bitcoin que abre las puertas a scripts avanzados que nos deja hacer pagos seguros controlados por valores de tiempo programables.

Una de las funciones más útiles que tiene Bitcoin Script, son los bloqueos de tiempo o bien TimeLock, como el código de operación (OP_CODE) CheckSequenceVerify (CSV). Que al lado de otros códigos de bloqueo hacen posible que Bitcoin pueda ser empleado como un dinero digital programable.

El CheckSequenceVerify es un bloqueo de tiempo relativo que opera a nivel de script. Este nos deja poder acotar el instante preciso en que terminara un bloqueo sobre una transacción determinada. Y si bien esta es una característica que hizo una parte del soft fork del BIP 68, no fue hasta el BIP 112 donde realmente fue añadida al sistema Bitcoin.

La utilidad los CheckSequenceVerify permite funcionalidad avanzadas para la construcción de sistemas como los canales de pago de Lightning Network (LN). Además de esto, abre las puertas a la creación de funcionalidades avanzadas para el manejo de fondos de forma descentralizados, útiles para exchanges descentralizados (DEX) o bien servicios de intercambio P2P seguros.

Así mismo, si bien la forma de operar de CheckSequenceVerify (CSV) sea bastante afín a la de CheckLockTimeVerify (CLTV), en CSV se verifica la pila superior con el campo de entrada, en vez de contrastar el tiempo como es el caso de CLTV. Así podemos calcular el tiempo en función al número de bloques que se han generado después de confirmada la transacción. Esto es, que los bloqueos de tiempo relativo como CheckSequenceVerify pueden marcar una transacción como inválida. Y para esto observan que haya trascurrido el intervalo de tiempo establecido desde el momento en que se confirmaron las salidas precedentes de la transacción.

En palabras más simples, los bloqueos de tiempo relativo nos dejan acotar exactamente la cantidad de tiempo a trascurrir a fin de que se pueda confirmar una transacción. En contraste a los bloqueos de tiempo absoluto que definen el instante preciso (número de bloque, o bien data y hora) en que acabará el bloqueo sobre la transacción.

¿De qué manera marcha CheckSequenceVerify (CSV)?

Los bloqueos de tiempo a nivel de script como CheckSequenceVerify (CSV) operan en conjunto con los bloqueos a nivel de transacción, con lo que estos últimos son esenciales en el momento de aplicar un bloqueo CSV. Esto es debido a que en los bloqueos CSV los scripts verifican el bloqueo de la transacción. Para esto comprueban que dicha transacción esté bloqueada y usan estos bloqueos sobre las transacciones como una garantía de antigüedad que señala que ha trascurrido el tiempo establecido.

En el BIP 112 de Bitcoin, CheckSequenceVerify es descrito como un código de operación que le da una nueva definición al comando OP_NOP3 ya existente. Esta actualización, le deja efectuar bloqueos a una transacción a nivel de script dependiendo de la edad o bien la antigüedad de la salida que se gasta. Esta funcionalidad se ejecuta en conjunto con el BIP sesenta y ocho. Así, asimismo puede impedir que una transacción se pueda incluir en un bloque. Esto hasta el momento en que no haya trascurrido el tiempo o bien la antigüedad establecida.

Cuando se verifica el bloqueo CSV con el valor nSequence establecido, se comprueba si ya se ha cumplido la antigüedad mínima de la salida que se gasta. En el caso de no cumplirse todavía, las sendas de ejecución de script que incluyan el bloqueo CSV se van a poder validar. De esta forma la transacción no se va a poder incluir en un bloque hasta el momento en que no se cumpla la condición.

Así, cuando el código de operación CSV es llamado, hace que la secuencia de comando falle salvo que el número de secuencia en la transacción indique que ha trascurrido un intervalo de tiempo en el bloqueo de tiempo relativo, que sea mayor o bien igual que el indicador del código de operación CSV. Garantizando con lo que la transacción solo pueda ser incluida en un bloque válido cuando se haya cumplido o bien expirado el tiempo de bloqueo.

Cuando se incorpora este código de operación, CheckSequenceVerify deja establecer bloqueos sobre las transacciones con un máximo de hasta sesenta y cinco y quinientos treinta y cinco bloques. Pero asimismo se puede establecer dicho bloqueo a un máximo de hasta 65.535*512 segundos. Por otra parte, estos bloqueos son realmente útiles al instante de establecer bloqueos de tiempo relativo sobre las transacciones que no han sido confirmadas o bien trasmitidas a la red. Pues CSV deja la creación de transacciones inteligentes definiendo y estableciendo todas y cada una de las instrucciones que sean precisas para su ejecución de antemano. Así tenemos  la garantía y la seguridad que dicho contrato o bien transacción solo va a ocurrir bajo el orden establecido. Todo ello sin importar un mínimo el instante en el que se empiece a ejecutar.

Implementaciones de CheckSequenceVerify (CSV)

La implementación del código de operación OP_CSV dejan que las transacciones en la blockchain tengan una data de vencimiento relativa.  Una propiedad que por su parte deja que las transacciones se puedan guardar de forma indefinida. Siempre que continúen las condiciones de bloqueos de tiempo en un inicio establecidas. Todo lo opuesto sucedería si se emplea el código de operación OP_CLTV, con el que toda la cadena de transacciones si tendrían una data límite de ejecución y vencimiento.

Entonces, cuando se emplea OP_CSV para encadenar las transacciones mediante los tiempos de bloqueos relativos, es posible crear una senda de código que solo sea alcanzable al trascurrir el intervalo de tiempo establecido. O sea, una vez que se confirmen las salidas que se gastan. Dejando la creación y aplicación de funciones auxiliares que hacen considerablemente más atrayente a la red. Por poner un ejemplo, la implementación de contratos con plazos de vencimiento o bien la posibilidad de contar prácticamente con la característica de reorganización de la cadena o bien invalidación retroactiva. Que si bien es prácticamente imposible de efectuar en una blockchain, sí se pueden establecer otras aplicaciones afines como protocolos de custodia o bien contratos con tiempo bloqueado, canales de pago bidireccionales y Lighting Network.

¿Cuánto sabes, criptonauta?

¿La existencia de CheckSequenceVerify es esencial para Lightning Network?

Casos de empleo de CheckSequenceVerify (CSV)

Ahora bien examinemos ciertos casos de empleo que CSV nos deja en Bitcoin merced a su creación:

Creación de contratos con tiempo de vencimiento

Con CSV es posible establecer contratos con tiempo a plazo fijo o bien data de vencimiento. En estos contratos, se pueden acotar múltiples condiciones que iniciaran cuando se empiece y se haga eficaz una transacción. Por ejemplo: para realizar un depósito de garantía entre dos o bien más personas, que se venza de manera automática tras treinta días de haberse efectuado, las partes implicadas (María, Pedro y Juan) pueden crear una dirección multifirma con las próximas condiciones:

  • Los fondos se pueden gatar en cualquier instante que se desee, si se emplean dos de las tres firmas autorizadas. Estas se pueden conjuntar de cualquier forma (María y Pedro, Pedro y Juan, María y Juan).
  • María puede firmar sola y hacer empleo de los fondos solo una vez que transcurran treinta días de realizada la transacción.

Este bloqueo de tiempo relativo va a dar comienzo hasta el momento en que se confirme la transacción en la dirección de depósito.

Creación de protecciones de invalidación retroactiva

Si bien por cuestiones de seguridad y protección, la blockchain es inalterable en el momento en que se ha añadido datos y también información en ella. Mas existen muchos casos en los que es ideal poder mudar o bien cancelar un contrato una vez establecido. Sin embargo, si bien de forma directa no se puede efectuar una invalidación retroactiva cuando los datos han sido confirmados en la blockchain, sí se puede realizar una reorganización de la cadena. Si bien esta característica asimismo es particularmente bastante difícil de hacer y bastante costosa.

Aun de este modo, por medio del código de operación CSV se pueden edificar scripts con múltiples ramificaciones para la ejecución de las operaciones. Donde, si una o bien múltiples de estas ramas se retrasan o bien no se cumplen, se crea un espacio en el que es posible incorporar una condición para la invalidación del contrato original, que deje el gasto de las salidas. Anulando la ramificación donde está establecida la condición que no se cumplió. Eludiendo conque la transacción se transmita a la red. En caso caso contrario, el contrato proseguirá el curso establecido originalmente.

Creación de contratos HTLC (Hash Time Locked Contracts)

Una de las funciones más esenciales de los CSV es la creación de los Hash Time Locked Contracts o bien  Contratos de tiempo de hash bloqueado (HTLC). Es merced a estos contratos que es posible efectuar un sistema que deja a 2 usuarios crear una canal de pago. Uno donde la parte receptora debe crear una prueba criptográfica válida a fines de liberar el pago retenido por el contrato.

Esta función es la que deja por poner un ejemplo crear canales de pago seguro entre 2 usuarios. Siendo estos canales capaces de efectuar operaciones on-chain (en exactamente la misma cadena) y cross-chain (entre 2 cadenas diferentes). De esa forma, los HTLC habilitan un mecanismos seguro para efectuar operaciones de atomic swaps.

Pero no solo eso, los HTLC asimismo son los que hacen posible el funcionamiento seguro de la Lightning Network. Probando de este modo el impacto y utilidad de las CSV en todo el ecosistema Bitcoin.