Estoy buscando usar block.timestamp
en uno de mis contratos y quiero saber si block.timestamp
son segundos como en Python o milisegundos como en Java o algún otro valor.
Además, ¿es seguro usarlo block.timestamp
para verificar si han pasado 30 días desde la última hora actualizada o algo así?
De la documentación de Solidity ( aquí y aquí ):
... marca de tiempo del bloque actual en segundos desde la época
Para tu otra pregunta:
Además, ¿es seguro usar block.timestamp para verificar si han pasado 30 días desde la última vez que se actualizó o algo así?
Su pregunta no está completamente clara, pero suponiendo que está cuestionando la validez de una marca de tiempo durante un período de tiempo determinado, entonces esta respuesta anterior debería cubrirla: ¿Block.timestamp es seguro durante períodos de tiempo más largos?
block.timestamp
es un uint256
valor en segundos desde la época.
Es seguro comparar como:
function f(uint start, uint daysAfter) {
if (block.timestamp >= start + daysAfter * 1 days) { ... }
}
o
if (block.timestamp > start + 30 days) { ... }
Las unidades de tiempo son útiles para algunos cálculos con la advertencia:
Tenga cuidado si realiza cálculos de calendario con estas unidades, porque no todos los años equivalen a 365 días y ni siquiera todos los días tienen 24 horas debido a los segundos intercalares. Debido al hecho de que los segundos bisiestos no se pueden predecir, un oráculo externo debe actualizar una biblioteca de calendario exacta.
uint250 start = 1512918335
?start = block.timestamp
(ahora) o start = 23 days
etc.block.timestamp
que puede establecerse arbitrariamente en el futuro, siempre que sea mayor que la marca de tiempo principal: ethereum.stackexchange.com/a/428/82179 ethereum.stackexchange.com/a/432/82179block.timestamp
no termina siendo arbitrariamente lejano en el futuro.1-timestamp es la marca de tiempo de Unix, por lo que para convertirla a la fecha normal, use http://www.epochconverter.com/ indica cuándo se creó el bloque.
2-para responder si es más seguro usar block.timestamp <30 días: sí porque el minero podría cambiar la marca de tiempo en 900 segundos .
block.timestamp puede no ser la hora correcta establecida por el minero. Por lo tanto, depende de la precisión del reloj de los mineros.
El block.timestamp actual tiene que ser mayor que el block.timestamp padre. Esto está establecido en el protocolo. Algunos bloques incluso tienen una diferencia de 1s.
Blockchain no tiene reloj, ya que significaría la sincronización de todos los nodos y eso sería casi imposible de lograr.
galáhad
blocks.timestamp
una marca de tiempo de Unix. Por lo tanto, tiene la información completa sobre la fecha, horas, minutos y segundos (en UTC) cuando se creó el bloque.caras etéreas
jenny90