Las pruebas de doble gasto funcionan CON las políticas de minería unificadas. No son un sustituto de ellos.

Bitcoin Cash necesita tener transacciones rápidas, económicas y confiables . Esta confiabilidad depende de que las transacciones de confirmación cero (“0-conf”) funcionen de manera consistente. Y hasta ahora lo hace. Esto se debe a que los mineros y los grupos de minería aplican constantemente las mismas políticas para las transacciones.

Recientemente, los líderes de Bitcoin Unlimited han propuesto informalmente p la idea de tener políticas mineras no unificadas, combinadas con pruebas de doble gasto y otras técnicas, como una forma de permitir algunos nodos de minería para extraer cadenas de transacciones más largas que otras. Sin embargo, el análisis muestra que las pruebas de doble gasto, si bien son útiles en ciertos casos, no hacen casi nada para solucionar los problemas que surgen de las políticas mineras no unificadas. Por lo tanto, este no es un buen plan.

Consenso vs. Política

Para revisar: para que cualquier transacción sea válida en la red Bitcoin Cash, debe seguir las reglas de consenso de la red. Si no sigue las reglas, ningún minero puede incluirlo en un bloque porque otros mineros verán el bloque como no válido y no lo construirán.

También hay otra capa de reglas además de las reglas de consenso que establecen algunas restricciones adicionales, y esto se llama política. Debido a que literalmente “no es consenso”, eso significa que cada nodo podría, en teoría, establecer su propia política y la cadena no se dividiría.

Pero el hecho de que la cadena no se divida no significa que no habrá problemas. Por ejemplo, si alguna vez envió una transacción con una tarifa demasiado baja y la red la rechazó, es porque el nodo al que se conectó lo consideró “no estándar”. En otras palabras, la política no lo aceptó.

De manera similar, el “límite de 25 transacciones encadenadas” también se basa en una política, y al igual que con las tarifas, sus transacciones pueden ser rechazadas por la red (más sobre esto en un momento).

<×Double-Spends

A los efectos de este artículo, consideremos dos tipos principales de gastos dobles:

1. “Condición de carrera” gasta doble
2. “Política dividida” duplica el gasto.

(También hay varios gastos dobles creados por los mineros y gastos dobles basados ​​en la maleación, que no profundizaremos en ellos).

Doble inversión en condiciones de carrera

El primer tipo de doble gasto (“condición de carrera”) ocurre cuando Alice intenta transmitir dos transacciones diferentes del mismo UTXO al mismo tiempo, quizás una a un comerciante y la otra a ella misma. Si la segunda transacción se bloquea, tiene éxito en su doble inversión.

Históricamente, los mineros han tenido políticas unificadas y solo aceptan una transacción si es la instancia “vista por primera vez” según las UTXO de entrada. Por lo tanto, a los pocos segundos de que se envíe una transacción en la red BCH, todos los nodos lo saben y rechazarán un gasto doble basado en esta regla de “primera vista”.

Esta política unificada es lo que hace que la red sea confiable para 0-conf. Es por eso que Alice tiene que transmitir casi al mismo tiempo si quiere tener alguna oportunidad.

Doble inversión de política dividida

El segundo tipo de gasto doble provendría de políticas mineras inconsistentes en todo el ecosistema. Esto hace que el doble gasto mucho sea más fácil y no requiere una respuesta rápida, ni siquiera necesariamente un software personalizado.

Por ejemplo, si la minera Alice tiene una política de tarifa mínima de bloqueo y retransmisión de 1 sat / byte, y el minero Bob está en 2 sat / byte, Charlie puede gastar el doble en un comerciante asegurándose de transmitir su transacción a Alice con una tarifa de 1 sat / byte. Él sabe que Bob no aceptó esta primera transacción, por lo que luego gasta el doble usando el minero Bob con la misma moneda y una tarifa de 2 sat / byte, enviándose el dinero a sí mismo.

Lo mismo ocurre con el límite de 25 tx. Si el minero Alice solo acepta cadenas de 25 transacciones o menos, y el minero Bob acepta 50, entonces Charlie haría una maniobra similar: pasaría primero con el minero usando la política más relajada (Bob) usando un conjunto mixto de UTXO de cadena corta (o UTXO ya confirmadas) y algunas UTXO de cadena larga que son demasiado largas para Alice. Luego gasta dos veces solo los UTXO de cadena corta con la minera Alice.

Monedas inutilizables

Existe un problema aún mayor en el caso específico de las cadenas de transacciones largas y las políticas no unificadas. No se trata solo de duplicar el gasto. Los usuarios normales (que no intentan duplicar el gasto) encontrarán que algunas de sus transacciones serán rechazadas si la cadena es demasiado larga.

El límite de 25 transacciones es una configuración de política. Si los mineros tienen políticas diferentes, ciertas transacciones serán válidas en parte de la red y no válidas en otros lugares. Entonces, al hacer que solo algunos mineros acepten cadenas más largas, en realidad no resolvemos el problema. Solo lograríamos habilitar y alentar a algunos usuarios a hacer cadenas largas que producirán monedas semiinfundibles de otros hasta que sean confirmadas.

