¿Qué bloques llegan a ser puntos de control?

¿Qué bloques se convierten en puntos de control y por qué se elige un bloque para ser un punto de control, en lugar de otro bloque? ¿Y dónde puedo encontrar una lista de bloques de puntos de control?

Respuestas (2)

Al menos en Bitcoin Core, ninguno. Los puntos de control son heredados y es probable que se eliminen en algún momento.

Los puntos de control se introdujeron originalmente como una forma de permitir la omisión de firmas en la cadena histórica, sin ser vulnerable a aceptar un historial alternativo. Ese papel ahora ha sido superado por el assumevalidconcepto (un hash de bloque que se sabe que es bueno, pero que no impide aceptar otra cadena).

Los puntos de control también se han utilizado como heurística para saber qué encabezados de bloque son aceptables antes de validar un bloque completo. Ese rol se eliminó con la sincronización de encabezados primero en 0.10. Ahora solo descargamos un bloque después de que ya sabemos que su prueba de trabajo y dificultad son aceptables.

También se han utilizado como medida para el progreso de la validación (por lo que Bitcoin-Qt puede mostrar una barra de progreso durante la validación). Ese rol se reemplazó con solo datos estadísticos que no afectan la validación.

Lo único para lo que siguen sirviendo los puntos de control es para prevenir un ataque de encabezados de baja dificultad, donde su nodo recibe spam por una gran cantidad de ramas de cadena largas y de baja dificultad, lo que hace que se quede sin memoria. Debido a los puntos de control existentes (hasta la altura 295000), este ya es un ataque muy costoso.

Puede encontrar la lista en el código fuente de bitcoin . Estos son los puntos de control actuales (de la revisión de git 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")},
        }
    };

Realmente no importa cómo se eligen, pero observe los siguientes comentarios que se encuentran en la fuente:

/**
 * 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
 */

De todos modos, mientras se inserten a intervalos regulares, todo está bien. Esta respuesta da una pista de cuál es su propósito.