Parece ser que uno de los motivos por los que se diseñó así el pago fue para mejorar el anonimato de los pagos al no poder discernir cual es la auténtica transacción y cual "el cambio" sobrante del pago.
Tan solo aclarar que en ese funcionamiento intervienen dos aspectos, uno propio del protocolo y otro de las peculiaridades del cliente Satoshi. Por un lado, hacer que las transacciones permitieran que hubiera partes del saldo que se quedaran en origen haría mucho más complicada y menos eficiente su implementación. Si intentamos idear una manera de indicar cuánto de cada entrada se va a la salida, dejaría de haber una distinción booleana estricta entre "salidas gastadas" ("spent outputs") y "salidas no gastadas" ("unspent outputs"). También sería necesario indicar la comisión explícitamente en un campo específico. En definitiva, el modelo en que las entradas se vacían en la transacción y la comisión de transacción se calcula con una simple resta da lugar a un sistema conceptualmente muy simple, que facilita la implementación de software Bitcoin y los cálculos de saldos disponibles.
Pero por otro lado, es cierto que en el ejemplo que ponía en mi mensaje anterior un programa cliente podría enviar los 2BTC restantes de vuelta a la dirección B. De esa manera, tendríamos una transacción con entradas A (5BTC) y B (5BTC) y salidas Z (8BTC) y B (2BTC), que sería perfectamente válida para el protocolo Bitcoin. Fueron los argumentos de privacidad los que llevaron a Satoshi a utilizar esas direcciones de cambio, ocultas, de modo que al ver una transacción no haya manera de saber cuál es la parte que vuelve al pagador. En cualquier caso, es una peculiaridad del cliente Satoshi y tiene utilidad relativa ya que muchas veces es evidente cuál es el pago y cuál es el cambio (a menudo una de las cantidades es redonda y otra arrastra decimales) y, además, dificulta la identificación de direcciones asociadas a saldos. Por eso, esa gestión de las monedas dentro del monedero del cliente Satoshi es a a veces objeto de críticas y ha habido intentos de añadir un sistema de control de monedas que den al usuario más libertad para configurar las transacciones.
Bueno,
y lo de exportar el wallet para ser usado en BlockChain? Lo he intentado con los dos Plugins que hay, y no funciona ninguno. Y luego, de entre todas las opciones, no reconozco la de subir el wallet.dat...
En teoría, blockchain.info permite ya importar un monedero completo en el siguiente enlace:
https://blockchain.info/wallet/import-wallet . No lo he utilizado nunca, por lo que no sé si puede dar algún problema, pero debería funcionar.
En cualquier caso, a veces nos complicamos la vida sin necesidad. La manera más sencilla de transferir el saldo de un wallet.dat a una dirección en otro monedero consiste en hacer un único pago de todo el saldo. El único problema sería la comisión que tendrás que pagar si las monedas son muy nuevas, proceden de muchos micropagos o estás intentando pagar una cantidad menor de 0,01 BTC (o con algún output que lo sea). En tales caso, el cliente Satoshi te impone una comisión mínima.
Entiendo que si la subo, ya podré disponer en BlockChain del wallet que uso en el cliente BitCoin-Qt. ¿Se pueden acceder a dos copias distintas?. [...]
En teoría sí, pero no te recomiendo tener monederos duplicados. Te arriesgas a que uno no refleje bien el saldo cuando has hecho un gasto con el otro y cosas así. Si quieres tener acceso a tus bitcoins desde distintos dispositivos, es mejor que hagas caso a Polvos y te quedes con blockchain.info.
[...] Luego, leí por ahí, algo de que se van creando direcciones a partir de las 100 (entendí que las 100 direcciones ocultas ya están generadas al crear el wallet); y entonces se pueden desincronizar.
El cliente Satoshi crea las direcciones disponibles en tandas de cien (valor por defecto; se puede configurar). Eso quiere decir que si después de instalar el cliente haces una copia de seguridad de wallet.dat y haces unos cuantos pagos, podrás recuperar tu saldo a partir de la copia de seguridad mientras el número de direcciones utilizadas desde la copia (incluyendo las direcciones de cambio) no pase de las cien. Si no me equivoco, creo que cada vez que se utiliza una dirección de esa reserva de direcciones pregeneradas se añade una dirección nueva a la reserva, de modo que siempre haya un exceso de cien direcciones (o el valor configurado). Ten cuidado porque si haces una copia de seguridad y después encriptas el monedero, se reasignan nuevas direcciones de reserva (hubo un usuario que perdió 99BTC debido a esto; recibió 100BTC, hizo una copia de seguridad de wallet.dat, encriptó el monedero y, después, hizo un pago de 1BTC. Al destruir el wallet.dat perdió los 99BTC restantes para siempre porque se habían ido a una dirección de cambio de las pregeneradas después de la encriptación). La moraleja de estas cosas es que, con el cliente Satoshi, deberías hacer copias de seguridad habituales si haces pagos frecuentes o si tienes una cantidad considerable de bitcoins (y si tienes muchos, mejor que los guardes en un monedero de papel).