ca1yps05 (OP)
Newbie
Offline
Activity: 12
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 05:25:30 PM |
|
So I transferred some coins from Mt.Gox to my personal wallet that I maintain using the bitcoin qt client. It takes a while to arrive, so I check out blockchain.info to see if it shows anything there.
To my surprise it shows a balance of zero!! Even though my balance prior to the transfer was 23.
Even though my client still shows a balance of 23, I was convinced I was hacked somehow.
After looking at the blockchain.info website, it looks like coins received at my wallet address are then distributed to other addresses. So it reports my wallet address as zero, but then there are several other addresses these coins are sent to that now hold the balance.
Why? What are these addresses? They don't belong to my bitcoin client, but my client stills displays my correct balance and allows me to spend them. Some of the transactions on blockchain.info don't even show confirmation status, but the funds are there.
Anyone willing to look on blockchain.info, my address is 1EkLWsTpF1Ab1PnD9xAApYAgmepK45C4Cc.
I'm no longer convinced I was hacked, but now I'd like to know why this happens. I used to use another wallet file and this never happened. Does the bitcoin qt client somehow manage multiple addresses that are not visible to the user?
|
|
|
|
DannyHamilton
Legendary
Offline
Activity: 3472
Merit: 4796
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 07:36:44 PM |
|
This is the "change" from any transactions you've sent in the past:
With the way bitcoin works, you can't partially spend a previous output that you received. It has to be completely spent. So, if you receive 10 BTC all in a single transaction from someone/somewhere at an address, then that address now has a single 10 BTC output.
Later if you want to send 2 BTC to somebody, the program can use the previous 10 BTC output as an input into the transaction, and create a 2 BTC output to the address where you want to send it. This leaves 8 BTC leftover in the transaction. If you don't send those 8 BTC somewhere, then they become miner fees and end up in the coinbase transaction of the new block for the miner to keep. If you don't want to give those 8 BTC away as fees to the miner, then you need to include a second output in your transaction sending the 8 BTC back to your own wallet. As an analogy, think of pulling a $10 bill out of your pocket to pay for something that costs $2, you get $8 back in "change".
The way Bitcoin-Qt does this is to create a new bitcoin address that it doesn't tell you about and keeps track of that address and the associated private key in your wallet.dat. Since this isn't an address that you requested in the "Receive Coins" tab of the user interface, it doesn't show up in that list. Bitcoin-Qt knows about the address since it is in the wallet.dat file, so it includes it in the balance that it shows you. Bitcoin-Qt uses a new change address for every transaction. So if you create 10 different transactions, each sending bitcoins somewhere, then your wallet will have used 10 different change addresses (although some of them may be empty if Bitcoin-Qt used the bitcoins associated with some of those address as inputs into other transactions).
|
|
|
|
ca1yps05 (OP)
Newbie
Offline
Activity: 12
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 08:19:30 PM |
|
This is the "change" from any transactions you've sent in the past:
With the way bitcoin works, you can't partially spend a previous output that you received. It has to be completely spent. So, if you receive 10 BTC all in a single transaction from someone/somewhere at an address, then that address now has a single 10 BTC output.
Later if you want to send 2 BTC to somebody, the program can use the previous 10 BTC output as an input into the transaction, and create a 2 BTC output to the address where you want to send it. This leaves 8 BTC leftover in the transaction. If you don't send those 8 BTC somewhere, then they become miner fees and end up in the coinbase transaction of the new block for the miner to keep. If you don't want to give those 8 BTC away as fees to the miner, then you need to include a second output in your transaction sending the 8 BTC back to your own wallet. As an analogy, think of pulling a $10 bill out of your pocket to pay for something that costs $2, you get $8 back in "change".
The way Bitcoin-Qt does this is to create a new bitcoin address that it doesn't tell you about and keeps track of that address and the associated private key in your wallet.dat. Since this isn't an address that you requested in the "Receive Coins" tab of the user interface, it doesn't show up in that list. Bitcoin-Qt knows about the address since it is in the wallet.dat file, so it includes it in the balance that it shows you. Bitcoin-Qt uses a new change address for every transaction. So if you create 10 different transactions, each sending bitcoins somewhere, then your wallet will have used 10 different change addresses (although some of them may be empty if Bitcoin-Qt used the bitcoins associated with some of those address as inputs into other transactions).
I see. I didn't realize this was going on in the background. So if I send 10 transactions, I'm potentially creating 20 transactions since the client can create 10 "change" addresses? I guess the biggest reason I ask is for backing up my wallet.dat. I was under the impression I need to back it up at least every 100 transactions since that's how many addresses can be stored in the wallet. This means I will be going through these addresses much faster than I originally thought.
|
|
|
|
reich
Newbie
Offline
Activity: 14
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 08:36:44 PM |
|
Just give it time.
|
|
|
|
DannyHamilton
Legendary
Offline
Activity: 3472
Merit: 4796
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 08:39:47 PM Last edit: May 16, 2013, 09:01:00 PM by DannyHamilton |
|
I see. I didn't realize this was going on in the background. So if I send 10 transactions, I'm potentially creating 20 transactions since the client can create 10 "change" addresses?
I guess the biggest reason I ask is for backing up my wallet.dat. I was under the impression I need to back it up at least every 100 transactions since that's how many addresses can be stored in the wallet. This means I will be going through these addresses much faster than I originally thought.
If you send 10 transactions then you are creating 10 transactions. Each transaction has multiple outputs. A single transaction consists of one or more inputs and 0 or more outputs. The total value of the outputs is not allowed to exceed the total value of the inputs. Each transaction you create to send bitcoins sends the "change" back to a new address in your wallet, so if you send 10 transactions, then your wallet will have used up 10 addresses of the 100 in the pool during the previous backup. Additionally, each time you click the "New Address" button in the "Receive coins" section, you also use up an address from the pool. Note that receiving a transaction to an address that you already have in your wallet does not use up any additional addresses from the pool. So, if you perform a backup, then click the "New Address" button 12 times, and send out 14 transactions, you will have used up 12 + 14 = 26 addresses from the pool. It is a good idea to keep multiple backups in case one of them becomes damaged, lost, or is otherwise unusable. As such, I figure backing up after using 25 addresses, and keeping the 3 most recent backups is a pretty safe way to go. You'll have to make your own decisions on how you want to mitigate risk. Also note that, if you think you'll go through addresses fast enough, you can increase the size of the keypool beyond 100 with a configuration file.
|
|
|
|
ca1yps05 (OP)
Newbie
Offline
Activity: 12
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 08:53:19 PM |
|
I see. I didn't realize this was going on in the background. So if I send 10 transactions, I'm potentially creating 20 transactions since the client can create 10 "change" addresses?
I guess the biggest reason I ask is for backing up my wallet.dat. I was under the impression I need to back it up at least every 100 transactions since that's how many addresses can be stored in the wallet. This means I will be going through these addresses much faster than I originally thought.
If you send 10 transactions then you are creating 10 transactions. Each transaction has multiple outputs. A single transaction consists of one or more inputs and 0 or more outputs. The total value of the outputs is not allowed to exceed the total value of the inputs. Each transaction you create to send bitcoins sends the "change" back to a new address in your wallet, so if you send 10 transactions, then your wallet will have used up 10 addresses of the 100 in the pool during the previous backup. Additionally, each time you click the "New Address" button in the "Receive coins" section, you also use up an address from the pool. Note that receiving a transaction to an address that you already have in your wallet does not use up any additional addresses from the pool. So, if you perform a backup, then click the "New Address" button 12 times, and send out 14 transactions, you will have used up 12 + 14 = 26 addresses from the pool. It is a good idea to keep multiple backups in case one of them becomes damaged, lost, or is otherwise unusable. As such, I figure backing up after using 25 addresses, and keeping the 3 most recent backups is a pretty safe way to go. You'll have to make your own decisions on how you want to mitigate risk. Also note that, if you think you'll go through addresses fast enough, you can increase the size of the keypool beyond 100 with a configuration file. Thanks! You are the man!
|
|
|
|
DannyHamilton
Legendary
Offline
Activity: 3472
Merit: 4796
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 09:04:41 PM |
|
Thanks! You are the man!
Please note that all my advice about addresses and the key pool assumes that you are only using the standard user interface of the Bitcoin-Qt wallet found at bitcoin.org. If you are using some modified version of Bitcoin-Qt such as the "coin Control" version or the NFTF (No Forced Transaction Fee) version, then the behavior may or may not be different. Additionally, if you are using API (Application Programing Interface) calls to bitcoind or in the "Console" section of the "Debug window" it is possible that you could be using more (or less) addresses from the key pool.
|
|
|
|
Scott J
Legendary
Offline
Activity: 1792
Merit: 1000
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 09:09:19 PM |
|
Does DannyHamilton have a tip jar?
|
|
|
|
DannyHamilton
Legendary
Offline
Activity: 3472
Merit: 4796
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 09:16:26 PM |
|
Does DannyHamilton have a tip jar?
No, because I prefer to use a separate address for every transaction. I don't like to re-use addresses (which is required in the case of a tip jar). If anyone ever feels an overwhelming desire to tip me, they typically PM me and request an address to send the tip to. If anyone has ever sent me a tip they should never re-use that same address to re-tip me in the future. It is necessary to get a new tip address every time. I frequently discard old private keys and addresses after I've used them, so unless you check the blockchain and verify that there are still currently unspent outputs at the address, tips sent to an address that I've used before will likely end up in the great bitbucket in the sky never to be spent by anybody again.
|
|
|
|
Scott J
Legendary
Offline
Activity: 1792
Merit: 1000
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 09:19:58 PM |
|
Does DannyHamilton have a tip jar?
No, because I prefer to use a separate address for every transaction. I don't like to re-use addresses (which is required in the case of a tip jar). If anyone ever feels an overwhelming desire to tip me, they typically PM me and request an address to send the tip to. If anyone has ever sent me a tip they should never re-use that same address to re-tip me in the future. It is necessary to get a new tip address every time. I frequently discard old private keys and addresses after I've used them, so unless you check the blockchain and verify that there are still currently unspent outputs at the address, tips sent to an address that I've used before will likely end up in the great bitbucket in the sky never to be spent by anybody again. Well, I would like to send you a small tip for your response in this thread. If you would like to PM me an address, that would be great ![Smiley](https://bitcointalk.org/Smileys/default/smiley.gif)
|
|
|
|
DannyHamilton
Legendary
Offline
Activity: 3472
Merit: 4796
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 09:29:05 PM |
|
If you would like to PM me an address, that would be great ![Smiley](https://bitcointalk.org/Smileys/default/smiley.gif) PM sent. Thank you for your contribution. It is appreciated.
|
|
|
|
reich
Newbie
Offline
Activity: 14
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 10:40:51 PM |
|
Does DannyHamilton have a tip jar?
No, because I prefer to use a separate address for every transaction. I don't like to re-use addresses (which is required in the case of a tip jar). If anyone ever feels an overwhelming desire to tip me, they typically PM me and request an address to send the tip to. If anyone has ever sent me a tip they should never re-use that same address to re-tip me in the future. It is necessary to get a new tip address every time. I frequently discard old private keys and addresses after I've used them, so unless you check the blockchain and verify that there are still currently unspent outputs at the address, tips sent to an address that I've used before will likely end up in the great bitbucket in the sky never to be spent by anybody again. Why dont you just use 1 address?
|
|
|
|
DannyHamilton
Legendary
Offline
Activity: 3472
Merit: 4796
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 10:54:27 PM |
|
Does DannyHamilton have a tip jar?
No, because I prefer to use a separate address for every transaction. I don't like to re-use addresses (which is required in the case of a tip jar). If anyone ever feels an overwhelming desire to tip me, they typically PM me and request an address to send the tip to. If anyone has ever sent me a tip they should never re-use that same address to re-tip me in the future. It is necessary to get a new tip address every time. I frequently discard old private keys and addresses after I've used them, so unless you check the blockchain and verify that there are still currently unspent outputs at the address, tips sent to an address that I've used before will likely end up in the great bitbucket in the sky never to be spent by anybody again. Why dont you just use 1 address? Using a new address for every transaction increases anonymity and more importantly security. It is the way that Bitcoin was intended to be used (though for simplicity and to avoid confusion for those who don't understand how bitcoin works, several of the lightweight wallets unfortunately encourage re-use of addresses). If you read the original Satoshi Whitepaper you'll find that in the second paragraph of section 10 it states: a new key pair should be used for each transaction
|
|
|
|
reich
Newbie
Offline
Activity: 14
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 11:10:57 PM |
|
Does DannyHamilton have a tip jar?
No, because I prefer to use a separate address for every transaction. I don't like to re-use addresses (which is required in the case of a tip jar). If anyone ever feels an overwhelming desire to tip me, they typically PM me and request an address to send the tip to. If anyone has ever sent me a tip they should never re-use that same address to re-tip me in the future. It is necessary to get a new tip address every time. I frequently discard old private keys and addresses after I've used them, so unless you check the blockchain and verify that there are still currently unspent outputs at the address, tips sent to an address that I've used before will likely end up in the great bitbucket in the sky never to be spent by anybody again. Why dont you just use 1 address? Using a new address for every transaction increases anonymity and more importantly security. It is the way that Bitcoin was intended to be used (though for simplicity and to avoid confusion for those who don't understand how bitcoin works, several of the lightweight wallets unfortunately encourage re-use of addresses). If you read the original Satoshi Whitepaper you'll find that in the second paragraph of section 10 it states: a new key pair should be used for each transaction
Ok, thanks for the great information!
|
|
|
|
FenixRD
Sr. Member
![*](https://bitcointalk.org/Themes/custom1/images/star.gif) ![*](https://bitcointalk.org/Themes/custom1/images/star.gif) ![*](https://bitcointalk.org/Themes/custom1/images/star.gif)
Offline
Activity: 364
Merit: 250
I am Citizenfive.
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 11:20:37 PM Last edit: May 16, 2013, 11:46:02 PM by FenixRD |
|
Dude thats bullshit you can use the same bitcoin address forever theres no "security risk"
Oh! Thanks, We'll ignore all the guys who sounded like they knew what they were talking about, including Satoshi, devs, cryptanalysts, and security experts. Glad you were able to simplify this for us.
|
Uberlurker. Been here since the Finney transaction. Please consider this before replying; there is a good chance I've heard it before.
-Citizenfive
|
|
|
BTCoder
Newbie
Offline
Activity: 14
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
May 16, 2013, 11:43:25 PM |
|
Im not sure why that is occuring.. strange indeed.
|
|
|
|
|