Re: Bitcoin crash when sending coins
2010 Jan 25
See all posts
Re: Bitcoin crash when sending coins @ Satoshi Nakamoto
- Author
-
Satoshi Nakamoto
- Email
-
satoshinakamotonetwork@proton.me
- Site
-
https://satoshinakamoto.network
riX
Bitcoin crash when sending coins
January 25, 2010, 11:07:16 PM
Lately when I've been trying to send coins, the following popups
twice, then the application terminates.
EXCEPTION: St13runtime_error
SendMoney() : wtxNew.AcceptTransaction() failed
c:\Documents and Settings\usernameitcoin-0.2.0itcoin.exe in
CMyApp::OnExceptionInMainLoop()
When i restart bitcoin.exe, the transaction is showing as
0/unconfirmed. The status do not change even when the total block count
increases.
I'm running two instances of bitcoin in my home LAN, one at my
desktop computer, and one in a virtual machine on my laptop, with the
switch -connect=192.168.0.2 (ip of desktop computer).
This occurs when I send to my own bitcoin address, to my other
computers bitcoin address and to an other bitcoin address not currently
active anywhere. I'm not sending by ip.
I've been moving wallets and index-files back and forth, could this
have something to do with this?
Satoshi Nakamoto
January 27, 2010, 09:52:27 PM
That is what happens if you copy wallet files around. If you copy
your wallet file to a second computer, then they both think the money in
the wallet is theirs. If one spends any of it, the other doesn't know
those coins are already spent and would try to spend them again, and
that's the error you would hit.
Now that it's clear this is a key error message, it ought to be
something more like "the money appears to be already spent... this could
happen if you used a copy of your wallet file on another computer."
You can move or backup your wallet file, but it needs to have only
one "lineage" and only used in one place at a time. Any time you
transfer money out of it, then you must no longer use any previous
copies.
This brings up a good point. In the case of restoring a backup that
may be from before you spent some coins, we need to add functionality to
resync it to discover which coins have already been spent. This would
not be hard to do, it just hasn't been implemented yet. I'll add it to
the list. This would make it mostly repair the situation instead of
giving that error message.
riX
January 27, 2010, 10:14:20 PM
Yes, I thought it had something to do with that.
It would be nice if there was a wallet tool for merging wallet files,
removing unused bitcoin addresses and as you say resyncing. (I tried to
just re-download all the blocks, but as you know the transactions stayed
anyway.) What about resyncing in the future when the Merkle-tree is
pruned?
Satoshi Nakamoto
January 28, 2010, 11:08:02 PM
The resync idea would go through your wallet and check it against the
block index to find any transactions that your current computer doesn't
realize are already spent. That could happen if they were spent on
another computer with a copy of the wallet file, or you had to restore
the wallet to a backup from before they were spent. Currently, the
software just assumes it always knows whether its transactions are spent
because it marks them spent in wallet.dat when it spends them.
A wallet merge tool is possible to implement but much less in demand
once resync solves most of the problem. With resync, you could do about
the same thing by sending all the money from one wallet to the other.
The receiver would resync and discover all its overlapping coins were
spent, then receive them in the new transaction.
Satoshi Nakamoto
February 03, 2010, 11:29:57 PM
I uploaded this fix to the SVN. It watches for spent coins and
updates your wallet on load and also continuously as blocks come in. I
also put a better error message, but it should never hit it because it
always finds spent coins ahead of time, unless you spent the same money
at the same time on two computers at once.
If you want to try it, PM or e-mail me your e-mail address where I
can send it as an attachment and also what OS (win, linux 32-bit, linux
64-bit).
Re: Bitcoin crash when sending coins
2010 Jan 25 See all postsSatoshi Nakamoto
satoshinakamotonetwork@proton.me
https://satoshinakamoto.network
Lately when I've been trying to send coins, the following popups twice, then the application terminates.
When i restart bitcoin.exe, the transaction is showing as 0/unconfirmed. The status do not change even when the total block count increases.
I'm running two instances of bitcoin in my home LAN, one at my desktop computer, and one in a virtual machine on my laptop, with the switch -connect=192.168.0.2 (ip of desktop computer).
This occurs when I send to my own bitcoin address, to my other computers bitcoin address and to an other bitcoin address not currently active anywhere. I'm not sending by ip.
I've been moving wallets and index-files back and forth, could this have something to do with this?
That is what happens if you copy wallet files around. If you copy your wallet file to a second computer, then they both think the money in the wallet is theirs. If one spends any of it, the other doesn't know those coins are already spent and would try to spend them again, and that's the error you would hit.
Now that it's clear this is a key error message, it ought to be something more like "the money appears to be already spent... this could happen if you used a copy of your wallet file on another computer."
You can move or backup your wallet file, but it needs to have only one "lineage" and only used in one place at a time. Any time you transfer money out of it, then you must no longer use any previous copies.
This brings up a good point. In the case of restoring a backup that may be from before you spent some coins, we need to add functionality to resync it to discover which coins have already been spent. This would not be hard to do, it just hasn't been implemented yet. I'll add it to the list. This would make it mostly repair the situation instead of giving that error message.
Yes, I thought it had something to do with that.
It would be nice if there was a wallet tool for merging wallet files, removing unused bitcoin addresses and as you say resyncing. (I tried to just re-download all the blocks, but as you know the transactions stayed anyway.) What about resyncing in the future when the Merkle-tree is pruned?
The resync idea would go through your wallet and check it against the block index to find any transactions that your current computer doesn't realize are already spent. That could happen if they were spent on another computer with a copy of the wallet file, or you had to restore the wallet to a backup from before they were spent. Currently, the software just assumes it always knows whether its transactions are spent because it marks them spent in wallet.dat when it spends them.
A wallet merge tool is possible to implement but much less in demand once resync solves most of the problem. With resync, you could do about the same thing by sending all the money from one wallet to the other. The receiver would resync and discover all its overlapping coins were spent, then receive them in the new transaction.
I uploaded this fix to the SVN. It watches for spent coins and updates your wallet on load and also continuously as blocks come in. I also put a better error message, but it should never hit it because it always finds spent coins ahead of time, unless you spent the same money at the same time on two computers at once.
If you want to try it, PM or e-mail me your e-mail address where I can send it as an attachment and also what OS (win, linux 32-bit, linux 64-bit).