diff --git a/plugins/renepay/pay.c b/plugins/renepay/pay.c index aee7ab437..bf81e4c97 100644 --- a/plugins/renepay/pay.c +++ b/plugins/renepay/pay.c @@ -493,6 +493,10 @@ static struct command_result *listpeerchannels_done( // any gossmap local chan. The same way there aren't fees to pay for my // local channels. + // TODO(eduardo): are there route hints for B12? + // Add any extra hidden channel revealed by the routehints to the uncertainty network. + uncertainty_network_add_routehints(pay_plugin->chan_extra_map, payment->routes, payment); + /* From now on, we keep a record of the payment, so persist it beyond this cmd. */ tal_steal(pay_plugin->plugin, payment); /* When we terminate cmd for any reason, clear it from payment so we don't do it again. */ @@ -941,25 +945,26 @@ static struct command_result *json_pay(struct command *cmd, * actually started, it persists beyond the command, so we * tal_steal. */ struct payment *payment = payment_new(cmd, - cmd, - take(invstr), - take(label), - take(description), - take(local_offer_id), - take(payment_secret), - take(payment_metadata), - &destination, - &payment_hash, - *msat, - *maxfee, - *maxdelay, - *retryfor, - final_cltv, - *base_fee_penalty, - *prob_cost_factor, - *riskfactor_millionths, - *min_prob_success_millionths, - use_shadow); + cmd, + take(invstr), + take(label), + take(description), + take(local_offer_id), + take(payment_secret), + take(payment_metadata), + take(routes), + &destination, + &payment_hash, + *msat, + *maxfee, + *maxdelay, + *retryfor, + final_cltv, + *base_fee_penalty, + *prob_cost_factor, + *riskfactor_millionths, + *min_prob_success_millionths, + use_shadow); /* We immediately add this payment to the payment list. */ list_add_tail(&pay_plugin->payments, &payment->list); @@ -1006,10 +1011,6 @@ static struct command_result *json_pay(struct command *cmd, fraction); pay_plugin->last_time = now_sec; - // TODO(eduardo): are there route hints for B12? - // Add any extra hidden channel revealed by the routehints to the uncertainty network. - uncertainty_network_add_routehints(pay_plugin->chan_extra_map, routes, payment); - if(!uncertainty_network_check_invariants(pay_plugin->chan_extra_map)) plugin_log(pay_plugin->plugin, LOG_BROKEN, diff --git a/plugins/renepay/payment.c b/plugins/renepay/payment.c index 6535f09b7..38730a774 100644 --- a/plugins/renepay/payment.c +++ b/plugins/renepay/payment.c @@ -10,25 +10,26 @@ struct payment *payment_new(const tal_t *ctx, struct command *cmd, - const char *invstr TAKES, - const char *label TAKES, - const char *description TAKES, - const struct sha256 *local_offer_id TAKES, - const struct secret *payment_secret TAKES, - const u8 *payment_metadata TAKES, - const struct node_id *destination, - const struct sha256 *payment_hash, - struct amount_msat amount, - struct amount_msat maxfee, - unsigned int maxdelay, - u64 retryfor, - u16 final_cltv, - /* Tweakable in --developer mode */ - u64 base_fee_penalty, - u64 prob_cost_factor, - u64 riskfactor_millionths, - u64 min_prob_success_millionths, - bool use_shadow) + const char *invstr TAKES, + const char *label TAKES, + const char *description TAKES, + const struct sha256 *local_offer_id TAKES, + const struct secret *payment_secret TAKES, + const u8 *payment_metadata TAKES, + const struct route_info **routes TAKES, + const struct node_id *destination, + const struct sha256 *payment_hash, + struct amount_msat amount, + struct amount_msat maxfee, + unsigned int maxdelay, + u64 retryfor, + u16 final_cltv, + /* Tweakable in --developer mode */ + u64 base_fee_penalty, + u64 prob_cost_factor, + u64 riskfactor_millionths, + u64 min_prob_success_millionths, + bool use_shadow) { struct payment *p = tal(ctx,struct payment); p->cmd = cmd; @@ -45,6 +46,14 @@ struct payment *payment_new(const tal_t *ctx, if (!amount_msat_add(&p->maxspend, amount, maxfee)) p->maxspend = AMOUNT_MSAT(UINT64_MAX); + if (taken(routes)) + p->routes = tal_steal(p, routes); + else { + /* Deep copy */ + p->routes = tal_dup_talarr(p, const struct route_info *, routes); + for (size_t i = 0; i < tal_count(p->routes); i++) + p->routes[i] = tal_steal(p->routes, p->routes[i]); + } p->maxdelay = maxdelay; p->start_time = time_now(); p->stop_time = timeabs_add(p->start_time, time_from_sec(retryfor)); diff --git a/plugins/renepay/payment.h b/plugins/renepay/payment.h index a4e98b259..9f1bd0717 100644 --- a/plugins/renepay/payment.h +++ b/plugins/renepay/payment.h @@ -47,6 +47,9 @@ struct payment { /* invstring (bolt11 or bolt12) */ const char *invstr; + /* Extracted routehints */ + const struct route_info **routes; + /* How much, what, where */ struct amount_msat amount; struct node_id destination; @@ -123,6 +126,7 @@ struct payment *payment_new(const tal_t *ctx, const struct sha256 *local_offer_id TAKES, const struct secret *payment_secret TAKES, const u8 *payment_metadata TAKES, + const struct route_info **routes TAKES, const struct node_id *destination, const struct sha256 *payment_hash, struct amount_msat amount,