gossipd: fix riskfactor passing.

We used a u16, and a 1000 multiplier, which meant we wrapped at
riskfactor 66.  We also never undid the multiplier, so we ended up
applying 1000x the riskfactor they specified.

This changes us to pass the riskfactor with a 1M multiplier.  The next
patch changes the definition of riskfactor to be more useful.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2019-02-01 16:23:38 +10:30 committed by Christian Decker
parent 706debf3d4
commit 662bb0c565
3 changed files with 7 additions and 5 deletions

View File

@ -29,7 +29,8 @@ gossip_getroute_request,3006
gossip_getroute_request,,source,struct pubkey
gossip_getroute_request,,destination,struct pubkey
gossip_getroute_request,,msatoshi,u64
gossip_getroute_request,,riskfactor,u16
# We don't pass doubles, so pass riskfactor * 1000000.
gossip_getroute_request,,riskfactor_by_million,u64
gossip_getroute_request,,final_cltv,u32
gossip_getroute_request,,fuzz,double
gossip_getroute_request,,num_excluded,u16

1 #include <common/cryptomsg.h>
29 gossip_getroute_request,,final_cltv,u32 gossip_getroute_request,,riskfactor_by_million,u64
30 gossip_getroute_request,,fuzz,double gossip_getroute_request,,final_cltv,u32
31 gossip_getroute_request,,num_excluded,u16 gossip_getroute_request,,fuzz,double
32 gossip_getroute_request,,excluded,num_excluded*struct short_channel_id_dir gossip_getroute_request,,num_excluded,u16
33 gossip_getroute_request,,excluded,num_excluded*struct short_channel_id_dir
34 gossip_getroute_request,,max_hops,u32
35 gossip_getroute_reply,3106
36 gossip_getroute_reply,,num_hops,u16

View File

@ -1894,7 +1894,7 @@ static struct io_plan *getroute_req(struct io_conn *conn, struct daemon *daemon,
struct pubkey source, destination;
u64 msatoshi;
u32 final_cltv;
u16 riskfactor;
u64 riskfactor_by_million;
u32 max_hops;
u8 *out;
struct route_hop *hops;
@ -1909,7 +1909,7 @@ static struct io_plan *getroute_req(struct io_conn *conn, struct daemon *daemon,
* avoid being too predictable. */
if (!fromwire_gossip_getroute_request(msg, msg,
&source, &destination,
&msatoshi, &riskfactor,
&msatoshi, &riskfactor_by_million,
&final_cltv, &fuzz,
&excluded,
&max_hops))
@ -1921,7 +1921,7 @@ static struct io_plan *getroute_req(struct io_conn *conn, struct daemon *daemon,
/* routing.c does all the hard work; can return NULL. */
hops = get_route(tmpctx, daemon->rstate, &source, &destination,
msatoshi, riskfactor, final_cltv,
msatoshi, riskfactor_by_million / 1000000.0, final_cltv,
fuzz, pseudorand_u64(), excluded, max_hops);
out = towire_gossip_getroute_reply(NULL, hops);

View File

@ -352,7 +352,8 @@ static struct command_result *json_getroute(struct command *cmd,
}
u8 *req = towire_gossip_getroute_request(cmd, source, destination,
*msatoshi, *riskfactor * 1000,
*msatoshi,
*riskfactor * 1000000.0,
*cltv, fuzz,
excluded,
*max_hops);