¿Por qué necesitamos Prueba de trabajo en bitcoin?

Sé que la prueba de trabajo muestra que la persona ha invertido algo de tiempo y poder en el procesamiento. También sé que la minería de bitcoin está agregando una transacción a la cadena de bloques y luego el minero deberá resolver un problema de pow.

¿Porqué necesitamos esto? ¿Qué pasa si eliminamos el paso de prueba de trabajo para los mineros y cuáles son las consecuencias de hacerlo?

I also know that bitcoin mining is adding a transaction into the blockchain and then the miner will need to solve a pow problem.La minería es construir un bloque de transacciones y, con suerte, resolver el problema PoW para ese bloque antes de que cualquier otro minero agregue un bloque y luego agregue el bloque a la cadena de bloques.
estrechamente relacionado: bitcoin.stackexchange.com/q/331/5406

Respuestas (6)

Imagina que tengo 1 bitcoin. E imagina que puedo formar una transacción para enviar ese bitcoin a Alice o puedo formar una transacción para enviar ese bitcoin a Charlie.

Ahora, ¿qué me impide formar ambas transacciones? Nada.

Entonces, si hago eso, ¿cómo sabrá la gente qué transacción es válida? Claramente, sin alguna forma confiable de saber cuál de esas dos transacciones son válidas, el sistema está condenado.

Esto es lo que hace PoW. Un minero no puede contribuir PoW a ambas transacciones al mismo tiempo, debe elegir una.

