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?
He investigado esto antes y nunca he podido encontrar una justificación explícita de Satoshi, pero hay un par de razones posibles.
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. .
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.
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.
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.
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?
claris
Nick ODell
claris
Nick ODell
Janes
Nick ODell