Bitcoin necesita saber la hora actual para validar bloques. ¿Cómo decide eso?
Tenga en cuenta que estoy hablando específicamente del cliente Satoshi.
Toma la mediana de tiempo de los otros clientes conectados, pero solo
1. si hay al menos 5, y
2. si la mediana de tiempo no difiere de la hora del sistema en más de 70 minutos.
Para detalles, miramos AddTimeData
, en timedata.cpp
.
Nota: lo he editado por longitud
void AddTimeData(const CNetAddr& ip, int64 nTime)
{
int64 nOffsetSample = nTime - GetTime();
// Add data
vTimeOffsets.input(nOffsetSample);
if (vTimeOffsets.size() >= 5 && vTimeOffsets.size() % 2 == 1)
{
int64 nMedian = vTimeOffsets.median();
// Only let other nodes change our time by so much
if (abs64(nMedian) < 70 * 60)
{
nTimeOffset = nMedian;
}
else
{
nTimeOffset = 0;
}
}
}
Como los clientes individuales pueden tener un cambio de hora arbitrario, el cliente Satoshi usará la mediana de los tiempos de sus vecinos junto con su propio tiempo para encontrar una compensación con respecto al reloj local. Esta compensación se utilizará en todo el cliente siempre que se necesite una hora precisa.
abeikverdi
Nick ODell
abeikverdi