Holen Sie sich den Zeitstempel der letzten Aktualisierung der Vertragsvariable

Ist es möglich, die letzte Aktualisierungszeit der Vertragsvariablen zu erhalten, ohne den Transaktionshash zu erhalten,

contract Demo{
uint numb;

  function setNumb(uint var1){
    numb=var1
  }
}

Im obigen Vertrag wird die Transaktion ausgelöst und in einem Block gespeichert, wenn die Nummer mit setNumb(uint) aktualisiert wird . Wenn ich den Zeitstempel des Blocks wissen möchte, in dem die Transaktion gespeichert ist, kann ich den Block mithilfe von Transaction Hash und abrufen Holen Sie sich einfach den Blockzeitstempel,

Aber was ist, wenn ich den Transaktionshash nicht kenne?

Ist es möglich, die neueste Transaktionszeit (dh Blockzeitstempel) zu erhalten, die numb aktualisiert? Gibt es eine Möglichkeit, den Block / die Blöcke zu erhalten, in denen Transaktionen im Zusammenhang mit numb gespeichert sind?

Antworten (2)

Ja, hier ist ein Beispiel, das zwei Möglichkeiten beinhaltet: die Verwendung von und einer Zustandsvariablen. Je nachdem, was besser zum Anwendungsfall passt, können eine oder beide Möglichkeiten verwendet werden.

contract Demo {
  uint _var;
  uint public _lastTimeVarWritten;

  event LogLastTimeVarWritten(uint timestamp);

  function setVar(uint var1){
    _var=var1;
    _lastTimeVarWritten = block.timestamp;
    LogLastTimeVarWritten(_lastTimeVarWritten);
  }
}

(Der Code in der Frage ist nicht gültig, da vares sich um ein Schlüsselwort in Solidity handelt.)

Wie @Michal erklärt hat, müssen Sie es explizit implementieren (in diesem Fall, um den block.timestamp zu speichern).

Kurze Antwort: nein

Lange Antwort:

Ethereum verwaltet den Vertragsstatus als Teilbaum des globalen Statusbaums. Die Verbindung zwischen einer Transaktion und der von ihr verursachten Zustandsänderung wird als Verbindung zwischen der alten globalen Zustandswurzel und der neuen globalen Zustandswurzel aufrechterhalten.

Das Navigieren durch die Historie der Zustandsänderungen und das Auffinden der Transaktion und des Blocks, der diese Transaktion enthält, ist rechenintensiv. Darüber hinaus ist es aufgrund der Zustandsbaumbereinigung möglicherweise nicht wirklich möglich, ohne die Transaktionen "umgekehrt wiederzugeben" (Zustandsbaumbereinigung ist das Entfernen von Verlaufszuständen, um die Anforderungen an die Zustandsspeicherung zu verringern).

Wenn also die Historie der Statusänderungen Teil Ihres Vertragsstatus ist, müssen Sie sie explizit implementieren.