Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
4258cd0
update-mocks: make handling of mocks in nested files deterministic.
rustyrussell May 11, 2026
b502ca3
common: implement tal_arr_append and tal_arr_appendn, and use them.
rustyrussell May 11, 2026
304d33e
CCAN: update to get json_escape_dup helper.
rustyrussell May 11, 2026
15c5a43
pytest: cleanup test_pay_avoid_low_fee_chan flake.
rustyrussell May 11, 2026
9c9078c
askrene: all remove_small_channel_layer when maxparts=1.
rustyrussell May 11, 2026
c3d983f
askrene: improve errors we return.
rustyrussell May 11, 2026
51718b8
askrene: make failure messages clearer:
rustyrussell May 11, 2026
a6b8251
pytest: use maxparts=1 not the soon-to-be-deprecated "auto.no_mpp_sup…
rustyrussell May 11, 2026
2fa62ea
askrene: deprecate `auto.no_mpp_support` layer in favor of `maxparts=1`.
rustyrussell May 11, 2026
d8c1cd9
xpay: remove internal "disable_mpp" flag.
rustyrussell May 11, 2026
bce6709
xpay: extract payment creation logic.
rustyrussell May 11, 2026
024e873
xpay: add extra_tlvs support (unused for now).
rustyrussell May 11, 2026
c90b061
injectpaymentonion: add explicit `destination` option.
rustyrussell May 11, 2026
74673df
xpay: add `label` and `localinvreqid` params
rustyrussell May 11, 2026
478e02a
xpay: handle localinvreqid and label parameters when we're called as …
rustyrussell May 11, 2026
72f5cb9
xpay: process channel_update from error for the current payment.
rustyrussell May 11, 2026
31f0f34
xpay: add a CLTV shadow for single non-blinded paths.
rustyrussell May 11, 2026
722bfa4
xpay: return the correct (documented!) error code on repeat payments.
rustyrussell May 11, 2026
9f5861c
xpay: correctly identify final node when using a dummy blinded path.
rustyrussell May 11, 2026
4d5d39c
xpay: when acting as pay, imitate its idempotent behavior.
rustyrussell May 11, 2026
2b50033
xpay: ensure unique_id is always valid.
rustyrussell May 11, 2026
9e7ad05
askrene: populate `struct route` with more complete information.
rustyrussell May 11, 2026
acedb59
getroutes: return more detailed fields in routes[].
rustyrussell May 11, 2026
35f2469
getroutes: deprecate old vaguely named fields.
rustyrussell May 11, 2026
afec304
sendpay: ignore unknown `route` fields, but take the `getroutes`-styl…
rustyrussell May 11, 2026
6931040
pyln: add getroutes wrapper to pyln-client, add single_route helper t…
rustyrussell May 11, 2026
2a81897
tests: use getroutes, not getroute (simple cases)
rustyrussell May 11, 2026
b52faf5
pytest: convert remaining getroute cases.
rustyrussell May 11, 2026
d8af31d
xpay: add xkeysend support.
rustyrussell May 11, 2026
ed29120
pytest: speed up test_keysend_description_size_limit
rustyrussell May 11, 2026
bfa74a7
pytest: test xkeysend as thoroughly as keysend.
rustyrussell May 11, 2026
f2a7d54
offers: use xpay.
rustyrussell May 11, 2026
b10fe00
pytest: make pay tests more robust.
rustyrussell May 11, 2026
0552ef2
pyln-testing: allow bitcoind mocks to return None to mean "don't mock".
rustyrussell May 11, 2026
8db4766
pytest: use xpay, not pay in misc tests.
rustyrussell May 11, 2026
4ac80c1
xpay: take over pay invocations by default.
rustyrussell May 11, 2026
d28ad2b
pay: accept invstring as first parameter name.
rustyrussell May 11, 2026
766082e
pay: deprecate pay and paystatus.
rustyrussell May 11, 2026
ff4b71e
getroute: deprecate in favor of `getroutes`
rustyrussell May 11, 2026
9941d46
keysend: deprecate in favor of `xkeysend`.
rustyrussell May 11, 2026
d655892
xpay: keep track of ongoing payments, to implement attempt_ongoing()
rustyrussell May 11, 2026
5c59925
plugins: move listpays from pay plugin to xpay plugin.
rustyrussell May 11, 2026
a9241d8
renepay: deprecate.
rustyrussell May 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 72 additions & 2 deletions .msggen.json
Original file line number Diff line number Diff line change
Expand Up @@ -2173,10 +2173,16 @@
"GetRoutes.routes[].probability_ppm": 1
},
"GetroutesRoutesPath": {
"GetRoutes.routes[].path[].amount_in_msat": 7,
"GetRoutes.routes[].path[].amount_msat": 3,
"GetRoutes.routes[].path[].amount_out_msat": 8,
"GetRoutes.routes[].path[].cltv_in": 11,
"GetRoutes.routes[].path[].cltv_out": 12,
"GetRoutes.routes[].path[].delay": 5,
"GetRoutes.routes[].path[].direction": 2,
"GetRoutes.routes[].path[].next_node_id": 4,
"GetRoutes.routes[].path[].node_id_in": 9,
"GetRoutes.routes[].path[].node_id_out": 10,
"GetRoutes.routes[].path[].short_channel_id": 1,
"GetRoutes.routes[].path[].short_channel_id_dir": 6
},
Expand All @@ -2200,6 +2206,7 @@
"InjectpaymentonionRequest": {
"InjectPaymentOnion.amount_msat": 3,
"InjectPaymentOnion.cltv_expiry": 4,
"InjectPaymentOnion.destination": 11,
"InjectPaymentOnion.destination_msat": 10,
"InjectPaymentOnion.groupid": 6,
"InjectPaymentOnion.invstring": 8,
Expand Down Expand Up @@ -4006,10 +4013,14 @@
},
"SendpayRoute": {
"SendPay.route[].amount_msat": 5,
"SendPay.route[].amount_out_msat": 8,
"SendPay.route[].channel": 4,
"SendPay.route[].cltv_out": 9,
"SendPay.route[].delay": 3,
"SendPay.route[].id": 2,
"SendPay.route[].msatoshi": 1
"SendPay.route[].msatoshi": 1,
"SendPay.route[].node_id_out": 7,
"SendPay.route[].short_channel_id_dir": 6
},
"SendpsbtRequest": {
"SendPsbt.psbt": 1,
Expand Down Expand Up @@ -4438,8 +4449,11 @@
},
"XpayRequest": {
"Xpay.amount_msat": 2,
"Xpay.dev_use_shadow": 11,
"Xpay.invstring": 1,
"Xpay.label": 9,
"Xpay.layers[]": 4,
"Xpay.localinvreqid": 10,
"Xpay.maxdelay": 7,
"Xpay.maxfee": 3,
"Xpay.partial_msat": 6,
Expand Down Expand Up @@ -8527,20 +8541,44 @@
"added": "v24.08",
"deprecated": null
},
"GetRoutes.routes[].path[].amount_in_msat": {
"added": "v26.06",
"deprecated": null
},
"GetRoutes.routes[].path[].amount_msat": {
"added": "v24.08",
"deprecated": "v26.06"
},
"GetRoutes.routes[].path[].amount_out_msat": {
"added": "v26.06",
"deprecated": null
},
"GetRoutes.routes[].path[].cltv_in": {
"added": "v26.06",
"deprecated": null
},
"GetRoutes.routes[].path[].cltv_out": {
"added": "v26.06",
"deprecated": null
},
"GetRoutes.routes[].path[].delay": {
"added": "v24.08",
"deprecated": null
"deprecated": "v26.06"
},
"GetRoutes.routes[].path[].direction": {
"added": "v24.08",
"deprecated": null
},
"GetRoutes.routes[].path[].next_node_id": {
"added": "v24.08",
"deprecated": "v26.06"
},
"GetRoutes.routes[].path[].node_id_in": {
"added": "v26.06",
"deprecated": null
},
"GetRoutes.routes[].path[].node_id_out": {
"added": "v26.06",
"deprecated": null
},
"GetRoutes.routes[].path[].short_channel_id": {
Expand Down Expand Up @@ -8747,6 +8785,10 @@
"added": "v24.11",
"deprecated": null
},
"InjectPaymentOnion.destination": {
"added": "v26.06",
"deprecated": null
},
"InjectPaymentOnion.destination_msat": {
"added": "v24.11.1",
"deprecated": null
Expand Down Expand Up @@ -13555,10 +13597,18 @@
"added": "pre-v0.10.1",
"deprecated": null
},
"SendPay.route[].amount_out_msat": {
"added": "v26.06",
"deprecated": null
},
"SendPay.route[].channel": {
"added": "pre-v0.10.1",
"deprecated": null
},
"SendPay.route[].cltv_out": {
"added": "v26.06",
"deprecated": null
},
"SendPay.route[].delay": {
"added": "pre-v0.10.1",
"deprecated": null
Expand All @@ -13567,6 +13617,14 @@
"added": "pre-v0.10.1",
"deprecated": null
},
"SendPay.route[].node_id_out": {
"added": "v26.06",
"deprecated": null
},
"SendPay.route[].short_channel_id_dir": {
"added": "v26.06",
"deprecated": null
},
"SendPay.status": {
"added": "pre-v0.10.1",
"deprecated": null
Expand Down Expand Up @@ -14747,6 +14805,10 @@
"added": "v24.11",
"deprecated": null
},
"Xpay.dev_use_shadow": {
"added": "v26.06",
"deprecated": null
},
"Xpay.failed_parts": {
"added": "v24.11",
"deprecated": null
Expand All @@ -14755,10 +14817,18 @@
"added": "v24.11",
"deprecated": null
},
"Xpay.label": {
"added": "v24.11",
"deprecated": null
},
"Xpay.layers[]": {
"added": "v24.11",
"deprecated": null
},
"Xpay.localinvreqid": {
"added": "v24.11",
"deprecated": null
},
"Xpay.maxdelay": {
"added": "v25.02",
"deprecated": null
Expand Down
4 changes: 1 addition & 3 deletions bitcoin/psbt.c
Original file line number Diff line number Diff line change
Expand Up @@ -673,9 +673,7 @@ size_t psbt_output_get_weight(const struct wally_psbt *psbt,

static void add(u8 **key, const void *mem, size_t len)
{
size_t oldlen = tal_count(*key);
tal_resize(key, oldlen + len);
memcpy(*key + oldlen, memcheck(mem, len), len);
tal_arr_appendn(key, mem, len);
}

static void add_type(u8 **key, const u8 num)
Expand Down
4 changes: 1 addition & 3 deletions bitcoin/script.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,7 @@ static void hash160(struct ripemd160 *redeemhash, const void *mem, size_t len)

static void add(u8 **scriptp, const void *mem, size_t len)
{
size_t oldlen = tal_count(*scriptp);
tal_resize(scriptp, oldlen + len);
memcpy(*scriptp + oldlen, mem, len);
tal_arr_appendn(scriptp, mem, len);
}

static void add_op(u8 **scriptp, u8 op)
Expand Down
2 changes: 1 addition & 1 deletion ccan/README
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
CCAN imported from http://ccodearchive.net.

CCAN version: init-2611-g050dc66d
CCAN version: init-2612-ge242779f
8 changes: 8 additions & 0 deletions ccan/ccan/json_escape/json_escape.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ bool json_escape_eq(const struct json_escape *a, const struct json_escape *b)
return streq(a->s, b->s);
}

struct json_escape *json_escape_dup(const tal_t *ctx, const struct json_escape *esc TAKES)
{
if (taken(esc))
return (struct json_escape *)tal_steal(ctx, esc);

return json_escape_string_(ctx, esc->s, strlen(esc->s));
}

bool json_escape_needed(const char *str, size_t len)
{
size_t i;
Expand Down
3 changes: 3 additions & 0 deletions ccan/ccan/json_escape/json_escape.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ struct json_escape *json_escape_len(const tal_t *ctx,
struct json_escape *json_partial_escape(const tal_t *ctx,
const char *str TAKES);

/* Copy a json_escape */
struct json_escape *json_escape_dup(const tal_t *ctx, const struct json_escape *esc TAKES);

/* Do we need to escape this str? */
bool json_escape_needed(const char *str, size_t len);

Expand Down
4 changes: 3 additions & 1 deletion ccan/ccan/json_escape/test/run.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ int main(void)
struct json_escape *e;

/* This is how many tests you plan to run */
plan_tests(6);
plan_tests(8);

e = json_escape(ctx, "Hello");
ok1(!strcmp(e->s, "Hello"));
Expand All @@ -25,6 +25,7 @@ int main(void)
ok1(!strcmp(json_escape_unescape(ctx, e),
"\\\b\f\n\r\t\""
"\\\\\\b\\f\\n\\r\\t\\\""));
ok1(json_escape_eq(e, json_escape_dup(ctx, e)));

/* This one doesn't escape the already-escaped chars */
e = json_partial_escape(ctx,
Expand All @@ -36,6 +37,7 @@ int main(void)
ok1(!strcmp(json_escape_unescape(ctx, e),
"\\\b\f\n\r\t\""
"\\\b\f\n\r\t\""));
ok1(json_escape_eq(e, json_escape_dup(ctx, e)));

tal_free(ctx);

Expand Down
28 changes: 21 additions & 7 deletions cln-grpc/proto/node.proto

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading