¿Por qué se debe consumir el UTXO por completo? [duplicar]

Imagine que Alice posee 10 BTC y quiere enviar 1 BTC a bob, con una tarifa de minero de 1 BTC.

En la cadena de bloques, la transacción se registra como "Alice gastó 10 bitcoins, 1 para Bob, 1 para el minero y 8 para Alice".

Eso parece bastante poco intuitivo. ¿Por qué no registrar explícitamente el pago y la tarifa de los mineros?

Respuestas (2)

He investigado esto antes y nunca he podido encontrar una justificación explícita de Satoshi, pero hay un par de razones posibles.

Para: Simplifica la verificación de SPV

Imagine que, en lugar de utilizar el modelo gastado/no gastado, realiza un seguimiento del saldo de cada dirección. Obtiene una transacción de confirmación cero que le paga desde una dirección.

Ahora, para averiguar cuál es el saldo de esta dirección, debe obtener todos los depósitos y retiros de ella. Si te saltas uno, calculas el saldo equivocado.

Puede arreglar eso forzando que cada transacción desde una dirección haga referencia a la última transacción por hash, pero eso elimina una propiedad importante de Bitcoin: múltiples depósitos y retiros hacia y desde la misma dirección se pueden procesar al mismo tiempo, sin coordinación entre ellos. .

Para: mejora la privacidad de las transacciones en teoría

La salida de cambio (a la que hizo referencia como '8 BTC van a Alice') se envía a una dirección completamente nueva y, en teoría, no es posible averiguar qué salida es la salida de cambio. En la práctica, la salida real suele ser un buen número redondo, y la salida de cambio es algo así como 0,00019841.

En contra: Hace que aumentar la tarifa sea realmente complicado

Si ha usado Bitcoin durante el tiempo suficiente, probablemente se haya encontrado con una situación en la que alguien le envió algunos Bitcoins, pero no adjuntó una tarifa.

Si la salida de cambio se marcara explícitamente, el remitente simplemente podría volver a enviar la transacción con una salida de cambio ligeramente menor y una tarifa ligeramente mayor. Los mineros sabrían que pueden aceptar con seguridad la nueva transacción en su grupo de memoria sin ayudar a nadie a cometer fraude. Entonces, no necesitaríamos cosas como reemplazar-por-cuota o niño-paga-por-padre.

En contra: hace que el conjunto de UTXO sea mucho más grande

Si tiene 50 salidas que componen su dinero, eso significa que está ocupando 50 veces más espacio que si tuviera un solo saldo.

TL; DR: Podría haberse hecho de otra manera, y hay algunos argumentos razonablemente convincentes, pero es imposible cambiar ahora.

Probablemente debería señalar que conceptos como la base de datos UTXO ni siquiera existían hasta Bitcoin Core 0.8, confunde a muchas personas cuando leen sobre "poda" y se preguntan por qué el sistema que usamos hoy parece completamente extraño.
@Bitcoin No existían porque la idea era que la persona promedio usaría una billetera SPV. La idea de que el consumidor o comerciante promedio debe ejecutar un nodo completo es una invención relativamente reciente.
La UTXO no existía porque aún no se había escrito; en su lugar, el cliente usaba una base de datos BerkeleyDB difícil de manejar y con un escalamiento deficiente. Las implementaciones actuales de SPV son atroces desde el punto de vista de la escalabilidad y la privacidad, por lo que es bastante irresponsable sugerirlas a cualquiera.
@Bitcoin Tal vez debería reformular: la idea de tener una base de datos de transacciones y marcarlas como gastadas y no gastadas existía, pero no se consideró importante optimizar el tamaño del conjunto de salida no gastada, porque no puede servir a los clientes SPV con solo una base de datos UTXO. WRT a la escalabilidad y la privacidad... esto probablemente se esté desviando del tema. ¿Llevamos esta discusión a Bitcoin Lounge?
El argumento "En contra: hace que el conjunto de UTXO sea mucho más grande" solo es válido si se supone que todos usan solo una dirección. Lo que significa una privacidad extremadamente mala.
@Jannes: posiblemente, pero no estoy convencido de que sea particularmente difícil vincular conjuntos de transacciones por quién las envió. Y hay muchas circunstancias en las que las personas usan la misma dirección repetidamente de todos modos, a pesar de que cuesta lo mismo en términos de espacio en el sistema actual.

Los resultados de las transacciones solo tienen dos estados, gastado y no gastado, por lo que gastar parte de uno no es posible sin la creación de otro. Con un booleano gastado/no gastado, no hay estado que tener que almacenar y recuperar, lo que permite estados más simples en las billeteras y hace que escalar lejos de la cadena de bloques sea mucho más fácil. Imagínese si tuviéramos una transacción que gasta una cantidad decreciente en una salida, ¿qué impide que esa transacción se repita y debite la cantidad nuevamente? Tener salidas atómicas significa que no necesita preocuparse por cosas como los números de serie, que son los sistemas alternativos como Ethereum y NXT, debido a su falta de protección de reproducción inherente.

Tampoco tiene sentido indicar la tarifa si se puede inferir, y al hacerlo se ahorra espacio en la transacción.

Transaction outputs only have two states, spent and unspent, Entiendo que. No entiendo la razón de diseñar el protocolo de esa manera. ¿Por qué se eligió este sistema?
@Bitcoin: los comentarios solo son para aclaraciones y adiciones menores , edite la respuesta para incluir información adicional allí. :)