¿Por qué elegir la cadena más larga antes de verificar el doble gasto?

¿Podemos hacer los siguientes cambios en el protocolo POW actual para evitar mejor el doble gasto?

a) Para los nodos completos/mineros que reciben dos cadenas, verifique si hay direcciones idénticas que ocurren en ambas cadenas que realizan doble gasto. Si hay alguna, ignore la cadena que daría como resultado que el nodo realice una reorganización ( reorg ), elija la otra cadena;

b) Si no la hay, elija la cadena más larga;

c) Para nodos que reciban una sola cadena, aceptarla si no requiere reorganización.

¿No sería esto mejor para evitar el doble gasto que el protocolo actual, es decir, aceptar ciegamente la cadena más larga? ¿No deberíamos verificar el contenido del bloque de ambas cadenas antes de decidir cuál aceptar?

¿Qué quiere decir exactamente con "que realizan el doble gasto"? ¿Quiere decir que las dos cadenas tienen dos transacciones diferentes y cada una gasta la misma producción? Si es así, ¿está sugiriendo que cada nodo se limite al que vio primero?

Respuestas (2)

Si hay un intento de doble gasto, no hay forma de que un nodo sepa "qué cadena (transacción) llegó primero y es legítima" . Algunos nodos pueden escuchar primero sobre la cadena 'legítima', algunos pueden escuchar primero sobre la cadena de doble gasto.

Entonces, si la regla establece que los nodos funcionan para evitar reorganizaciones en caso de un gasto doble, esperaríamos que la red se divida en caso de un gasto doble. Considere: ¿qué sucede si hay un intento de doble gasto y la primera cadena de la que escucha su nodo es la que pronto será la cadena más corta? Estaría atrapado en una cadena huérfana, mientras que el resto de la red avanza. Obviamente, esto no es bueno, ya que el consenso y la confiabilidad de la red son importantes.

c) Para nodos que reciban una sola cadena, aceptarla si no requiere reorganización.

Si el nodo solo recibe una cadena, nunca requerirá una reorganización. Solo se reorganizará un nodo que reciba una cadena alternativa más larga.

..aceptando la cadena más larga a ciegas? ¿No deberíamos verificar el contenido del bloque de ambas cadenas antes de decidir cuál aceptar?

No diría que las cadenas se aceptan a ciegas , la aceptación requiere que la cadena sea válida de acuerdo con todas las reglas de la red. Su nodo verificará el contenido de los nuevos bloques, pero como mencioné anteriormente, no hay forma de distinguir de manera confiable una transacción 'legítima' de una transacción de 'doble gasto', en un nivel de consenso de red .

¿No sería esto mejor para evitar el doble gasto que el protocolo actual, es decir, aceptar ciegamente la cadena más larga? ¿No deberíamos verificar el contenido del bloque de ambas cadenas antes de decidir cuál aceptar?

¿Dónde lees que la cadena más larga se acepta a ciegas? Por supuesto, ninguna cadena con doble gasto es válida, eso anularía por completo el propósito.

Lo que sucede (al menos en Bitcoin Core) es que la verificación del doble gasto y la validez de la firma solo ocurre después de que una cadena en particular se convierte en la cadena de mayor trabajo. Pero no se trata como la mejor cadena aceptada hasta que se valida por completo. Si se encuentra un gasto doble o una firma no válida en una mejor cadena candidata, esa cadena se descarta y el algoritmo de selección volverá a la segunda cadena de trabajo y la verificará por completo.

La razón para retrasar el gasto doble y las verificaciones de scripts hasta que un bloque esté en la cadena de trabajo más importante es ahorrar recursos. Estas comprobaciones son muchas veces más costosas desde el punto de vista computacional que todas las demás reglas de validación combinadas, por lo que las realizamos con pereza.