diff --git a/gossipd/routing.c b/gossipd/routing.c index 102e8981f..fbb89e48b 100644 --- a/gossipd/routing.c +++ b/gossipd/routing.c @@ -267,7 +267,7 @@ static u64 connection_fee(const struct node_connection *c, u64 msatoshi) * in order to prefer shorter routes, all things equal. */ static u64 risk_fee(u64 amount, u32 delay, double riskfactor) { - return 1 + amount * delay * riskfactor / BLOCKS_PER_YEAR / 10000; + return 1 + amount * delay * riskfactor; } /* We track totals, rather than costs. That's because the fee depends @@ -311,6 +311,7 @@ static void bfg_one_edge(struct node *node, size_t edgenum, double riskfactor) } } +/* riskfactor is already scaled to per-block amount */ static struct node_connection * find_route(const tal_t *ctx, struct routing_state *rstate, const struct pubkey *from, const struct pubkey *to, u64 msatoshi, @@ -803,7 +804,8 @@ struct route_hop *get_route(tal_t *ctx, struct routing_state *rstate, struct node_connection *first_conn; first_conn = find_route(ctx, rstate, source, destination, msatoshi, - riskfactor, &fee, &route); + riskfactor / BLOCKS_PER_YEAR / 10000, + &fee, &route); if (!first_conn) { return NULL; diff --git a/gossipd/test/run-bench-find_route.c b/gossipd/test/run-bench-find_route.c index cab13a9ad..c33ebe189 100644 --- a/gossipd/test/run-bench-find_route.c +++ b/gossipd/test/run-bench-find_route.c @@ -158,6 +158,7 @@ int main(int argc, char *argv[]) size_t num_success; struct pubkey me = nodeid(0); bool perfme = false; + const double riskfactor = 0.01 / BLOCKS_PER_YEAR / 10000; secp256k1_ctx = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY | SECP256K1_CONTEXT_SIGN); @@ -192,7 +193,7 @@ int main(int argc, char *argv[]) nc = find_route(ctx, rstate, &from, &to, pseudorand(100000), - 0.01, + riskfactor, &fee, &route); num_success += (nc != NULL); tal_free(route); diff --git a/gossipd/test/run-find_route-specific.c b/gossipd/test/run-find_route-specific.c index db1f3b575..c0f51016a 100644 --- a/gossipd/test/run-find_route-specific.c +++ b/gossipd/test/run-find_route-specific.c @@ -63,6 +63,7 @@ int main(void) struct pubkey a, b, c; u64 fee; struct node_connection **route; + const double riskfactor = 1.0 / BLOCKS_PER_YEAR / 10000; secp256k1_ctx = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY | SECP256K1_CONTEXT_SIGN); @@ -115,7 +116,7 @@ int main(void) nc->flags = 1; nc->last_timestamp = 1504064344; - nc = find_route(ctx, rstate, &a, &c, 100000, 1.0, &fee, &route); + nc = find_route(ctx, rstate, &a, &c, 100000, riskfactor, &fee, &route); assert(nc); assert(tal_count(route) == 1); assert(pubkey_eq(&route[0]->src->id, &b)); diff --git a/gossipd/test/run-find_route.c b/gossipd/test/run-find_route.c index bfa1a6526..d7fc915f5 100644 --- a/gossipd/test/run-find_route.c +++ b/gossipd/test/run-find_route.c @@ -74,6 +74,7 @@ int main(void) struct privkey tmp; u64 fee; struct node_connection **route; + const double riskfactor = 1.0 / BLOCKS_PER_YEAR / 10000; secp256k1_ctx = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY | SECP256K1_CONTEXT_SIGN); @@ -91,7 +92,7 @@ int main(void) /* A<->B */ add_connection(rstate, &a, &b, 1, 1, 1); - nc = find_route(ctx, rstate, &a, &b, 1000, 1.0, &fee, &route); + nc = find_route(ctx, rstate, &a, &b, 1000, riskfactor, &fee, &route); assert(nc); assert(tal_count(route) == 0); assert(fee == 0); @@ -106,7 +107,7 @@ int main(void) status_trace("C = %s", type_to_string(trc, struct pubkey, &c)); add_connection(rstate, &b, &c, 1, 1, 1); - nc = find_route(ctx, rstate, &a, &c, 1000, 1.0, &fee, &route); + nc = find_route(ctx, rstate, &a, &c, 1000, riskfactor, &fee, &route); assert(nc); assert(tal_count(route) == 1); assert(fee == 1); @@ -121,14 +122,14 @@ int main(void) add_connection(rstate, &d, &c, 0, 2, 1); /* Will go via D for small amounts. */ - nc = find_route(ctx, rstate, &a, &c, 1000, 1.0, &fee, &route); + nc = find_route(ctx, rstate, &a, &c, 1000, riskfactor, &fee, &route); assert(nc); assert(tal_count(route) == 1); assert(pubkey_eq(&route[0]->src->id, &d)); assert(fee == 0); /* Will go via B for large amounts. */ - nc = find_route(ctx, rstate, &a, &c, 3000000, 1.0, &fee, &route); + nc = find_route(ctx, rstate, &a, &c, 3000000, riskfactor, &fee, &route); assert(nc); assert(tal_count(route) == 1); assert(pubkey_eq(&route[0]->src->id, &b)); @@ -136,7 +137,7 @@ int main(void) /* Make B->C inactive, force it back via D */ get_connection(rstate, &b, &c)->active = false; - nc = find_route(ctx, rstate, &a, &c, 3000000, 1.0, &fee, &route); + nc = find_route(ctx, rstate, &a, &c, 3000000, riskfactor, &fee, &route); assert(nc); assert(tal_count(route) == 1); assert(pubkey_eq(&route[0]->src->id, &d));