- let channel = match network_graph.channel(hop.short_channel_id) {
- Some(channel) => channel,
- None => continue,
- };
- let channel = match channel.as_directed_to(&NodeId::from_pubkey(&hop.pubkey)) {
- Some(channel) => channel,
- None => panic!("Channel directed to {} was not found", hop.pubkey),
- };
- let candidate = CandidateRouteHop::PublicHop {
- info: channel.0,
- short_channel_id: hop.short_channel_id,
- };
- scorer.channel_penalty_msat(&candidate, usage, &());
+ if let Some(channel) = network_graph.channel(hop.short_channel_id) {
+ let (directed, _) = channel.as_directed_to(&NodeId::from_pubkey(&hop.pubkey)).unwrap();
+ let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
+ info: directed,
+ short_channel_id: hop.short_channel_id,
+ });
+ scorer.channel_penalty_msat(&candidate, usage, &Default::default());
+ } else {
+ let target_node_id = NodeId::from_pubkey(&hop.pubkey);
+ let route_hint = RouteHintHop {
+ src_node_id: *prev_hop_node,
+ short_channel_id: hop.short_channel_id,
+ fees: RoutingFees { base_msat: 0, proportional_millionths: 0 },
+ cltv_expiry_delta: 0,
+ htlc_minimum_msat: None,
+ htlc_maximum_msat: None,
+ };
+ let candidate = CandidateRouteHop::PrivateHop(PrivateHopCandidate {
+ hint: &route_hint,
+ target_node_id: &target_node_id,
+ });
+ scorer.channel_penalty_msat(&candidate, usage, &Default::default());
+ }
+ prev_hop_node = &hop.pubkey;