mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
bitcoind: Smooth fee changes over a number of estimates
Implements an EWMA for the fee estimation. Achieves 90% influence of the newer fee after 5 minutes, and adjusts to the polling rate that is configured.
This commit is contained in:
committed by
Rusty Russell
parent
a88ab1634f
commit
fe405f49be
@@ -237,6 +237,8 @@ static void update_feerates(struct bitcoind *bitcoind,
|
|||||||
{
|
{
|
||||||
u32 old_feerates[NUM_FEERATES];
|
u32 old_feerates[NUM_FEERATES];
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
/* Rate of change of the fee smoothing, depending on the poll-interval */
|
||||||
|
double change_rate = (double)topo->poll_seconds / 150 * 0.9;
|
||||||
|
|
||||||
for (size_t i = 0; i < NUM_FEERATES; i++) {
|
for (size_t i = 0; i < NUM_FEERATES; i++) {
|
||||||
u32 feerate = satoshi_per_kw[i];
|
u32 feerate = satoshi_per_kw[i];
|
||||||
@@ -248,7 +250,14 @@ static void update_feerates(struct bitcoind *bitcoind,
|
|||||||
if (!feerate)
|
if (!feerate)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (feerate < feerate_floor())
|
/* Smooth the feerate to avoid spikes. The goal is to have the
|
||||||
|
* fee consist of 0.9 * feerate + 0.1 * old_feerate after 300
|
||||||
|
* seconds. The following will do that in a polling interval
|
||||||
|
* independent manner. */
|
||||||
|
feerate =
|
||||||
|
feerate * (1 - change_rate) + old_feerates[i] * change_rate;
|
||||||
|
|
||||||
|
if (feerate < feerate_floor())
|
||||||
feerate = feerate_floor();
|
feerate = feerate_floor();
|
||||||
|
|
||||||
if (feerate != topo->feerate[i]) {
|
if (feerate != topo->feerate[i]) {
|
||||||
|
|||||||
Reference in New Issue
Block a user