alastria / alastria-node

How to install a node in Alastria Red-T (Quorum technology) and tips to deploy and use it
https://alastria.io/
Apache License 2.0
81 stars 299 forks source link

Sincronización de horas #632

Closed dvgoyeneche closed 5 years ago

dvgoyeneche commented 5 years ago

Hola, ¿Cómo sincronizan los nodos de Alastria que están minando la hora? ¿Hay algún maestro que da la hora al resto de nodos? Por extensión, ¿cómo lo hace ethereum si hay varios nodos con distintas horas en su reloj?

Saludos

andresag commented 5 years ago

Hola @dvgoyeneche,

La consistencia temporal de la cadena se mantiene mediante un timestamp introducido en la cabecera de cada bloque generado. El propio protocolo ethereum impide la validación de bloques con un timestamp inferior al bloque anterior. Sin embargo, la especificación no impone un límite superior, por lo que la comprobación para impedir generar bloques a nodos "adelantados" en el tiempo depende del algoritmo de consenso (IBFT en nuestro caso) y del cliente que estemos utlizando (geth/quorum en el caso de la red T de Alastria).

En concreto en la red T se realiza la siguiente comprobación:

// Don't waste time checking blocks from the future
if header.Time.Cmp(big.NewInt(now().Unix())) > 0 {
    return consensus.ErrFutureBlock
}

De este modo se descartan los bloques que tiene un timestamp mayor que el timestamp del anterior bloque validado + el BLOCK_PERIOD_TIME (1s). Por tanto, si uno de los nodos que mina está adelantado, cuando sea su turno de proponer bloque en la ronda de validación, serán el resto de validadores los que detecten la deriva temporal y descarten el bloque propuesto.

Para infromación más en detalle sobre este tema, ver: https://ethereum.stackexchange.com/questions/5927/how-would-a-miner-cope-with-a-huge-block-time https://ethereum.stackexchange.com/questions/5924/how-do-ethereum-mining-nodes-maintain-a-time-consistent-with-the-network/5931#5931

dvgoyeneche commented 5 years ago

Gracias por la respuesta. Mi pregunta iba mas orientada a ¿quién marca la hora de la red?

Saludos

andresag commented 5 years ago

No hay una hora de red como tal. Los nodos obtienen el timestamp en local a partir de epoch time (independiente de zona horaria) y lo incluyen en su propuesta de bloque. Si dicho timestamp entra dentro del intervalo de aceptación de la mayoría de nodos validadores necesarios para alcanzar consenso, entonces se acepta la propuesta y se añade el bloque a la cadena.

En este sentido la "hora de red" vendría marcada por la hora que tengan la mayoría de los nodos validadores que participan en el consenso.

Si preguntas por el origen de la sincronización. El primer validador que arrancó la red T obtiene su hora sincronizando con los servidores de ntppool.org.

dvgoyeneche commented 5 years ago

Ok, se puede cerrar ese hilo