|
|
@ -176,7 +176,7 @@ 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; |
|
|
@ -189,34 +189,50 @@ static void process_estimatefee(struct bitcoin_cli *bcli) |
|
|
|
fatal("%s: gave non-numeric fee %s", |
|
|
|
bcli_args(bcli), p); |
|
|
|
|
|
|
|
/* 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; |
|
|
|
/* 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; |
|
|
|
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); |
|
|
|
|
|
|
|
/* Don't know at 2? Try 6... */ |
|
|
|
if (fee < 0) { |
|
|
|
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); |
|
|
|
} |
|
|
|
|
|
|
|
void bitcoind_estimate_fee_(struct lightningd_state *dstate, |
|
|
|
void (*cb)(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); |
|
|
|
} |
|
|
|
|
|
|
|