diff --git a/lightningd/bitcoind.c b/lightningd/bitcoind.c index e4bbb1eba25a..42da9ec8bad5 100644 --- a/lightningd/bitcoind.c +++ b/lightningd/bitcoind.c @@ -578,6 +578,7 @@ static void getchaininfo_callback(const char *buf, const jsmntok_t *toks, void bitcoind_getchaininfo_(struct bitcoind *bitcoind, const bool first_call, + const u32 height, void (*cb)(struct bitcoind *bitcoind, const char *chain, u32 headercount, @@ -598,6 +599,7 @@ void bitcoind_getchaininfo_(struct bitcoind *bitcoind, req = jsonrpc_request_start(bitcoind, "getchaininfo", NULL, true, bitcoind->log, NULL, getchaininfo_callback, call); + json_add_u32(req->stream, "height", height); jsonrpc_request_end(req); bitcoin_plugin_send(bitcoind, req); } diff --git a/lightningd/bitcoind.h b/lightningd/bitcoind.h index 0986d438abfb..b58ed06d4f84 100644 --- a/lightningd/bitcoind.h +++ b/lightningd/bitcoind.h @@ -95,6 +95,7 @@ void bitcoind_getfilteredblock_(struct bitcoind *bitcoind, u32 height, void bitcoind_getchaininfo_(struct bitcoind *bitcoind, const bool first_call, + const u32 height, void (*cb)(struct bitcoind *bitcoind, const char *chain, u32 headercount, @@ -102,8 +103,8 @@ void bitcoind_getchaininfo_(struct bitcoind *bitcoind, const bool ibd, const bool first_call, void *), void *cb_arg); -#define bitcoind_getchaininfo(bitcoind_, first_call_, cb, arg) \ - bitcoind_getchaininfo_((bitcoind_), (first_call_), \ +#define bitcoind_getchaininfo(bitcoind_, first_call_, height_, cb, arg) \ + bitcoind_getchaininfo_((bitcoind_), (first_call_), (height_), \ typesafe_cb_preargs(void, void *, \ (cb), (arg), \ struct bitcoind *, \ diff --git a/lightningd/chaintopology.c b/lightningd/chaintopology.c index 4b659589dea8..ca2f54fa545d 100644 --- a/lightningd/chaintopology.c +++ b/lightningd/chaintopology.c @@ -1287,7 +1287,7 @@ static void retry_check_chain(struct chain_topology *topo) topo->bitcoind->checkchain_timer = NULL; if (topo->stopping) return; - bitcoind_getchaininfo(topo->bitcoind, false, check_chain, topo); + bitcoind_getchaininfo(topo->bitcoind, false, topo->max_blockheight, check_chain, topo); } void setup_topology(struct chain_topology *topo, @@ -1306,7 +1306,7 @@ void setup_topology(struct chain_topology *topo, /* Sanity checks, then topology initialization. */ topo->bitcoind->checkchain_timer = NULL; - bitcoind_getchaininfo(topo->bitcoind, true, check_chain, topo); + bitcoind_getchaininfo(topo->bitcoind, true, topo->max_blockheight, check_chain, topo); tal_add_destructor(topo, destroy_chain_topology); diff --git a/plugins/bcli.c b/plugins/bcli.c index a13a939bd041..4ac428187b4b 100644 --- a/plugins/bcli.c +++ b/plugins/bcli.c @@ -656,7 +656,14 @@ static struct command_result *getchaininfo(struct command *cmd, const char *buf UNUSED, const jsmntok_t *toks UNUSED) { - if (!param(cmd, buf, toks, NULL)) + // FIXME(vincenzopalazzo): inside the json request + // we had the current height known from core lightning, so + // we could try to do not crash if the getchaininfo return + // the a lower height from the known one, by waiting a little bit + // but currently I had no a better idea on how to do it here! + if (!param(cmd, buf, toks, + p_opt_any(), + NULL)) return command_param_failed(); start_bitcoin_cli(NULL, cmd, process_getblockchaininfo, false,