¿Es posible agregar un bloque válido a uno no válido y que otro cliente lo acepte?

Esta página wiki dice que los bloques no válidos no se cuentan para determinar la longitud de la cadena y eso me hace querer entender cómo se tratan los bloques no válidos.

  • ¿Se puede agregar un bloque válido a uno no válido... y que sea aceptado por uno o más clientes?

Si es así...

  • ¿Los mineros de bloques inválidos reciben una recompensa por el bloque? ¿Son válidos los Tx? ¿Hay algún ejemplo?

Supongamos que se crea un bloque no válido y se agrega un bloque válido a ese no válido. Ambos bloques se agregan a la cadena primaria. (suponga que el atacante tiene un 25% de cómputo y tiene un cliente personalizado que envía ambas transacciones a todos los pares)

  • Dado que cada bloque tiene una recompensa, ¿se cuenta la recompensa en el bloque no válido?

  • ¿Se siguen considerando válidas las transacciones dentro de un bloque no válido?

Estoy interesado en rastrear las transacciones que ocurren a partir de estos bloques "rotos" y ver si mi cliente codificado a mano procesa las transacciones correctamente.

Por definición, un bloque solo es válido si se agrega a un bloque válido. Por lo tanto, es imposible agregar uno válido a uno no válido. Lo siento, no puedo ir contigo en eso...
@HighlyIrregular Actualicé el escenario con detalles. Según el wiki, los clientes aceptarán bloques no válidos pero no los retransmitirán. Si un atacante crea y transmite ambos bloques... ¿qué sucede? Se necesita menos del 51% de la CPU para que esto suceda.
@makerofthings7 Los clientes no aceptan bloques no válidos.
Para que conste, sigo pensando que esta es una buena pregunta, incluso si las suposiciones subyacentes resultan ser incorrectas, por lo que la he votado a favor. Sin embargo, una mejor pregunta podría ser "¿Es posible agregar un bloque válido a uno no válido y que otro cliente lo acepte?"
@HighlyIrregular Revised... Me estaba adelantando.

Respuestas (2)

Como cada Cliente verifica cada bloque que recibe y rechaza cada Bloque que no es válido, es poco probable que ocurra esta situación. Sin embargo, si por casualidad se propagara algún Bloque inválido (como en el caso de un error de desbordamiento de valor , o tal vez al ser propagado por algunos Clientes alternativos que no siguen el Protocolo al pie de la letra), eventualmente sería eliminado del Bloque. historia y dejar huérfanos todos los Bloques adjuntos. Alternativamente, el Protocolo podría cambiar para adaptarse al Bloque, pero eso es mucho menos probable que suceda.

Cuando una parte de la cadena de bloques se vuelva inválida, todas las transacciones contenidas en ella se volverán a evaluar: las transacciones de generación de monedas se descartarán, todas las transacciones que gasten sus salidas también se invalidarán y todas las demás transacciones que aún son válidas se agregarán. de vuelta al grupo de Transacciones que se agregarán a Bloques futuros. Lo mismo sucedería en caso de que algunos Bloques se sobrescribieran con una Cadena de Bloques más larga.

En general, un Bloque inválido que se acepta como válido y tiene Bloques válidos agregados a la Cadena después de que es un error. Tales casos han ocurrido en el pasado al menos una vez, y el resultado ha sido corregir el error y borrar el Bloque no válido junto con todos los demás Bloques adjuntos. Todas las Transacciones normales de esos Bloques tendrían que agregarse nuevamente a los Bloques recién creados y cualquier Transacción de generación de monedas sería invalidada.

Con el cliente Bitcoin.org, el nodo acepta un bloque solo después de que ninguno de los pasos de verificación falla.

Cada bloque en la cadena de bloque * está vinculado a un bloque anterior con una referencia al hash de ese bloque anterior.

Tomemos el caso en el que un nodo ve que la cadena más larga termina en la altura 1000. Luego recibe un bloque 1.001. Luego, el cliente verificará que el hash que proporciona el bloque para el bloque 1000 realmente coincida con el hash que el cliente ya conoce (de la cadena más larga) para el bloque 1000. No coincidirá, por lo que este 1001 no se extiende fuera del bloque 1000 que el cliente ya conoce.

Y dado que el cliente no tiene conocimiento de ningún otro bloque 1000 con ese hash del que 10001 pretende extenderse, el cliente no aceptará el bloque 1001; no hay ningún vínculo que lo vincule a ningún bloque recibido previamente.