Peter Todd's post on r/Bitcoin has been up-voted near the top, but I haven't seen it mentioned here. I am adding this thread so that we can discuss:
http://www.reddit.com/r/Bitcoin/comments/239bj1/doublespending_unconfirmed_transactions_is_a_lot/He successfully double spent a few 0-confirm transactions by taking advantage of the fact that not all miners have the exact same mempool policies. In one case, he used the fact that certain miners are not adding the new V0.9 lower-fee 0.01mBTC/kb transactions to their mem-pools, and in another case he used the fact that certain miners block transactions to specific addresses (e.g., on-chain gambling).
This is "business as usual" in my mind, as merchants (or payment providers) accepting 0-confirm transactions must understand the expected loss % and the best-practices methods to mitigate the risk of fraud.
What I don't think was clear from Peter Todd's post was:
1. His method only succeeds with some probability
P, where
P is small. Due to the network's change in the TX fee structure for V0.9,
P is suddenly larger than it was prior to V0.9. But as the network converges from this change over the coming months, I expect
P to decline again.
2. A merchant's listening node can estimate
P. If the listening node sees that the transaction only propagated to an estimated 60% of the hash-power for some reason, this immediately looks fishy. The merchant can wait for 1 confirm in these rare cases (which also incentivizes honest users to update their wallets to avoid this situation happening by accident).
As bitcoin evolves, we will compile statistics on the prevalence of zero-confirm fraud, and we will establish best-practices to guard against it. Merchants will then balance that expected losses from accepting 0-confirm transactions (which I expect to be less than Visa in most use cases), with the loss of business from not accepting them. For example, if
R is the risk that a given person attempts to double spend, then the expected losses,
L, are
L =
P x
R. If
P = 10% and
R = 2%, then you expect losses of 0.2%. If your customers are less trustworthy, perhaps
R = 20%, in which case your expected losses increase to 2%. You as a merchant can now use this information to make your decision. Does the benefit of accepting zero-confirm transactions, given the risks, outweigh the loss of business by not accepting them? What value limit should you enforce? Does
L% cut too far into your margins (e.g., a grocery store), or is it largely irrelevant (e.g., a fine dining restaurant)?
A more difficult form of zero-confirm fraud to fight against would be miners that offer out-of-band double-spending services, as we discussed here:
https://bitcointalksearch.org/topic/when-does-it-become-fraud-the-ethics-of-bitcoin-mining-and-zero-confirm-txs-502571To new readers, when we say "successfully double spend" we don't mean that coins were spent twice and that suddenly the network has more coins that it did before. What we mean is that the second transaction broadcast to the network got mined instead of the first. It can be used as a method to perpetrate fraud by tricking someone into thinking they got paid when 5 - 20 min later they find out that they didn't. It is sort of like purposely writing a bad cheque, but a bad cheque bounces 100% of the time and you don't find out for a week. A double-spent 0-confirm transaction "bounces" with probability P. In other words, zero-confirm transactions are much safer than personal cheques.