Gibt es eine Möglichkeit, wie in JS auf das Datumsobjekt in Solidität zuzugreifen? Wenn ja, wäre es nicht falsch, Solidität deterministisch zu nennen? Also ich denke, wenn es so hieß, können Sie nicht. Die Frage ist also – wie arbeitet man mit der Zeit? PS Ich würde mich über Codeschnipsel freuen)
Wenn eine Transaktion ausgeführt wird, erfolgt dies im Zusammenhang mit der Zugehörigkeit zu einem Block. Der Block enthält einen Zeitstempel (in Sekunden seit 1970), auf den Ihr Vertragscode mit dem Namen verweisen kann block.timestamp
.
Der Zeitstempel wird von dem Miner festgelegt, der den Block abgebaut hat, und niemand kann sicher sein, zu welcher Zeit er ihn wirklich abgebaut hat, daher ist er möglicherweise nicht genau genau. Es muss jedoch später als der vorherige Block sein, und andere Miner werden dazu neigen, eine in der Zukunft festgelegte Zeit abzulehnen, sodass sie sich innerhalb angemessener Toleranzen darauf verlassen kann.
Da das Netzwerk für jede Transaktion nicht die aktuelle Zeit zum Zeitpunkt der Validierung validiert, sondern die Zeit, die vom Miner angegeben wurde, der den Block abgebaut hat, ist das Ergebnis deterministisch.
Das JavaScript-Datumsobjekt bietet auch Funktionen wie das Abrufen des Wochentags oder des Monats des Jahres. Diese werden nicht nativ in der EVM bereitgestellt, aber Sie können eine Bibliothek schreiben oder verwenden, um Ihnen dabei zu helfen. Oft ist es praktisch, dass der Vertrag nur mit Zeitstempeln umgeht, und für Anwendungen – die oft aus HTML/JavaScript-Seiten bestehen, die mit Ethereum-Verträgen interagieren – JavaScript-Funktionen verwenden, um sie zu formatieren, um sie dann dem Benutzer anzuzeigen.
Nein, in Solidty gibt es kein Date-Objekt, das Ihnen die tatsächliche Uhrzeit angibt, wir können nur den Zeitstempel des Blocks abrufen, in dem der Vertrag aufgerufen wird, was deterministisch ist. Sie können das now
Schlüsselwort oder block.timestamp
Solid verwenden, um den Zeitstempel des aktuellen Blocks abzurufen. Dies kann verwendet werden, um mit der Zeit zu arbeiten. Hinweis auf einen Auktionsvertrag ist hier .
Versuchen Sie es mit https://github.com/pipermerriam/ethereum-datetime . Es arbeitet mit einem Unix-Stil uint timestamp
unter der Haube. Sie erhalten ein DateTime
Objekt mit Jahr, Monat, Tag, Stunde, Minute, Sekunde und sogar dem Wochentag.
Piliponful
Edmund Edgar
now
alias protokolliert, protokolliertblock.timestamp
sie jedes Mal, wenn sie von einer Transaktion aufgerufen wird, die Zeit, die in dem Block deklariert ist, der die Transaktion enthält. Dies wird ungefähr die Zeit sein, in der der Miner den Block abgebaut hat, aber sie können ihn ein wenig verfälschen.