Ich block.timestamp
möchte in einem meiner Verträge verwenden und ich möchte wissen, ob das block.timestamp
Sekunden wie in Python oder Millisekunden wie in Java oder ein anderer Wert ist?
Kann es auch sicher verwendet werden, um block.timestamp
zu überprüfen, ob seit der letzten Aktualisierung 30 Tage vergangen sind oder ähnliches?
Aus der Solidity-Dokumentation ( hier und hier ):
... Zeitstempel des aktuellen Blocks in Sekunden seit der Epoche
Zu deiner anderen Frage:
Ist es auch sicher, block.timestamp zu verwenden, um zu überprüfen, ob seit der letzten Aktualisierung 30 Tage vergangen sind, oder so etwas?
Ihre Frage ist nicht ganz klar, aber wenn Sie die Gültigkeit eines Zeitstempels über einen bestimmten Zeitraum in Frage stellen, sollte diese vorherige Antwort sie abdecken: Ist block.timestamp für längere Zeiträume sicher?
block.timestamp
ist ein uint256
Wert in Sekunden seit der Epoche.
Es ist sicher zu vergleichen wie:
function f(uint start, uint daysAfter) {
if (block.timestamp >= start + daysAfter * 1 days) { ... }
}
oder
if (block.timestamp > start + 30 days) { ... }
Zeiteinheiten sind hilfreich für einige Berechnungen mit der Einschränkung:
Vorsicht bei Kalenderrechnungen mit diesen Einheiten, denn nicht jedes Jahr hat 365 Tage und nicht einmal jeder Tag hat wegen Schaltsekunden 24 Stunden. Aufgrund der Tatsache, dass Schaltsekunden nicht vorhergesagt werden können, muss eine genaue Kalenderbibliothek von einem externen Orakel aktualisiert werden.
uint250 start = 1512918335
?start = block.timestamp
(jetzt) oder start = 23 days
etcblock.timestamp
sie beliebig weit in der Zukunft liegen kann, solange sie größer als ist der übergeordnete Zeitstempel: ethereum.stackexchange.com/a/428/82179 ethereum.stackexchange.com/a/432/82179block.timestamp
es am Ende nicht beliebig weit in der Zukunft liegt.1-timestamp ist der Unix-Zeitstempel, um ihn also in ein normales Datum umzuwandeln, verwenden Sie http://www.epochconverter.com/ , er gibt an, wann der Block erstellt wurde.
2-um zu antworten, ob es sicherer ist, block.timestamp <30 Tage zu verwenden: ja, weil der Miner den Zeitstempel um 900 Sekunden ändern könnte .
block.timestamp ist möglicherweise nicht die richtige Zeit, da sie vom Miner festgelegt wird. Daher hängt es von der Genauigkeit der Bergmannsuhr ab.
Der aktuelle block.timestamp muss größer sein als der übergeordnete block.timestamp. Dies wird im Protokoll festgelegt. Einige Blöcke haben sogar 1s Unterschied.
Blockchain hat keine Uhr, da dies eine Synchronisierung aller Knoten bedeuten würde, und das wäre fast unmöglich zu erreichen.
Galahad
blocks.timestamp
ist ein Unix-Zeitstempel. Es hat also die vollständigen Informationen über Datum, Stunden, Minuten und Sekunden (in UTC), als der Block erstellt wurde.Äthergesichter
djenning90