Este es un problema peor que en el caso de tarifas inconsistentes porque significa que incluso si el usuario se comporta correctamente, a veces no podrá gastar una moneda. De hecho, no hay nada que el usuario pueda hacer para gastar la moneda, a menos que espere una cantidad desconocida de confirmaciones o que transmita intencionalmente su transacción directamente a un minero que acepte la moneda.

¿Qué es una prueba de doble gasto?

La idea detrás de una prueba de doble gasto es buscar en los mempool (s) una moneda de doble gasto y luego enviar una alerta a un nodo, empresa o usuario. La implementación de pruebas de doble gasto requiere cambios sustanciales en toda la pila, desde los nodos hasta los servidores RPC y las billeteras.

Estas alertas pueden ayudar con el tipo de “condición de carrera” de gastos dobles. Si un comerciante está usando un sistema de prueba de doble gasto, puede recibir una alerta para ver si hubo un intento de volver a gastar la moneda e intentar atrapar a la traviesa Alice antes de que salga de la tienda.

Por lo tanto, en el caso de robo en tiendas minoristas, la alerta puede reparar el pequeño agujero de seguridad que puede ser explotado por un doble gastador, por lo que es útil.

Por qué las pruebas de doble gasto no corrigen las políticas de minería inconsistentes

La razón principal por la que las pruebas de doble gasto no solucionan las políticas de minería inconsistentes es que estas pruebas solo se pueden usar como una alerta , (una notificación o mensaje). En realidad, no evitan el doble gasto ni obligan a los nodos a cambiar su comportamiento.

Los nodos controlan sus propias políticas. Incluso si el nodo Alice enviara un mensaje al nodo Bob informándole sobre una transacción alternativa, la alternativa se eliminará porque no es válida o no se vio por primera vez.

El uso de “alertas” para desincentivar el mal comportamiento es teóricamente posible, pero es un enfoque frágil. Significa que estamos permitiendo gastos dobles y reaccionamos después de los hechos. Cualquier comportamiento adicional necesario por razones de seguridad deberá codificarse para cada aplicación. Esto es difícil o inviable para muchos o la mayoría de los casos de uso. Me recuerda a Lightning Network en el sentido de que toma un sistema existente que funciona bien, lo rompe … y luego intenta agregar otro sistema en la parte superior para arreglar lo que acaba de romperse.

Es mucho mejor y más confiable simplemente prevenir la mayoría de los gastos dobles en primer lugar, como lo hacemos actualmente .

La segunda razón por la que esto no es una solución es por el problema de las monedas inutilizables mencionado anteriormente. Esto no ayuda en absoluto porque no es una inversión doble.

En una nota al margen: el caso de uso más adecuado para las pruebas de doble gasto (una configuración minorista) ahora también se rompería si tuviéramos políticas inconsistentes, ya que un ladrón tendría una ventana de tiempo mucho mayor para intentar su doble gasto . (Lo harían varios minutos después de salir de la tienda).

La “Red de superposición de BU”

Parte del plan de la unidad de negocio es introducir una “red superpuesta” que enviará las transacciones a los pares tan pronto como la política de esos pares las acepte (en bloques futuros) . Pero esto tampoco soluciona ni el problema de los gastos dobles fáciles ni el problema de las monedas inútiles. Todo lo que hace es retransmitir transacciones a la red que no fueron aceptadas con la esperanza de que cumplan con la política sobre bloques posteriores.

Retrasarse un bloque es el mejor de los casos. Y si un nodo tiene una política que permite cadenas de transacciones 20 veces más largas, este proceso podría repetirse durante 20 bloques. En otras palabras, su transacción podría estar rondando en el mempool hasta 20 bloques antes de ser confirmada, e incluso entonces, todavía tendría que enviar explícitamente su transacción a un nodo BU para empezar.

La peor parte de esta idea de superposición es que anima a los “ciudadanos de primera clase” y a los “ciudadanos de segunda clase” en términos de nodos. Los nodos con políticas más relajadas serían promovidos y promocionados como los “primeros receptores” que luego distribuirían transacciones a otros nodos según lo permitan sus políticas.

Esto sentaría un pésimo precedente y tendría un efecto centralizador. Bitcoin funciona mejor cuando cualquier minero puede incluir su transacción en un bloque.

<×Conclusion

Deberíamos continuar con el sistema actual de política minera unificada que admite transacciones 0-conf. Este es un ingrediente clave para los pagos rápidos, baratos y confiables de Bitcoin Cash, y ayuda a que la red funcione como un reloj.

El plan de Bitcoin Unlimited para combinar políticas inconsistentes con alertas de doble gasto y la retransmisión de transacciones es fundamentalmente erróneo y demasiado complicado. Causará problemas y es claramente una decisión equivocada para Bitcoin Cash.