Wie findet Bitcoin heraus, wie spät es ist?

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.

Antworten (2)

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;
        }
    }
}
Gibt es einen möglichen Angriff auf die Manipulation dieser Zeit auf einem Client?
@abeikverdi Eine vollständige Antwort auf diese Frage wäre zu umfangreich, um in einem einzigen Kommentar enthalten zu sein. Es ist jedoch eine interessante Frage, und ich ermutige Sie , sie als separate Frage zu stellen. Verwandte: Wurde jemals ein Timejacking-Angriff durchgeführt?
Ja, das ist eine große Frage! Danke für den Link! Ich denke, ich muss mehr über Timejacking im Bitcoin-Netzwerk lesen

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.