Browse Source

listpays mod 1: add destination inside the response when bolt11 is null

Changelog-Added: JSON-RPC: `listpays` now lists the `destination` if it was provided (e.g., via the `pay` plugin or `keysend` plugin)
bump-pyln-proto
Vincenzo Palazzo 5 years ago
committed by Christian Decker
parent
commit
1521c29fcf
  1. 6
      doc/lightning-sendonion.7
  2. 5
      doc/lightning-sendonion.7.md
  3. 4
      lightningd/pay.c
  4. 3
      plugins/libplugin-pay.c
  5. 15
      plugins/pay.c
  6. 4
      tests/test_pay.py

6
doc/lightning-sendonion.7

@ -3,7 +3,8 @@
lightning-sendonion - Send a payment with a custom onion packet
.SH SYNOPSIS
\fBsendonion\fR \fIonion\fR \fIfirst_hop\fR \fIpayment_hash\fR [\fIlabel\fR] [\fIshared_secrets\fR] [\fIpartid\fR] [\fIbolt11\fR] [\fImsatoshi\fR]
\fBsendonion\fR \fIonion\fR \fIfirst_hop\fR \fIpayment_hash\fR [\fIlabel\fR] [\fIshared_secrets\fR] [\fIpartid\fR] [\fIbolt11\fR]
[\fIdestination\fR] [\fImsatoshi\fR]
.SH DESCRIPTION
@ -90,6 +91,9 @@ The \fIbolt11\fR parameter, if provided, will be returned in
\fIwaitsendpay\fR and \fIlistsendpays\fR results\.
The \fIdestination\fR parameter, if provided, will be returned in \fBlistpays\fR result\.
The \fImsatoshi\fR parameter is used to annotate the payment, and is returned by
\fIwaitsendpay\fR and \fIlistsendpays\fR\.

5
doc/lightning-sendonion.7.md

@ -4,7 +4,8 @@ lightning-sendonion -- Send a payment with a custom onion packet
SYNOPSIS
--------
**sendonion** *onion* *first_hop* *payment_hash* \[*label*\] \[*shared_secrets*\] \[*partid*\] \[*bolt11*\] \[*msatoshi*\]
**sendonion** *onion* *first_hop* *payment_hash* \[*label*\] \[*shared_secrets*\] \[*partid*\] \[*bolt11*\]
\[*msatoshi*\] \[*destination*\]
DESCRIPTION
-----------
@ -78,6 +79,8 @@ partial payments with the same *payment_hash*.
The *bolt11* parameter, if provided, will be returned in
*waitsendpay* and *listsendpays* results.
The *destination* parameter, if provided, will be returned in **listpays** result.
The *msatoshi* parameter is used to annotate the payment, and is returned by
*waitsendpay* and *listsendpays*.

4
lightningd/pay.c

@ -1178,6 +1178,7 @@ static struct command_result *json_sendonion(struct command *cmd,
struct sha256 *payment_hash;
struct lightningd *ld = cmd->ld;
const char *label, *b11str;
struct node_id *destination;
struct secret *path_secrets;
struct amount_msat *msat;
u64 *partid;
@ -1191,6 +1192,7 @@ static struct command_result *json_sendonion(struct command *cmd,
p_opt_def("partid", param_u64, &partid, 0),
p_opt("bolt11", param_string, &b11str),
p_opt_def("msatoshi", param_msat, &msat, AMOUNT_MSAT(0)),
p_opt("destination", param_node_id, &destination),
NULL))
return command_param_failed();
@ -1204,7 +1206,7 @@ static struct command_result *json_sendonion(struct command *cmd,
return send_payment_core(ld, cmd, payment_hash, *partid,
first_hop, *msat, AMOUNT_MSAT(0),
label, b11str, &packet, NULL, NULL, NULL,
label, b11str, &packet, destination, NULL, NULL,
path_secrets);
}

3
plugins/libplugin-pay.c

@ -1041,6 +1041,9 @@ static struct command_result *payment_createonion_success(struct command *cmd,
if (p->bolt11)
json_add_string(req->js, "bolt11", p->bolt11);
if (p->destination)
json_add_node_id(req->js, "destination", p->destination);
send_outreq(p->plugin, req);
return command_still_pending(cmd);
}

15
plugins/pay.c

@ -1669,6 +1669,9 @@ struct pay_mpp {
/* Timestamp of the first part */
u32 timestamp;
/* The destination of the payment, if specified. */
struct node_id *destination;
};
static const struct sha256 *pay_mpp_key(const struct pay_mpp *pm)
@ -1739,6 +1742,9 @@ static void add_new_entry(struct json_stream *ret,
if (pm->b11)
json_add_string(ret, "bolt11", pm->b11);
if (pm->destination)
json_add_node_id(ret, "destination", pm->destination);
json_add_sha256(ret, "payment_hash", pm->payment_hash);
json_add_string(ret, "status", pm->status);
json_add_u32(ret, "created_at", pm->timestamp);
@ -1785,13 +1791,15 @@ static struct command_result *listsendpays_done(struct command *cmd,
ret = jsonrpc_stream_success(cmd);
json_array_start(ret, "pays");
json_for_each_arr(i, t, arr) {
const jsmntok_t *status, *b11tok, *hashtok, *createdtok;
const jsmntok_t *status, *b11tok, *hashtok, *destinationtok, *createdtok;
const char *b11 = b11str;
struct sha256 payment_hash;
struct node_id destination;
u32 created_at;
b11tok = json_get_member(buf, t, "bolt11");
hashtok = json_get_member(buf, t, "payment_hash");
destinationtok = json_get_member(buf, t, "destination");
createdtok = json_get_member(buf, t, "created_at");
assert(hashtok != NULL);
assert(createdtok != NULL);
@ -1801,11 +1809,15 @@ static struct command_result *listsendpays_done(struct command *cmd,
if (b11tok)
b11 = json_strdup(cmd, buf, b11tok);
if (destinationtok)
json_to_node_id(buf, destinationtok, &destination);
pm = pay_map_get(&pay_map, &payment_hash);
if (!pm) {
pm = tal(cmd, struct pay_mpp);
pm->payment_hash = tal_dup(pm, struct sha256, &payment_hash);
pm->b11 = tal_steal(pm, b11);
pm->destination = tal_dup(pm,struct node_id, &destination);
pm->label = json_get_member(buf, t, "label");
pm->preimage = NULL;
pm->amount_sent = AMOUNT_MSAT(0);
@ -1875,6 +1887,7 @@ static struct command_result *json_listpays(struct command *cmd,
if (payment_hash)
json_add_sha256(req->js, "payment_hash", payment_hash);
return send_outreq(cmd->plugin, req);
}

4
tests/test_pay.py

@ -3261,6 +3261,8 @@ def test_listpay_result_with_paymod(node_factory, bitcoind):
l2.rpc.keysend(l3.info['id'], amount_sat * 2, "keysend_l3")
assert 'bolt11' in l1.rpc.listpays()['pays'][0]
assert 'bolt11' not in l2.rpc.listpays()['pays'][0]
assert 'payment_hash' in l2.rpc.listpays()['pays'][0]
assert 'payment_hash' in l1.rpc.listpays()['pays'][0]
assert 'bolt11' not in l2.rpc.listpays()['pays'][0]
assert 'destination' in l1.rpc.listpays()['pays'][0]
assert 'destination' in l2.rpc.listpays()['pays'][0]

Loading…
Cancel
Save