Post
Topic
Board Beginners & Help
Re: How recoverable is a wallet?
by
gadsdengraphics
on 09/03/2012, 00:05:52 UTC
If I understand correctly (someone please correct me if not) any address you have used before copying the wallet will be perfectly accessible from either copy. As will any coins sent to those addresses, regardless of whether they were sent before or after the split. Speaking as a fairly new user myself, this I think is all most new users would expect, and that part is fine. What is not immediately apparent is that the wallet contains an additional 100 addresses pregenerated for later use. This means when you "add" a new address, it actually takes it from the pregenerated pool. The first 100 address* you add to one wallet will already exist in the copy. Handy, but not perfect. After you go through the 100 address*, then it has to start creating new ones, which won't be in the copy. That's still not terrible, but if you burn through 100 address* on both the original and the copy, then neither wallet will contain a complete set of addresses, that means some Bitcoins will only be available in one or the other (and some will be in both), which does sound like a rather confusing situation.
*I understand some are used up for behind-the-scenes purposes, so you shouldn't expect a full 100 to use directly yourself.

So (again, assuming I've understood all this right myself) it looks like all you would need to avoid these problems is to make one copy your "Primary" wallet, and regularly replace the others with fresh copies of it.

But there's another problem it won't fix. That pregenerated address pool can be helpful, but it can also get you in trouble. Because when you add a "new" address in one copy of the wallet it might already be one you used in a different copy. That could be confusing, e.g. if you unknowingly give the same address to but both Alice and Bob to accept a 5 BTC payment from each, and 5 BTC appears, you might at first thing they both paid, but then you realize it's the same address and you've only been paid once... but by whom?

All correct.

Another thing to take into account is that with the Satoshi client, a new key is used for sending as well as when you generate a new receiving address.

Example: You have 1 BTC on a key, which we'll call key #1.  You send .8 BTC to Bob, who has key #2. With the Satoshi client, you are actually making two exchanges:
  • from key #1 to key #2 for .8 BTC
  • from key #1 to key #3 for .2 BTC
Afterwards, key #1 is empty, key #2 (Bob's key) has an additional .8 BTC, and your client pulls an address out of pool to use as key #3, which gets the "change" of .2 BTC from the transaction.

I'm not really sure why this design decision was made - I suppose it does add some small amount of obscurity, since there is no way to tell if the transaction was for .8 BTC or for .2 BTC, but it doesn't seem worthwhile to me. The mobile client I use, Bitcoin Spinner, uses one address from start to finish.  To accept payments, I'll sometimes pop onto instawallet and make a new wallet for the transaction.  Once it goes through, I forward the proceeds on to my primary address, to avoid the "who just paid me?" issue, above.

Bitcoin is complex, but not complicated (if that makes sense).