4

Context

I created a transaction (using the full balance of an output) with the Bitcoin Core Wallet (running as full node). The transaction got into the mempool of major nodes, as expected. I set the fee to what the client recommended for a slow transaction (little more than 9 sat/B) , but these days this turns out to be very low. Given the current state of the mempool at hoenicke this may get confirmation in weeks, if at all.

Increasing the fee fails

I initially, deliberately, set the transaction to "Request Replace-By-Fee", and I want do increase the fee now. I expected to take some part of the "target amount" and use it as fee, leaving the total amount of the transaction the same (still spending the complete output in total)

However, this does not seem to be possible by design. I get a "Fee bump error" saying "Increasing the transaction fee failed (Transaction does not have a change output)".

What to do about it?

Why am I not able to change the target/fee balance of a transaction, and how am I expected to increase the fee at this point?

Transaction Details (as per Request)

Summary
Size    1xx (bytes)
Weight  7xx
Lock Time   Block: 49xxxx

Inputs and Outputs
Total Input 0.01xxxxxx BTC
Total Output    0.01xxxxxx BTC
Fees    0.00001xxx BTC
Fee per byte    9.xxx sat/B
Fee per weight unit 2.xxx sat/WU
Estimated BTC Transacted    0.019xxxxx BTC

Both input and output addresses start with "1"

1
  • Can you edit the post to include the transaction details and structure?
    – Monstrum
    Dec 11, 2017 at 0:16

1 Answer 1

2

BIP125 RBF (Replace-by-fee) transactions in bitcoin-core 0.15.0.1 appear to require a change address with a balance in order to facilitate a future RBF-based fee increase.

By way of an example, consider the following transaction:

Input  - 1.00000 BTC
Output - 0.99998 BTC
Fee    - 0.00001 BTC
Change - 0.00001 BTC

Assume the fee is too low. Now, we want to increase the fee for the transaction, so the RBF replaces the prior transaction with one like:

Input  - 1.00000 BTC
Output - 0.99998 BTC
Fee    - 0.00002 BTC
Change - 0.00000 BTC

Now the fee is enough that the transaction is confirmed.

Without "change" present in the first transaction, there is no source for the increased fee. RBF could be implemented such that the output is reduced to allow for a greater fee; I'm not sure why that is not supported. Line 2928 of the wallet.cpp source code in the bitcoin-core github repository states:

break; // Done, able to increase fee from change

The way around this problem for a transaction that has RBF enabled, but has no change address is to follow the directions contained in one of the answers in the canonical "transaction not getting confirmed" question. I experienced the exact issue last week and was able to successfully recover using the -zapwallettxes option in the bitcoin-core wallet CLI.

5
  • Thanks for the link. I will do as stated in section "How to make a Full RBF transaction" there. Odd, that using a part of the output value is not supported.
    – hitchhiker
    Dec 13, 2017 at 19:58
  • 1
    "Abandon Transaction" is greyed out for me so I will probably purge the local mempool "by hand", which should be similar to -zapwallettxes
    – hitchhiker
    Dec 13, 2017 at 19:59
  • Interesting is the next if clause at line 2932 (github.com/bitcoin/bitcoin/blob/…). There they would seem to reduce the output for fee increase. How would the program reach that line? I have a quite hard time to guess just from a glance to the source code. I'll look into the BIP doc you provided.
    – hitchhiker
    Dec 13, 2017 at 20:10
  • 1
    Hm, this gets interesting. I have found according to BIP125 RBF, that the Bitcoin Core client tries to do a "RBF First Seen Safe", but using the change instead of an additional input in my case, but there is no change. Bummer. They just seem to have forgotten to provide the variant without change for my case, which then would be a "full-RBF" without the safety for the recipient. I guess this answers the "why" part of my question.
    – hitchhiker
    Dec 13, 2017 at 20:36
  • 1
    The abandon transaction option was greyed-out for me too. I'm unsure why. Looking at the code is interesting, at this point I haven't got enough experience with bitcoin-core code to really understand in detail what is expected vs what is happening. Dec 13, 2017 at 20:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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