Welche Blöcke werden Checkpoints?

Welche Blöcke werden Checkpoints und warum wird ein Block als Checkpoint ausgewählt und nicht ein anderer Block? Und wo finde ich eine Liste mit Checkpoint-Blöcken?

Antworten (2)

Zumindest bei Bitcoin Core keine. Kontrollpunkte sind veraltet und werden wahrscheinlich irgendwann entfernt.

Prüfpunkte wurden ursprünglich eingeführt, um das Überspringen von Signaturen in der historischen Kette zu ermöglichen, ohne anfällig für die Annahme einer alternativen Geschichte zu sein. Diese Rolle wurde nun vom assumevalidKonzept übernommen (ein Block-Hash, der bekanntermaßen gut ist, aber nicht verhindert, eine andere Kette zu akzeptieren).

Prüfpunkte wurden auch als Heuristik verwendet, um zu wissen, welche Blockheader akzeptabel sind, bevor ein ganzer Block validiert wird. Diese Rolle wurde mit Header-First-Synchronisation in 0.10 entfernt. Wir laden jetzt einen Block erst herunter, nachdem wir bereits wissen, dass sein Arbeitsnachweis und seine Schwierigkeiten akzeptabel sind.

Sie wurden auch als Maß für den Validierungsfortschritt verwendet (damit Bitcoin-Qt während der Validierung einen Fortschrittsbalken anzeigen kann). Diese Rolle wurde nur durch Statistikdaten ersetzt, die sich nicht auf die Validierung auswirken.

Das Einzige, wofür Checkpoints noch dienen, ist das Verhindern eines Header-Angriffs mit niedrigem Schwierigkeitsgrad, bei dem Ihr Knoten von einer großen Anzahl langer Kettenzweige mit niedrigem Schwierigkeitsgrad gespammt wird, wodurch ihm der Speicher ausgeht. Aufgrund der vorhandenen Checkpoints (bis Höhe 295000) ist dies bereits ein sehr kostspieliger Angriff.

Sie finden die Liste im Bitcoin-Quellcode . Dies sind die aktuellen Checkpoints (aus der Git-Revision c091b99):

    checkpointData = (CCheckpointData) {
        {
            { 11111, uint256S("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d")},
            { 33333, uint256S("0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6")},
            { 74000, uint256S("0x0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20")},
            {105000, uint256S("0x00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97")},
            {134444, uint256S("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe")},
            {168000, uint256S("0x000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763")},
            {193000, uint256S("0x000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317")},
            {210000, uint256S("0x000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e")},
            {216116, uint256S("0x00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e")},
            {225430, uint256S("0x00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932")},
            {250000, uint256S("0x000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214")},
            {279000, uint256S("0x0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40")},
            {295000, uint256S("0x00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983")},
        }
    };

Es spielt keine Rolle, wie sie ausgewählt werden, aber beachten Sie die folgenden Kommentare in der Quelle:

/**
 * What makes a good checkpoint block?
 * + Is surrounded by blocks with reasonable timestamps
 *   (no blocks before with a timestamp after, none after with
 *    timestamp before)
 * + Contains no strange transactions
 */

Jedenfalls, solange sie in regelmäßigen Abständen eingefügt werden, ist alles in Ordnung. Diese Antwort gibt einen Hinweis darauf, was ihr Zweck ist.