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.
Looks like
min_relay_feerate
seems to come fromm_min_relay_feerate{opts.min_relay_feerate}
in src/txmempool.cpp which comes fromDEFAULT_MIN_RELAY_TX_FEE
defaulted to 1000min_mempool_feerate
coming from mempool.GetMinFee() seems to inherit a minimum fromincremental_relay_feerate{DEFAULT_INCREMENTAL_RELAY_FEE}
whereDEFAULT_INCREMENTAL_RELAY_FEE
default is 1000
Does anyone know what else holds it this high?