Why I Hate RBF

I never use RBF (”Replace By Fee”). There was one time when I was tempted. I needed to exchange bitcoin (BTC) for monero (XMR), because I needed to renew my VPN, which was expiring in 2 hours. Bitcoin sent, I checked after ten minutes… twenty… thirty… still ‘unconfirmed’… turns out, the fees had spiked, leaving me at the back of the queue; a perfect use-case for RBF!

I genuinely will not partake in a piece of dev-meddling which ‘Rekt Bitcoin Forever’. Let me lay out why I have this extreme opinion.

What is Replace By Fee?

‘Replace By Fee’, as the name suggests, allows a sender of bitcoin to replace a recently-sent transaction. Normally, when you press ‘send’ on a bitcoin transaction, there is no going back. This is a special case. The sender is saying “oops, I was too stingy! Let me try that again with a higher fee.” It’s a lot like flashing a fifty dollar bill when stuck near the back of the queue outside a trendy nightclub. The nightclub in this analogy would be the official transaction log, i.e. the blockchain. Without a RBF, you might be stuck at the back of the queue for days.

Being too stingy with fees is often merely a bad guess. So, why punish people for bad guesses? On first glance, it seems reasonable enough that the Bitcoin devs brought it in.1 In order to see what’s wrong, we need to grasp a bit of the nitty-gritty of bitcoin transactions. It will be helpful to use an extended analogy.

The Cheque Analogy

Meet Jack. He is able to buy his favorite pizza with bitcoin.

A man in his late teens or early 20s, smiling, with baseball cap on backwards and athletic streetwear, holds a pizza in a box outside Sals Pizza restaurant.

The pizza costs 10,000 sats.2 Jack can afford that. Someone recently sent him a ‘bitcoin cheque’ for 12,500 sats. Jack writes out a new cheque, and be aware that, with bitcoin cheques, the total amount is shared out, as the sender wants, to multiple recipients.3

A drawing of a cheque, with: the date, '3.3.26'; an amount, '12,500' prominent in center; 'To Sals Pizza= 10,000, Fee for Publishing= 500, Change= 2000'.

Turns out, 500 sats was too stingy. The official publishers aren’t keen on Jack’s 500 sat fees, because others are bidding 1,500 at least. Jack chooses to boost the fee. He is in his car. He writes a new cheque, hands it to a runner-boy, and heads for home.

A drawing of a cheque, with: the date, '3.3.26'; an amount, '12,500' prominent in center; 'To Sals Pizza= 500, Fee for Publishing= 2,000, Change= 10,000'.

Note the boosted ‘fee for publishing’— now 2,000 sats. That’s a better bid. Jack should be near the front of the ‘waiting-to-be-published’ queue now. Note the Sals Pizza amount too. 500 sats… hang on, why has this changed? Because it can. Jack has changed it. Jack is a scoundrel. He is almost home with his pizza, and Sals Pizza got ripped off.

‘Replace By Fee’ allows not only a new fee, but also a new distribution of the total amount. Why on earth is this allowed? There is a semi-good reason. I’ll get to that soon.

Replace By Tainted Coin

There’s another trick a scoundrel like Jack can do. Here’s the new RBF bitcoin cheque, written while Jack is in his car with his pizza.

A drawing of a two cheques, one stapled on top of the other.  On the lower cheque is: 'To Sals Pizza= 10,000, Fee for Publishing= 500, Change= 2,000'.  On the topmost cheque is: 'To OKX Exchange= 20,000, Change = 0'

Sals Pizza still gets 10,000 sats, so that’s okay; but there’s this added recipient too. Jack stapled on new wad of sats all going to OKX Exchange: 20,000. The problem is that this new wad of sats is from known criminal activity. It is ‘tainted bitcoin’. By mixing good bitcoin with tainted, Jack has made it possible that the transaction will fail one way or another.

Why isn’t anyone checking for this fraud?

