¿Cómo puedo obtener un nodo geth para descargar la cadena de bloques rápidamente?

Estoy ejecutando un nodo geth en hardware lento. Al ritmo actual de progreso, podrían pasar varios días antes de que pueda descargar toda la cadena de bloques. ¿Hay alguna forma de que se sincronice más rápido?

Respuestas (5)

No olvides usar un SSD

Si puede, usar un SSD NVMe es aún mejor.

Si tiene espacio limitado en SSD, consulte ¿Se pueden dividir los datos de cadena en dos (o más) ubicaciones?

Dicho esto, el estado de Ethereum es grande y cada vez más grande. Ten paciencia y valdrá la pena.


Respuesta previa

no olvides--cache

Todos mencionan --fastpero probablemente también necesites--cache=1024 . Sin él, está ejecutando con el valor predeterminado que es --cache=128(Geth 1.6.7).

Es posible un aumento de velocidad del 50% simplemente aumentando el caché.

Si está comenzando desde el principio, use:geth --fast --cache=1024

Si ya tiene algo de blockchain, use:geth --cache=1024

Dependiendo de su RAM, también puede probar con valores más altos, como --cache=2048.

Fuente

Si está utilizando el cliente geth, hay algunas cosas que puede hacer para acelerar el tiempo que lleva descargar la cadena de bloques de Ethereum. Si elige usar el indicador --fast para realizar una sincronización rápida de Ethereum, no conservará los datos de transacciones anteriores.

Nota

No puede usar este indicador después de realizar toda o parte de una operación de sincronización normal, lo que significa que no debe descargar ninguna parte de la cadena de bloques de Ethereum antes de usar este comando. Consulte esta respuesta de Ethereum Stack.Exchange para obtener más información.

A continuación se muestran algunas banderas para usar cuando desee sincronizar su cliente más rápidamente.

--rápido

Este indicador permite una sincronización rápida a través de descargas de estado en lugar de descargar los datos del bloque completo. Esto también reducirá drásticamente el tamaño de su cadena de bloques. NOTA: --fast solo se puede ejecutar si está sincronizando su cadena de bloques desde cero y solo la primera vez que descarga la cadena de bloques por razones de seguridad. Consulte esta publicación de Reddit para obtener más información.

--caché=1024

Megabytes de memoria asignados al almacenamiento en caché interno (mínimo 16 MB / base de datos forzada). El valor predeterminado es 16 MB, por lo que aumentarlo a 256, 512, 1024 (1 GB) o 2048 (2 GB) según la cantidad de RAM que tenga su computadora debería marcar la diferencia.

Desde la versión 1.6.0 de Geth, el uso de la bandera --fast ha quedado obsoleto, ahora debe usar --syncmode=fast
@BarneyChambers, blockwala y otros: Gracias. Esto también se ha convertido en un wiki para que sea más fácil para cualquier persona actualizarlo.
Si alguien hace referencia a esto en el año de Corona, el modo de sincronización predeterminado ahora es fast, y el valor predeterminado cachees 1024.

La --fastopción de línea de comando se sincronizará más rápidamente. Sin embargo, debe usarlo desde cero, no puede usarlo si la cadena de bloques ya se ha descargado. Si tiene un nodo que ya está sincronizado, puede usar la interfaz de Javascript y los comandos exportChain e importChain para sincronizar su nodo.

Porque --fastdebe hacerse antes de que se haya sincronizado nada.
geth removeb se puede usar para destruir la base de datos. No debería afectar el almacén de claves, pero primero haga una copia de seguridad del directorio de datos de todos modos
En mi caso, -fast parece no tener consecuencias y geth se queja: I0508 13:29:49.476026 30960 handler.go:92] la cadena de bloques no está vacía, la sincronización rápida está deshabilitada
¿Has hecho geth removeb para vaciar la base de datos?
¿Hay algún torrent oficial o similar con una cadena actualizada para importar rápidamente?
@paulmorriss Espero que no le importe que esto se haya convertido en un wiki con la esperanza de que sea más fácil para la comunidad mantenerse actualizado. Para compensar la posible pérdida de un representante, puedo ofrecer una recompensa por una pregunta existente o nueva de su elección.

Hay 2 formas de usar geth, que yo sepa

1. sincronizar con el--fast que puede comenzar con geth --fastel que permite la sincronización rápida a través de descargas de estado

2. use importel comando en geth para hacer esto, necesita una cadena de bloques ya sincronizada de geth y debe exportarse con geth export filename, que se puede importar ageth import filename

Para sincronizar geth de la manera más rápida, recomiendo usar geth 1.4.6. Las versiones anteriores son mucho más lentas.

Spoiler : la sincronización de HDD es muy lenta.

Hay dos modos de sincronización:

  • geth --fast --cache 1024 --jitvm: este método es muy rápido en una computadora potente (25 minutos en mi sistema i7 quad core 16Go, SSD y Gbit/s de ancho de banda). Usa 4.5GB en disco
  • geth --cache 1024 --jitvm: este método es más lento (3h en mi sistema i7 quad core 16Go, SSD y Gbit/s de ancho de banda). Utiliza 21GB en disco

Consejo 1 : si ya tiene un geth sincronizado en una computadora, puede hacer una copia de seguridad del directorio chaindata y copiarlo para otra computadora. Compruebo OS X, Linux y Windows (todos en versión de 64 bits).

Consejo 2 : el método de exportación/importación funciona. La duración de la importación es muy larga porque verifica todas las transacciones.

Consejo 3 : si tiene suficiente RAM y no tiene SSD, use su RAM como ramdisk y seleccione su ramdisk con la opción --datadir. Necesita 4,2 GB para una sincronización rápida. Cuando se complete la sincronización, copie los datos de la cadena del directorio en su lugar original:

  • ~/.ethereum en linux
  • ~/Biblioteca/Ethereum en os x
  • %APPDATA%\Ethereum en Windows

Hice muchos puntos de referencia en diferentes versiones para esta pregunta: ¿Cuánto más rápido es sincronizar con --jitvm?

Nota 1: si usa un HDD, parece que la sincronización es más lenta. El método rápido fue de 4 horas en mi sistema.

Nota 2: RAMDiskCreator en OS X es un programa gratuito para crear un disco RAM.

Las opciones de jitvm y caché tienen un impacto menor en mi banco

en Geth 1.7.3, --fastestá en desuso y --jitvmse elimina. ¿Necesitamos banderas alternativas?
--fastse reemplaza por , por lo --syncmode fastque no está realmente en desuso para usarlo, solo necesita convertirlo al nuevo parámetro.

3. sincronice en una máquina rápida y copie el directorio chaindata a su máquina lenta Chaindata es portátil entre arquitecturas. Entonces, sincronice, detenga el nodo limpiamente, transfiera el directorio chaindata (reemplazando el anterior) e inicie el nodo en otra máquina. Para minimizar el riesgo, use versiones idénticas de geth en ambas máquinas. (Hice esto para x86_64 -> armv7h con éxito con Geth 1.4.5, otros también lo hicieron ).