Descarga inicial de bloques y assumevalid

Cómo se sincroniza un nodo nuevo, y los atajos que puede tomar con seguridad.

Un nodo completo recién estrenado tiene que descargar y comprobar cada bloque desde 2009 antes de conocer el estado actual. Esto es la descarga inicial de bloques (IBD), y es el trabajo más pesado que hace un nodo.

Cabeceras primero

El nodo primero descarga solo cabeceras de bloque, 80 bytes cada una, hasta 2.000 por mensaje. Comprueba su prueba de trabajo y elige la cadena con más trabajo. Bitcoin Core también exige una cantidad mínima de trabajo total (nMinimumChainWork), y primero comprueba las cabeceras de un par antes de guardarlas, para que cadenas falsas de poco trabajo no puedan desperdiciar su memoria.

Bloques en paralelo

Con la cadena de cabeceras conocida, el nodo obtiene bloques de varios pares a la vez, hasta 16 en vuelo por par, dentro de una ventana móvil de 1.024 bloques. Luego se conectan en orden. Cada uno actualiza el chainstate.

Atajo 1: assumevalid

Comprobar cada firma es la parte más lenta. Cada versión de Bitcoin Core incluye un hash de bloque reciente. Con assumevalid, se omiten las comprobaciones de script y firma para ese bloque y sus ancestros, si está en la cadena que se sincroniza. Bitcoin Core 31.1 usa el bloque 938.343. Todo lo demás se verifica igual, y el conjunto UTXO se construye por completo. Para comprobar cada firma, arranca con -assumevalid=0.

Atajo 2: assumeutxo

En lugar de construir el conjunto UTXO desde cero, un nodo puede cargar una instantánea con loadtxoutset. La instantánea se rechaza a menos que su hash coincida con uno del código fuente. Bitcoin Core 31.1 lista instantáneas para las alturas 840.000, 880.000, 910.000 y 935.000. El nodo es usable cerca de la punta rápidamente, mientras comprueba la historia completa desde el génesis en segundo plano.

Qué hace la IBD más rápida

  • Un SSD en lugar de un disco giratorio.
  • Un -dbcache mayor. Desde la versión 31.0, el valor por defecto es 1.024 MiB en máquinas con al menos 4.096 MiB de RAM.
  • Una buena conexión de red.

Confianza

Ambos atajos se basan en valores revisados en público en el código abierto. No dejan que un nodo acepte una cadena con menos trabajo, y ambos pueden desactivarse.