Bitcoin has about 20,000 nodes on the job, checking for wrongdoing.4 Think of them like handwriting experts checking the signatures on the cheques. Can’t they also check for such blatant fraud?

They can’t. It’s due to privacy. In my analogy I wrote ‘Sals Pizza’ on the cheque, but in reality, bitcoin recipients are not named. Bitcoin needs to stay kind-of anonymous. It just wouldn’t work to label the recipients. It doesn’t work like bank accounts. We don’t know who is getting what, and how many real people are behind those bitcoin addresses.

This is also why RBF can’t babysit the sharing out of amounts. Now you know the semi-good reason I alluded to above.

A simple fix

Bitcoin Maxis reading this will be tearing their hair out by now. There is a very simple fix.

Sals Pizza must not let Jack walk away with the pizza unless there has been at least one new block with his transaction in it.

All the ‘Replace By Fee’ shenanigans only work on queued-up transactions. When I wrote ‘…replace a recently-sent transaction’ above, to be precise, it’s a recently-sent and still unpublished transaction. The Sals Pizza worker just needs to tell Jack: “Until the P.O.S. app says ‘confirmed’, hands off the pizza, please.”

The authors of the RBF protocol were not unaware of this outcome:

The recipient or recipients of a transaction containing [RBF] may choose not to treat it as payment until it has been confirmed, eliminating the risk that the spender will use allowed replacements to defraud them.5

Not so simple

The onus is now on the merchant. It’s his problem; he needs to wait until a new block has appeared on the blockchain. With bitcoin, one will be waiting ten minutes at least. In many situations, this is unacceptable.

The Commitment Moment

Waiting ten minutes sucks, but dwelling on the ten minutes misses a deeper point. The deeper point is about the psychology of shopping. Marketing experts call it ‘The Commitment Moment’, that second or two when you hand over your cash or enter your PIN. It means “no going back now, I’m buying it.” It’s exciting and a bit scary. At least, it should be; soft money warps this instinct somewhat.

RBF corrupts the Commitment Moment. It turns the next ten minutes into a wishy-washy time of ‘what if…?’ It reeks of untrustworthiness. What kind of a monetary system is this?

Bad, but this is not why RBF ‘Rect Bitcoin Forever’

To be fair, there were some good reasons for doing something like RBF, but not from the everyday punter’s perspective. Roger Ver put it well:

We warned you. All the people trying to use bitcoin for commerce warned [the devs], when [RBF] came along to begin with; we said: “Don’t do this. This makes bitcoin less usable as money.”6

Bringing up Roger Ver calls to mind that my argument is stale by now. Also, the other side can say “use bitcoin over Lightning (BTC-LN) and shut up.” For sure, I will go over BTC-LN in an upcoming post.

Here’s where a much better argument begins. Here’s where the joke term ‘Rekt Bitcoin Forever’ has some truth. Another fix is shortening the time between blocks. Bitcoin takes 10 minutes, but Solana (SOL) takes half a second. Using sol to buy Sals, there would be a true Commitment Moment for sure. I will argue, in the next post, that this is a misunderstanding of Satoshi’s design. Then, you will grasp why I find RBF so galling— it helped undermine the idea of bitcoin in favor of cryptos such as sol (SOL) and ripple (XRP).


  1. 2016, about 6 years after Satoshi launched bitcoin. (Return)
  2. A ‘bitcoin’ is really a bundle of satoshis, usually called ‘sats’; just like a ‘baker’s dozen’ is a group of baked goods. There are 100 million sats in one bitcoin. (Return)
  3. Although it’s called ‘bitcoin’, it doesn’t work like coinage. It works much more like paper cheques, at least if cheques had tamper-proof serial numbers. (Return)
  4. I am not counting miners which do not make their own template of the new block. (Return)
  5. BIP 125 by Peter Todd and David Harding (Return)
  6. Roger Ver, 26 July 2019, YouTube. (Return)

Back to the index of blog posts

Tags