Ok, veo cómo PoW se relaciona con el doble gasto, gracias
"Esto es lo que hace PoW. Un minero no puede contribuir con PoW a ambas transacciones al mismo tiempo, debe elegir una". ¿Puedes dar más detalles sobre este? Estoy seguro de que muchos usuarios apreciarán esto. tal como está su respuesta ahora, no puedo ver cómo y por qué se usa POW en bitcoin todavía
@ user200300 No estoy muy seguro de lo que no tienes claro. ¿Entiendes el problema que estoy describiendo? Alguien puede formar dos transacciones válidas y necesitamos alguna manera para que todos finalmente acuerden cuál aceptar. (¿Tal vez sería útil hacer su propia pregunta sobre qué es lo que no entiende específicamente?)
Hola David. ¿Cómo decide el minero a qué transacción comprometer POW? ¿Y cómo ayuda esta selección a mantener la integridad de la cadena de bloques? Además, ¿POW no se realiza en un bloque, no en una transacción en sí?
PoW se realiza en un bloque, pero ese bloque no puede formar una cadena que incluya ambas transacciones o esa cadena no es válida y se ignorará. Un minero quiere que le paguen, por lo que extrae sobre la cadena más larga que puede encontrar.
Creo que esta explicación es bastante inadecuada. Todo lo que dice es que PoW toma una de las transacciones posiblemente competidoras, bien. Pero lo que no explica es esto: usted envía 1 bitcoin a AMBOS Alice y Charlie como dos transacciones separadas antes de que cualquiera de ellas sea aceptada. Ahora digamos que la transacción Alice se agrega con éxito en un bloque después de PoW. Ahora la transacción de Charlie sigue pendiente. Su explicación pasa por alto cuál será el destino de la transacción de Charlie...
@Jazimov Nunca le puede pasar nada.
¿Porqué es eso? PoW ingresa la primera transacción con éxito en un bloque que es verificado por otros nodos y agregado a la cadena de bloques. Cuando se encuentra la segunda transacción, ¿qué mecanismo de cadena de bloques hace que se ignore?
No es válido porque intenta reclamar una salida no gastada que ya no existe. Ningún nodo permitirá que le suceda algo a una transacción no válida. Un bloque que intente incluirlo será ignorado.
"Entonces, si hago eso, ¿cómo sabrá la gente qué transacción es válida? Claramente, sin una forma confiable de saber cuál de esas dos transacciones son válidas, el sistema está condenado". ¿Qué pasa con un consenso de resolución de conflictos: si una billetera intenta duplicar el gasto, la transacción con un hash más bajo se considera la transacción válida?
@Calmarius Eso sería un desastre. Ninguna transacción sería definitiva hasta que, y a menos que, pudiera ver todas las transacciones que iban a ocurrir para asegurarse de que no existiera ninguna transacción en conflicto con un hash más bajo. ¿Cómo haría negocios si nunca pudiera confiar en que una transacción no perdería la resolución de conflictos?
Los nodos pueden marcar localmente la hora de las transacciones y declararlas definitivas si tienen la antigüedad suficiente (digamos 1 hora) en ese momento, no se aceptan actualizaciones. El mayor problema es asegurarse de que los nodos estén en consenso y que todos estén construyendo la misma cadena, y no creo que eso sea posible sin ralentizar artificialmente la red con PoW y dejar que los bloques se prueben en todos los nodos antes de que llegue el siguiente.
@Calmarius No, no pueden. ¿Qué sucede si un nodo cree que tiene 1 hora y otro nodo cree que tiene 59,9 minutos cuando se descubre una transacción en conflicto? ¿Cómo podrían estar de acuerdo? Un usuario malicioso podría crear mil transacciones conflictivas, enviar la que tiene el hash más alto, luego esperar 59 minutos y luego enviar las otras 999 (en orden de hash, de mayor a menor) durante los próximos dos minutos y la red nunca volvería a estar de acuerdo.
No entiendo cómo duplicar el gasto sin PoF, he creado una nueva pregunta que tal vez sea más fácil de entender explicando un problema paso a paso: bitcoin.stackexchange.com/questions/76294/why-we-need-mining
Respuesta de @David Schwartz: ¡¿No puedo entender completamente cómo se relaciona un PoW para mitigar, por ejemplo, el doble gasto?! Según entendí, el algoritmo PoW pide que el hash de una cadena comience con algunos ceros... lo cual es difícil de encontrar el número adecuado, etc., etc. pero si el hash de alguna cadena (digamos la transacción que se agrega a la blockchain) comienza con cero, ¡no prueba que la transacción sea válida! Agradezco mucho que alguien me aclare este problema. Gracias.
@MF El desafío no es saber qué transacciones son válidas. El desafío es saber cuál de las dos transacciones válidas, pero contradictorias, aceptarán todos los demás.
"Claramente, sin una forma confiable de saber cuál de esas dos transacciones son válidas, el sistema está condenado". Computacionalmente, no se requiere producir PoW para verificar que todas las transacciones empaquetadas en un determinado bloque sean mutuamente válidas de acuerdo con la cadena de bloques actual. Si empaqueta ambas transacciones en un bloque, el bloque no será válido. Si empaqueta una transacción en un bloque y termina en la cadena de bloques, cualquier bloque futuro que pueda agregarse no podría incluir la otra transacción. No hay necesidad de PoW para verificar estas condiciones.
@rapt ¿Puedes explicar cómo funcionaría esto? Digamos que tengo una cadena de bloques que termina con el bloque A, usted tiene una cadena de bloques que termina con el bloque B y el bloque A tiene una transacción que entra en conflicto con el bloque B. ¿Cómo sé en cuál de esas dos transacciones en conflicto puedo confiar sin PoW?
@DavidSchwartz Para usted como observador externo, lo primero que le importa es que todas las versiones actuales de blockchain (BC) sean válidas. Es decir, que para cada versión del BC, las transacciones dentro de ese BC sean válidas y no se contradigan entre sí. Esto es "fácil" de hacer, sin PoW, por cada usuario de forma independiente (no se necesita confianza mutua). Ahora, para usted como observador externo, el proceso PoW simplemente elige al azar uno de los BC competidores válidos. Realmente no te importa cómo se elige uno (por trabajo, lotería, etc.). Lo único que te importa es que la red acepte este proceso de elegir al ganador.
@rapt Supongo que no tengo idea de cuál es tu punto. Estás diciendo un montón de cosas que, si bien son técnicamente correctas, están redactadas de manera confusa. ¿Qué está tratando de lograr? ¿Estás tratando de aclarar algo? Si es así, creo que estás fallando. ¿Estás tratando de corregir lo que percibes como un error? Si es así, ¿puede ser preciso sobre lo que cree que es incorrecto?
PoW no se utiliza para proteger contra ataques de doble gasto. PoW se usa únicamente para elegir qué minero aleatorio de todos los mineros totales puede elegir el contenido del siguiente bloque. El minero ganador aún puede ser deshonesto, si es así, las transacciones de este nuevo bloque pueden contener gastos dobles, y si lo hiciera, el bloque sería visto como inválido, rechazado por todos los demás mineros y huérfano.
@dodgy_coder Estás equivocado. Los gastos dobles no implican bloques que puedan verse como inválidos. Un ejemplo de un gasto doble sería si Alice tiene 1 bitcoin y se extraen dos bloques aproximadamente al mismo tiempo, uno que contiene una transacción válida que envía ese bitcoin a Bob y otro que contiene una transacción válida que envía ese bitcoin a Charlie. Cualquiera que vea solo uno de esos dos bloques extraídos aproximadamente al mismo tiempo lo aceptaría porque es válido. (¿Leíste mi respuesta? Dice exactamente esto).
@dodgy_coder Resolver el problema del doble gasto requiere alguna forma de que la red finalmente acuerde cuál de las dos transacciones válidas individualmente pero en conflicto aceptar. Bitcoin usa PoW para este propósito.
@DavidSchwartz Entiendo lo que dices, pero escúchame. Entonces, aunque PoW, a un minero X se le ha otorgado el derecho de formar un nuevo bloque. Pusieron en ese bloque nuevo la transacción de Alice a Bob. Otro minero Y a través de PoW nuevamente (casi al mismo tiempo) encontró un nuevo bloque y agregó la transacción de Alice a Charlie. ¿Cómo evitó PoW un gasto doble? No tuvo nada que ver con eso. La regla de protocolo de extender la cadena válida más larga se encargó de eso, en el siguiente bloque, que se otorgó al minero Z. Todo lo que PoW hizo por nosotros fue elegir al azar a un minero en función de su tasa de hash actual.
@DavidSchwartz En realidad, dije anteriormente que era la "regla de protocolo" ... es realmente el incentivo del minero de extender la cadena válida más larga. Miner Z tuvo que elegir uno de los bloques válidos (del minero X o del minero Y) y esto se convirtió en la cadena de consenso. En el momento en que ocurrió el gasto doble, es posible (dependiendo del software de billetera de Bob y Charlie) que ambos vieron un tx válido con 0 confirmaciones. Entonces ocurrió el doble gasto, pero luego un bloque de tx quedó huérfano y el otro no.
@David Schwartz ¿No existe un mecanismo para verificar el saldo antes de la transacción? Si se envía 1 bitcoin a 2 personas, solo una de ellas lo recibirá y la otra se descartará como no válida. No entiendo cómo PoW evitará esto.
@AbhishekChaudhary ¿Cómo se ponen de acuerdo miles de personas sobre cuál recibir y cuál descartar como no válido? Eso es lo que PoW hace por bitcoin.
@DavidSchwartz No explica por qué se necesita el PoW. (1) El nodo selecciona 1000 transacciones pendientes y las coloca en un bloque (2) No evalúa ningún gasto doble en ese bloque. (3) Hace un hash del bloque junto con el hash anterior en la cadena de bloques. (4) Transmite el bloque a los otros nodos. (5) Bloque de verificación de nodos y agréguelo a la cadena de bloques si es válido. ¿Es asi? ¿Cuál es el valor de codificar el bloque 10K veces, solo cambiando el nonce hasta que el hash comience con N ceros, en cuanto a codificarlo una vez? No agrega corrección. Como forma de control de flujo, parece absurdamente un desperdicio.
@Lobotomik ¿Qué pasa si alguien más hace exactamente lo mismo pero su bloque incluye una transacción que entra en conflicto con una en ese bloque? ¿Qué impide que la red se rompa en dos lados en desacuerdo? El valor de la prueba de trabajo es que resuelve este problema: la cadena con más trabajo gana. Y es muy caro cambiar eso.
@DavidSchwartz, ¿ese es realmente el punto principal de PoW? protección contra el doble gasto? ¿No pueden los nodos simplemente verificar que no haya suficiente saldo para acomodar ambas transacciones y rechazar tales bloques "malos"?
@SpaceMonkey Pueden, pero ese no es el problema. El problema es que un nodo acepta un bloque que contiene una transacción y otro nodo acepta un bloque que contiene una transacción en conflicto. A partir de ese momento, las dos mitades no están de acuerdo sobre qué transacciones son válidas después de eso (porque cada lado ve cuentas con saldos diferentes). ¿Cómo asegura la consistencia final y evita que la red acumule más y más desacuerdos? Trate de encontrar una manera y rápidamente encontrará que no es nada simple.
@DavidSchwartz Exactamente lo mismo sucede en Bitcoin y la solución es tomar la cadena más larga, pero nuevamente, ¿por qué requerimos PoW? Creo que es para evitar que los atacantes envíen spam a bloques no válidos. Entonces, parece que PoW es principalmente para controlar la participación en la red (debe hacer un esfuerzo que se verifica fácilmente) para que los atacantes no puedan construir una cadena más larga sin tener más del 50% del poder de hash. ¿Tiene sentido?
@SpaceMonkey Si te resulta útil pensar en ello, entonces supongo que está bien. Lo veo demasiado complicado. Es así de simple: la cadena más larga no sirve de nada si todos los que quieren pueden hacer una cadena tan larga como quieran. La cadena más larga es solo una regla útil si es difícil alargar una cadena.
@DavidSchwartz cierto, esa es una buena manera de decirlo. Entonces, además de la "orden de transacción" (que es el doble de gasto), ¿qué más nos da PoW? no necesitamos PoW para la validez de la transacción ya que podemos validar cada transacción individualmente, entonces, ¿qué más?
@SpaceMonkey La respuesta canónica es proporcionar el pedido de transacciones que necesitamos para resolver el problema del doble gasto. La respuesta secundaria es lograr la distribución inicial sin un partido central.
@DavidSchwartz Agradezco sus respuestas, creo que estas son las mejores respuestas que he recibido hasta ahora. ¿Te importaría unirte a mi sala de chat en lugar de comentar aquí? chat.stackexchange.com/rooms/122747/…

