What is a double spend?

As someone who uses Bitcoin, what do I need to know about how the Bitcoin system prevents double spends? Are there still circumstances where they can occur?

up vote 20 down vote accepted

A double spend is an attack where the given set of coins is spent in more than one transaction. There are a couple main ways to perform a double spend:

  • Send two conflicting transactions in rapid succession into the Bitcoin network. This is called a race attack.
  • Pre-mine one transaction into a block and spend the same coins before releasing the block to invalidate that transaction. This is called a Finney attack.
  • Own 51+% of the total computing power of the Bitcoin network to reverse any transaction you feel like, as well as have total control of which transactions appear in blocks. This is called a 51% attack.

To prevent damages from the first attack - wait for one confirmation to appear on a given transaction. To prevent damage from the second attack - wait for 6 confirmations to appear on a transaction, or less if the transaction is small (but still require at least 1). Damage from the third attack can cripple the entire Bitcoin network, so don't worry about it - your business most likely won't be the main target (it's unlikely to happen without really big money getting involved).

For more information about all those attacks, you can check out my master thesis on Bitcoin security.

  • This answer could be improved by explaining that coins can only be spent once and how the double spend attack could be detrimental to the recipient. – Murch Oct 14 '14 at 12:11
  • 2
    "your business most likely won't be the main target (it's unlikely to happen without really big money getting involved)." That is not particularly true, because if you own a lot of mining power, cost of attack becomes really small to you, so you can wreck a lot of people with little cost. Also, you don't need big money to do that. All you need is to hack one the biggest mining pools. – Igor Yalovoy Feb 23 '17 at 11:09
  • @iYalovoi, "All you need is to hack one the biggest mining pools"...that, or be a dishonest sysadmin of a large enough mining pool... – coderworks Jan 28 at 4:25
  • To prevent damages from the first and second attack types - who is supposed to do the waiting for the confirmation? The recipient or the sender? Asking because it sounds like you are saying that the recipient can "prevent damages" by waiting but s/he is actually at the mercy of the sender in these situations. A malicious sender would certainly not be interested in waiting if the attack calls for something to be done in quick succession. – coderworks Jan 28 at 4:30

As a merchant, you can reduce the likelihood of losses from a race attack double spend by having your node properly configured (no incoming transactions, explicit outgoing connections to well-connected nodes). There still is a tiny risk of getting cheated even with this configuration but it is rare and relatively random. Thus the disincentive to the attacker is that if success in double spending only rarely occurs, each failed attempt is a profitable sale to the merchant and thus in the long run it is unprofitable for the attacker and profitable for the merchant.

There are circumstances where a merchant is more vulnerable. An unattended coin change machine at a laundromat, for instance, would be the worst case scenario for the merchant. The attacker loses nothing for failed attempts (presuming the machine is not taking any profit from each "sale"), takes the gains on the occasional successful attempt, and is not likely to get caught for committing fraud as by the time the laundromat operator is aware anything happened the thief is long gone. (Of course, countering this is the likelihood that blockchain monitoring would have identified the numerous double spend attempts and thus the laundromat operator can prevent even this from occurring.)

The Finney attack also has costs that make it less of a threat than it would seem. Holding a block costs about a dollar a second. So if once a block is mined but not broadcast and it then takes the thief forty seconds to complete the transaction with the merchant, there had better be a lot more than $40 worth of profit from doing so otherwise the attempt ends up being uneconomical over the long run. Again, the merchant would know eventually that the double spend had occurred (measured in seconds, if monitoring the blockchain), so this doesn't work well in circumstances where the thief risks getting caught. So the prevention for this is to simply not make large value transactions (e.g., hundred dollars or more) on 0/unconfirmed without some delay where you are watching for double spending.

The 51% attack that would reverse confirmed transactions is so expensive and thus such a remote chance of it occurring, it is not even of concern for a typical merchant. (i.e., someone spending millions of dollars to double spend using this attack vector, if it ever happens, is going to go after trades where large exchanges of value which occur -- think gold bullion traded for bitcoins under a bridge at midnight. They are not trying to buy your consumer electronics that you ship out via UPS nor are they meeting you at Starbucks hoping to defraud you of your $200.)

If everyone could spend the same Bitcoin twice, then the whole system would collapse because Bitcoins would not be scarce.

  • 5
    That isn't what "double spend" means though. A double spend attack doesn't actually create new coins and has no effect on the money supply. Rather, it lets you take back coins from someone you previously gave them to (so they don't have them anymore). No offense, but I don't understand how this answer got to +4. – Nate Eldredge Oct 2 '14 at 21:49

protected by Community Mar 5 at 14:38

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

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