Tiempo (Time)
La marca de tiempo aproximada de creación de un bloque
El campo tiempo (time) en el encabezado del bloque indica la hora aproximada en que se creó un bloque.
Los mineros colocan la hora actual en el encabezado al construir el bloque candidato. Este contiene un Timestamp Unix (segundos desde el 1 de enero de 1970), que es lo que los programas de computadora suelen usar para almacenar puntos específicos en el tiempo.
Por ejemplo, el bloque génesis contiene el timestamp 1231006505, que representa la fecha 03 de enero de 2009, 18:15:05.
Orden de los Bloques
¿El tiempo del bloque influye en el orden de los bloques?
Las marcas de tiempo no influyen en el orden de los bloques en la blockchain. De hecho, es posible que un bloque tenga una marca de tiempo anterior a la del bloque sobre el que se construye. Así que, aunque las marcas de tiempo suelen ser bastante precisas, a veces los bloques no están en orden "cronológico", y eso es completamente normal.
La marca de tiempo de cada bloque suele estar muy cerca de la hora actual, pero no debes confiar en que sea 100% exacta. Los bloques "fuera de orden" aparecen en la blockchain varias veces al mes.
Requisitos
¿Cuál es el tiempo máximo y mínimo de un bloque?
La marca de tiempo debe estar dentro de cierto rango para ser válida:
- Mínimo: debe ser mayor que la mediana de las marcas de tiempo de los últimos 11 bloques.
- Máximo: no puede estar más de 2 horas en el futuro con respecto al tiempo ajustado de la red.
Así que hay algo de flexibilidad: para un bloque recién minado, el campo de tiempo puede estar entre unas −1 y +2 horas respecto a la hora actual y seguir siendo válido. Esa flexibilidad permite que un nodo tenga la hora mal configurada y tiene en cuenta la latencia en la propagación de bloques por la red.
No existe una justificación matemática para que el intervalo sea entre la mediana de los últimos 11 bloques y +2 horas en el futuro. Son valores "lo bastante buenos" que Satoshi eligió al codificar la primera versión de bitcoin, y todavía los usamos hoy.
Tiempo Ajustado de la Red
El tiempo ajustado de la red (network adjusted time) es tu hora local más la mediana de las diferencias horarias de todos los nodos a los que estás conectado. Por ejemplo:
Hora Local = 1685010124
Nodos Conectados:
Nodo 1 = 1685010121 (-3 segundos)
Nodo 2 = 1685010122 (-2 segundos)
Nodo 4 = 1685010125 (+1 segundo)
Nodo 7 = 1685010128 (+3600 segundos)
Diferencia Mediana = +1 segundo
Tiempo Ajustado de la Red = 1685010125
Usamos el tiempo ajustado de la red porque es difícil que computadoras en una red descentralizada estén de acuerdo sobre la hora exacta actual. Permite que los nodos se pongan de acuerdo en una hora entre sí, limitando la capacidad de cualquier nodo aislado para manipular la hora "actual" acordada.
Uso
¿Para qué sirve el campo de tiempo?
Además de ser un indicador aproximado de cuándo se minó el bloque, la marca de tiempo tiene dos usos principales:
Reajuste del Objetivo
Las marcas de tiempo de los encabezados de los bloques se usan para calcular si los bloques se están minando más rápido o más lento de lo esperado en un período de 2016 bloques, y el objetivo se ajusta en consecuencia.
Ajuste de Dificultad
Locktime de Transacción
Una transacción puede incluir un locktime específico para impedir que sea minada en un bloque antes de una hora determinada. Para ello, el locktime de la transacción se compara con el campo de tiempo del encabezado del bloque: la transacción solo puede incluirse en un bloque cuya marca de tiempo sea mayor que su locktime.
Notas
- Las transacciones no tienen marcas de tiempo. Una transacción en bruto no tiene un campo de marca de tiempo. Para averiguar qué tan "vieja" es una transacción, tienes que encontrar el bloque en el que está incluida y obtener la marca de tiempo de ahí. Como alternativa, podrías llevar un registro manual de cuándo tu nodo recibió la transacción por primera vez de otro nodo de la red (que es lo que hace Bitcoin Core, y por eso puedes ver el "time" de una transacción al ejecutar
bitcoin-cli getmempoolentry [txid]— pero esa información solo se almacena temporalmente).
Recursos
- ¿De dónde viene el límite de 2 horas en la marca de tiempo de bitcoin?
- ¿Por qué las marcas de tiempo de la blockchain no siempre aumentan?
- mediantime.go – Código fuente del cálculo del tiempo ajustado de la red en la implementación btcd de Bitcoin. Contiene comentarios excelentes.