¿El nodo completo almacena todas las bifurcaciones válidas y bloques "alternativos" del historial de blockchain?

Las bifurcaciones son posibles cuando se extrae la cadena de bloques y ocurren "todo el tiempo" durante la minería.

Esto significa que los nodos que monitorean la cadena de bloques han registrado muchas bifurcaciones durante la vida útil de la cadena de bloques, con algunas de las ramas no principales de varios bloques.

¿Los nodos almacenan todas las ramas de todo el historial de blockchain?

EDITAR: Leí otra pregunta, y es lógico que el nodo devuelva las transacciones de la rama "alternativa" en la que estaban al grupo de memoria (o las descarte). Pero, ¿sucede esto al mismo tiempo cuando alguien les "muestra" una rama más larga, o de alguna manera mantienen las ramas alternativas?

Respuestas (1)

¿Los nodos almacenan todas las ramas de todo el historial de blockchain?

Almacenarán todas las ramas que conocen siempre que los encabezados de bloque de cada rama sean completamente válidos.

La forma en que funcionan los nodos de Bitcoin Core (y todo el software de nodo basado en Bitcoin Core) es que solicitarán recibir un encabezado de bloque antes de solicitar el bloque real. Usando los encabezados, el nodo construye una cadena de encabezados. Entonces, si un encabezado de bloque es válido (es decir, tiene una prueba de trabajo válida y se conecta a encabezados de bloque anteriores conocidos), se almacenará y agregará al estado de cadena. De esta manera, un nodo puede conocer y realizar un seguimiento de todas las ramas de la cadena de bloques sin tener el bloque en sí.

Incluso si una cadena de encabezados no tiene la mayor parte del trabajo, aún se mantendrá para siempre y se le hará un seguimiento. Aunque no se solicitarán bloques para esa cadena de encabezados, si algún par tiene esa cadena como su cadena de bloques real y los encabezados son completamente válidos, un par lo conocerá y se le hará un seguimiento.

Si una cadena de encabezados de repente comienza a tener encabezados de bloque no válidos, la cadena de encabezados válidos aún se mantendrá y rastreará; los encabezados inválidos que se extienden no lo serán.

Pero, ¿por qué haría un seguimiento de las ramas "obsoletas"? Es razonable rastrear solo el nodo de rama que se encuentra actualmente.
Porque esas "ramas obsoletas" son completamente válidas y podrían convertirse en la cadena principal algún día. Sin rastrear esas ramas, no podríamos reorganizarnos en la cadena con más trabajo en caso de que nos encontremos en una cadena con menos trabajo.
Pero el 99,99% de estas sucursales son inútiles. Y no necesitamos rastrearlos en absoluto. Si alguno de ellos finalmente se convierte en cadena principal, el nodo puede reconstruirlo completamente desde el punto en que divergió (y puede cambiarse a sí mismo).
No sabemos de qué punto se separó. Si está sugiriendo que construyamos la cadena solicitando los bloques a un par, entonces eso es fácilmente atacable por DoS.
No estoy de acuerdo. Le preguntas al compañero que proporcionó el nuevo bloque. Si él no proporciona nos detenemos. Sin DoS. Además, la situación es la misma que si nos quedáramos un par de cuadras desde su sucursal (o incluso la sucursal principal).
El ataque es que un par malicioso puede decirle continuamente que está usando una bifurcación diferente, lo que hace que solicite continuamente nuevos bloques que ocupan más espacio en disco, más CPU y RAM para la validación y más ancho de banda. No sabemos cuáles son las ramas, así que tendríamos que creer en la palabra de ese compañero y ver si sus ramas son correctas. Al rastrear todas las sucursales, no necesitamos hacer eso y sabemos cuáles son todas las sucursales y sus propinas actuales.