MSTR Cat

Blockchain/Nivel III · La red/3.1 Nodos/Lección 3

Descarga inicial de bloques

Reconstruir la historia desde cero: el costo de la verificación independiente

MaterialesUna computadora con al menos 8 GB de RAM y un SSDSoftware Bitcoin Core (versión estable más reciente)Acceso a la terminal de `bitcoin-cli`

Curiosidad

  1. ¿Por qué un nodo nuevo descarga los encabezados de los bloques antes de descargar cualquier bloque?
  2. ¿Qué verificaciones específicas se omiten cuando está activado ‘assumevalid’, y por qué eso es seguro?
  3. Si el ancho de banda es lo suficientemente rápido como para llenar un disco en minutos, ¿por qué la sincronización inicial aún puede tardar días?

Explorar

  1. Una instancia nueva de Bitcoin Core contiene únicamente el bloque génesis, codificado directamente en su código fuente. No sabe nada sobre la longitud ni la validez de la cadena. Al conectarse con otros nodos, inicia la Descarga Inicial de Bloques (Initial Block Download o IBD), un proceso que reconstruye toda la historia desde el 3 de enero de 2009 hasta el extremo más reciente de la cadena. No se trata de una copia pasiva; es una reconstrucción activa en la que cada bloque se verifica contra las reglas de consenso, aparte de los atajos descritos a continuación, antes de ser aceptado.
  2. Desde la versión 0.10 (2015), IBD sigue una estrategia de dos fases. Primero, el nodo descarga todos los encabezados de bloque, que son compactos y rápidos de transmitir. Verifica la prueba de trabajo en estos encabezados para confirmar que cumplen con el objetivo de dificultad, creando así una cadena de trabajo sin verificar aún la validez de las transacciones. Una vez establecida la cadena de encabezados, el nodo solicita los bloques completos a varios pares de forma paralela, validándolos secuencialmente a medida que llegan.
  3. La validación de transacciones es computacionalmente costosa debido a las verificaciones de firmas criptográficas. Para acelerar la sincronización, la versión 0.14 (2017) introdujo ‘assumevalid’. Este parámetro omite la verificación de firmas para todos los bloques que se encuentran debajo de un hash codificado de antemano de un bloque ampliamente revisado. El nodo sigue verificando todo lo demás, incluida la prueba de trabajo, las cantidades y el conjunto de UTXO; solo se omiten las verificaciones de scripts y firmas para esa parte más antigua del historial. Los usuarios pueden desactivar esta verificación para verificar cada firma desde el inicio, a costa de tiempos de sincronización significativamente más largos.
  4. Las versiones recientes ofrecen ‘assumeUTXO’, una función experimental que permite a un nodo comenzar con una instantánea precomputada del conjunto actual de UTXO. El nodo se vuelve utilizable rápidamente mientras verifica el historial completo en segundo plano. Hasta que finaliza esa verificación, confía en una instantánea cuyo hash está codificado directamente en el software (el propio archivo puede provenir de cualquier lugar); posteriormente, es completamente independiente.
  5. La duración de la IBD varía enormemente según el equipo utilizado. En una máquina moderna con un SSD rápido y 8 GB de RAM, la sincronización puede tardar horas. En dispositivos con recursos limitados como una Raspberry Pi, puede llevar varios días o más. El cuello de botella rara vez es el ancho de banda; se trata de la velocidad de escritura en el disco para la caché UTXO (dbcache) y de los ciclos del procesador para la validación de scripts. Un disco duro lento frenará el proceso incluso con conexión a Internet de gigabit, ya que el nodo debe leer y escribir constantemente el estado.
  6. Una vez sincronizado, el nodo llega a la punta de la cadena válida con más trabajo procesado. Pasa de ser un observador a un participante completo, capaz de retransmitir transacciones y bloques a sus pares. El comando `bitcoin-cli getblockchaininfo` muestra este progreso a través del campo `verificationprogress`, que aumenta hacia 1.0 a medida que se valida la cadena histórica. En ese punto, el nodo posee una copia completa y verificada de forma independiente del historial del dinero.

Datos clave

  • La versión 0.10 de Bitcoin Core (2015) introdujo la sincronización por encabezados para optimizar la Descarga Inicial de Bloques.
  • El parámetro ‘assumevalid’ en la versión 0.14 omite las verificaciones de firma para los bloques por debajo de un hash codificado de antemano para acelerar la sincronización.
  • ‘assumeUTXO’ permite a los nodos comenzar desde una instantánea de UTXO y verificar el historial en segundo plano; fue introducido de forma experimental en versiones recientes.
  • La velocidad de escritura en disco y la asignación de memoria para la caché UTXO suelen ser cuellos de botella más significativos que el ancho de banda durante IBD.
  • Un nuevo nodo valida los bloques de forma secuencial, incluso si se descargan en paralelo desde varios pares.
  • `bitcoin-cli getblockchaininfo` muestra `verificationprogress`, que indica qué parte de la cadena ha sido validada.

Ejercicio nueve, seis, tres, uno

9ReunirEnumera 9 configuraciones de hardware distintas (CPU, RAM, tipo de almacenamiento) utilizadas para ejecutar nodos de Bitcoin. Indica el tiempo típico de sincronización reportado para cada una en una instalación nueva.
6AgruparAgrupa estas 9 configuraciones en 6 categorías según su cuello de botella principal: limitado por la CPU, limitado por la RAM, limitado por E/S de disco, limitado por ancho de banda o equilibrado.
3DestilarReduce los 6 a 3 factores que más determinan cuánto tiempo dura la sincronización inicial.
1CristalizarEscribe una oración que explique el compromiso entre la velocidad de sincronización y la independencia criptográfica en la descarga inicial de bloques.

Verificación de hechos

Fechas, cifras y afirmaciones verificadas con las fuentes publicadas que se enumeran a continuación.

Abrir en la academia interactiva →

EN PT ZH JA KO RU DE FR MS