¿Qué es la sincronización "rápida" de Geth y por qué es más rápida?

Una de las respuestas a esta pregunta sugirió usar la bandera de Geth --fastpara ayudar a sincronizar rápidamente los datos del bloque.

¿Cómo funciona la bandera y cómo su uso acelera la sincronización? ¿Estamos sincronizando menos datos, o de alguna manera estamos realizando menos controles sobre su integridad o fuente?

Editar:

A partir de la versión 1.6.0 de Geth , la --fastbandera se ha vuelto --syncmode=fast(aunque --fasttambién se puede usar por ahora).

Respuestas (4)

Hay muchos detalles sobre este PR en github . Aquí hay una cita:

En lugar de procesar toda la cadena de bloques, un enlace a la vez, y reproducir todas las transacciones que alguna vez sucedieron en el historial, la sincronización rápida descarga los recibos de transacciones a lo largo de los bloques y extrae una base de datos de estado reciente completa.

¿Por qué no hacer que --fast sea el predeterminado?
Porque entonces pierdes el estado con eso. Los recibos solo dicen que estas acciones ocurrieron, en realidad no muestran los resultados de las ejecuciones.
@ VoR0220 perder el estado no es el problema real. El problema es que cuando habilitamos --fastpara cualquier momento, nos abrimos a ataques en los que un atacante tiene una ventana de tiempo infinita en la que puede atacar a la víctima al aceptar un encabezado válido pero con un estado no válido. Este problema también existe al ponerse al día desde cero, pero debido a cierta aleatorización podemos combatirlo fácilmente.
Así que @JeffreyW. ¿Estás diciendo que no deberíamos usar geth --fast por razones de seguridad? Estoy sincronizando geth con él en este momento y necesitaría saber si me estoy volviendo vulnerable a los piratas informáticos al hacerlo.
Sincronizar desde cero está bien, no eres vulnerable

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.

¿Cómo puedo obtener un nodo geth para descargar la cadena de bloques rápidamente? wiki ha sido actualizado. Esta respuesta se ha actualizado para aquellos que encuentran esto y tienen problemas para sincronizar.


Respuesta previa

Como --fastsuele ser lo único asociado con una sincronización rápida, no lo olvides --cachetambién.

De la Guía de Homestead:

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.

" fast" es el valor predeterminado para la --syncmodeclave

Es decir, que no hay diferencia entre usarlo --syncmode fasto no usarlo.

La información de https://github.com/ethereum/go-ethereum/wiki/command-line-options

--syncmode value      Blockchain sync mode ("fast", "full", or "light") (default: fast)
Esto ya no es cierto:Blockchain sync mode ("fast", "full", "snap" or "light") (default: snap)

De las preguntas frecuentes de Geth https://geth.ethereum.org/docs/faq

P. ¿Cómo funciona la sincronización de Ethereum?

R. El modo de sincronización predeterminado actual para Geth se llama sincronización rápida. En lugar de comenzar desde el bloque de génesis y reprocesar todas las transacciones que alguna vez ocurrieron (lo que podría llevar semanas), la sincronización rápida descarga los bloques y solo verifica la prueba de trabajo asociada. La descarga de todos los bloques es un procedimiento sencillo y rápido y volverá a ensamblar toda la cadena con relativa rapidez.

Muchas personas asumen erróneamente que debido a que tienen los bloques, están sincronizados. Desafortunadamente, este no es el caso, ya que no se ejecutó ninguna transacción, por lo que no tenemos ningún estado de cuenta disponible (es decir, saldos, nonces, código de contrato inteligente y datos). Estos deben descargarse por separado y cotejarse con los bloques más recientes. Esta fase se denomina descarga de prueba de estado y en realidad se ejecuta simultáneamente con las descargas de bloques; por desgracia, hoy en día lleva mucho más tiempo que descargar los bloques.

Entonces, ¿cuál es el intento de estado? En la red principal de Ethereum, ya hay un montón de cuentas, que rastrean el saldo, nonce, etc. de cada usuario/contrato. Sin embargo, las cuentas en sí son insuficientes para ejecutar un nodo, deben vincularse criptográficamente a cada bloque para que los nodos puedan verificar que las cuentas no están manipuladas. Esta vinculación criptográfica se realiza mediante la creación de una estructura de datos de árbol sobre las cuentas, cada nivel agregando la capa debajo de él en una capa cada vez más pequeña, hasta llegar a la raíz única. Esta gigantesca estructura de datos que contiene todas las cuentas y las pruebas criptográficas intermedias se denomina trie estatal.

Ok, entonces, ¿por qué esto representa un problema? Esta estructura de datos trie es una intrincada interconexión de cientos de millones de pequeñas pruebas criptográficas (nodos trie). Para tener realmente un nodo sincronizado, debe descargar todos los datos de la cuenta, así como todas las pequeñas pruebas criptográficas para verificar que nadie en la red esté tratando de engañarlo. Esto en sí ya es una cantidad increíble de elementos de datos. La parte en la que se vuelve aún más complicado es que estos datos se transforman constantemente: en cada bloque (15 s), se eliminan alrededor de 1000 nodos de este trie y se agregan alrededor de 2000 nuevos. Esto significa que su nodo necesita sincronizar un conjunto de datos que cambia 200 veces por segundo. La peor parte es que mientras sincroniza, la red avanza y el estado de que comenzó a descargar podría desaparecer mientras está descargando, por lo tanto, su nodo debe seguir constantemente la red mientras intenta recopilar todos los datos recientes. Pero hasta que realmente recopile todos los datos, su nodo local no se puede utilizar, ya que no puede probar criptográficamente nada sobre ninguna cuenta.

Si ve que está 64 bloques detrás de mainnet, aún no está sincronizado, ni siquiera cerca. Acaba de terminar la fase de descarga de bloques y aún ejecuta las descargas de estado. Puede verlo usted mismo a través del aparentemente interminable flujo de registros [...] de entradas de estado importado. Tendrá que esperar eso también antes de que su nodo esté realmente en línea.


Lea el resto de las preguntas frecuentes para obtener más respuestas como:

P: ¿El nodo simplemente se cuelga en la importación de entidades estatales?

P: ¿Estoy atascado a 64 bloques detrás de la red principal?

P: ¿Por qué la descarga del estado tarda tanto, tengo un buen ancho de banda?

P: Espere, ¿entonces no puedo ejecutar un nodo completo en un HDD?