Solidity no puede modificar block.timestamp debido a lvalue xpression

Tengo un problema con la modificación de block.timestamp. Me gustaría modificar la marca de tiempo en mi red y cambiar block.timestamp a la marca de tiempo de Unix, pero recibí un error en la modificación:

TypeError: la expresión tiene que ser un lvalue.

block.timestamp = 1577836800;

¿Hay alguna solución para atravesar este obstáculo? ¿Puedo modificar block.timestamp de esa manera?

Respuestas (2)

El error que está recibiendo es que no puede establecer un valor para esta variable, porque no es una variable editable.

Variables especiales y funciones

Hay variables y funciones especiales que siempre existen en el espacio de nombres global y se utilizan principalmente para proporcionar información sobre la cadena de bloques.

block.timestampen sí misma es una palabra clave protegida en Solidity que tiene un valor específico de la marca de tiempo del bloque para el bloque que ejecutó este código. No puede establecer ese valor.

¿Quizás tiene la intención de establecer otra variable en su valor y luego verificar para ver cuándo estos dos valores son iguales?

Como:

uint checkblock = 1577836800;

if (checkblock <= block.timestamp) {
   //code here
}
Me gustaría establecer mi solicitud con un período de tiempo determinado, tanto como un retraso, después del cual se ejecutará mi transacción, como una marca de tiempo de Unix, cuando se ejecutará mi transacción. Aunque me fue bien retrasar en segundos o incluso minutos mi transacción, me gustaría agregar lógica para hacer que mi transacción se ejecute en un tiempo determinado de Unix, sin esperar unos años hasta que se ejecute la transacción.
Lamentablemente no puedes hacer lo que buscas. Toda la ejecución del código de solidez ocurre como resultado de transacciones externas, y ocurre tan pronto como se extrae esa transacción. Además, las transacciones válidas enviadas a la red se extraerán tan pronto como un minero las incluya en el bloque, y no tiene forma de "retrasar" según las instrucciones del remitente. Lo que podría querer es un servicio externo para retener la transacción y no enviarla hasta un momento específico. Algo como esto (aunque nunca lo he usado yo mismo).
Ack, así que supongo que solo tenía que hacer algún tipo de horario en mi contrato inteligente. ¡Gracias por compartir su conocimiento!
Sin embargo, debo señalar que la granularidad más baja que puede lograr en la cadena de bloques es el tiempo entre bloques. Los bloques son discretos, no continuos.

No, no puedes modificarlo. Es el momento en que el bloque fue sellado por el minero.