Skip to content

Commit e60fd02

Browse files
committed
xpay: header count instead of block count
Changelog-Fixed: xpay: use header count instead of block count in the payment's reference block height. Signed-off-by: Lagrang3 <lagrang3@protonmail.com>
1 parent 4f9e13c commit e60fd02

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

plugins/xpay/xpay.c

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1631,6 +1631,31 @@ static struct command_result *param_string_array(struct command *cmd, const char
16311631
return NULL;
16321632
}
16331633

1634+
static struct command_result *getchaininfo_success(struct command *cmd,
1635+
const char *method,
1636+
const char *buffer,
1637+
const jsmntok_t *toks,
1638+
struct payment *payment)
1639+
{
1640+
struct xpay *xpay = xpay_of(cmd->plugin);
1641+
u32 headercount;
1642+
const char *err;
1643+
1644+
err = json_scan(tmpctx, buffer, toks, "{headercount:%}",
1645+
JSON_SCAN(json_to_u32, &headercount));
1646+
if (err)
1647+
plugin_err(cmd->plugin, "Bad getchaininfo response: %s", err);
1648+
1649+
if (headercount > xpay->blockheight) {
1650+
plugin_log(cmd->plugin, LOG_DBG,
1651+
"Updating payment blockheight from %d (blocks "
1652+
"synced) to %d (headercount)",
1653+
(int)xpay->blockheight, (int)headercount);
1654+
xpay->blockheight = headercount;
1655+
}
1656+
return populate_private_layer(cmd, payment);
1657+
}
1658+
16341659
static struct command_result *
16351660
preapproveinvoice_succeed(struct command *cmd,
16361661
const char *method,
@@ -1639,6 +1664,7 @@ preapproveinvoice_succeed(struct command *cmd,
16391664
struct payment *payment)
16401665
{
16411666
struct xpay *xpay = xpay_of(cmd->plugin);
1667+
struct out_req *req;
16421668

16431669
/* Now we can conclude `check` command */
16441670
if (command_check_only(cmd)) {
@@ -1653,7 +1679,11 @@ preapproveinvoice_succeed(struct command *cmd,
16531679
if (payment->disable_mpp)
16541680
payment_log(payment, LOG_INFORM, "No MPP support: this is going to be hard to pay");
16551681

1656-
return populate_private_layer(cmd, payment);
1682+
/* Fetch the header height for we might be out-of-sync. */
1683+
req = jsonrpc_request_start(cmd, "getchaininfo", &getchaininfo_success,
1684+
forward_error, payment);
1685+
json_add_u32(req->js, "last_height", 0);
1686+
return send_outreq(req);
16571687
}
16581688

16591689
static struct command_result *check_offer_payable(struct command *cmd,

0 commit comments

Comments
 (0)