¿Cómo garantiza el protocolo BTC que emerge una cadena de bloques "principal"?

Estoy leyendo sobre la tecnología bitcoin/blockchain. Por lo general, la parte sobre la prueba de trabajo y cómo crear un bloque está bien explicada. Sin embargo, lo que nunca se explica es cómo/por qué la comunicación de bloques a través de la red permite la convergencia de una 'cadena de bloques'.

Déjame explicarte: ¿qué pasa si dos mineros crean un nuevo bloque al mismo tiempo y lo transmiten al mismo tiempo? Aproximadamente el 50% de los nodos tendrían cada uno un bloque nuevo (diferente) y se basarían en él. Ahora, imagine que esto sucede de nuevo, etc. Entonces, no hay una sola cadena de bloques en la que se trabaje, ya que ahora todos los mineros trabajan en varias bifurcaciones. La propuesta de bitcoin aborda esto diciendo que se debe usar la cadena más larga pero:

  • en un momento dado podría haber dos cadenas bifurcadas con el mismo tamaño y creciendo aproximadamente al mismo ritmo
  • saber qué cadena es la más larga requiere "retroceder" posiblemente hasta el principio, lo que significa que no se puede "validar" ninguna transacción en ninguna cadena, ya que no estamos seguros de estar en la cadena correcta

¿Estos problemas son abordados por el protocolo bitcoin? Básicamente, parece que no hay pruebas de que agregar bloques de forma distribuida en la red converja limpiamente en una sola cadena.

Usted dice, "en un momento dado podría haber 2 cadenas bifurcadas con el mismo tamaño y creciendo aproximadamente al mismo ritmo". Pero "aproximadamente" no es "exactamente": en promedio, si la dificultad de la cadena está bien configurada y un bloque tarda unos diez minutos en extraerse, dos cadenas paralelas tendrán unos cinco minutos entre sus dos descubrimientos del siguiente bloque. Son edades en el tiempo de la computadora, lo suficientemente fácil como para que la cadena más larga se comunique con toda la red y tenga cuatro minutos de sobra.
@DanielWagner, ¿por qué necesariamente estarían separados por 5 minutos? ¿Podrían estar separados por milisegundos y luego una espera de 10 minutos?
@Tim No es necesariamente con 5 minutos de diferencia. Son cinco minutos de diferencia en promedio, como dije.

Respuestas (2)

Los nodos de Bitcoin consideran que la cadena con la mayor cantidad de pruebas de trabajo acumuladas es la mejor cadena. Cada vez que una punta de la cadena avanza agregando otro bloque, todos los nodos se reorganizarán en esa punta de la cadena tan pronto como se enteren.

Otra razón para que la red converja rápidamente en una mejor cadena se deriva de cómo se les paga a los mineros de Bitcoin. Cuando los mineros construyen sus plantillas de bloques, cada una incluye una transacción de base de monedas únicaque paga la recompensa del bloque a sí mismos. Esto significa que encontrar un bloque válido da como resultado que el autor del bloque se pague a sí mismo la recompensa del bloque a través de la transacción de base de monedas que incluyeron. Sin embargo, las salidas de las transacciones de base de monedas están sujetas a un período de maduración de 100 confirmaciones. Esto significa que solo se pueden gastar bloques que generen al menos 99 sucesores. Básicamente, esto significa que una recompensa por bloque solo se paga cuando un bloque se convierte en parte de la mejor cadena. Como las operaciones mineras incurren en grandes gastos de hardware y energía independientemente del éxito, los mineros pierden dinero cuando trabajan en bloques que no terminan en la mejor cadena. Por lo tanto, incluso cuando ocasionalmente dos mineros encuentran bloques al mismo tiempo y producen dos puntas de cadena competidoras, incluso el "perdedor"

