Obtenga la última actualización de la marca de tiempo de la variable del contrato

¿Es posible obtener la hora de actualización más reciente de la variable del contrato sin conservar el hash de la transacción?

contract Demo{
uint numb;

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

en el contrato anterior cada vez que se actualiza el número usando setNumb (uint) , la transacción se dispara y se guarda en algún bloque, si quiero saber la marca de tiempo del bloque en el que se almacena la transacción, puedo obtener el bloque usando el hash de Transacción y obtenga fácilmente la marca de tiempo del bloque,

Pero, ¿y si no conozco el hash de la transacción?

¿Es posible obtener el último tiempo de transacción (es decir, la marca de tiempo del bloque) que actualiza numb ? ¿Hay alguna forma de obtener el bloque o los bloques que almacenan transacciones relacionadas con

Respuestas (2)

Sí, aquí hay un ejemplo que incorpora 2 formas: usar y una variable de estado. Se puede usar una o ambas formas dependiendo de lo que mejor se adapte al caso de uso.

contract Demo {
  uint _var;
  uint public _lastTimeVarWritten;

  event LogLastTimeVarWritten(uint timestamp);

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

(El código de la pregunta no es válido porque vares una palabra clave en Solidity).

Como explicó @Michal, debe implementarlo (en este caso, para almacenar block.timestamp) explícitamente.

Respuesta corta: no

Respuesta larga:

Ethereum mantiene el estado del contrato como un subárbol del árbol de estado global. La conexión entre una transacción y el cambio de estado que provocó se mantiene como un vínculo entre la raíz de estado global anterior y la raíz de estado global nueva.

Navegar a través del historial de cambios de estado y encontrar la transacción y el bloque que contiene esta transacción es computacionalmente costoso. Además, debido a la poda del árbol de estado, es posible que no sea realmente posible sin la "reproducción inversa" de las transacciones (la poda del árbol de estado es la eliminación de estados históricos para reducir los requisitos de almacenamiento de estado).

Entonces, si el historial de cambios de estado es parte de su estado de contrato, debe implementarlo explícitamente.