30

I did a small transaction some days ago:

https://www.blockchain.com/btc/tx/4c07a07dfd9d5b79d168ec6835df876c64e82350a8f9211bf586d858a5aeb9ba

Some info:

  • 1JFWE8THcAQQRYx99c43DXSGyoPL9Zs62D is my wallet
  • 1PCGNxgheKTaeT6xvTabcY8ZbS3gDpFtb is the wallet I sent 0.22 BTC

Questions:

  • Who is 147krm8yWUcVq9Ta25h679TCpsEznzgvRz?
  • Why there is more than one output?
1

2 Answers 2

35

147krm8yWUcVq9Ta25h679TCpsEznzgvRz is the change from the transaction. There was more than one output because you didn't have any previous transactions (sometimes thought of as "coins") that added up the exact amount of the transaction.

So your client picked some coins that added up to at least that amount and then created a new address to receive the leftover amount. So, 147krm8yWUcVq9Ta25h679TCpsEznzgvRz is you. You just don't know it because the client isn't good at disclosing that you. Essentially you wanted to send 22 cents, but only had dollar bills in your wallet. So the 0.78 was the leftover amount and the client created a new address to hold it rather than reusing 1JFWE8THcAQQRYx99c43DXSGyoPL9Zs62D.

It seems that this behavior of the Qt client (silently creating new addresses that receive the change from transactions) was created for privacy reasons. I believe the thinking was, why send the change back to the original address when a new address could easily be created? In that way, it's not even obvious whether your transaction was a payment of 0.78 BTC with a change of 0.22, or a payment of 0.22 BTC with a change of 0.78 BTC. But it seems to be causing a lot of confusion for users, based on what I see on this stack exchange. In my opinion, it might be better if the default client sent the change back to the sending address. Or if, at least, it showed that change address and its balance somewhere.

Some other wallets do let you manually select which address should receive the change from a transaction.

7
  • If the client would send the change back to your own address, you would only have one address. That way, everyone would be able to see your wallets balance, that's not what we want, right? May 14, 2013 at 18:27
  • 3
    That not the ideal situation. But I prefer it over the default, where the user doesn't even know where his own balances are. My actual preference is something like the blockchain.info web wallet: it let's you choose where to send the change. Including a choice for originating address or new address. But, most importantly, showing you all of the addresses that you have. The real pain comes from the fact that the default client doesn't even let you know about the existence of the change addresses without using the command line. May 14, 2013 at 19:30
  • on that I'm with you. But keep in mind that Bitcoin-Qt is a very basic client and is designed for simplicity. Most users do not know what change is and why they would make new addresses for it. But indeed, they should know they have new addresses, as otherwise they will lose them if they are made after their last wallet.dat backup. Consider using Armory when you want more options on sending transactions. May 14, 2013 at 19:35
  • 1
    I hate to make this a threaded discussion about client behavior, but I think that being "simple" means hiding complexity is a way that makes users lives easier. This is hiding complexity poorly, in a way that makes using the client harder and more dangerous. Personally, I can get by with the standard client, because I understand the command line, but I wouldn't recommend the standard client to beginners. FWIW, I find that Armory is completely unstable on the Mac. It crashed constantly for me. (Although it's been a few weeks since I tried last.) May 14, 2013 at 19:43
  • Armory's Mac support is very new, yes. And besides, the main developer of Armory is completely rewriting the core codebase of the client to allow for greater stability. Regarding your remarks about the Bitcoin-Qt client, you should report your issues to the Bitcoin developers on GitHub, hopefully some of them will understand that they make great sense. May 14, 2013 at 19:48
2

The whole idea of change is a bit hard to grasp when it comes to bitcoin. With paper currency, its fairly obvious that you need change from a 20 dollar bill if you need to spend only 14 dollars.

In theory the Bitcoin protocol could have been set up to just send the exact amount as a transaction, but for the blockchain transaction log, I think it was set up like this for neat traceability. If you didn't have the 'input = output - transaction cost' rule, nodes that verify all the transactions would instead need to calculate/determine the balances of individual addresses to see if they have enough coin to cover the transaction. I guess this would cost more in terms of database querying of the log, harder verification of transactions..

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.