¿Qué es nLockTime?

nLockTime es la primera función de bloqueo de tiempo que tuvo Bitcoin desde sus inicios y diseñada por Satoshi Nakamoto, como una forma de permitir transacciones programadas y activadas por parámetros de tiempo dentro del protocolo Bitcoin.

Una de las propiedades más interesantes con las que cuenta Bitcoin son los bloqueos de tiempo o timelock como el nLockTime. Este tipo de funcionalidades permite a los usuarios definir el momento en que una transacción se puede validar exactamente y confirmar en la red. Una calidad que convierte un Bitcoin en dinero digital programable. Por ejemplo, mediante la implementación de contratos inteligentes o contratos inteligentes. Todo esto es posible gracias a que Bitcoin cuenta con un poderoso lenguaje de programación llamado Bitcoin Script.

Así tenemos que nLockTime es un bloqueo de tiempo absoluto a nivel de transacciones. Lo que permite definir el momento a partir del cual una transacción podrá ser validada e incluida dentro de un bloque válido de la cadena de bloques. Es decir, nLockTime especifica el momento más temprano desde que se puede validar y confirmar una transacción.

Este tipo de bloqueo de tiempo es fundamental para la implementación de transacciones programables en el sistema de Bitcoin. Que permitan que, una vez definidas y cumplidas las condiciones establecidas dentro de un contrato, las transacciones se puedan ejecutar de forma automática y sin intermediarios.

Así mismo, nLockTime es el único bloqueo de tiempo que ha estado presente desde la implementación del cliente original de Bitcoin, la Bitcoin Core. Por lo que en cada transacción está incluido este campo. Sin embargo, en los clientes y monederos de Bitcoin el campo nLockTime está predeterminado con el valor 0. Por lo que si este campo no se modifica, las transacciones se pueden incluir dentro de cualquier bloque válido de la blockchain.

¿Cómo funciona nLockTime?

El bloqueo de tiempo nLockTime establece un intervalo de tiempo mínimo para que una transacción se pueda validar e incluir dentro de un bloque. Por lo que esta función se implementa y utiliza con la finalidad de evitar la extracción de una transacción antes de que se alcance el tiempo determinado en el bloqueo establecido. Y en caso contrario, la red simplemente invalida dichas transacciones impidiendo su procesamiento.

En el cliente original de Bitcoin, este bloqueo sólo permitía establecer las condiciones de bloqueo basadas en la altura del bloque. Por lo que los nodos de la red no pueden incluir las transacciones con nLockTime hasta tanto no se alcanzara la altura mínima de bloque establecida en el bloqueo.

Más tarde nLockTime fue ajustado para que se pudieran aplicar condiciones de bloqueo basado en el tiempo en las transacciones de Bitcoin. Que actualmente operan en función del tiempo medio pasado y no en la marca de tiempo propia del bloque. Por lo que nLockTime exige entonces que transcurra un intervalo de tiempo definido o se alcance una altura de bloque determinada para que las transacciones se puedan validar.

Por su parte, en nLockTime el bloqueo se muestra como un número entero de 32 bits, donde:

  • Si nLockTime es menor a 500.000.000, entonces se entiende como un bloqueo de tiempo basado en una altura de bloque. Donde, sólo una vez que esta altura de bloque sea alcanzada o superada, la transacción podrá ser confirmada dentro de un bloque válido.
  • Si nLockTime es mayor a 500.000.000, entonces se entiende como un bloqueo de tiempo basado en tiempo, que será medido en tiempo UNIX. Donde, sólo una vez que se iguale o supere esta marca de tiempo, la transacción podrá ser confirmada dentro de un bloque válido.

Así mismo, nLockTime permite que una transacción pueda ser bloqueada hasta por 9.500 años cuando se trata de un bloqueo de tiempo basado en la altura de bloque. Mientras que para los bloqueos se basa en un intervalo de tiempo, nLockTime puede establecer un bloqueo sobre una hasta por 2.106 años.

Implementación de nLockTime

Como nLockTime sólo permitirá que una transacción pueda ser extraída y añadida a un bloque válido una vez que se alcance o supere una altura de bloque o tiempo establecido, este bloqueo es utilizado para establecer y programar transacciones que sólo serán confirmadas en el futuro. Por lo que es enormemente útil para la creación de contratos inteligentes.

