Los tiempos están cambiando.

Hay muchas ocasiones en las que desea tener limitaciones de tiempo, como plazos, tiempos de vida y tiempos de vencimiento para casos de uso como subastas, suscripciones o ICO.

Aquí está un ley Fundamental que tenemos que aceptar:

Nosotros será ser capaz de decir ese tiempo fue aproximadamente correcto dentro del período de ejecución del contrato después se alcanza la finalidad.

Esta expresión bastante incómoda intenta capturar dos suposiciones:

Podemos relacionarnos con el tiempo. solo en intervalos aproximados y no en la precisión de segundos o incluso milisegundos. Si bien tenemos variables relacionadas con el tiempo disponible en tiempo de ejecución, puede ser pellizcado por el minero y existen mecanismos de incentivos para prevenir eso. Por lo tanto, como siempre cuando confiamos en los bloques, si el tiempo dado por el minero estuvo en el intervalo aproximado que es aceptable, solo se revelará cuando estemos razonablemente seguros de que el bloque está incluido en la cadena autorizada, también cuando hay un número suficiente de Los bloques se extraen en la parte superior.

En general, hay dos opciones para incluir un factor de tiempo en un contrato de solidez: relacionado con el número de bloque actual o relacionado con la marca de tiempo actual.

Número de bloque

Cada bloque tiene una propiedad de número y siempre será el número del bloque actual. La integridad es garantizado por el protocolo ethereum y la red no aceptará los bloques propuestos, ya que este número no es secuencial.

En consecuencia, esta propiedad es segura de usar. Sin embargo, el tiempo de bloqueo no es una constante, es un factor de ajuste de la dificultad. Originalmente, el objetivo era alrededor de 12 segundos, fue de 17 segundos durante mucho tiempo y, debido a las últimas actualizaciones de protocolo, está convergiendo a 14 segundos, pero también tuvo algunos valores atípicos significativos.

Tiempo promedio de bloqueo en la red ethereum (fuente: etherscan.io)

La conclusión de esto es que puede medir el tiempo en intervalos de aproximadamente 14-15 segundos. Sin embargo, los intervalos cortos son sensibles a los valores atípicos pequeños (el siguiente bloque se puede encontrar significativamente más rápido o más lento que el tiempo promedio), mientras que los intervalos más grandes son cada vez más impredecibles con respecto a los cambios de red. Cambió un poco en los últimos años, incluido el drástico aumento en el preludio de la bifurcación dura de Bizantium de Metropolis que se aplicó en 2017/10/15.

block.timestamp

La marca de tiempo actual como segundos desde la época de Unix (1970/01/01) también se le da a usted. Esta variable Viene del minero y no confiamos en el minero.. El minero solo está obligado a aumentar la marca de tiempo para que sea más alta que el bloque anterior, por lo tanto, también puede ser un tiempo lejano en el futuro o solo un ligero aumento después del último bloque. Sin embargo, los mineros tienen un incentivo para aceptar bloques que se aproximan al tiempo de dificultad.

Aceptar los bloques que están lejos en el futuro es una señal fuerte de que un nodo no es honesto, ¿por qué desperdiciar recursos para validar un bloque en el que no confía? E incluso si un nodo lo validara, tendría que ajustar la hora de su propio sistema para la minería futura, lo cual es algo extraño.

En consecuencia, geth, la implementación de referencia utilizada por más del 50% de todos los nodos, rechazará los bloques que tienen una marca de tiempo más alta que la hora actual del sistema, lo que lleva a Muy poco espacio para la manipulación más allá de la hora actual..

Geth ha dedicado errores para las irregularidades block.number y block.timestamp.

Publicar un bloque con un tiempo más corto es más razonable. Sin embargo, la dificultad de ethereum está pensada para contrarrestar el poder de hash de las redes, manteniendo el tiempo de bloqueo estable. UNA el tiempo de bloqueo corto se interpreta como un aumento en el poder de hashing general, resultando en el aumento de la dificultad.

Esto le da a los bloques obsoletos publicados (tíos en etéreo) la posibilidad de ser priorizados sobre el malicioso: ya que otros mineros no tienen ninguna razón para construir sobre un bloque que dispara la dificultad, haciendo que sea más difícil para ellos minar el siguiente bloque, lo harán. Intenta elegir un bloque que no incremente la dificultad.

Sin embargo, queda un pequeño espacio para la manipulación y si un contrato define un tiempo finito en segundos desde la época de Unix, un minero puede tener la opción de exprimir en otra transacción y afinar la marca de tiempo para que se ajuste a las restricciones de los contratos.