Si bien los esfuerzos mineros individuales no están coordinados de manera centralizada, es poco común que dos bloques en competencia se encuentren a la misma altura: solo ocurre una vez al mes. La minería de Bitcoin es un proceso de Poisson que tiene como objetivo producir aproximadamente un bloque cada diez minutos. La cadencia está regulada por los ajustes de dificultad que ocurren cada 2016 bloques, que restablecen el objetivo de dificultad de modo que se espera que los próximos bloques de 2016 tomen 14 días bajo el supuesto de que la red continúa produciendo la misma cantidad de hashrate que se observó en la época anterior. .

Gracias, creo que entiendo. Pero parece que esto básicamente supone que habrá una rama 'principal' y 2 subcadenas con 1 o 2 bloques sobresalientes cada una. En esta configuración, de hecho, es sencillo identificar qué cadena debe ser la "principal" marcando la más larga. Mi pregunta inicial fue más sobre la posibilidad (teórica) de que los nuevos bloques se extraigan tan rápido de una manera caótica que nadie pueda realmente ponerse de acuerdo sobre dónde está la cadena principal. Básicamente, si, desde el bloque inicial, siempre hay 10 minas de nodos siguientes diferentes y sigue ramificándose en todas las direcciones
Si los bloques se encuentran muy rápido, la dificultad aumenta hasta que la cadencia vuelve a ser de aproximadamente un bloque cada diez minutos. Por lo tanto, es poco probable que ocurra por casualidad un escenario en el que se encuentren numerosos puntas de cadena en competencia y sería muy costoso para los mineros lograrlo a propósito.
@lezebulon En general, 10 minutos es sustancialmente más de lo que se tarda en anunciar un nuevo bloque, por lo que el período caótico es corto en comparación con el período de estado estable en el que no aparecen nuevos bloques de repente. Sin embargo, en las cadenas de bloques infantiles, existen preocupaciones reales sobre lo que sucede cuando un actor malicioso de repente compra una gran cantidad de tiempo de AWS y crea un montón de bloques muy rápido (porque tenían una gran fracción del tiempo total de CPU de minería). Bitcoin es grande, con muchos mineros, por lo que es poco probable que suceda... pero teóricamente es posible.
Se puede dejar que el usuario individual de bitcoin decida si el riesgo de un ataque tan exitoso es suficiente para cuestionar el sistema bitcoin.

Ahora imagina que esto sucede de nuevo, etc.

Para que las dos cadenas permanezcan uniformes, los nuevos bloques tendrían que encontrarse repetidamente exactamente al mismo tiempo. Cada vez es menos probable que esto suceda repetidamente.

La probabilidad depende del intervalo del bloque, que está regulado en 10 minutos, y de la rapidez con la que se propagan los anuncios de nuevos bloques en la red.

Actualmente, la red bitcoin ve bloques obsoletos aproximadamente una vez en 10 000 bloques. Dos mineros que obtienen un bloque al mismo tiempo es un evento aleatorio e independiente, por lo que podemos calcular que tener dos puntas de cadena con 2 bloques únicos cada uno sería una probabilidad de 1 en 100 millones. Con un intervalo de bloque de 10 minutos, esto ocurriría en promedio una vez cada 2 000 años.

Antes de Bitcoin Core 0.10.0 de 2015, la propagación de la red era más lenta y la tasa de bloques obsoletos estaba más cerca de 1 en 100. Pero incluso entonces, obtener una cadena obsoleta de 3 bloques solo ocurriría una vez cada 20 años. Lo mejor para los mineros es acelerar la propagación de bloques y, como tales, los bloques obsoletos son una ocurrencia mucho menos común.

ok entiendo eso, gracias. Lo que más me preocupa en esta situación es que la propia red comience a fallar o entregue bloques de forma incorrecta. Parece que esto se basa en la suposición de que la capa de transporte HTTP funciona correctamente y que la información siempre termina propagándose lo suficientemente rápido.
@lezebulon Puede suponer una situación en la que la red se divide por completo debido a algún problema importante de tráfico de Internet. En ese caso, una bifurcación es inevitable porque no hay comunicación entre las mitades.
Tuvimos una bifurcación de dos cuadras en noviembre y no fue la primera. Creo que una vez cada 2000 años suena un poco optimista. :)