RBF versus CPFP

One subject which I wanted to give a counterpoint-opinion about, is the fact that transaction fees are rather high right now, on Bitcoin. When I recently transferred a Bitcoin-amount from one of my wallets to another wallet I hold myself, the transaction fee was ‘only’ 0.33 millibit. Because the fees were floating near 2 millibits /kB, this also suggests that this one transaction only took about 165 Bytes of one mined block to confirm. It’s written that more-typical transactions actually require 500 Bytes, which means that those would also cost ~1 millibit. A possible way to exaggerate this could be, to write that that one transaction only cost me

0.00033 Bitcoins

of my own money. But the problem with this representation of the fee is, that it also corresponded to roughly CAD 1.- of our country’s real money. This is close to what the transactions directly from an ATM cost, and so we would not be willing to pay for a cup of coffee under these terms.

There exist some people who have funds stranded in some accounts, either because their fees were not high enough, or because they may have just forgotten that fees are necessary, to see transactions through.

There is a URL which covers two possible ways in which such funds can be recovered:

https://bitcoin.stackexchange.com/questions/49723/replace-by-fee-vs-child-pays-for-parent

The two suggested methods are also abbreviated ‘RBF’ and ‘CPFP’. I feel that there is a detail which the above thread fails to point out:

The only Bitcoin nodes which I am presently aware of, that offer RBF, are the Bitcoin Core nodes. And the only mining pool which I am presently aware of, that openly offers CPFP, is named “Eliguis”.

Neither of these resources will offer wallet-holders the means to bypass the need to pay fees. And one of them – Eligius – was not accepting direct connections from a wallet, the last time I checked. Therefore the only way I know of, actually to invoke CPFP, is to use whatever facility our wallet-programs have to create a transaction and sign it – but not broadcast that transaction – and then to save that transaction to a file, and finally to copy and paste the transaction into the box provided by this URL:

http://eligius.st/~wizkid057/newstats/pushtxn.php

And then, Hope Eligius accepts and mines the transaction. In order for this mining pool to do so, the Transaction Fee which the transaction-being-pushed offers, must be high enough to cover all the transactions people are requesting to have recovered, including possibly the Transaction Fee itself, as one additional transaction.

So as it stands, Bitcoin is far from being a perfect world, and one development which I hope for, would be slightly lower Transaction Fees in the near future. One development which I cannot hope for, is shorter confirmation times. And this is because across the Bitcoin network, the total number of blocks being mined is 1 / 10 minutes, and then the question remains a toss-up, whether whichever mining pool we have chosen, will be the next mining pool to solve their hash, and thus to write our transaction into the block-chain. Confirmation times of 10 minutes remain unrealistic to hope for, even if the block-size is increased.

Continue reading RBF versus CPFP

Bitcoin: Replace-By-Fee

My friends may have noticed a peculiar pattern in my emails, that have been exploring Bitcoin. I have partially been asking questions, and tentatively finding wrong answers to them, until such a time as I have found the correct answers.

The most recent question had to do, with why, after I had sent some Bitcoin-amount from my Bitcoin Core wallet, to my Electrum wallet, that amount appeared as 'Pending' within 10 minutes, but took up to an hour to be Confirmed. It was specifically the speed with which it appeared as Pending, not how slowly the transaction was confirmed, which struck me as a mystery, given that the way the network is supposed to function, only the mining pool which has been given the request to send my transaction, should be in the process of solving the hash, for a block, which it is mining, and given the fact that the rate of 1 block every 10 minutes, is being shared between mining pools.

My next hypothesis was, that all the mining pools could have been working to mine the same transaction-list, which was an alarming idea for some obvious reasons. And that idea was false.

As it happens, this is completely normal behavior. The reason the receiving wallet sees the transaction as Pending so fast, is the fact that on the receiving end, the wallet connects to numerous nodes, and any one of those nodes could be the same node, belonging to the mining pool that I asked the amount to be sent from. So the appearance of the transaction as Pending, does not mean that the transaction has been inserted into the block-chain yet, its status as Confirmed does.

To top it off, I had 'RBF' enabled on the sending wallet.

'RBF' stands for "Replace By Fee", and is a special feature offered by Bitcoin Core. What it means, is that A could be sending an amount to B, which B sees as an Unconfirmed amount almost immediately. And then B can send funds from that Unconfirmed amount to C, provided that both A and B are clients of Bitcoin Core, and that A offered this ability when sending the amount to B.

- Bitcoin-Core Clients -
A  ->(RBF-enabled)  B  ->(unconfirmed-input)  C

A pays a slightly higher fee for this.

The reason this can exist, is the fact that Bitcoin Core is a large operator, and has confidence in the transaction sent by A. It therefore authorizes B to spend it again, even though (A -> B) is not in the block-chain yet.

Enabling this feature, given that Electrum is a 3rd-party wallet, and that some of the nodes it connects to are also Bitcoin Core nodes, virtually guaranteed that B would see the transaction, even though it was Unconfirmed, almost immediately. And in my case, there was no Party C (yet).

Also, Bitcoin Core could be making this feature an argument, not to increase the block-size, because as long as everybody has a Bitcoin Core -compatible client-program, the visibility of (A -> B) to party B, can act as an assurance that payment has been sent, even though it might currently take over an hour, for that payment to be Confirmed.

And, Party B need only be connected to a Bitcoin Core node for verification purposes, without having to use Bitcoin Core for sending, in order to be able to see the Transaction (A -> B) .

Actually, there is a partial admission, that this could lead to a double-expenditure somewhere. But Bitcoin Core is additionally confident, that this risk is minimal.


Dirk