¿Bitcoin seguiría funcionando sin una dificultad objetivo?

Supongamos que los nodos de Bitcoin no tienen ninguna dificultad de destino y, en cambio, solo aceptan el bloque con el PoW más grande cada 10 minutos. Ignorando el aumento del ancho de banda (dado que los nodos estarían transmitiendo varios candidatos de bloque), ¿funcionaría esto? ¿O hay alguna necesidad técnica de una dificultad objetivo ajustable?

Editar: para aclarar, quise decir que se aceptan todos los bloques, pero solo la cadena con el mayor trabajo acumulado se considera canónica. Es decir, si hay un bloque débil hace días y extraes un bloque con una puntuación más alta, ese bloque débil no se vuelve inválido. Debe reemplazar cada bloque encima si desea reescribir la historia hasta ese punto. Es decir, es lo mismo que Bitcoin, sin dificultad objetivo. Los nodos simplemente aceptan todos los bloques y calculan el mejor bloque sumando el trabajo acumulado de cada sugerencia de candidato.

Tengo 3 excelentes respuestas, ¡gracias! Pero, lamentablemente, todavía no veo cómo se requiere una dificultad objetivo para el consenso. Por alguna razón, está insinuando que, sin una dificultad objetivo, necesitaríamos un coordinador central para el consenso. Pero eso no parece ser cierto: mientras los nodos recopilen bloques y calculen la cadena con el trabajo más acumulado, llegarán a un consenso con la cadena canónica. Sí, debemos asumir que podemos obtener los datos de pares no maliciosos, ¡pero Bitcoin también asume eso!
¿Qué es un "PoW más grande"? La cantidad de trabajo realizado en un bloque para hacer hash es prácticamente la misma que cualquier otro bloque, entonces, ¿cómo afirma que el trabajo realizado es mayor para esto que para eso?
Por el valor del hash del bloque. Puede asignar una puntuación de bloque como 1 / block_hash, que es una estimación de cuántos nonces se intentaron para hacer este bloque. Luego, la suma de todos los hashes de bloque hasta la raíz es la puntuación de esta cadena específica. Los nodos solo reciben bloques y seleccionan la cadena con mayor puntaje.
¿Cuántos nonces se intentaron para hacer este bloque ? ¿Qué?
Es una oración simple. ¿Qué parte te cuesta entender?
La parte en la que afirmó que el valor de hash de un bloque está relacionado de alguna manera con la cantidad de nonces que se intentaron para realizar un hash que es más pequeño que la dificultad. Un minero puede tener suerte y empacar un bloque que tiene un hash más bajo que la dificultad en el primer intento, o puede tener mala suerte y masticar mil millones de variaciones de bloques antes de lograr lo mismo.
¡Buena pregunta! Resulta que está relacionado, estadísticamente. Por supuesto, no puede determinar cuántos nonces se intentaron realmente para producir un bloque específico, ya que, como ha notado, un minero afortunado podría obtener un hash muy bajo en el primer intento. Pero es posible estimar , tenga en cuenta la palabra clave. Por ejemplo, si los primeros 4 bits de un hash son 0, puede suponer que se necesitaron al menos 16 hash para producirlo. Por supuesto, ese puede no ser el caso para un bloque específico, pero, en promedio, esta estadística se mantiene. ¿Tiene sentido?
El bitcoin actual no agrega el trabajo acumulado (estimado) para elegir una cadena, sino que solo cuenta la longitud de la cadena. Funciona como un sustituto fácil del trabajo acumulado, porque casi todos los bloques están cerca de la dificultad objetivo. En su esquema, se debe implementar la estimación del trabajo real, pero a primera vista, también podría funcionar.
Oh, no lo sabía, pero tiene sentido que BTC no necesite sumar el trabajo como lo describo.
@MichaelKarcher: Bitcoin busca la punta de la cadena con más trabajo: github.com/bitcoin/bitcoin/blob/… . El lanzamiento original tenía el error de que solo comparaba la longitud, pero esto habría permitido ataques de reorganización de baja dificultad y largo alcance y se solucionó hace muchos años.

Respuestas (4)

