Bitcoin muss die aktuelle Zeit kennen, um Blöcke zu validieren. Wie entscheidet es das?
Beachten Sie, dass ich speziell über den Satoshi-Client spreche.
Er nimmt die Medianzeit der anderen verbundenen Clients, aber nur
1. wenn es mindestens 5 sind und
2. wenn die Medianzeit nicht mehr als 70 Minuten von der Systemzeit abweicht.
Für Einzelheiten betrachten wir AddTimeData
, in timedata.cpp
.
Hinweis: Ich habe es für die Länge bearbeitet
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;
}
}
}
Da einzelne Clients eine willkürliche Zeitverschiebung haben können, verwendet der Satoshi-Client den Median der Zeiten seiner Nachbarn zusammen mit seiner eigenen Zeit, um einen Offset zur lokalen Uhr zu finden. Dieser Offset wird dann im gesamten Client verwendet, wo immer eine genaue Zeit benötigt wird.
abeikverdi
Nick Odell
abeikverdi