Solidity kann block.timestamp aufgrund von lvalue xpression nicht ändern

Ich habe ein Problem beim Ändern von block.timestamp. Ich möchte den Zeitstempel in meinem Netzwerk ändern und block.timestamp in einen Unix-Zeitstempel ändern, aber ich habe bei der Änderung einen Fehler erhalten:

TypeError: Ausdruck muss ein Lvalue sein.

block.timestamp = 1577836800;

Gibt es eine Lösung, um dieses Hindernis zu überwinden? Kann ich block.timestamp überhaupt auf diese Weise ändern?

Antworten (2)

Der Fehler, den Sie erhalten, ist, dass Sie dieser Variablen keinen Wert zuweisen können, da es sich nicht um eine bearbeitbare Variable handelt.

Spezielle Variablen und Funktionen

Es gibt spezielle Variablen und Funktionen, die immer im globalen Namensraum existieren und hauptsächlich dazu dienen, Informationen über die Blockchain bereitzustellen.

block.timestampselbst ist ein geschütztes Schlüsselwort in Solidity, das einen bestimmten Wert des Blockzeitstempels für den Block hat, der diesen Code ausgeführt hat. Sie können diesen Wert nicht festlegen.

Vielleicht möchten Sie eine andere Variable auf Ihren Wert setzen und dann überprüfen, ob diese beiden Werte gleich sind?

Wie:

uint checkblock = 1577836800;

if (checkblock <= block.timestamp) {
   //code here
}
Ich möchte meine Anfrage mit einem bestimmten Zeitraum festlegen - sowohl als Verzögerung, nach der meine Transaktion ausgeführt wird, als auch als Unix-Zeitstempel, wenn meine Transaktion ausgeführt wird. Obwohl ich gut damit zurechtkam, meine Transaktion in Sekunden oder sogar Minuten zu verzögern, möchte ich Logik hinzufügen, damit meine Transaktion zu einer bestimmten Unix-Zeit ausgeführt wird, und nicht einige Jahre warten, bis die Transaktion ausgeführt wird.
Leider können Sie nicht das tun, wonach Sie suchen. Die gesamte Ausführung von Solidity-Code erfolgt als Ergebnis einer externen Transaktion und erfolgt, sobald diese Transaktion abgebaut wird. Darüber hinaus werden gültige Transaktionen, die an das Netzwerk übermittelt werden, abgebaut, sobald ein Miner sie in den Block einbezieht, und es gibt keine Möglichkeit, sie gemäß den Anweisungen des Einreichers zu „verzögern“. Was Sie vielleicht möchten, ist ein externer Dienst, der die Transaktion hält und erst zu einem bestimmten Zeitpunkt übermittelt. So etwas ( obwohl ich das selbst noch nie benutzt habe).
Ack, ich denke, ich musste einfach eine Art Zeitplan in meinem Smart Contract erstellen. Danke, dass du dein Wissen teilst!
Ich sollte jedoch beachten, dass die niedrigste Granularität, die Sie in der Blockchain erreichen können, die Zeit zwischen den Blöcken ist. Blöcke sind diskret, nicht kontinuierlich.

Nein, Sie können es nicht ändern. Es war die Zeit, als dieser Block vom Bergmann versiegelt wurde