No es trivial a) acordar el tiempo en un sistema distribuido, especialmente cuánto tiempo ha pasado entre dos eventos, b) establecer cuándo se encontró exactamente un candidato a bloque. Además, cuando un nodo se pone al día con la punta de la cadena después de estar fuera de línea, no tiene ningún medio para determinar si realmente se encontró un bloque dentro del período de tiempo asignado.

Así que ahora, en lugar de que alguien encuentre un bloque y lo anuncie, necesitamos enviar muchos más datos y luego ejecutar algún tipo de algoritmo de consenso para acordar si los candidatos se enviaron a tiempo.


Pero, lamentablemente, todavía no veo cómo se requiere una dificultad objetivo para el consenso.

Sin dificultad, se vuelve subjetivo si se ha encontrado el siguiente bloque porque el criterio ya no es binario. Si cualquier dificultad es aceptable, estaríamos encontrando miles de millones de bloques en cada momento. Digamos que todos estos anuncios de bloque caen en cascada a través de la red. Cada nodo ahora recibe múltiples anuncios y realiza una validación de bloque innecesaria, incluso si solo envían el mejor bloque que han visto hasta ahora a la altura dada. ¿Cómo saben los mineros cuándo deben cambiar a la siguiente altura? ¿Cómo saben que ya han visto el mejor bloque en la altura? Las reorganizaciones estarían ocurriendo todo el tiempo. Si los mineros cambian constantemente el bloque anterior de sus plantillas de bloques para actualizar al estado más reciente, estarán minando casi por completo candidatos a bloques que no serán compatibles con la mejor cadena final. La mayor parte de la prueba de trabajo se desperdiciaría por completo y no contribuiría en absoluto a la seguridad de la red. Además, la carga de ancho de banda en la red aumentaría drásticamente para chismear todos los bloques.

Especialmente los mineros con mayores proporciones del poder de hash ahora tienen todo tipo de ángulos adicionales para atacar el bloque anterior en lugar de avanzar, por ejemplo, la minería egoísta y los ataques de Finney se vuelven más fáciles. Deshacerse de la dificultad obstaculizaría el progreso de la cadena de bloques y haría que incluso las confirmaciones múltiples no fueran confiables.

