diff --git a/daemon/bitcoind.c b/daemon/bitcoind.c index 484c7fdc6..a21f63109 100644 --- a/daemon/bitcoind.c +++ b/daemon/bitcoind.c @@ -176,7 +176,34 @@ start_bitcoin_cli(struct lightningd_state *dstate, next_bcli(dstate); } -static void process_estimatefee(struct bitcoin_cli *bcli) +static void process_estimatefee_6(struct bitcoin_cli *bcli) +{ + double fee; + char *p, *end; + u64 fee_rate; + void (*cb)(struct lightningd_state *, u64, void *) = bcli->cb; + + p = tal_strndup(bcli, bcli->output, bcli->output_bytes); + fee = strtod(p, &end); + if (end == p || *end != '\n') + fatal("%s: gave non-numeric fee %s", + bcli_args(bcli), p); + + if (fee < 0) { + log_unusual(bcli->dstate->base_log, + "Unable to estimate fee, using %"PRIu64, + bcli->dstate->config.closing_fee_rate); + fee_rate = bcli->dstate->config.closing_fee_rate; + } else { + /* Since we used 6 as an estimate, double it. */ + fee *= 2; + fee_rate = fee * 100000000; + } + + cb(bcli->dstate, fee_rate, bcli->cb_arg); +} + +static void process_estimatefee_2(struct bitcoin_cli *bcli) { double fee; char *p, *end; @@ -191,23 +218,12 @@ static void process_estimatefee(struct bitcoin_cli *bcli) /* Don't know at 2? Try 6... */ if (fee < 0) { - if (streq(bcli->args[3], "2")) { - start_bitcoin_cli(bcli->dstate, process_estimatefee, - false, bcli->cb, bcli->cb_arg, - "estimatefee", "6", NULL); - return; - } - log_unusual(bcli->dstate->base_log, - "Unable to estimate fee, using %"PRIu64, - bcli->dstate->config.closing_fee_rate); - fee_rate = bcli->dstate->config.closing_fee_rate; - } else { - /* If we used 6 as an estimate, double it. */ - if (streq(bcli->args[3], "6")) - fee *= 2; - fee_rate = fee * 100000000; + start_bitcoin_cli(bcli->dstate, process_estimatefee_6, + false, bcli->cb, bcli->cb_arg, + "estimatefee", "6", NULL); + return; } - + fee_rate = fee * 100000000; cb(bcli->dstate, fee_rate, bcli->cb_arg); } @@ -216,7 +232,7 @@ void bitcoind_estimate_fee_(struct lightningd_state *dstate, u64, void *), void *arg) { - start_bitcoin_cli(dstate, process_estimatefee, false, cb, arg, + start_bitcoin_cli(dstate, process_estimatefee_2, false, cb, arg, "estimatefee", "2", NULL); }