¿Qué es CLTV en Bitcoin?

CLTV o CheckLockTimeVerify es una interesante funcionalidad de bloque de tiempo que existe en Bitcoin diseñada para permitir que sus script puedan realizar avanzadas programaciones temporales en sus transacciones. Una función que permite programar scripts avanzados ajustados a la cada vez más creciente demanda de funciones dentro de Bitcoin.

La llegada de Bitcoin, junto a la innovadora tecnología Blockchain, ha abierto un mundo de posibilidades; entre ellas el dinero programable. Sí, como se escucha, dinero programable. Bitcoin integra muchas funciones, y una de esas funcionalidades es la conocida como Check Lock Time Verify (CLTV), que hace posible que las salidas no gastadas (UTXO) de Bitcoin estén bloqueadas y no puedan gastarse hasta llegar un momento previamente determinado.

La función CLTV fue integrada en Bitcoin Core a través de la bifurcación blanda BIP-0065, en la cual su desarrollador Peter Todd describe el nuevo código de operación (OP_CODE) OP_CHECKLOCKTIMEVERIFY. Esta función permite que una transacción realizada en Bitcoin permanezca bloqueada en el tiempo y no se haga efectiva hasta que no se llegue a una fecha, tiempo o altura de bloque determinado.

Así pues, la función CLTV es muy útil y positiva para varios casos de uso dentro del sistema Bitcoin. Por ejemplo, para el ahorro a largo plazo de fondos destinados para el pago de la universidad o graduación de un familiar. También es posible programar pagos futuros para fechas, como alquileres específicos, servicios, citas médicas, o incluso una herencia inteligente entre otros.

Así mismo, esta función es especialmente importante para la apertura de nuevas alternativas de pago. Por ejemplo la creación de canales de pago estilo CLTV. Estos canales de pago permiten realizar transacciones fuera de la cadena de bloques manteniendo toda la seguridad y beneficios de una transacción convencional ocurrida dentro de la cadena. Además, la función CLTV también permite el establecimiento de otras alternativas como reembolsos por tiempo limitado o de fideicomisos. Realmente las aplicaciones y casos de uso que tiene esta función son infinitas.

¿Cómo funciona CLTV?

Cuando un usuario establece y realiza una transacción con el código OP_CHECKLOCKTIMEVERIFY, las salidas de dicha transacción serán activadas solo en el momento en que se cumpla la condición establecida, y no en el momento en que se realice la transacción. Lo que quiere decir que las transacciones se realizarán correctamente pero las criptomonedas mejorarán bloqueadas en el tiempo hasta un momento futuro.

El código OP_CHECKLOCKTIMEVERIFY se ejecuta como parte de un script de Bitcoin, y su programación está basada en el uso de los tiempos UNIX (Unix Timestamp) o en las alturas de bloques dentro de la cadena de bloques. Es decir, es necesario establecer una condición en alguno de estos parámetros para realizar una comparación con el tiempo real. Entonces el OP_CHECKLOCKTIMEVERIFY verifica el elemento superior de la pila con el bloqueo de tiempo (nLockTime) que se restaura en la transacción. Si al hacer esta comparación, se comprueba que la condición se ha cumplido, el guión puede ejecutarse, en caso contrario el guión fallará.

Las condiciones para que el script falle en una transacción CLTV son las siguientes:

  • Que la pila esté vacía y no exista un tiempo definido para que el código realice la comparación y verificación.
  • Que, como ya se mencionó, el elemento superior de la pila sea menor que el de la condición establecida para el desbloqueo de las salidas no gastadas. Lo que indica que no ha transcurrido el tiempo necesario para desbloquear las transacciones.
  • Otra condición de fallo se dará si el bloqueo de tiempo establecido es medido en altura de bloques y el elemento superior de la pila utiliza medidas en tiempo (en segundos) o viceversa.
  • El campo nSequence de esta entrada está establecido en 0xFFFFFFFF.

Entonces, una transacción CLTV sólo puede incluirse dentro de la cadena de bloques una vez que ha superado el tiempo o la condición establecida. Una vez que sucede esto, las transacciones CLTV son verificadas y añadidas inmediatamente a la cadena de bloques, y se consideran como gastadas.

Relación de CLTV y nLockTime

Tanto CLTV como nLockTime son dos funciones que permiten a un programador de Bitcoin acciones que dependen del tiempo o la altura del bloque para su correcta ejecución. Pero la relación y alcance de ambas va mucho más allá. Por un lado, nLockTime garantiza que Bitcoin pueda programar transacciones que se ejecuten en una determinada altura de bloque (bloqueo de tiempo en bloque) o por marca de tiempo o timestamp (bloqueo de tiempo específico). Con esto Bitcoin habilita la capacidad de poder programar pagos usando estos parámetros.

