diff --git a/lightningd/chaintopology.c b/lightningd/chaintopology.c index d96da955d..0d21fed48 100644 --- a/lightningd/chaintopology.c +++ b/lightningd/chaintopology.c @@ -517,7 +517,7 @@ u64 get_feerate(const struct chain_topology *topo, enum feerate feerate) { if (topo->override_fee_rate) { log_debug(topo->log, "Forcing fee rate, ignoring estimate"); - return topo->override_fee_rate; + return topo->override_fee_rate[feerate]; } else if (topo->feerate[feerate] == 0) { return guess_feerate(topo, feerate); } @@ -619,7 +619,7 @@ struct chain_topology *new_topology(struct lightningd *ld, struct log *log) txowatch_hash_init(&topo->txowatches); topo->log = log; topo->default_fee_rate = 40000; - topo->override_fee_rate = 0; + topo->override_fee_rate = NULL; topo->bitcoind = new_bitcoind(topo, ld, log); #if DEVELOPER topo->dev_no_broadcast = false; diff --git a/lightningd/chaintopology.h b/lightningd/chaintopology.h index 48f6fb185..870a51fac 100644 --- a/lightningd/chaintopology.h +++ b/lightningd/chaintopology.h @@ -111,7 +111,7 @@ struct chain_topology { struct list_head outgoing_txs; /* Force a partiular fee rate regardless of estimatefee (satoshis/kb) */ - u64 override_fee_rate; + u64 *override_fee_rate; /* What fee we use if estimatefee fails (satoshis/kb) */ u64 default_fee_rate; diff --git a/lightningd/options.c b/lightningd/options.c index cdd85be9f..693c9899f 100644 --- a/lightningd/options.c +++ b/lightningd/options.c @@ -194,6 +194,29 @@ static char *opt_set_alias(const char *arg, struct lightningd *ld) return NULL; } +static char *opt_set_fee_rates(const char *arg, struct chain_topology *topo) +{ + tal_free(topo->override_fee_rate); + topo->override_fee_rate = tal_arr(topo, u64, 3); + + for (size_t i = 0; i < tal_count(topo->override_fee_rate); i++) { + char *endp; + char term; + + if (i == tal_count(topo->override_fee_rate)-1) + term = '\0'; + else + term = '/'; + topo->override_fee_rate[i] = strtol(arg, &endp, 10); + if (endp == arg || *endp != term) + return tal_fmt(NULL, + "Feerates must be //"); + + arg = endp + 1; + } + return NULL; +} + static void config_register_opts(struct lightningd *ld) { opt_register_arg("--locktime-blocks", opt_set_u32, opt_show_u32, @@ -223,9 +246,9 @@ static void config_register_opts(struct lightningd *ld) opt_register_arg("--commit-fee=", opt_set_u32, opt_show_u32, &ld->config.commitment_fee_percent, "Percentage of fee to request for their commitment"); - opt_register_arg("--override-fee-rate", opt_set_u64, opt_show_u64, - &ld->topology->override_fee_rate, - "Force a specific rate in satoshis per kb regardless of estimated fees"); + opt_register_arg("--override-fee-rates", opt_set_fee_rates, NULL, + ld->topology, + "Force a specific rates (immediate/normal/slow) in satoshis per kb regardless of estimated fees"); opt_register_arg("--default-fee-rate", opt_set_u64, opt_show_u64, &ld->topology->default_fee_rate, "Satoshis per kb if can't estimate fees"); diff --git a/tests/utils.py b/tests/utils.py index 9af80821c..9930399af 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -238,6 +238,7 @@ class LightningD(TailableProc): '--bitcoin-datadir={}'.format(bitcoin_dir), '--lightning-dir={}'.format(lightning_dir), '--port={}'.format(port), + '--override-fee-rates=15000/7500/1000', '--network=regtest' ] if DEVELOPER: