Cadena más fuerte vs más larga y bloques huérfanos

Satoshi escribe en la parte inferior de la página 3 de su libro blanco que "Si dos nodos transmiten versiones diferentes del siguiente bloque simultáneamente, algunos nodos pueden recibir uno u otro primero. En ese caso, trabajan en el primero que recibieron, pero guarda la otra rama en caso de que se haga más larga". Aquí parece que la cadena correcta es la más larga, aunque tal vez satoshi solo estaba siendo un poco descuidado con las frases.

Sin embargo, he leído en otros lugares que los nodos eligen la cadena correcta en Bitcoin seleccionando la cadena que representa más trabajo (o, en otras palabras, la cadena que sería más difícil de deshacer). Llamaré a esto la cadena más fuerte. Esto no es necesariamente lo mismo que la cadena más larga ya que, por ejemplo, es concebible tener un bloque que requiera muchos más hashes para encontrar un nonce válido que otros dos bloques con un nivel de dificultad mucho más fácil. Este intercambio de pila es un lugar en el que he leído esto.

Pregunta 1 : ¿Cuál es el método correcto que usan los nodos para determinar la cadena correcta, la cadena más larga o la cadena más fuerte?

Mi segunda pregunta es más relevante si la respuesta a la pregunta 1 es que la cadena correcta es la cadena más fuerte. Se relaciona con bloques huérfanos.

Si la cadena correcta es la que representa más trabajo, ¿por qué los bloques huérfanos son un problema? Parece que si un nodo resuelve un bloque y lo transmite, todos lo sabrán en cuestión de segundos y luego podrán comenzar a extraer el nuevo bloque sin desperdiciar trabajo. Incluso si 2 mineros resuelven un bloque (casi) al mismo tiempo, la mayoría de los bloques verán los dos bloques nuevos y elegirán el que tiene el hash de encabezado más bajo (porque es más difícil encontrar hash más bajos). Parece que los nodos deberían llegar a un consenso en cuestión de segundos, si la cadena más fuerte (en lugar de la más larga) elige la cadena correcta. El único tiempo que un minero podría dedicar a trabajar en la cadena incorrecta sería el tiempo dedicado a la minería entre la recepción de un bloque resuelto que poco después se reemplaza por un bloque resuelto diferente con un hash ligeramente más bajo.

Pregunta 2 : ¿Son los bloques huérfanos un gran problema para los mineros? Si el tiempo de generación de bloques fuera de 1 minuto, en cambio, ¿los bloques huérfanos serían un problema mucho mayor?

Respuestas (1)

La cadena "más larga" es la que tiene más trabajo . El trabajo de una cadena es igual a la cantidad esperada de hashes que le tomaría a alguien replicar una cadena con la misma cantidad de bloques y exactamente los mismos pasos de dificultad. Por lo tanto, actualmente cada bloque agrega alrededor de 2 66 de trabajo a la cadena porque se necesitan en promedio ~2 66 hashes para resolver un bloque con la dificultad actual. Los bloques con menos dificultad agregan menos trabajo. (El trabajo total actual de la cadena es de alrededor de 2 80 ). Sin embargo, dos bloques en el mismo período de dificultad siempre agregan la misma cantidad de trabajo a la cadena. Un bloque con un hash más bajo no se considera mejor que uno con un hash más alto.

Satoshi inicialmente no se dio cuenta de que elegir la cadena correcta con solo contar bloques permite algunos ataques extremadamente fáciles. La versión 0.1 acaba de contar bloques. Es por eso que el papel solo dice "el más largo". La idea de "trabajo en cadena" se agregó un poco más tarde.

Resolver los huérfanos como sugieres podría hacer que los huérfanos sean más probables porque, en algunos casos, se incentivaría a los mineros a intentar reemplazar el bloque más reciente en lugar de extenderlo, especialmente justo antes de un gran ajuste de dificultad o cuando el bloque más reciente contiene muchas tarifas.

Los bloques huérfanos ocurren de vez en cuando. Eligius informa alrededor de un 2% de bloques huérfanos. De hecho, serían mucho más comunes si el tiempo objetivo fuera de 1 minuto, ya que los bloques se generarían más rápido y, por lo tanto, habría más oportunidades de conflictos entre bloques.

Aunque podría hacer que los huérfanos fueran más probables, ¿la elección de la cadena correcta de esta manera no minimizaría el efecto neto de los huérfanos? Porque, en este momento, si a alguien se le transmite un bloque que finalmente no será el bloque correcto, perderá los 10 minutos completos extrayendo ese bloque hasta que se resuelva el siguiente bloque. Parece que la red llegaría a un consenso más rápido y solo minaría en los bloques correctos.
En cuanto a los mineros que intentan deshacer bloques, parece que los mineros racionales no harían esto la mayor parte del tiempo. Cada nonce es como un boleto de lotería y si ven que sale un nuevo bloque, no puedo ver por qué seguirían gastando sus boletos de lotería en la minería en la parte superior del bloque anterior en lugar del nuevo que es más probable que sea aceptado. En esos dos casos que mencionaste, puedo ver por qué podrían tratar de deshacer el bloqueo más reciente (aunque las tarifas realmente no parecen ser un incentivo suficiente ahora), pero parecen excepciones en lugar de la regla para lo que sería ocurrir.
@ StephenM347 Su sistema también facilitaría los gastos dobles de los mineros poderosos. Actualmente, si tiene una parte decente del poder de minería y desea revertir una transacción de 1 confirmación, debe extraer dos bloques seguidos. Pero con su sistema, el minero podría simplemente reemplazar el último bloque, lo que en muchos casos sería mucho más fácil que resolver dos bloques seguidos (dependiendo de la "fuerza" del último bloque).
@ StephenM347 En cualquier caso, los huérfanos no son un gran problema para la red, por lo que no es necesario cambiar las cosas. A los mineros no les gustan los huérfanos porque les hace perder bloques o desperdiciar trabajo, pero hacer felices a los mineros no es importante.
¿Los ataques extremadamente fáciles que mencionas aquí se limitan al ataque de distorsión del tiempo? Incluso si el ataque de distorsión del tiempo no fuera un problema, ¿sería malo comparar cadenas según la longitud?
@ StephenM347 La distorsión del tiempo no es relevante. El ataque extremadamente fácil es que es más fácil crear 400.000 bloques de dificultad 1 que crear 1 bloque en la dificultad actual. Entonces, si solo importara la cantidad de bloques (y no hubiera puntos de control), la cadena actual podría superarse muy fácilmente.
Bueno, para minar 400 000 bloques en la dificultad mínima tendrías que alterar las marcas de tiempo para que estén muy lejos en el futuro (suponiendo que no puedas aprovechar la distorsión del tiempo), en cuyo caso la cadena no se aceptaría como la correcta. cadena. Creo que el ataque de distorsión temporal es relevante porque te permite extraer más bloques con la dificultad mínima sin empujar las marcas de tiempo hacia el futuro. Tengo una pregunta abierta sobre esto aquí .
Si la cadena "más larga" es la que tiene más trabajo y dos bloques en el mismo período de dificultad siempre agregan la misma cantidad de trabajo a la cadena, ¿por qué es incorrecto simplemente contar los bloques? ¿Qué ataques extremadamente fáciles permite?
Esta respuesta no define con precisión "trabajo". El trabajo de un bloque en realidad se define como piso (2 ^ 256 / (objetivo + 1)), donde 'objetivo' es el umbral objetivo convertido del campo 'nBits' del encabezado del bloque. (Consulte la función GetBlockProof en src/pow.cpp).
La historia fue muy interesante.