¿Por qué PoW no es suficiente para ese consenso? Siempre que los nodos tengan un reloj aproximadamente sincronizado, la hora en que se extrajo un bloque podría calcularse mediante genesis_time + 10 mins * block_count. Los nodos simplemente transmiten bloques como de costumbre y eligen la cadena con el trabajo más grande.
Supongamos que soy un minero y veo que el PoW en los últimos diez minutos fue bastante bajo, así que sigo minando un poco y modifico la marca de tiempo en mis candidatos de bloque. Cuando encuentro un bloque con un PoW más alto, lo anuncio a la red. ¿Cómo se distingue si mi candidato a bloque se encontró a tiempo o no?
Si cada nodo decide por sí mismo, ahora tiene una excelente manera de dividir la red. Si los nodos deciden juntos, necesita un algoritmo de consenso.
y si lo organiza para que cada nodo decida por sí mismo pero todos decidan de la misma manera, ese es un algoritmo de consenso
¿Cómo propone aplicar el "mejor bloqueo en un lapso de tiempo de diez minutos" sin marcas de tiempo?
@Murch no hay marca de tiempo. Pero sí, podrías "re-minar" bloques viejos si quisieras. Pero aún debe proporcionar todos los bloques más nuevos, con más trabajo acumulado, para que se acepte. Volver a extraer bloques lo suficientemente antiguos sería inviable, por lo que, en última instancia, los nodos llegan a un consenso con respecto a la cadena canónica, exactamente como en Bitcoin, ¿no? Lo que digo es: todavía no veo por qué se requiere una dificultad objetivo, en lugar de simplemente recolectar bloques y calcular la cadena más grande, para eso.
@MaiaVictor: Si tuviera un ataque sólido en SHA-256, preferiría anunciarlo revirtiendo las transacciones de ransomware de esa manera.
Si no tiene ninguna dificultad, ¿cómo determina el PoW que se realizó? ¿Solo por el hash más bajo?
Si es así, no, no es encontrar la mejor cadena como Bitcoin. Por ejemplo, un minero malintencionado puede intentar enviarse dinero a sí mismo en cada bloque que extrae. Cuando encuentran un hash extremadamente bajo, mantienen ese bloque en secreto y realizan una transacción conflictiva enviando ese mismo dinero a un intercambio. Permitieron que su depósito obtuviera un par de confirmaciones y luego lo cambiaron por una moneda alternativa. Luego, el atacante publica su bloque con un hash extremadamente bajo para reemplazar la mejor cadena anterior.
Si bien los bloques que están enterrados aún son difíciles de reemplazar, la punta de la cadena se vuelve completamente poco confiable.
@Murch sí, hash más bajo. Eso es exactamente lo que quiero decir. La punta de la cadena de Bitcoin tampoco es 100% confiable, necesita ~6 confs para máxima seguridad. En dicha propuesta, el tiempo de finalización debe considerarse bastante grande (por ejemplo, 24 h). Mi punto es: funcionaría como un algoritmo de consenso, simplemente sería menos eficiente para la finalidad que Bitcoin, pero podría decirse que sería más simple de implementar y más seguro contra estos varios ataques relacionados con la dificultad del objetivo . ¿Tiene sentido?
No entiendo cómo llegaste a esa evaluación. Creo que sería mucho menos seguro ya que la mayor parte del hashrate ahora se desperdicia en una competencia innecesaria en lugar de en el progreso, requeriría muchas más confirmaciones para realizar transacciones de manera segura, se convertiría en un arte evaluar si el mejor bloque actual aún debe competir con o conformarse con el mejor bloque anterior, sería mucho más ineficiente en ancho de banda y poder de cómputo para los nodos participantes. No me queda claro de qué manera el enfoque propuesto es mejor en absoluto.
Ya veo, ahora estos son puntos interesantes a tener en cuenta. No estoy seguro de si lo que dices es realmente válido, es decir, si la mayor parte de la potencia informática se desperdiciaría y si es realmente difícil definir en qué bloque minar. Pero estos son puntos sensatos a considerar. Gracias por los aportes.
@MaiaVictor: Adivina esto: si fueras un pequeño minero en la red y encontraras un bloque con una dificultad de 1/100 del hashrate actual. ¿A) lo transmitiría e intentaría minar encima de él o b) intentaría minar un bloque mejor a la misma altura? Como otro minero, cuando recibe un bloque a 1/100 del hashrate actual, ¿a) cambiaría a usarlo como el bloque anterior, b) intentaría extraer bloques mejores?
¿Qué sucede si recibe cinco bloques con 1/100 de la dificultad de construcción uno encima del otro en un minuto? ¿Construirías encima de eso, o continuarías probando un solo bloque con 1/10 de dificultad para reemplazarlos a todos?
Creo que siempre estarás minando sobre el mejor bloque durante los últimos 10 minutos, tratando de obtener hashes cada vez más pequeños y transmitiendo el mejor bloque que tienes (incluso si no es tuyo). Mientras los mineros sigan haciendo eso, los bloques con baja dificultad simplemente no se propagarán y los buenos bloques llegarán a todos. Después de la marca de 10 minutos, los mineros comenzarían a minar en la parte superior del mejor bloque que tengan durante el último período de 10 minutos, que casi siempre será el correcto. Si no es así, muy pronto llegará el correcto y no habrán desperdiciado tanto esfuerzo.
Por supuesto, puede intentar volver a minar bloques más antiguos, pero eso hace que sea mucho menos probable que sus bloques se propaguen, por lo que tiene un incentivo para minar siempre encima de su mejor bloque, es decir, su punta con el PoW más acumulado.
"Creo que siempre estarás minando sobre el mejor bloque durante los últimos 10 minutos" ⇒ No está claro por qué crees que los mineros convergerían en este comportamiento particular. Contraejemplo trivial: un minero encuentra un hash extremadamente bajo. Lo más racional sería comenzar a minar de inmediato, tal vez incluso mantenerlo en secreto por un tiempo para que otros mineros desperdicien su poder de minería.

