Las marcas de tiempo que comienzan en el bloque 145044 son:
145044: 2011-09-12 15:46:39
145045: 2011-09-12 16:05:07
145046: 2011-09-12 16:00:05 // ~5 minutes before prior block
145047: 2011-09-12 15:53:36 // ~7 & ~12 minutes before 2 prior blocks
145048: 2011-09-12 16:04:06 // after 2 prior blocks but still before 145045
¿Cómo ocurre esto?
De la wiki :
Una marca de tiempo se acepta como válida si es mayor que la marca de tiempo mediana de los 11 bloques anteriores y menor que el tiempo ajustado por la red + 2 horas. El "tiempo ajustado por la red" es la mediana de las marcas de tiempo devueltas por todos los nodos conectados a usted.
Cada vez que un nodo se conecta a otro nodo, obtiene una marca de tiempo UTC y almacena su compensación del UTC local del nodo. El tiempo ajustado por la red es entonces el UTC local del nodo más el desplazamiento medio de todos los nodos conectados. Sin embargo, la hora de la red nunca se ajusta a más de 70 minutos de la hora del sistema local.
No es obvio que no haya ningún problema con esta forma de sellado de tiempo. Vea la publicación de blog Timejacking & Bitcoin y la discusión al respecto aquí .
La causa raíz de esto es que sin una autoridad central, es imposible saber con seguridad cuál es la hora actual.
El protocolo rechaza bloques con una marca de tiempo anterior a la mediana de las marcas de tiempo de los 11 bloques anteriores o posterior a 2 horas después de la hora actual de la red. Cualquier otra marca de tiempo es aceptable. Tenga en cuenta que el 'tiempo de la red' puede diferir del tiempo real, ya que la red bitcoin intenta corregir la configuración incorrecta del reloj tomando la mediana del tiempo informado por todos los pares conectados como el tiempo de la red.
Puedes leer sobre un ataque que esto hace posible aquí :
Al anunciar marcas de tiempo inexactas cuando se conecta a un nodo, un atacante puede alterar el contador de tiempo de la red de un nodo y engañarlo para que acepte una cadena de bloques alternativa. Esto podría aumentar significativamente las posibilidades de un doble gasto exitoso, agotar los recursos computacionales de un nodo o simplemente ralentizar la tasa de confirmación de transacciones.
Para agregar un poco a las otras respuestas: imagine si el protocolo requiriera que aumenten las marcas de tiempo. Ahora imagine que alguien extrae un bloque con una marca de tiempo de un minuto en el futuro, por lo que puede ver. ¿A qué te dedicas? Si intenta extraer bloques con la marca de tiempo que actualmente cree que es correcta, sus bloques serán rechazados (ya que tendrían una marca de tiempo anterior al último bloque aceptado).
Debido al requisito de que la red acuerde fácilmente si un bloque es válido o no, el protocolo no puede exigir marcas de tiempo de alta precisión como condición para aceptar un bloque como válido. Como resultado, requerir marcas de tiempo monótonas probablemente empeoraría las cosas en lugar de mejorarlas.
No hay ningún requisito de que los bloques tengan una marca de tiempo después del bloque anterior. El único requisito es que la marca de tiempo sea mayor que la marca de tiempo mediana de los últimos 11 bloques. Entonces, esto significa que un bloque puede tener una marca de tiempo más baja que su padre, dentro de un cierto límite.
Esto sucede porque los mineros no tienen relojes perfectamente sincronizados. Puede haber ligeras diferencias en sus relojes internos que los desvían unos segundos. Si un minero tiene mucha suerte y encuentra un bloque poco después de otro, debido a las diferencias de reloj, es posible que su reloj aún esté atrasado con respecto a la marca de tiempo del bloque principal. Eso es probablemente lo que sucedió aquí.
Creo que la marca de tiempo se basa en la máquina que aloja al cliente de bitcoin que envió el bloque, y se permite la variación ya que no todos tienen la hora de su computadora sincronizada correctamente.
Al menos un grupo de minería establece deliberadamente marcas de tiempo 6 minutos en el futuro y el bloque 145045 parece ser de Eligius (la transacción de generación se divide en varias direcciones).
Las marcas de tiempo de los bloques no son muy precisas y se permite que tengan varias horas de diferencia. Es difícil que una red descentralizada llegue a un acuerdo en un horario oficial.
Las razones por las que podría ser inexacto son los diferentes tiempos del sistema, el retraso y también los mineros a menudo cambian el tiempo en pequeñas cantidades una vez que han probado todos los nonces posibles. Esto les permite obtener nuevos hashes usando los viejos nonces.
Estas son las reglas de qué marcas de tiempo están permitidas.
Hay bastante margen de maniobra en la marca de tiempo del bloque. La marca de tiempo para el bloque N debe ser mayor que el tiempo medio de la red, que se calcula como la mediana de los últimos 11 bloques, y también menor que el tiempo de la network time + 2 hours
red, donde el tiempo de la red se calcula en función del tiempo del sistema del nodo, así como el tiempo medio informado por los pares del nodo.
La marca de tiempo de un bloque solo debe tratarse como una hora aproximada en que se extrajo el bloque. No hay forma de obligar a un minero a incluir 'la hora real' , porque es imposible que la red determine la verdad de esto. Entonces, en cambio, la red impone una regla de que la marca de tiempo debe cumplir con las siguientes reglas para que se considere válida:
(La información a continuación se copia/pega de la referencia del desarrollador de Bitcoin.org )
El tiempo de bloque es una época de Unix cuando el minero comenzó a codificar el encabezado (según el minero). Debe ser estrictamente mayor que la mediana de tiempo de los 11 bloques anteriores. Los nodos completos no aceptarán bloques con encabezados de más de dos horas en el futuro según su reloj.
Por lo tanto, es posible que un bloque en height N
tenga una marca de tiempo posterior a la marca de tiempo del bloque en height N+1
, siempre que siga estas reglas.
smatthewenglish
muro