diff --git a/plugins/libplugin-pay.c b/plugins/libplugin-pay.c index 042f513ee..ac622478c 100644 --- a/plugins/libplugin-pay.c +++ b/plugins/libplugin-pay.c @@ -23,6 +23,7 @@ struct payment *payment_new(tal_t *ctx, struct command *cmd, p->getroute = tal(p, struct getroute_request); p->label = NULL; p->failreason = NULL; + p->getroute->riskfactorppm = 10000000; /* Copy over the relevant pieces of information. */ if (parent != NULL) { @@ -433,9 +434,10 @@ static void payment_getroute(struct payment *p) payment_getroute_error, p); json_add_node_id(req->js, "id", p->getroute->destination); json_add_amount_msat_only(req->js, "msatoshi", p->getroute->amount); - json_add_num(req->js, "riskfactor", 1); json_add_num(req->js, "cltv", p->getroute->cltv); json_add_num(req->js, "maxhops", p->getroute->max_hops); + json_add_member(req->js, "riskfactor", false, "%lf", + p->getroute->riskfactorppm / 1000000.0); payment_getroute_add_excludes(p, req->js); send_outreq(p->plugin, req); } diff --git a/plugins/libplugin-pay.h b/plugins/libplugin-pay.h index 2e79790b9..25bcb83bc 100644 --- a/plugins/libplugin-pay.h +++ b/plugins/libplugin-pay.h @@ -129,6 +129,9 @@ struct getroute_request { struct amount_msat amount; u32 cltv; u32 max_hops; + + /* Riskfactor milionths */ + u64 riskfactorppm; }; struct payment_constraints { diff --git a/plugins/pay.c b/plugins/pay.c index 1faf6940d..e7fb8ad28 100644 --- a/plugins/pay.c +++ b/plugins/pay.c @@ -1863,6 +1863,7 @@ static struct command_result *json_paymod(struct command *cmd, struct amount_msat *exemptfee, *msat; const char *label; unsigned int *retryfor; + u64 *riskfactor_millionths; #if DEVELOPER bool *use_shadow; #endif @@ -1875,6 +1876,8 @@ static struct command_result *json_paymod(struct command *cmd, if (!param(cmd, buf, params, p_req("bolt11", param_string, &b11str), p_opt("msatoshi", param_msat, &msat), p_opt("label", param_string, &label), + p_opt_def("riskfactor", param_millionths, + &riskfactor_millionths, 10000000), p_opt_def("exemptfee", param_msat, &exemptfee, AMOUNT_MSAT(5000)), p_opt_def("maxdelay", param_number, &maxdelay, maxdelay_default), @@ -1937,6 +1940,7 @@ static struct command_result *json_paymod(struct command *cmd, p->why = "Initial attempt"; p->constraints.cltv_budget = *maxdelay; p->deadline = timeabs_add(time_now(), time_from_sec(*retryfor)); + p->getroute->riskfactorppm = *riskfactor_millionths; if (!amount_msat_fee(&p->constraints.fee_budget, p->amount, 0, *maxfee_pct_millionths / 100)) { diff --git a/tests/test_pay.py b/tests/test_pay.py index da37801a6..829cff2d0 100644 --- a/tests/test_pay.py +++ b/tests/test_pay.py @@ -3077,7 +3077,7 @@ def test_pay_modifiers(node_factory): # Make sure that the dummy param is in the help (and therefore assigned to # the modifier data). hlp = l1.rpc.help("paymod")['help'][0] - assert(hlp['command'] == 'paymod bolt11 [msatoshi] [label] [exemptfee] [maxdelay] [retry_for] [maxfeepercent] [use_shadow]') + assert(hlp['command'] == 'paymod bolt11 [msatoshi] [label] [riskfactor] [exemptfee] [maxdelay] [retry_for] [maxfeepercent] [use_shadow]') inv = l2.rpc.invoice(123, 'lbl', 'desc')['bolt11'] r = l1.rpc.paymod(inv)