¿Cómo se trabaja con fecha y hora en la plataforma Ethereum?

¿Hay alguna forma de acceder al objeto Fecha en solidez como en JS? Si es así, ¿no sería un error llamar a la solidez determinista? Así que supongo que si se llama así, no puedes. Entonces la pregunta es: ¿cómo trabajas con el tiempo? PD, agradecería fragmentos de código)

Respuestas (3)

Cuando se ejecuta una transacción, se hace en el contexto de ser parte de un bloque. El bloque incluye una marca de tiempo (en segundos desde 1970), a la que puede hacer referencia su código de contrato por el nombre block.timestamp.

La marca de tiempo la establece el minero que extrae el bloque y nadie puede estar seguro de a qué hora realmente lo extrajo, por lo que puede que no sea exactamente exacto. Sin embargo, debe ser más tarde que el bloque anterior, y otros mineros tenderán a rechazar un tiempo establecido en el futuro, por lo que se puede confiar dentro de tolerancias razonables.

Dado que lo que la red está validando para cada transacción no es la hora actual en el punto de validación sino la hora declarada por el minero que extrajo el bloque, el resultado es determinista.

El objeto de fecha de JavaScript también proporciona funciones como obtener el día de la semana o el mes del año. Estos no se proporcionan de forma nativa en EVM, pero puede escribir o usar una biblioteca para ayudarlo con ellos. A menudo, es práctico que el contrato se ocupe solo de las marcas de tiempo, y que las aplicaciones, que a menudo consisten en páginas HTML/JavaScript que interactúan con los contratos de Ethereum, utilicen funciones de JavaScript para formatearlas y mostrarlas al usuario.

tengo tantas preguntas Te agradecería mucho que respondieras algunas de ellas. En primer lugar, ¿por qué estás hablando de transacciones? ¿Cómo se relacionan las transacciones con los contratos? ¿Cómo implementan los mineros el código de contrato en blockchain y cómo se almacena allí? ¿En qué se diferencia de las transacciones? ¿Qué quieres decir con tiempo fijado en el futuro? Si llama ahora en uno de sus métodos de contrato, ¿mostraría la marca de tiempo del bloque en el que reside el código de contrato? ¿Estoy entendiendo esto bien? Muchas gracias por su tiempo y sabiduría)
Un contrato define algún código. El código consta de métodos. Este código no hace nada excepto cuando se llama. Una llamada es parte de una transacción. Una transacción es parte de un bloque. Si escribe un contrato con una función que registra nowaka block.timestamp, cada vez que una transacción lo llame, registrará el tiempo declarado en el bloque que contiene la transacción. Este será aproximadamente el momento en que el minero extrajo el bloque, pero pueden manipularlo un poco.

No, en solidty no existe un objeto Date que le dé la hora real, solo podemos obtener la marca de tiempo del bloque en el que se invoca el contrato, que es determinista. Puede usar la nowpalabra clave o block.timestampsolidez para obtener la marca de tiempo del bloque actual. Esto se puede utilizar para trabajar con el tiempo. La referencia a un contrato de subasta está aquí .

Pruebe https://github.com/pipermerriam/ethereum-datetime . Funciona con un estilo Unix uint timestampdebajo del capó. Obtiene un DateTimeobjeto con año, mes, día, hora, minuto, segundo e incluso el día de la semana.