¿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)
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.
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 now
palabra clave o block.timestamp
solidez 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 timestamp
debajo del capó. Obtiene un DateTime
objeto con año, mes, día, hora, minuto, segundo e incluso el día de la semana.
piliponful
Edmundo Edgar
now
akablock.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.