TimeLock o LockTime, en las transacciones de Bitcoin, es la opción de elegir un determinado tiempo en que la transacción va a ser agregada a la cadena de bloques. Este parámetro es indicado por el usuario.
TimeLock, también conocido como tiempo de bloque, es uno de los campos que encontramos en la información de la transacción de Bitcoin y que puede ser usado para diferir la fecha de procesamiento de la misma.
Esto establece el tiempo o bloque mínimo que un minero debe esperar para seleccionarla y agregarla a uno de los bloques de Bitcoin.
Cuando la persona que envía una transacción establece un TimeLock, esta permanecerá bloqueada hasta que se haya alcanzado la altura de bloque o el tiempo.
Por ejemplo, supongamos que establecemos un TimeLock en la altura de bloque 714.636 y la altura actual es 714.386, entonces la transacción deberá esperar en la mempool 250 bloques antes de ser validada.
Solo después de haber alcanzado el bloque 714.636 es que un minero puede intentar agregarla a un bloque.
Sabemos que el tiempo de bloque en Bitcoin es de 10 minutos aproximadamente, por lo que el usuario deberá esperar 2.500 minutos, más o menos, o casi 42 horas (casi 2 días por algunas horas de diferencia).
Contenido
¿Dónde podemos encontrarlo?
Cuando creamos una transacción en algunos monederos de Bitcoin, como pueden ser el de Electrum o Bitcoin Core, encontramos una opción que dice “LockTime”.
Particularmente, en Bitcoin Core nos encontramos la opción para determinar cuando queremos que la transacción sea confirmada. Mientras que en Electrum podemos establecer el tiempo de bloque y la fecha.
En la mayoría del tiempo no vamos a querer utilizar esta funcionalidad, y por eso en los monederos donde la soportan viene desactivada por defecto.
Si queremos que la transacción pueda ser confirmada inmediatamente, entonces dejamos todo como esta. Depdendera de la mempool y las comisiones que paguemos por la transacción para que esta sea confirmada en el próximo bloque o no, pero al menos no habrá otra limitación como el TimeLock.
Algunos usuarios que no conocen como funciona este parámetro, e ingresan algún valor sin saberlo, pueden bloquear la misma por días o incluso meses.
Recientemente en un foro un usuario tenía problemas con una transacción que estaba bloqueada hacía semanas. Cuando reviso mejor se dio cuenta de que el campo estaba activado y que había configurado un tiempo de bloque mucho más alto que el actual.
En este caso decidió esperar, aunque siempre se puede generar una nueva transacción sin este campo activo para que sea validada antes y deje sin efecto la segunda.
¿Cómo se utiliza?
Está claro que la mayoría de las transacciones que se realizan en la red de Bitcoin no necesitan de esta función y, por tanto, no se establece ningún TimeLock.
En este caso, veremos en un explorador de criptomonedas que el parámetro se encuentra configurado como 0, que es el valor por defecto.
Si no queremos que nuestra transacción se bloquee hasta un tiempo determinado o altura de bloque, lo que debemos hacer es establecer una altura de bloque menor a la actual o una fecha menor a la del momento de la transacción (en formato UNIX).
Esto hará que el campo se establezca por defecto y figure como 0x00000000. Lo cual creara una transacción que sea final.
Caso contrario, podemos establecer un tiempo de bloque mayor al actual o una fecha y tiempo posterior a la que te encuentras creando la transacción.
Probablemente, bastante adelante en el futuro, ya que si establecemos un solo bloque o un tiempo de unos pocos minutos, es probable que la transacción se comporte como una de tipo final.
¿Por qué usarla?
Seguramente te preguntaras cual es el objetivo de este parámetro, ya que si queremos que la transacción sea procesada ahora la enviamos como tal, y si queremos que sea procesada en el futuro simplemente esperamos y la creamos cuando sea necesario.
Sin embargo, hay algunos escenarios donde tener algo como esto puede ser muy interesante.
Las transacciones con TimeLock son interesantes para aquellas situaciones cuando la persona que crea la misma puede que cambie de idea en el futuro.
En este caso, que el usuario ya no quiera realizar la transacción, simplemente puede agregar una nueva sin este parámetro que “sobrescriba” la anterior.
La nueva transacción usará las mismas entradas que la transacción con TimeLock, ocasionando que cuando sea confirmada la primera ya no sea válida, debido a que las condiciones han cambiado.
Eso sí, hay que tener en cuenta que dejara de ser válida una vez que la transacción nueva ha sido confirmada. Mientras ambas permanezcan en la mempool, entonces cualquiera puede ser validada.
Otro ejemplo sería cuando quieres que los fondos los reciba alguien en un determinado tiempo, pero no quieres estar pendiente de ello. Lo que conocemos como pagos diferidos.
Por ejemplo, al realizar un regalo de cumpleaños en BTC (el cual sería uno muy bueno). En lugar de acordarte en la fecha concreta que tienes que hacer la transacción (todos nos hemos olvidado de un cumpleaños alguna vez), simplemente creas una con la fecha de cumpleaños. Hasta puedes escribir un mensaje en la transacción para hacer más memorable el asunto.
Al final, esto nos permite crear transacciones en el futuro sin tener que acordarnos y, en caso de que nos arrepintamos, siempre podemos deshacer la transacción antes de la fecha o bloque en concreto.
Las opciones que nos permite configurar
El parámetro nos permite establecer dos tipos de configuraciones, las cuales tienen sus usos concretos.
Tiempo en UNIX
Bitcoin, al igual que muchos sistemas informáticos, utiliza lo que se conoce como tiempo UNIX.
Esta unidad de tiempo funciona diferente a como estamos acostumbrados. Se trata de una unidad que mide el tiempo transcurrido desde una fecha en concreto.
Más precisamente, el tiempo UNIX mide cuantos milisegundos han transcurrido desde las 00:00:000 del 1 de enero de 1970 hasta la fecha.
Pero no te preocupes de este detalle, ya que el monedero hace todo por nosotros y nos permite establecer la fecha sin la necesidad de conocer este asunto. Solo es importante si pensamos crear la transacción de forma manual o estamos desarrollando un monedero.
Altura de bloque
La otra opción es la de utilizar el número de bloques de la cadena para bloquear la transacción hasta ese entonces.
Particularmente podemos establecer dos tipos de condiciones:
- Que sea válida hasta cierto bloque: esto, por ejemplo, nos permite decir que la transacción puede ser aprobada solo hasta un bloque determinado, pasado ese tiempo ya no es válida. Lo cual puede llegar a ser útil si por alguna razón, como puede ser que la congestión de la red es demasiado alta, no es aprobada. Luego de cierto bloque ya no nos importa que sea confirmada, por tanto, es mejor que quede invalidada.
- Que sea válida después de cierto bloque: esto permite que la misma sea validada después de un bloque determinado. No se me ocurre ningún uso en concreto ahora para esto, pero seguramente lo haya. En especial si hablamos de implementaciones más complejas, como la creación de una capa de segundo orden, por ejemplo, Lightning Network.
Resumen
- TimeLock es una condición para que una transacción de Bitcoin sea procesada solo después de cierto tiempo o altura de bloque.
- Su uso para un usuario particular no es muy importante, pero si es utilizada cuando hablamos de desarrollos de segunda capa como lo son Lightning Network.
Agrega un Comentario