+fn send_rand_probe(
+ channel_manager: &ChannelManager, graph: &NetworkGraph,
+ logger: &disk::FilesystemLogger,
+ scorer: &RwLock<ProbabilisticScorer<Arc<NetworkGraph>, Arc<disk::FilesystemLogger>>>
+) {
+ let rcpt = {
+ let lck = graph.read_only();
+ if lck.nodes().is_empty() { return; }
+ let mut it = lck.nodes().unordered_iter().skip(::rand::random::<usize>() % lck.nodes().len());
+ it.next().unwrap().0.clone()
+ };
+ let amt = ::rand::random::<u64>() % 500_000_000;
+ if let Ok(pk) = bitcoin::secp256k1::PublicKey::from_slice(rcpt.as_slice()) {
+ send_probe(channel_manager, pk, graph, logger, amt, scorer);
+ }
+}
+
+fn send_probe(
+ channel_manager: &ChannelManager, recipient: PublicKey, graph: &NetworkGraph,
+ logger: &disk::FilesystemLogger, amt_msat: u64,
+ scorer: &RwLock<ProbabilisticScorer<Arc<NetworkGraph>, Arc<disk::FilesystemLogger>>>
+) {
+ let chans = channel_manager.list_usable_channels();
+ let chan_refs = chans.iter().map(|a| a).collect::<Vec<_>>();
+ let mut payment_params = PaymentParameters::from_node_id(recipient, 144);
+ payment_params.max_path_count = 1;
+ let in_flight_htlcs = channel_manager.compute_inflight_htlcs();
+ let scorer = scorer.read().unwrap();
+ let inflight_scorer = ScorerAccountingForInFlightHtlcs::new(&scorer, &in_flight_htlcs);
+ let score_params: ProbabilisticScoringFeeParameters = Default::default();
+ let route_res = lightning::routing::router::find_route(
+ &channel_manager.get_our_node_id(),
+ &RouteParameters::from_payment_params_and_value(payment_params, amt_msat),
+ &graph, Some(&chan_refs), logger, &inflight_scorer, &score_params, &[32; 32]
+ );
+ if let Ok(route) = route_res {
+ for path in route.paths {
+ let _ = channel_manager.send_probe(path);
+ }
+ }
+}
+