La prueba de trabajo (PoW) básicamente se asegura de que los mineros no hagan trampa.

No hay forma de confiar en que todos en la red sean honestos, por lo que debe haber alguna forma de evitar que los mineros creen nuevos bloques que los beneficien. La forma en que funciona es que tienes un grupo de personas tratando de adivinar la respuesta al problema matemático y nadie sabe quién obtendrá la respuesta correcta primero. Quien obtenga la respuesta correcta primero obtiene una recompensa, pero solo si todos los demás mineros aceptan ese registro transaccional (si resulta evidente que un determinado minero está creando transacciones fraudulentas, entonces los otros mineros pueden negarse colectivamente a aceptar sus contribuciones). Esta es la razón por la cual el proceso de creación de un nuevo bloque está diseñado para consumir mucha energía, por lo que hay un costo asociado con la creación de cada nuevo bloque. Esto evita que los mineros simplemente creen un montón de nuevos bloques fraudulentos con la esperanza de que tal vez sean aceptados, porque el costo de hacerlo compensa la recompensa potencial. Es útil pensar en la prueba de trabajo como una posible solución al correo no deseado. Si hubiera un requisito para que cada computadora dedique un minuto a un problema de PoW antes de enviar cada correo, entonces solo las personas con mensajes genuinos aceptarían hacer el esfuerzo. Un minuto de tiempo en la computadora es un costo muy bajo para un individuo, pero el tipo que está enviando 10 millones de correos electrónicos no deseados no puede darse el lujo de esperar 10 millones de minutos para hacerlo. Entonces, volviendo a bitcoin, la posibilidad de que cada minero individual sea el que resuelva cada bloque es bastante pequeña, y dado que se necesita mucho esfuerzo para resolver los bloques, no pueden simplemente enviar spam a la red con soluciones.