La particularidad de nLockTime permite que si alguna de las partes dentro del contrato no cumple, las transacciones programadas pueden ser cambiadas o modificadas, antes de que transcurra el tiempo limitado o se alcance la altura del bloque y las transacciones sean ejecutadas. Si ocurre alguna eventualidad, incumplimiento o simplemente alguna de las partes decide cambiar de opinión, una nueva transacción sin bloqueo puede ser establecida para invalidar a la transacción que sí posee el bloqueo de tiempo. Siempre y cuando se utilice como entradas las mismas salidas utilizadas como entradas en las transacciones con el bloqueo nLockTime establecido. Así, la nueva transacción creada, al no tener tiempo de bloqueo establecido, validada y confirmada dentro de alguno de los siguientes bloques inmediatamente después de su creación.

Contratos inteligentes o canales de pago sin confianza

Por otra parte, a través de nLockTime se pueden crear canales de pago que no requieren de confianza ni de terceros. Por ejemplo, si se maneja una dirección multifirma 2/2 en la cual se depositan bitcoins para realizar pagos de forma gradual a una de las partes involucradas, ambas partes tendrán posesión sobre una de las claves de la dirección.

El usuario A, antes de realizar el depósito de bitcoins en la dirección multifirma con la que se le pagará al usuario B, puede establecer una transacción nLockTime a una cierta altura de bloque o marca de tiempo establecida.

Entonces, el usuario A tendrá posesión de una de las claves, y el usuario B tendrá posesión de la otra clave de la dirección. Así, el usuario A puede firmar una transacción cuando desee efectuar un pago al usuario B; colocando los bitcoins en una salida que requiere la firma de ambas partes (usuarios A y usuario B), pero no la transmite a la red. Por medio del hash de esta primera transacción, el usuario B crea una segunda transacción que gasta a la primera y le devuelve los bitcoins al usuario A a través de la dirección multifirma. En este punto, como ambas partes deben firmar, la transacción no se puede completar. Por lo que ninguna de las partes puede gastar los bitcoins.

Como el campo nLockTime está definido con una altura de bloque o marca de tiempo, la transacción se puede devolver al usuario A. Esto en caso de no cumplirse las condiciones del contrato y de que la transacción no se firma por ambas partes como se requiere. Por lo cual se podrá recuperar el depósito realizado, una vez haya transcurrido el bloqueo definido, si la otra parte involucrada no cumple con el trabajo o actúa de forma errada.

nLockTime y CLTV ¿En qué se diferencian?

En Bitcoin existen varias formas de bloqueo de tiempo o timelocks. Estas operaciones permiten que Bitcoin pueda tener transacciones u operaciones que puedan programarse. Y esto puede ser en relación a una unidad de tiempo (descrita como un timestamp) o a una determinada altura de bloque (activación con altura de bloque). Gracias a ellos, se puede enviar una TX y que esta solo se pueda validar luego de alcanzarse la condición de tiempo o altura especificada.

Un ejemplo de esta utilidad puede ser que María quiera enviarle un pago a Daniel. Pero dicho pago sólo podrá hacerse efectivo 15 horas después de emitida la transacción. Para ello María emite las transacciones haciendo uso de la función nLockTime. De esa forma se asegura de que las transacciones sólo se pueden procesar 15 horas después de su emisión. Bastante útil para decir verdad.

Pero ¿Qué pasa si necesitamos hacer más complejas operaciones? Pues bien en ese caso, nLockTime no nos permite hacer cosas más complejas. Así que para salvar esta situación, los desarrolladores de Bitcoin crearon CLTV o CheckLockTimeVerify. Este OP_CODE o código de operación permite usar el valor de nLockTime (el valor de bloque de tiempo o bloque) y agregar una programación adicional. Es decir, CLTV nos permite agregar una serie de condiciones adicionales que se deben cumplir para que las transacciones se puedan validar. Incluso, CLTV puede cambiar dichas condiciones en caso de que las condiciones iniciales no se hayan cumplido, lograr desbloquear el pago bajo otras condiciones ya programadas.

Un ejemplo claro de uso de CLTV, es un fondo bitcoin protegido por una dirección multifirma. Si dichos fondos no se movilizan en un determinado periodo de tiempo, CLTV puede modificar las condiciones de desbloqueo de dichos fondos. Así podemos convertir una dirección multifirma del modelo 2-de-3 en una dirección multifirma con modelo 1-de-3. Con lo que bastaría solo una firma válida para poder acceder a dichos fondos.

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