¿Creando mi propio bootstrap.dat?

Dado que últimamente he estado derribando y configurando muchos clientes de bitcoin para algunos experimentos, me preguntaba si existe una forma sencilla de acelerar la sincronización con la red. Un método que me viene a la mente es el bootstrap.datarchivo distribuido por algunas personas. El problema es que no se incluyen los últimos 40.000 bloques, que son los más caros de conseguir y verificar.

Ahora me preguntaba cómo crear uno bootstrap.datmismo, a partir de una buena copia que tengo en otra máquina. ¿Alguna idea?

Respuestas (6)

Los archivos de bloque están en el mismo formato que el archivo de arranque. Su formato es realmente simple: simplemente concatene todos los bloques después de prefijarlos con el número de red (para evitar mezclar las redes de prueba) y la longitud del bloque.

[network number] [length] [block header] [block transactions]
[network number] [length] [block header] [block transactions]
[network number] [length] [block header] [block transactions]
... repeat for all blocks

Para crear un archivo de arranque, todo lo que necesita hacer es tomar los datos de blk00001.datsu último archivo de bloque (aquí está blk000054.dat) y ponerlos todos en el bootstrap.datarchivo, preferiblemente ordenados para que pueda importarlos todos de una sola vez. sin tener que intercambiar bloques.

Creo que incluso podría concatenar los archivos de bloque, ya que ya están en el formato correcto y el formato admite la concatenación.

No sabía de esta funcionalidad, me hace preguntarme cuál es el objetivo de estos archivos, ya que siempre puede descargar un archivo con todos los blkXXX.datarchivos y descomprimirlo en el directorio apropiado, obteniendo exactamente los mismos resultados excepto sin cambiar el nombre a ".old" en Los finales
Nota: este ya no es un método preferido. La concatenación de los archivos causará problemas con las ramas huérfanas. Vea la respuesta de Peter Josling a continuación.

Bitcoin Core contiene una herramienta para hacer esto correctamente (filtrando cualquier bloque huérfano, poniendo todo en el orden correcto, lo que funcionará mucho mejor que simplemente concatenar los archivos de bloque. Está documentado en su propio LÉAME, aquí: https://github .com/bitcoin/bitcoin/tree/master/contrib/linearize

En breve:

  1. Inicie Bitcoin con un rpcusery rpcpasswordconfigúrelo en su archivo de configuración, con la ubicación correcta según https://en.bitcoin.it/wiki/Running_Bitcoin#Bitcoin.conf_Configuration_File
  2. Consulta la fuente de Bitcoin desde Github y cdhasta contrib/linearize.
  3. Cópielo y actualícelo con sus example-linearize.cfgvalores / , junto con la altura máxima del bloque que desea generar ( ) y la ruta a su directorio de datos ( ), así como la ruta a su archivo de salida deseado ( ).linearize.cfgrpcuserrpcpasswordmax_heightinputoutput_file
  4. Ejecutar ./linearize-hashes.py linearize.cfg > hashlist.txtseguido de ./linearize-data.py linearize.cfg.
Después de pasar una GRAN cantidad de tiempo en este tema, la respuesta de Peter Josling necesita más votos a favor. Concatenar los archivos de un nodo sin desinfectarlos genera resultados inesperados, como que el cliente de sincronización salte a la descarga de la red después de detectar una rama huérfana. Mi representante no me permite comentar ni votar a favor, pero cualquiera que cree un archivo de arranque realmente debe ser consciente de las trampas de simplemente concatenar los archivos blk*.dat
en 2019 esta debería ser la respuesta correcta. Gracias

 Desde Mac

  1. terminal abierta
  2. Ve a la carpeta donde están los bloques. En este caso la carpeta de Bitcoin (es lo mismo para otras bifurcaciones de bitcoin)

    cd "Library/Application Support/Bitcoin/blocks/"
    
  3. Ejecute este código que concatenará todos los archivos blk. Asegúrese de incluir todos los bloques numerados que encuentre en la carpeta de su Bitcoin. En este caso hay 4

    cat blk000*.dat > bootstrap.dat
    
  4. Hecho.

Hacer su propio bootstrap.dat es bastante simple. En Windows, vaya a su símbolo del sistema y use el siguiente comando.

Copy /b blk00000.dat+blk00001.dat+blk00002.dat bootstrap.dat

Deberá continuar con los archivos + blk*.dat hasta llegar al último. Para facilitarle las cosas, simplemente ejecute un archivo por lotes que puede encargarse de agregarlos todos sin tener que ingresar cada archivo blk*.dat. Simplemente copie y pegue el código a continuación en un archivo de texto y asígnele un nombre similar a Create_Bootstrap.cmd y ejecútelo desde su carpeta /blocks.

@echo off 
setlocal enableDelayedExpansion 

set BITCOINDIR=%APPDATA%\bitcoin\blocks
for /F %%x in ('dir /B/D/ON %BITCOINDIR%\blk*.*') do (
  IF NOT [!B!] == [] set B=!B!+
  set FILENAME=%BITCOINDIR%\%%x
  set B=!B!"!FILENAME!"
)
copy /b %B% bootstrap.dat

o simplemente use "copiar /b blk*.dat bootstrap.dat"

Vaya a en.blockchaindownload.nl y descargue la descarga de cadena más reciente. En el sitio también hay una guía que te dice cómo funciona.

Simplemente coloque ese archivo en un USB y podrá usarlo una y otra vez. Es de uso gratuito y actualiza la descarga dos veces por semana. Utiliza torrents con 2 o 3 (dependiendo del torrent que elijas) webseeds para toda la velocidad que necesitas.

Es algo intuitivo qué archivos deben copiarse y dónde una vez que haya creado un nodo completo. Lo que no es tan intuitivo es cómo arrancar un nodo completo antes de haber construido su primer nodo completo. Primero necesita saber dónde deben colocarse los archivos para los distintos ' SO '. No estoy seguro de si hay problemas pequeños o grandes al copiar los archivos de nodo de Blockchain sin procesar entre diferentes sistemas operativos.

Otro enfoque es dejar que el protocolo maneje el problema. Los nodos secundarios y terciarios se construyen muy rápidamente si están en su propia LAN de gran ancho de banda. Simplemente apunte un nodo secundario (modificando su archivo bitcoind.conf) al nodo principal que ya está construido usando "connect=Your_IPv4_LAN_Address". Tales compilaciones se mueven muy rápido... Es posible que le resulte más rápido que escribir el libro mayor en una memoria USB y copiarlo en otra computadora.