Digamos que la cadena de bloques válida que tiene el Nodo A es:B1->B2->B3
Ahora, voy a hacer trampa ya que tengo mucho poder de cómputo. Lo que hago es descargar la cadena de bloques anterior que tiene el Nodo A y comenzar a hacer trampa. Antes de hacer eso, hago una transacción para comprar una moto. entonces, la cadena de bloques válida ahora se ve así ( B1->B2->B3->B4
). B4
tiene mis transacciones de bicicletas. En mi copia local, no puse esa transacción. Ahora, como quiero tener una cadena más larga, trabajo muy rápido y digamos que después de un tiempo, la cadena del Nodo A y la mía se ven así:
Nodo A -B1->B2->B3->B4->B5
Mío -B1->B2->B3->O1->O2->O3->O4
Ahora, quiero transmitir mi cadena.
¿Qué transmito? Toda la cadena ( B1->B2->B3->O1->O2->O3->O4
) o solo O1->O2->O3->O4
?
A) Si solo transmito O1->O2->O3->O4
, ¿cómo se da cuenta el nodo A de que B4->B5
solo tiene que eliminarlo de su cadena y O1->O2->O3->O4
agregarlo B3
? ¿Obtiene primero O1
el hash anterior y luego en su cadena de bloques local, busca el bloque con ese hash y si encuentra ese hash, elimina cada bloque después de él y agrega el recién copiado O1->O2->O3->O4
de mi cadena? Si es así, también tendría en cuenta si el nuevo es el más largo (por lo que el recuento de las eliminaciones de los bloques debe ser menor que el recuento de los nuevos bloques copiados). ¿Estoy en lo correcto?
B) por supuesto, la transmisión de toda la cadena está fuera de discusión ya que es tan grande.
Un ataque que intenta superar el poder de minería de toda la red por sí mismo se denomina ataque mayoritario o "ataque del 51 %". Concretamente, su ejemplo es un ataque de doble gasto mediante un ataque mayoritario. Cuando el atacante publica su sugerencia de cadena, cada nodo realiza una reorganización de la cadena para cambiar a la mejor cadena.
Concretamente, los bloques B4
y O1
ambos comparten el hash de B3
como su prevHash
. Una vez que el atacante anuncie los bloques O1->O2->O3->O4
, otros nodos notarán que esta punta de cadena tiene más trabajo total, encontrarán el último ancestro compartido en la cadena de bloques ( B3
), revertirán todos los bloques hasta el ancestro compartido y luego aplicarán los nuevos bloques para converger en la mejor punta de cadena.
Una reorganización de cadena y bifurcación de blockchain también puede ocurrir de manera benigna cuando dos mineros encuentran un bloque en el mismo momento. En ese punto, los nodos de la red se dividen en opinión de cuál es la mejor cadena, ya que cada nodo considera que el bloque que vio primero es el correcto. Una vez que otro bloque extiende uno de los dos extremos de la cadena, la red converge en la mejor cadena a medida que los nodos se enteran del nuevo bloque.