Bitcoin Payments can now easily Cancelled— A Step Forward or Two Back ?
One of the key properties of bitcoin is that it is irreversible unlike credit cards. While, this is still true for confirmed bitcoin…
Bitcoin Payments can now be easily Cancelled— A Step Forward or Two Back ?
One of the key properties of bitcoin is that it is irreversible unlike credit cards. While, this is still true for confirmed bitcoin payments, there are advances happening in bitcoin that are making it easy to reverse unconfirmed payments. We explore these new technology/UI advances and their repercussions
Blue wallet announced cancel feature using RBF way back in May 2020
Blue wallet advertises it as a feature that you can used to cancel transactions that you regret like sending coins to a scam/HYIP. However, what is scam and what is a genuine merchant payment is subjective. A customer uses the same feature below to fraud a Thai POS system
Few weeks ago electrum has recently announced cancel feature in 4.0.4 release.
What this does is to replace the existing transaction with a transaction of higher fee that sends the money back to your own wallet. This effectively nullifies/cancels the previous transaction.
Electrum developer SomberNight, explains the motivation for adding this feature
I made this PR because I personally have needed to cancel txs using console commands multiple times because of shitty merchant software and invoices expiring after 30–60 minutes while I had unconfirmed txs in the mempool. Further, the mempool is unpredictable and low fee transactions sometimes linger around for days. At some point bumping the fee is not the solution anymore as the invoice / payment window might have expired by then. During mempool congestions we often get users asking for support to cancel such txs.
A brief history of Replace By Fee
Replace-by-fee (RBF) is a method that allows to replace one version of an unconfirmed transaction with a different version of the transaction that pays a higher transaction fee. It was proposed in BIP125 and the initial implementation was released in Bitcoin Core 0.12.0. The basic intent is to allow user to bump up his transaction fee which is very much useful when transactions gets stuck in mempool.
However, the side effect is that not only one can one increase the fee, we can also change the recipients of the transaction while increasing the fee. Igor Korsakov show how to do a double spend via RBF in this detailed blog post. This involves manually constructing a new transaction with replaced inputs and then signing them.
Thus, even though the RBF double spend has been very much possible it isn’t very widely reported because the whole process is technical and there was no wallet support for it. With recent developments this has changed.
Wallets like electrum previously only allowed RBF to increase fee and didn’t allow you to change the recipient. With the current upgrades this has changed and you can do a RBF double spend with a single click reversing your transaction
Unreliability of zero confirmed payments (Merchants):
Accepting zero confirmed payments is risky and merchants are often berated for doing so. However, we must have empathy and understand the genuine use-cases of the merchants. Here are some:
- Selling event tickets for concert with Bitcoin — Merchant is selling event ticket for concert tomorrow. If he waits for confirmation that often take a day the tickets are worthless! Since, his ticket price is small <50$, he decides to risk accepting zero confirmation. This is a smart decision as the probability of his losing money is still very less
- Flash Sale of a Phone with Bitcoin (High Traffic) — A merchant with high traffic is doing a flash sale of a phone. He waits for two confirmations to deliver the product. Since inventory is limited, waiting for confirmation to deduct inventory is a bad idea. Inventory will suddenly jump from say 100 to 10 as several payments will confirm in a block. Also people paying first won’t necessarily get the product. Overall it will result in bad UI experience. Thus, he deducts the inventory on zero confirmation and delivers it on two confirmations. Again, this is a smart decision as he doesn’t risk losing any money and one would expected 99% of unconfirmed payments to eventually confirm.
If the percentage of unconfirmed payments getting cancelled increases, such genuine use cases will be impacted hampering bitcoin adoption and trust.
When you send your transaction, sometimes your wallet will select inputs from unconfirmed coins. If the sender of these coins cancels their payments, your transaction will also get cancelled which you never intended. Such behavior has two side effects:
- Unintended cancellation of the payments you did
- Sudden decrease in your total wallet balance due to cancellation of incoming payments which can be very confusing
What can you do avoid losing bitcoin?
Accepting bitcoin payments (Merchants)
Only accept confirmed bitcoin payments. If you want to accept unconfirmed payments for your business use case, you can accept the ones that don’t have the RBF flag set
You can also check the RBF flag of the payment via various explorers like blockonomics, blockstream or blockchair.
To avoid ghost transactions, make you you spend confirmed coins
Unfortunately, lots of wallet don’t have this feature. So it is better to wait for incoming funds to confirm before spending your money
In summary, there have been recent developments in the bitcoin wallet ecosystem that make it easy to reverse your payments. This gives an easy option for users to clear their stuck funds. However, this also has more hazardous implications on merchant activity and payment reliability. Users must now be aware of these developments and take necessary actions to avoid losing money