El punto clave del diseño de Bitcoin es crear un sistema que proporcione un registro confiable de transacciones sin ninguna coordinación central o árbitro . En cambio, Bitcoin es un sistema distribuido en el que se llega a un consenso mediante un "algoritmo de consenso" que cada nodo de la red puede evaluar repetidamente.

Como Bitcoin está operando hoy, el objetivo de un "período de bloque" está bien definido y acordado por todos los nodos. Un nodo puede verificar si un determinado bloque es una solución válida utilizando solo el conocimiento de la cadena (es decir, la dificultad objetivo) sin depender de ningún reloj.

En el sistema que propones, no puedes decidir si has visto "el mejor bloque del intervalo de tiempo de 10 minutos" con solo mirar el bloque. Esto significa que no sabe si ese bloque es un bloque válido sin conocer a todos los demás candidatos. La consecuencia es que un bloque que considerabas válido puede volverse inválido cuando aparece un bloque con un hash más bajo. Esto es algo que no puede ocurrir según el esquema actual, y tiene consecuencias dramáticas. Hoy en día, un bloque que se considera válido se puede minar con seguridad, ya que se espera que el trabajo requerido para superar el bloque válido sea aproximadamente el mismo que continuar en ese bloque. En su esquema, solo se necesita el trabajo de encontrar un bloque mejor para invalidar la solución previamente aceptada y destruir el trabajo basado en ese bloque ahora inválido "

Entonces, cuando comienza a minar en un bloque, debe estar seguro de que conoce una solución válida y que esta solución seguirá siendo válida . El enfoque habitual del desafío sería un árbitro central que recopile a los candidatos y decida qué bloque elegir y corrija esta decisión para siempre. Como ya dije en la introducción, cualquier cosa que dependa de un servicio central confiable no cumple con el objetivo principal de Bitcoin.

