Obtener la hora en que se extrajo un bloque

Mi front-end muestra las marcas de tiempo de varias acciones de contrato que han tenido lugar.

Sin embargo, la corriente block.timestampque está usando no es muy precisa, porque el minero tiene cierto margen de maniobra para configurarla.

¿Puede un front-end obtener una marca de tiempo precisa de un bloque que ya se ha minado? Entonces, en lugar de depender de un contrato para participar block.timestampen un evento, simplemente podemos consultar a un tercero por getTimestampForBlock(blockNumber)?

Parece un desperdicio generar block.timestampun evento, cuando esos datos deben consultarse después del hecho ... ¿Hay alguna otra forma de registrar/acceder a las marcas de tiempo para las transacciones?

Respuestas (1)

Esto realmente no responde a su pregunta sino que explica por qué no creo que las alternativas sean mucho mejores que block.timestamp.

El block.timestampvalor, como saben, lo establece el minero. Sin embargo, la marca de tiempo no puede estar demasiado desfasada o será rechazada por la red. Supongamos, entonces, que el reloj de un minero se atrasa (de modo que la hora en la marca de tiempo está en el pasado) y extrae un bloque. La mayoría de los nodos que reciben este bloque no tienen forma de saber si simplemente llegaron tarde para enterarse del bloque (porque tardó muchos saltos en llegar) o si el reloj del otro nodo está lento. Solo una entidad que pueda monitorear casi todos los nodos de la red puede decir dónde se originó un bloque y si la marca de tiempo estaba un poco atrasada.

Por el contrario, si el reloj del minero es un poco rápido, algunos nodos pueden ver que la marca de tiempo está en el futuro. Pero otros lo recibirán cuando esté un poco rancio. Pero los mineros que lo reciben rápidamente no saben realmente si lo han recibido rápidamente. Por lo tanto, tendrían que consultar a otros nodos para saber si lo recibieron en una marca de tiempo anterior a su propio tiempo. Etcétera. Según esa lógica, se considera que el nodo que informa sobre el avistamiento más temprano del nodo es el que recibió el bloque primero. Pero el reloj de ese nodo podría haber estado funcionando lento. Entonces eso se vuelve casi indistinguible del caso en el que los mineros ven que el bloque llegó en el pasado (excepto en este caso, saben que el reloj del minero es rápido).

Por lo tanto, algunos nodos, debido a que confían en sus propios relojes, solo pueden saber que el reloj de un minero es rápido, pero no por cuánto. No pueden saber con certeza, sin ser omnipresentes, si el reloj de un minero está atrasado. Desafortunadamente, esto significa que como usuario de la marca de tiempo proporcionada por un tercero, a menos que pueda confiar en sus relojes, ¡se encuentra exactamente con el mismo problema! Lo mejor que puede hacer es poner un límite inferior mayor en el tiempo en que se extrajo un bloque ejecutando su propio nodo.