Pero por otro lado, CLTV permite agregar una capa de verificación y de programación adicional a los nLockTime. Esto es porque CLTV toma el nLockTime y verifica que un conjunto agregado de condiciones programadas para su activación están dadas, una situación que era mucho más directa con el nLockTime original. Incluso, CLTV permite alterar ciertas condiciones originales de la transacción si se dan determinadas condiciones.

Por ejemplo, una dirección de multifirmas 2 de 3, que no se haya movilizado en un determinado período de tiempo, puede cambiar sus parámetros de autentificación a 1 de 3, para que así alguna de las personas autorizadas pueda movilizar los fondos que están allí contenidos. Esta es una funcionalidad única que CLTV puede ofrecer y nLockTime por sí sola no puede.

Implementación de CLTV

Uno de los mayores y más importantes posibles de la función CLTV es permitir la creación de canales de pagos y que estos puedan implementarse de forma correcta. A través de los canales de pago se pueden crear microtransacciones fuera de la blockchain. Todo ello sin necesidad de pagar tantas tarifas de comisión por cada una y sin colapsar la cadena de bloques.

En los canales de pago, un usuario puede realizar una transacción a otro depositando una cierta cantidad de criptomonedas en una dirección multifirma (MultiSig). Ambos usuarios tendrán acceso a dicha dirección. Y el usuario que realiza las transacciones puede ir firmando pequeñas transacciones que se realizan al otro usuario a partir de esos fondos. Esto hasta que obtenga el producto deseado. El resto de los fondos le serán devueltos a sí mismo en una transacción de retorno por cada micro-transacción que realice. Mientras que el comerciante podrá reclamar el pago final acumulado, que se habrá realizado sin colapsar la cadena de bloques y por el que María pagó sólo una tarifa de comisión.

Ejemplo de cómo funciona CLTV

Si María desea ver un video, pero por él debe pagar 1 sábado por segundo visualizado. A María no le conviene realizar estas transacciones de 1 sat por segundo a través de una transacción convencional en Bitcoin. Ya que para esto deberá pagar la tarifa de comisión por cada transacción que realice. Además debe esperar que dichas transacciones se confirmen en un bloque; lo que ocurre cada 10 min en Bitcoin.

Al ver que no es conveniente, María decide crear un canal de pago. En este canal hará un depósito en una dirección multifirma de 0.5 BTC, que equivale a 50.000.000 de satoshis. Tanto el comerciante como María tendrán acceso a la dirección multifirma. Entonces cuando María comience a visualizar el video, ella firmará una transacción donde se produjo 1 sat al comerciante por el primer segundo visualizado. Y 49.999.999 sats a una dirección de cambio de su pertenencia.

Este proceso se repetirá varias veces siempre y cuando María continúe viendo el video. Es decir, ella seguirá firmando micro-transacciones y pagando la cantidad de satoshis equivalente a los segundos que visualice el video, y depositando sus vueltas en una dirección de retorno. Si María sólo visualizó 2 segundos de video, entonces firmará una nueva transacción, pero esta vez de 2 sat para el comerciante y 49.999.998 sat para su dirección de retorno. Si visualizó sólo 3 segundos, firmará otra transacción, pero esta vez de 3 sat para el comerciante y 49.999.997 sat para su dirección de retorno.

Durante este proceso, el comerciante no reclamará ni firmará las transacciones de 1 sat o 2 sat recibidas. Sino que esperará a que María visualice todo lo que desee del video y reclamará el pago final. Es decir, las transacciones más grandes. El resto de transacciones realizadas al principio no serán firmadas ya que implicaría un doble gasto. Por lo que el comerciante debe optar por las transacciones más grandes que contienen todos los satoshis recibidos, en este ejemplo las transacciones de 3 satoshis.

Además al final el comerciante firma sólo una transacción, ésta es la que añadida en la cadena de bloques y será la única por la que se deba cancelar la tarifa de comisión correspondiente a los mineros. Además, María puede implementar una transacción CLTV al inicio para garantizar la devolución de sus fondos depositados en la dirección multifirma. Si establece un tiempo determinado para que ambos firmen la transacción y por cualquier motivo, uno o ninguno de los dos puede firmarla antes de ese tiempo. Así María puede recuperar su dinero. Ya que si no se firma la transacción antes de la condición establecida, María puede firmar la transacción y tener su dinero de vuelta luego de transcurrido el tiempo establecido.

Entonces, en resumen, el código OP_CHECKLOCKTIMEVERIFY ofrece una ventaja positiva para la implementación de contratos inteligentes. Esto pues garantiza la integridad de los fondos hasta haber alcanzado la marca de tiempo o altura de bloque establecida. Al tiempo que evita las fallas del sistema por la maleabilidad de las transacciones.

CriptoMundo

CriptoMundo.com es un medio digital independiente que difunde noticias y contenido sobre criptomonedas y tendencias emergentes de tecnologías financieras. Ofrece noticias, guías, artículos de opinión y gráficos en tiempo real.

Monedas

Bitcoin

Ethereum