estimatesmartfee outputs very different results Around block 564815 (2019-02-26 23:40 UTC), the mempool was empty. I noticed that my two nodes are giving very different estimates for transaction fees to be used:

Node 1


Version: 17.1.0
Number of peers: 21
Synched for: about three weeks
Prunned: 3GB



// see how many transactions are there in the mempool
 >bitcoin-cli getrawmempool | wc -l 
 4027

>bitcoin-cli estimatesmartfee 5 {
    “feerate”: 0.00021195,
    “blocks”: 5 }

>bitcoin-cli estimatesmartfee 5 ECONOMICAL {
    “feerate”: 0.00009715,
    “blocks”: 5 }



Node 2


Version: Bitcoin core 17.0.0
Number of peers: 8
Synched for: about 5 hours
Prunned: 3GB



# see how many transactions are there in the mempool
>bitcoin-cli getrawmempool | wc -l
3999

>bitcoin-cli estimatesmartfee 5
{
    “feerate”: 0.00008823,
    “blocks”: 5
}

>bitcoin-cli estimatesmartfee 5 ECONOMICAL
{
    “feerate”: 0.00001000,
    “blocks”: 5
}


The node that has been synchronized for only 5 hours and is less well connected seems to be estimating the fee better than the one that has been synchronized for three weeks. Why is the "best" node the one that gives the worst fee? Why are the fee estimates so different and what can be done to make them more accurate?
The node that has been synchronized for only 5 hours and is less well connected seems to be estimating the fee better than the one that has been synchronized for three weeks. Why is the "best" node the one that gives the worst fee?


Just because the fee is lower does not mean it is better.

The fee estimator tries to estimate the fee the balances between cost and time to be included in a block. It does this by looking at the fee rates of transactions that it receives in its mempool and seeing how long it takes for transactions at a given fee rate to be included into a block. It becomes more accurate as it sees more transactions and more blocks because it has had more data to analyze.

So your two nodes are giving wildly different numbers because of their uptime. Node 1 has been online for much longer. It has seen more unconfirmed transactions become confirmed thus its estimator has had more data to observe.

However Node 2 has not been online as much so it doesn't have as much data. It hasn't seen as many blocks and as many transactions become confirmed. Since it has a lack of data it resorts to the fallback values. These values are the minimum relay fee rates which are not likely to actually be the true fee rate. The minimum relay fee rate is not the minimum to be included in a block, it is the minimum for a node to even relay your transaction to another node.


  what can be done to make them more accurate?


Just wait. Leave the nodes online. The estimators require data and the only way to do that is to wait. They become more accurate over time.