Wie arbeiten Sie mit Datum und Uhrzeit auf der Ethereum-Plattform?

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)

Antworten (3)

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.

Ich habe so viele Fragen. Ich würde mich sehr freuen, wenn Sie einige davon beantworten würden. Erstens, warum sprechen Sie von Transaktionen? Wie hängen Transaktionen mit Verträgen zusammen? Wie stellen Miner den Vertragscode in der Blockchain bereit und wie wird er dort gespeichert? Wie unterscheidet es sich von Transaktionen? Was meinst du mit Zeit in der Zukunft? Wenn Sie jetzt eine Ihrer Vertragsmethoden aufrufen, würde es den Zeitstempel des Blocks anzeigen, in dem sich der Vertragscode befindet. Verstehe ich das richtig? Vielen Dank für Ihre Zeit und Weisheit)
Ein Vertrag definiert einen Code. Der Code besteht aus Methoden. Dieser Code macht nichts, außer wenn er aufgerufen wird. Ein Anruf ist Teil einer Transaktion. Eine Transaktion ist Teil eines Blocks. Wenn Sie einen Vertrag mit einer Funktion schreiben, die nowalias protokolliert, protokolliert block.timestampsie 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.

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 nowSchlüsselwort oder block.timestampSolid 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 timestampunter der Haube. Sie erhalten ein DateTimeObjekt mit Jahr, Monat, Tag, Stunde, Minute, Sekunde und sogar dem Wochentag.