En el sistema que propones, no puedes decidir si has visto "el mejor bloque del intervalo de tiempo de 10 minutos" con solo mirar el bloque. -- ¿Cómo es eso? El mejor bloque es el que tiene el PoW más alto. En Bitcoin, usted tampoco puede saber si ha visto el bloque correcto en un lapso de tiempo de 10 minutos, sin conocer todos los bloques: se podrían haber extraído dos bloques simultáneamente. La disputa se resuelve después de más bloques. En mi sistema se lleva a cabo exactamente el mismo proceso, simplemente eligiendo la cadena con el PoW más grande para empezar. No hay un coordinador central involucrado.
Mi punto era responder a la pregunta: "¿puedes decidir si un bloque puede ser una solución válida?". En el sistema propuesto, cada bloque puede ser una solución válida. En el sistema actual, solo los bloques que alcanzan el objetivo pueden ser una solución válida. Debido a que encontrar bloques que alcancen el objetivo es extremadamente raro, por lo general, solo se calcula un bloque que resuelve una profundidad determinada y se puede identificar fácilmente (al alcanzar el objetivo). En el sistema propuesto, no puede identificar fácilmente si un bloque que se muestra es probablemente el bloque generalmente aceptado en esa profundidad.
Ah, es justo, pero ¿por qué es eso importante o deseable? ¿Quieres decir como una forma de prevenir inundaciones/spam? Es justo que no puedas saber si un bloque es válido, pero a todos los efectos prácticos puedes hacer muy buenas conjeturas. Por ejemplo, si recibió un bloque con un puntaje PoW grande, probablemente podría ignorar cualquier bloque con <50% de su puntaje PoW.
Edité mi respuesta para centrarme en el problema "superar un bloque antiguo invalida toda la cadena de bloques", que en realidad es el núcleo detrás de la pregunta "¿este bloque es válido?".
Agradezco su respuesta, se está volviendo genial, pero todavía tengo algunas preocupaciones. 1. "Hoy, un bloque que se considera válido puede minarse con seguridad" - ¿con seguridad en qué sentido? En Bitcoin, también puede suceder que esté minando en un bloque que se vuelve inválido, si ese bloque se convierte en un tío. 2. "El enfoque habitual del desafío sería un árbitro central que reúna a los candidatos y decida qué bloque elegir y arregle esta decisión para siempre". Eso no tiene sentido para mí. En cambio, simplemente extraería el bloque superior y esperaría que no se vuelva inválido, en sus palabras. ¿Tiene sentido?
La principal diferencia es que actualmente una cadena queda huérfana si alguien presenta una cadena más larga, que necesita mucho trabajo como la cadena huérfana. Su esquema permite atacar solo un bloque, el eslabón más débil, para derribar toda la cadena dependiendo de él, porque un bloque previamente válido ("hash más bajo") ahora obviamente ya no es válido ("es solo el segundo hash más bajo, lo siento"), y no tienes que vencer la cadena que sigue a este bloque.
Entonces, mi punto clave es "las bifurcaciones válidas huérfanas de la cadena están bien, los bloques que de repente resultan inválidos rompen el esquema". - por lo que la validez de un bloque debe ser una propiedad que no puede cambiar dinámicamente
Sí, ese es un punto, pero tenga en cuenta que elige la cadena más larga por la suma del trabajo de cada bloque, por lo que simplemente seleccionar un bloque con una puntuación pequeña para reemplazar no funcionará, ya que también necesita reemplazar cada bloque en la parte superior de eso Es decir, un bloque válido no se vuelve inválido si aparece un bloque con la misma altura pero con una puntuación más alta. Cada bloque es válido, solo elige la cadena más larga como la línea de tiempo canónica sumando las puntuaciones individuales.
Eso no es lo que dice tu pregunta. Dice que cada diez minutos, se acepta el bloque con el hash más bajo (y todos los demás bloques, obviamente, deben rechazarse). Así que no es "gana la cadena más cara", pero gana la cadena con el bloque más caro en el punto de división.
Ah, ¿así es como lo interpretaste? Eso no es lo que quise decir. Puedo ver el problema ahora y, de hecho, mi pregunta está mal formulada. Quise decir que se aceptan todos los bloques, pero la cadena con mayor trabajo acumulado es la canónica.
Para que conste, asumí la mayor cantidad de trabajo, pero el mismo problema aún se aplica a los últimos bloques en la punta de la cadena: un solo bloque con un hash muy bajo podría reorganizar uno o más bloques de la punta de la cadena, accidentalmente o a propósito.
@Murch Sin embargo, no veo eso como un problema de última hora. Si el bloque con un hash muy bajo puede reemplazar la punta de la cadena, se espera que este bloque y sus descendientes hayan tomado más trabajo que la punta de la cadena actual, por lo que esto está en línea con la idea de bitcoin: la mayor parte del poder de hash es bien. Un problema suave con el esquema propuesto es que las reorganizaciones ocurrirán con más frecuencia hasta que se encuentre un consenso para un bloque específico, por lo que se dedica menos trabajo a la cadena final ya que se dedica más trabajo a perder cadenas.
(y parece que mi último comentario está en línea con su respuesta. Depende de cómo lo mire si "sin dificultad" será simplemente un esquema peor pero viable con muchas reorganizaciones y mayores riesgos de ataques clandestinos o si estos riesgos hacen que el esquema inaceptable Estoy de acuerdo con usted en que las reorganizaciones después de casi cada bloque y el aumento del ancho de banda no son propiedades deseables)
Sí, no es un completo rechazo, pero haría que Bitcoin fuera menos seguro porque un ataque mayoritario (que siempre se basa en su propia cadena) requeriría una porción mucho más pequeña del hashrate total para seguir adelante, porque se desperdicia mucho hash en la promoción de consejos obsoletos. También sería una experiencia terrible desde la perspectiva de los usuarios que esperan confirmaciones de sus transacciones.

Dos problemas potenciales con esta idea, algo relacionados.

  1. Los incentivos mineros fluctuarán durante el período de 10 minutos, dependiendo de la dificultad del "candidato" del bloque actual. Si es más alto de lo esperado, se incentivará a los mineros a dejar de minar hasta el comienzo del próximo período. En un caso extremo, podría ser que todos los mineros dejen de minar por el resto del período porque la probabilidad de minar el bloque canónico hace que no sea rentable para todos los mineros.

  2. Al comienzo de cada período de 10 minutos, la red de retransmisión se inundaría con "candidatos" de bloque. Debido a que es probable que el mejor bloque actual para el nuevo período tenga un hash de dificultad relativamente baja, se están generando muchos mejores bloques nuevos en rápida sucesión, y esto podría sobrecargar los nodos de retransmisión. Esto podría afectar tanto el ancho de banda de la red (recepción de bloques) como la CPU (validación de bloques a medida que llegan).

