We find that estimatesmartfee will not return results lower than 5 sats/vB, even though many transactions are completing at much lower fee rates.

Looking at the implementation of estimatesmartfee, it bounds the result to the higher of three values:

CFeeRate feeRate{fee_estimator.estimateSmartFee(conf_target, &feeCalc, conservative)};
if (feeRate != CFeeRate(0)) {
    CFeeRate min_mempool_feerate{mempool.GetMinFee()};
    CFeeRate min_relay_feerate{mempool.m_min_relay_feerate};
    feeRate = std::max({feeRate, min_mempool_feerate, min_relay_feerate});
    result.pushKV("feerate", ValueFromAmount(feeRate.GetFeePerK()));
} else {
    errors.push_back("Insufficient data or no feerate found");
    result.pushKV("errors", errors);
result.pushKV("blocks", feeCalc.returnedTarget); 

Therefore we need to ensure min_mempoool_feerate and min_relay_feerate are both below 5000 sat/vKB on the nodes used for estimation.

Does anyone know what else holds it this high?

1 Answer 1


Turned out we had an override for minrelaytxfee in the config file:

# Mempool
  • Hi Chris, thanks for returning to answer your own question! Welcome to Bitcoin Stack Exchange.
    – Murch
    Oct 17, 2023 at 14:58

Your Answer

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

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