¿Por qué son necesarios los bits de encabezado de bloque? (La dificultad válida ya está implícita en el historial de la cadena)

La dificultad o el objetivo están implícitos en el historial de la cadena, entonces, ¿por qué debe ser explícito en el encabezado? Supongo que expone la dificultad prevista por el minero, pero no veo por qué eso sería relevante sin el contexto de la cadena.

Entonces, aparentemente representa datos redundantes en el encabezado, a menos que haya razones históricas para esta elección de diseño.

Entonces, hay otras preguntas/respuestas de SE que implican que esto fue histórico. Pero, para empezar, ¿cuál era el propósito de los bits de encabezado? ¿Fue un descuido?
Si, gracias. Todavía me confunde. SPV aún necesita validar la cadena de encabezados desde génesis, incluso si no se almacenan todos los encabezados, por lo que la dificultad se puede calcular a partir del historial de la cadena de encabezados. No se requieren puntas.
De acuerdo. (En general, es bueno si puede incluir enlaces a preguntas relevantes que ya haya visto, para evitar sugerencias redundantes :-). Estoy de acuerdo en que tampoco puedo ver ninguna razón por la que sea particularmente necesario. Es muy posible que fuera solo por conveniencia / pereza por parte de Satoshi, ya que era más fácil que tener el nodo almacenando los datos en otro lugar, o simplemente no lo pensó todo. Lamentablemente no podemos preguntarle.
Gracias. Quise decir que su enlace era nuevo para mí, no que ya lo había visto, ¡fue útil! No lo tenía claro.

Respuestas (2)

No son realmente necesarios. La razón por la que están incluidos solo puede ser conocida por Satoshi, y AFAIK, no dijo por qué eligió incluir nBits en el encabezado del bloque (o muchas otras cosas que son simplemente arbitrarias). Esta es una de las muchas cosas que Satoshi eligió hacer y nadie sabe realmente por qué. Permanece en el encabezado del bloque hoy porque eliminarlo requeriría una bifurcación dura y realmente no se obtiene mucho beneficio al eliminarlo.

El campo nBits puede ser útil, y es probable que se haya incluido como una especie de conveniencia. En lugar de tener que tener el historial completo de la cadena para conocer la dificultad actual, puede mirar los nBits. Pero eso es solo especulación, y los nodos completos no usan los nBits para determinar la dificultad actual (excepto los del bloque génesis).

La confirmación directa de los nbits le permite determinar cuánto trabajo se usó para producir el encabezado sin estado antes de buscar (o recuperar) información sobre encabezados anteriores.

Esto puede ayudar a defenderse de los ataques de DOS que envían encabezados no deseados para obligarlo a trabajar para determinar o buscar a sus ancestros.

Una heurística para la prevención de DoS que hizo uso de esto existía en Bitcoin Core antes de la introducción de la sincronización de encabezados primero. En este momento, no creo que se use para nada en Core.
Claro, nos permite verificar si el PoW coincide con la dificultad de los encabezados sin contexto. Pero un atacante podría reclamar cualquier valor en ese punto, y solo lo detectaríamos en la validación contextual. No creo que esto impida ningún ataque significativo.
CheckProofOfWork también comprueba que nbits es al menos el mínimo. En su lugar, podría verificar el 'trabajo aparente', lo que sería casi tan bueno, pero podría, por ejemplo, inundar con "acciones de la suerte" de un hipoético 1 bloque por segundo diff = 0.1 altcoin. Entonces es diferente, aunque no de una manera importante.
Ok, pero podría hacerlo sin nBits explícitos.
¡Gracias por sus respuestas! Muy útil para mi comprensión histórica de nbits.