Espero que tenga sentido.

Este es el mejor desglose que pude encontrar ( http://nakamotoinstitute.org/mempool/the-proof-of-work-concept/ )

"Esto evita que los mineros simplemente creen un montón de nuevos bloques fraudulentos con la esperanza de que tal vez sean aceptados" . No veo por qué esto no funcionaría también para bloques.
@Calmarius, de hecho, existen dos niveles de consenso: nivel de transacción y nivel de bloque. Por lo tanto, el spam de transacciones fraudulentas se detecta rápidamente a través de la votación por consenso que maneja las fallas bizantinas.
No estoy seguro si lo entendí bien, porque en mi mente, y la forma en que trato de entenderlo, es que un PoW es un delaying mechanism. Entonces obliga a todos a retrasarse y hacer una pausa. Y una vez que este retraso obligatorio está ahí, kablam, el resultado es un ordenamiento secuencial. No estoy seguro, si este es el punto. Empecé a leer Mastering Bitcoinla semana pasada. Por favor corrígeme si estoy equivocado.

La forma en que entiendo cómo funciona la prueba de trabajo ( PoW ) es esta: su objetivo fundamental es evitar hacer trampa o crear una vista inconsistente del libro mayor distribuido.

Imagine un escenario de doble gasto , en el que el participante A solo tiene 1 BC para gastar. Pero crea dos transacciones independientes o "gasta" cada una con 1 BC. Luego presenta cada transacción de gasto a dos partes diferentes B y C como pagos válidos. Dado que no existe la noción de serialización de transacciones (como se tendría en una base de datos centralizada con confirmaciones atómicas), es posible que algunos participantes en la red hayan registrado primero el pago de A a B , mientras que otros hayan registrado el pago de A a C primero. Al mismo tiempo, algunos terminarán rechazando este último pago (ya que A solo tiene 1 BC para gastar).

En el mundo ideal, si ambas transacciones se pueden serializar estrictamente (como, por ejemplo, el pago de A a B se registrará en el libro mayor distribuido antes de que se registre el pago duplicado de A a C ), no habrá necesidad de consenso distribuido. En un mundo ideal, donde en las transacciones se puede marcar la hora usando un reloj "central" visible para cada participante, tendríamos una solución fácil.

El proceso PoW resuelve este problema algorítmicamente al forzar un retraso finito no trivial para enviar y confirmar un bloque de transacciones. En el esquema de bitcoin, donde las transacciones deben comprometerse en una granularidad de nivel de bloque , la transacción de doble gasto de A tiene dos posibilidades:

  1. O ambas transacciones se agrupan en el mismo bloque,
  2. O bien, se agrupan en diferentes bloques.

En el último caso, la inconsistencia se detecta y marca fácilmente. En el primer caso también, es fácil detectar la inconsistencia y marcarla, pero es posible hacerlo solo cuando ambas transacciones (la buena y la mala) están agrupadas en el mismo bloque. Esto no es posible si los tamaños de los bloques son demasiado pequeños o los nodos pueden confirmarlos muy rápidamente. Aquí es donde PoW es útil: obliga a que transcurra suficiente tiempo para componer un nuevo bloque y hacer que todos los participantes lo confirmen.

La pregunta que no estaba clara para mí es la siguiente: Bitcoin usa una cierta variación del cálculo de la imagen previa de un valor hash SHA-256. Dado que el propósito de PoW es solo retrasar la creación de nuevos bloques con un retraso de tiempo suficiente, este rompecabezas para resolver podría ser cualquier cosa, como por ejemplo, resolver un problema de colocación de 16 reinas en un tablero de ajedrez, o algo así. No está claro si el rompecabezas realmente necesita tener una correlación con los datos reales en el bloque que se está confirmando.

Es importante que la solución del rompecabezas tenga una relación determinista con el contenido de los bloques. Esto se debe a que se requiere un mecanismo para verificar sobre qué bloque se construyó un nuevo bloque. También proporciona una forma de verificar rápidamente que las transacciones se incluyeron en un bloque. Por último, el uso de una función con propiedades como funciones hash fuertes garantiza que, una vez que se encuentra una solución, los contenidos de la cadena de bloques no se pueden cambiar sin ser detectados. El rompecabezas debe proporcionar un mecanismo de prevención de manipulaciones.

Sin prueba de trabajo, cualquiera puede comenzar desde el bloque de génesis y crear una larga cadena de transacciones falsas. ¿Cómo se puede decidir qué libro mayor es el correcto?

Aquí es donde entra en juego la prueba de trabajo. Los nodos aceptan la cadena que costó más trabajo crear y rechazan todas las demás. Esto incentiva fuertemente a los mineros a construir sobre la cadena establecida y también dificulta la creación de una cadena falsa. Para crear una cadena falsa, un adversario deberá trabajar más rápido y también deberá ponerse al día con el resto de la red para que se acepte su cadena falsa, lo que es prácticamente imposible para las criptomonedas establecidas como Bitcoin.

respuesta corta :

la prueba de trabajo es una protección y una solución para el problema general bizantino sin ella, los mineros engañarán fácilmente sin perder nada, por lo que configuraron este sistema POW para obligar a los participantes a perder dinero si hacen trampa (usted pierde el dinero invertido en el proceso POW (consumo de electricidad y presupuesto inútil invertido en el hardware)) en cambio tienes un incentivo si no haces trampa. Además, el POW se usa para controlar las ventanas de tiempo de minería (10 min), podemos controlar la dificultad para hacer que la minería sea fácil o difícil.

Proporciona una prueba de consenso entre los nodos de Bitcoin que establece la validez de cualquier bloque dado una vez que tiene aproximadamente 6 bloques extraídos encima y es la cadena más larga de la red.

Dado que es computacionalmente costoso extraer bloques, es poco probable que un solo minero pueda extraer varios bloques seguidos. El resto de la comunidad minera extraería los bloques mucho más rápido y crearía una cadena más larga.

Por lo tanto, dado el bloque A, para tener 6 bloques extraídos por encima del bloque A en la cadena más larga, un gran porcentaje de los mineros en la comunidad minera de bitcoin deben estar trabajando en la cadena que incluye el bloque A.

El hecho de que se haya demostrado que tantos mineros están trabajando en una cadena que incluye el bloque A implica que la comunidad ha llegado al consenso de que el bloque A es un bloque válido.

Así se ha logrado la Prueba de Consenso.

¿Por qué se necesita esta Prueba de Consenso? Protege contra la bifurcación de la cadena de bloques (intencionalmente o no). Otras respuestas describen por qué alguien puede intentar bifurcar intencionalmente la cadena de bloques (consulte el escenario de doble gasto).