El esquema de dificultad de minería de bitcoin existente no sufre estos problemas porque la tasa esperada de generación de nuevos bloques es constante.

Buenos puntos. También agradezco esta respuesta ya que entiende lo que propuse.

Resumen

La dificultad fue diseñada por Satoshi para equilibrar la red y garantizar el acceso equitativo a nuevos pares, evitando que terceros maliciosos controlen la red, filtren transacciones y obtengan las monedas generadas con demasiada facilidad.

El PoW es una prueba matemática de que alguien gastó recursos para obtener las monedas generadas. Si no hubiera un PoW, una entidad organizada con muchos recursos, por ejemplo, una botnet o un ISP, enviaría spam a la red con transacciones que generarían interés para ellos.

En particular, para transacciones más grandes (1), debemos estar particularmente seguros de que Alice (gastador malicioso) no emite una transacción a Bob, que vende bienes, y luego envía spam a la red con la transacción al comerciante Charlie o a ellos mismos para estafar a Bob. .

Responder (o intentar)

Considere que Bitcoin es totalmente descentralizado y los sistemas distribuidos sufren el concepto de tiempo, que no es absoluto. Si tiene preguntas al respecto, debe publicar en SW Engineering. Solo diré "sin una autoridad de certificación, puede retener un mensaje para siempre". Y Bitcoin rechaza las autoridades de certificación que pueden ser pirateadas, sobornadas, forzadas por el gobierno, etc.

Satoshi necesitaba diseñar un sistema para que las transacciones secuenciales no pudieran (tan fácilmente) reescribirse (2).

Suponga que los nodos de Bitcoin acaban de aceptar el bloque con el PoW más grande cada 10 minutos.

El verdadero problema es: no lo mires desde la perspectiva de todo el sistema. Mírelo desde la perspectiva de mi cliente Bitcoin-qt arrancando ahora mismo desde el vacío.

¿ Cómo puede mi cliente estar seguro de que nadie está reteniendo bloques ? ¿Cómo puede mi cliente estar seguro del tamaño de la red a juzgar por la entrada de otros pares malintencionados?

Satoshi esperaba que la red creciera y el poder computacional junto con ella. Con más nodos de minería, una mayor cantidad de bloques alcanzaría el umbral de dificultad en menos de 10 minutos.

Desde la perspectiva de un nodo solitario , que es el concepto mismo de las redes peer-to-peer, el objetivo no es identificar el bloque con mayor dificultad, lo que sería difícil si los pares intentan ocultar información, sino buscar el más largo . cadena

El principio de la cadena más larga no impide que Alice reescriba por completo una transacción. Lo hace tan caro que, al menos para las compras de comestibles, vale la pena seguir las reglas en lugar de hacer trampa.

Y es la misma razón por la cual los pares requieren 3 o más confirmaciones para considerar una transacción final .

(1) Bitcoin fue diseñado para comprar comestibles y bienes raíces. Por supuesto, no es esa pérdida un gasto doble en el supermercado.

(2) Reescribir una transacción, en el ámbito de una cadena de bloques, significa que si la transacción ocurrió en el bloque 100, se reemplaza cada bloque de 100a currentcon 1001 a current1

¿Cómo puede mi cliente estar seguro de que nadie está reteniendo bloques? -- Tampoco puedes estar seguro de eso en Bitcoin. Es muy posible que haya una bifurcación con más trabajo (una "cadena más larga") de la que no esté al tanto. Los nodos de Bitcoin simplemente asumen que han conocido a suficientes pares colaboradores para obtener esos datos. Mi sistema propuesto hace lo mismo. La única diferencia es que, en lugar de una dificultad objetivo, el nodo simplemente elige el bloque con mayor trabajo. Para el PoV de un nodo solitario, solo recopila bloques y calcula la cadena más larga de los bloques que ve. No necesita un partido central de ninguna forma para llegar a un consenso.