¿Qué es CheckSequenceVerify (CSV)?

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

El CheckSequenceVerify es un bloqueo de tiempo relativo que opera a nivel de script. Este nos permite poder definir el momento exacto en que terminara un bloqueo sobre una transacción determinada. Y aunque esta es una característica que hizo parte del soft fork del BIP 68, no fue hasta el BIP 112 donde verdaderamente 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, abre las puertas a la creación de funcionalidades avanzadas para el manejo de fondos de forma descentralizados, útiles para exchanges descentralizados (DEX) o servicios de intercambio P2P seguros.

Así mismo, aunque la manera de operar de CheckSequenceVerify (CSV) sea bastante similar a la de CheckLockTimeVerify (CLTV), en CSV se comprueba la pila superior con el campo de entrada, en lugar de verificar el tiempo como es el caso de CLTV. Asi podemos calcular el tiempo en función al número de bloques que se han generado luego de confirmada la transacción. Es decir, que los bloqueos de tiempo relativo como CheckSequenceVerify pueden marcar una transacción como inválida. Y para ello vigilan que haya transcurrido el intervalo de tiempo establecido desde que se confirmaron las salidas anteriores de la transacción.

En palabras más simples, los bloqueos de tiempo relativo nos permiten definir exactamente la cantidad de tiempo a transcurrir para que se pueda confirmar una transacción. A diferencia de los bloqueos de tiempo absoluto que definen el momento exacto (número de bloque, o fecha y hora) en que culminará el bloqueo sobre la transacción.

¿Cómo funciona CheckSequenceVerify (CSV)?

Los bloqueos de tiempo a nivel de script como CheckSequenceVerify (CSV) operan en conjunto con los bloqueos a nivel de transacción, por lo que estos últimos son importantes a la hora de aplicar un bloqueo CSV. Esto se debe a que en los bloqueos CSV los scripts comprueban el bloqueo de la transacción. Para ello verifican que dicha transacción esté bloqueada y utilizan estos bloqueos sobre las transacciones como una garantía de antigüedad que indica que ha transcurrido el tiempo establecido.

En el BIP 112 de Bitcoin, CheckSequenceVerify es descrito como un código de operación que le otorga una nueva definición al comando OP_NOP3 ya existente. Esta actualización, le permite realizar bloqueos a una transacción a nivel de script en función de la edad o la antigüedad de la salida que se está gastando. Esta funcionalidad se ejecuta en conjunto con el BIP 68. De esta forma, también puede impedir que una transacción se pueda incluir dentro de un bloque. Esto hasta que no haya transcurrido el tiempo o la antigüedad establecida.

Cuando se comprueba el bloqueo CSV con el valor nSequence establecido, se verifica si ya se ha cumplido la antigüedad mínima de la salida que se está gastando. En caso de no cumplirse aún, las rutas de ejecución de script que incluyan el bloqueo CSV se podrán validar. Así la transacción no se podrá incluir en un bloque hasta 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 a menos que el número de secuencia en la transacción indique que ya ha transcurrido un intervalo de tiempo en el bloqueo de tiempo relativo, que sea mayor o igual que el indicador del código de operación CSV. Garantizando así que la transacción sólo pueda ser incluida en un bloque válido una vez que se haya cumplido o expirado el tiempo de bloqueo.

Cuando se implementa este código de operación, CheckSequenceVerify permite establecer bloqueos sobre las transacciones con un máximo de hasta 65.535 bloques. Pero también se puede establecer dicho bloqueo a un máximo de hasta 65.535*512 segundos. Por otro lado, estos bloqueos son muy útiles al momento de establecer bloqueos de tiempo relativo sobre las transacciones que no han sido confirmadas o transmitidas a la red. Puesto que CSV permite la creación de transacciones inteligentes definiendo y estableciendo todas las instrucciones que sean necesarias para su ejecución por adelantado. Asi tenemos  la garantía y la seguridad que dicho contrato o transacción sólo ocurrirá bajo el orden establecido. Todo ello sin importar el momento en el que se comience a ejecutar.

Implementaciones de CheckSequenceVerify (CSV)

La implementación del código de operación OP_CSV permiten que las transacciones en la blockchain tengan una fecha de vencimiento relativa.  Una propiedad que a su vez permite que las transacciones se puedan almacenar de forma indefinida. Siempre y cuando permanezcan las condiciones de bloqueos de tiempo inicialmente establecidas. Todo lo contrario sucedería si se emplea el código de operación OP_CLTV, con el cual toda la cadena de transacciones si tendrían una fecha límite de ejecución y vencimiento.

Entonces, cuando se emplea OP_CSV para encadenar las transacciones a través de los tiempos de bloqueos relativos, es posible crear una ruta de código que sólo sea accesible al transcurrir el intervalo de tiempo establecido. Es decir, después de que se confirmen las salidas que se están gastando. Permitiendo la creación y aplicación de funciones adicionales que hacen mucho más atractiva a la red. Por ejemplo, la implementación de contratos con plazos de vencimiento o la posibilidad de contar prácticamente con la característica de reorganización de la cadena o invalidación retroactiva. Que aunque es casi imposible de realizar en una blockchain, sí se pueden establecer otras aplicaciones similares como protocolos de custodia o contratos con tiempo bloqueado, canales de pago bidireccionales y Lighting Network.