Skip to content

Commit 01bccc4

Browse files
committed
Add a random per-path CLTV offset for privacy.
1 parent 23f1ec8 commit 01bccc4

File tree

11 files changed

+343
-111
lines changed

11 files changed

+343
-111
lines changed

fuzz/src/full_stack.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,8 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
456456
final_value_msat,
457457
final_cltv_expiry_delta: 42,
458458
};
459-
let route = match find_route(&our_id, &params, &network_graph, None, Arc::clone(&logger), &scorer) {
459+
let random_seed_bytes: [u8; 32] = keys_manager.get_secure_random_bytes();
460+
let route = match find_route(&our_id, &params, &network_graph, None, Arc::clone(&logger), &scorer, &random_seed_bytes) {
460461
Ok(route) => route,
461462
Err(_) => return,
462463
};
@@ -479,7 +480,8 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
479480
final_value_msat,
480481
final_cltv_expiry_delta: 42,
481482
};
482-
let mut route = match find_route(&our_id, &params, &network_graph, None, Arc::clone(&logger), &scorer) {
483+
let random_seed_bytes: [u8; 32] = keys_manager.get_secure_random_bytes();
484+
let mut route = match find_route(&our_id, &params, &network_graph, None, Arc::clone(&logger), &scorer, &random_seed_bytes) {
483485
Ok(route) => route,
484486
Err(_) => return,
485487
};

fuzz/src/router.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ use utils::test_logger;
3232
use std::collections::HashSet;
3333
use std::sync::Arc;
3434
use std::sync::atomic::{AtomicUsize, Ordering};
35+
use std::convert::TryInto;
3536

3637
#[inline]
3738
pub fn slice_to_be16(v: &[u8]) -> u16 {
@@ -250,6 +251,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
250251
}
251252
}
252253
let scorer = FixedPenaltyScorer::with_penalty(0);
254+
let random_seed_bytes: [u8; 32] = [get_slice!(1)[0]; 32];
253255
for target in node_pks.iter() {
254256
let route_params = RouteParameters {
255257
payment_params: PaymentParameters::from_node_id(*target).with_route_hints(last_hops.clone()),
@@ -258,7 +260,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
258260
};
259261
let _ = find_route(&our_pubkey, &route_params, &net_graph,
260262
first_hops.map(|c| c.iter().collect::<Vec<_>>()).as_ref().map(|a| a.as_slice()),
261-
Arc::clone(&logger), &scorer);
263+
Arc::clone(&logger), &scorer, &random_seed_bytes);
262264
}
263265
},
264266
}

lightning-background-processor/src/lib.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -667,13 +667,15 @@ mod tests {
667667

668668
#[test]
669669
fn test_invoice_payer() {
670+
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
671+
let random_seed_bytes = keys_manager.get_secure_random_bytes();
670672
let nodes = create_nodes(2, "test_invoice_payer".to_string());
671673

672674
// Initiate the background processors to watch each node.
673675
let data_dir = nodes[0].persister.get_data_dir();
674676
let persister = move |node: &ChannelManager<InMemorySigner, Arc<ChainMonitor>, Arc<test_utils::TestBroadcaster>, Arc<KeysManager>, Arc<test_utils::TestFeeEstimator>, Arc<test_utils::TestLogger>>| FilesystemPersister::persist_manager(data_dir.clone(), node);
675-
let router = DefaultRouter::new(Arc::clone(&nodes[0].network_graph), Arc::clone(&nodes[0].logger));
676677
let scorer = Arc::new(Mutex::new(test_utils::TestScorer::with_penalty(0)));
678+
let router = DefaultRouter::new(Arc::clone(&nodes[0].network_graph), Arc::clone(&nodes[0].logger), random_seed_bytes);
677679
let invoice_payer = Arc::new(InvoicePayer::new(Arc::clone(&nodes[0].node), router, scorer, Arc::clone(&nodes[0].logger), |_: &_| {}, RetryAttempts(2)));
678680
let event_handler = Arc::clone(&invoice_payer);
679681
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].net_graph_msg_handler.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());

lightning-invoice/src/utils.rs

+19-7
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use {CreationError, Currency, DEFAULT_EXPIRY_TIME, Invoice, InvoiceBuilder, Sign
44
use payment::{Payer, Router};
55

66
use bech32::ToBase32;
7-
use bitcoin_hashes::Hash;
7+
use bitcoin_hashes::{Hash, sha256};
88
use crate::prelude::*;
99
use lightning::chain;
1010
use lightning::chain::chaininterface::{BroadcasterInterface, FeeEstimator};
@@ -20,6 +20,7 @@ use secp256k1::key::PublicKey;
2020
use core::convert::TryInto;
2121
use core::ops::Deref;
2222
use core::time::Duration;
23+
use sync::Mutex;
2324

2425
#[cfg(feature = "std")]
2526
/// Utility to create an invoice that can be paid to one of multiple nodes, or a "phantom invoice."
@@ -222,12 +223,14 @@ where
222223
pub struct DefaultRouter<G: Deref<Target = NetworkGraph>, L: Deref> where L::Target: Logger {
223224
network_graph: G,
224225
logger: L,
226+
random_seed_bytes: Mutex<[u8; 32]>,
225227
}
226228

227229
impl<G: Deref<Target = NetworkGraph>, L: Deref> DefaultRouter<G, L> where L::Target: Logger {
228-
/// Creates a new router using the given [`NetworkGraph`] and [`Logger`].
229-
pub fn new(network_graph: G, logger: L) -> Self {
230-
Self { network_graph, logger }
230+
/// Creates a new router using the given [`NetworkGraph`], a [`Logger`], and a randomness source `random_seed_bytes`.
231+
pub fn new(network_graph: G, logger: L, random_seed_bytes: [u8; 32]) -> Self {
232+
let random_seed_bytes = Mutex::new(random_seed_bytes);
233+
Self { network_graph, logger, random_seed_bytes }
231234
}
232235
}
233236

@@ -237,7 +240,13 @@ where L::Target: Logger {
237240
&self, payer: &PublicKey, params: &RouteParameters, _payment_hash: &PaymentHash,
238241
first_hops: Option<&[&ChannelDetails]>, scorer: &S
239242
) -> Result<Route, LightningError> {
240-
find_route(payer, params, &*self.network_graph, first_hops, &*self.logger, scorer)
243+
let random_seed_bytes: [u8; 32];
244+
{
245+
let mut locked_random_seed_bytes = self.random_seed_bytes.lock().unwrap();
246+
*locked_random_seed_bytes = sha256::Hash::hash(&*locked_random_seed_bytes).into_inner();
247+
random_seed_bytes = *locked_random_seed_bytes;
248+
}
249+
find_route(payer, params, &*self.network_graph, first_hops, &*self.logger, scorer, &random_seed_bytes)
241250
}
242251
}
243252

@@ -297,6 +306,7 @@ mod test {
297306
use lightning::util::enforcing_trait_impls::EnforcingSigner;
298307
use lightning::util::events::{MessageSendEvent, MessageSendEventsProvider, Event};
299308
use lightning::util::test_utils;
309+
use lightning::chain::keysinterface::KeysInterface;
300310
use utils::create_invoice_from_channelmanager_and_duration_since_epoch;
301311

302312
#[test]
@@ -325,9 +335,10 @@ mod test {
325335
let network_graph = node_cfgs[0].network_graph;
326336
let logger = test_utils::TestLogger::new();
327337
let scorer = test_utils::TestScorer::with_penalty(0);
338+
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
328339
let route = find_route(
329340
&nodes[0].node.get_our_node_id(), &route_params, network_graph,
330-
Some(&first_hops.iter().collect::<Vec<_>>()), &logger, &scorer,
341+
Some(&first_hops.iter().collect::<Vec<_>>()), &logger, &scorer, &random_seed_bytes
331342
).unwrap();
332343

333344
let payment_event = {
@@ -413,9 +424,10 @@ mod test {
413424
let network_graph = node_cfgs[0].network_graph;
414425
let logger = test_utils::TestLogger::new();
415426
let scorer = test_utils::TestScorer::with_penalty(0);
427+
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
416428
let route = find_route(
417429
&nodes[0].node.get_our_node_id(), &params, network_graph,
418-
Some(&first_hops.iter().collect::<Vec<_>>()), &logger, &scorer,
430+
Some(&first_hops.iter().collect::<Vec<_>>()), &logger, &scorer, &random_seed_bytes
419431
).unwrap();
420432
let (payment_event, fwd_idx) = {
421433
let mut payment_hash = PaymentHash([0; 32]);

lightning/src/ln/channelmanager.rs

+14-7
Original file line numberDiff line numberDiff line change
@@ -6823,6 +6823,7 @@ mod tests {
68236823
use util::errors::APIError;
68246824
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
68256825
use util::test_utils;
6826+
use chain::keysinterface::KeysInterface;
68266827

68276828
#[cfg(feature = "std")]
68286829
#[test]
@@ -7076,6 +7077,7 @@ mod tests {
70767077
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
70777078
create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
70787079
let scorer = test_utils::TestScorer::with_penalty(0);
7080+
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
70797081

70807082
// To start (1), send a regular payment but don't claim it.
70817083
let expected_route = [&nodes[1]];
@@ -7089,7 +7091,7 @@ mod tests {
70897091
};
70907092
let route = find_route(
70917093
&nodes[0].node.get_our_node_id(), &route_params, nodes[0].network_graph, None,
7092-
nodes[0].logger, &scorer
7094+
nodes[0].logger, &scorer, &random_seed_bytes
70937095
).unwrap();
70947096
nodes[0].node.send_spontaneous_payment(&route, Some(payment_preimage)).unwrap();
70957097
check_added_monitors!(nodes[0], 1);
@@ -7120,7 +7122,7 @@ mod tests {
71207122
let payment_preimage = PaymentPreimage([42; 32]);
71217123
let route = find_route(
71227124
&nodes[0].node.get_our_node_id(), &route_params, nodes[0].network_graph, None,
7123-
nodes[0].logger, &scorer
7125+
nodes[0].logger, &scorer, &random_seed_bytes
71247126
).unwrap();
71257127
let (payment_hash, _) = nodes[0].node.send_spontaneous_payment(&route, Some(payment_preimage)).unwrap();
71267128
check_added_monitors!(nodes[0], 1);
@@ -7181,9 +7183,10 @@ mod tests {
71817183
let network_graph = nodes[0].network_graph;
71827184
let first_hops = nodes[0].node.list_usable_channels();
71837185
let scorer = test_utils::TestScorer::with_penalty(0);
7186+
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
71847187
let route = find_route(
71857188
&payer_pubkey, &route_params, network_graph, Some(&first_hops.iter().collect::<Vec<_>>()),
7186-
nodes[0].logger, &scorer
7189+
nodes[0].logger, &scorer, &random_seed_bytes
71877190
).unwrap();
71887191

71897192
let test_preimage = PaymentPreimage([42; 32]);
@@ -7224,9 +7227,10 @@ mod tests {
72247227
let network_graph = nodes[0].network_graph;
72257228
let first_hops = nodes[0].node.list_usable_channels();
72267229
let scorer = test_utils::TestScorer::with_penalty(0);
7230+
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
72277231
let route = find_route(
72287232
&payer_pubkey, &route_params, network_graph, Some(&first_hops.iter().collect::<Vec<_>>()),
7229-
nodes[0].logger, &scorer
7233+
nodes[0].logger, &scorer, &random_seed_bytes
72307234
).unwrap();
72317235

72327236
let test_preimage = PaymentPreimage([42; 32]);
@@ -7310,7 +7314,7 @@ mod tests {
73107314
pub mod bench {
73117315
use chain::Listen;
73127316
use chain::chainmonitor::{ChainMonitor, Persist};
7313-
use chain::keysinterface::{KeysManager, InMemorySigner};
7317+
use chain::keysinterface::{KeysManager, KeysInterface, InMemorySigner};
73147318
use ln::channelmanager::{BestBlock, ChainParameters, ChannelManager, PaymentHash, PaymentPreimage};
73157319
use ln::features::{InitFeatures, InvoiceFeatures};
73167320
use ln::functional_test_utils::*;
@@ -7319,7 +7323,7 @@ pub mod bench {
73197323
use routing::router::{PaymentParameters, get_route};
73207324
use util::test_utils;
73217325
use util::config::UserConfig;
7322-
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider, PaymentPurpose};
7326+
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
73237327

73247328
use bitcoin::hashes::Hash;
73257329
use bitcoin::hashes::sha256::Hash as Sha256;
@@ -7427,8 +7431,11 @@ pub mod bench {
74277431
let payment_params = PaymentParameters::from_node_id($node_b.get_our_node_id())
74287432
.with_features(InvoiceFeatures::known());
74297433
let scorer = test_utils::TestScorer::with_penalty(0);
7434+
let seed = [3u8; 32];
7435+
let keys_manager = KeysManager::new(&seed, 42, 42);
7436+
let random_seed_bytes = keys_manager.get_secure_random_bytes();
74307437
let route = get_route(&$node_a.get_our_node_id(), &payment_params, &dummy_graph,
7431-
Some(&usable_channels.iter().map(|r| r).collect::<Vec<_>>()), 10_000, TEST_FINAL_CLTV, &logger_a, &scorer).unwrap();
7438+
Some(&usable_channels.iter().map(|r| r).collect::<Vec<_>>()), 10_000, TEST_FINAL_CLTV, &logger_a, &scorer, &random_seed_bytes).unwrap();
74327439

74337440
let mut payment_preimage = PaymentPreimage([0; 32]);
74347441
payment_preimage.0[0..8].copy_from_slice(&payment_count.to_le_bytes());

lightning/src/ln/functional_test_utils.rs

+13-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
//! A bunch of useful utilities for building networks of nodes and exchanging messages between
1111
//! nodes for functional tests.
1212
13-
use chain::{BestBlock, Confirm, Listen, Watch};
13+
use chain::{BestBlock, Confirm, Listen, Watch, keysinterface::KeysInterface};
1414
use chain::channelmonitor::ChannelMonitor;
1515
use chain::transaction::OutPoint;
1616
use ln::{PaymentPreimage, PaymentHash, PaymentSecret};
@@ -1081,15 +1081,18 @@ macro_rules! get_route_and_payment_hash {
10811081
$crate::get_route_and_payment_hash!($send_node, $recv_node, vec![], $recv_value, TEST_FINAL_CLTV)
10821082
}};
10831083
($send_node: expr, $recv_node: expr, $last_hops: expr, $recv_value: expr, $cltv: expr) => {{
1084+
use $crate::chain::keysinterface::KeysInterface;
10841085
let (payment_preimage, payment_hash, payment_secret) = $crate::get_payment_preimage_hash!($recv_node, Some($recv_value));
10851086
let payment_params = $crate::routing::router::PaymentParameters::from_node_id($recv_node.node.get_our_node_id())
10861087
.with_features($crate::ln::features::InvoiceFeatures::known())
10871088
.with_route_hints($last_hops);
10881089
let scorer = $crate::util::test_utils::TestScorer::with_penalty(0);
1090+
let keys_manager = $crate::util::test_utils::TestKeysInterface::new(&[0u8; 32], bitcoin::network::constants::Network::Testnet);
1091+
let random_seed_bytes = keys_manager.get_secure_random_bytes();
10891092
let route = $crate::routing::router::get_route(
10901093
&$send_node.node.get_our_node_id(), &payment_params, $send_node.network_graph,
10911094
Some(&$send_node.node.list_usable_channels().iter().collect::<Vec<_>>()),
1092-
$recv_value, $cltv, $send_node.logger, &scorer
1095+
$recv_value, $cltv, $send_node.logger, &scorer, &random_seed_bytes
10931096
).unwrap();
10941097
(route, payment_hash, payment_preimage, payment_secret)
10951098
}}
@@ -1545,10 +1548,13 @@ pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route:
15451548
let payment_params = PaymentParameters::from_node_id(expected_route.last().unwrap().node.get_our_node_id())
15461549
.with_features(InvoiceFeatures::known());
15471550
let scorer = test_utils::TestScorer::with_penalty(0);
1551+
let seed = [0u8; 32];
1552+
let keys_manager = test_utils::TestKeysInterface::new(&seed, Network::Testnet);
1553+
let random_seed_bytes = keys_manager.get_secure_random_bytes();
15481554
let route = get_route(
15491555
&origin_node.node.get_our_node_id(), &payment_params, &origin_node.network_graph,
15501556
Some(&origin_node.node.list_usable_channels().iter().collect::<Vec<_>>()),
1551-
recv_value, TEST_FINAL_CLTV, origin_node.logger, &scorer).unwrap();
1557+
recv_value, TEST_FINAL_CLTV, origin_node.logger, &scorer, &random_seed_bytes).unwrap();
15521558
assert_eq!(route.paths.len(), 1);
15531559
assert_eq!(route.paths[0].len(), expected_route.len());
15541560
for (node, hop) in expected_route.iter().zip(route.paths[0].iter()) {
@@ -1563,9 +1569,12 @@ pub fn route_over_limit<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_rou
15631569
let payment_params = PaymentParameters::from_node_id(expected_route.last().unwrap().node.get_our_node_id())
15641570
.with_features(InvoiceFeatures::known());
15651571
let scorer = test_utils::TestScorer::with_penalty(0);
1572+
let seed = [0u8; 32];
1573+
let keys_manager = test_utils::TestKeysInterface::new(&seed, Network::Testnet);
1574+
let random_seed_bytes = keys_manager.get_secure_random_bytes();
15661575
let route = get_route(
15671576
&origin_node.node.get_our_node_id(), &payment_params, origin_node.network_graph,
1568-
None, recv_value, TEST_FINAL_CLTV, origin_node.logger, &scorer).unwrap();
1577+
None, recv_value, TEST_FINAL_CLTV, origin_node.logger, &scorer, &random_seed_bytes).unwrap();
15691578
assert_eq!(route.paths.len(), 1);
15701579
assert_eq!(route.paths[0].len(), expected_route.len());
15711580
for (node, hop) in expected_route.iter().zip(route.paths[0].iter()) {

lightning/src/ln/functional_tests.rs

+12-7
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use chain::{Confirm, Listen, Watch};
1616
use chain::channelmonitor;
1717
use chain::channelmonitor::{ChannelMonitor, CLTV_CLAIM_BUFFER, LATENCY_GRACE_PERIOD_BLOCKS, ANTI_REORG_DELAY};
1818
use chain::transaction::OutPoint;
19-
use chain::keysinterface::BaseSign;
19+
use chain::keysinterface::{BaseSign, KeysInterface};
2020
use ln::{PaymentPreimage, PaymentSecret, PaymentHash};
2121
use ln::channel::{commitment_tx_base_weight, COMMITMENT_TX_WEIGHT_PER_HTLC, CONCURRENT_INBOUND_HTLC_FEE_BUFFER, FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE, MIN_AFFORDABLE_HTLC_COUNT};
2222
use ln::channelmanager::{ChannelManager, ChannelManagerReadArgs, PaymentId, RAACommitmentOrder, PaymentSendFailure, BREAKDOWN_TIMEOUT, MIN_CLTV_EXPIRY_DELTA, PAYMENT_EXPIRY_BLOCKS };
@@ -7440,8 +7440,9 @@ fn test_check_htlc_underpaying() {
74407440
create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
74417441

74427442
let scorer = test_utils::TestScorer::with_penalty(0);
7443+
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
74437444
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id()).with_features(InvoiceFeatures::known());
7444-
let route = get_route(&nodes[0].node.get_our_node_id(), &payment_params, nodes[0].network_graph, None, 10_000, TEST_FINAL_CLTV, nodes[0].logger, &scorer).unwrap();
7445+
let route = get_route(&nodes[0].node.get_our_node_id(), &payment_params, nodes[0].network_graph, None, 10_000, TEST_FINAL_CLTV, nodes[0].logger, &scorer, &random_seed_bytes).unwrap();
74457446
let (_, our_payment_hash, _) = get_payment_preimage_hash!(nodes[0]);
74467447
let our_payment_secret = nodes[1].node.create_inbound_payment_for_hash(our_payment_hash, Some(100_000), 7200).unwrap();
74477448
nodes[0].node.send_payment(&route, our_payment_hash, &Some(our_payment_secret)).unwrap();
@@ -7843,12 +7844,13 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
78437844
// Lock HTLC in both directions (using a slightly lower CLTV delay to provide timely RBF bumps)
78447845
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id()).with_features(InvoiceFeatures::known());
78457846
let scorer = test_utils::TestScorer::with_penalty(0);
7847+
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
78467848
let route = get_route(&nodes[0].node.get_our_node_id(), &payment_params, &nodes[0].network_graph, None,
7847-
3_000_000, 50, nodes[0].logger, &scorer).unwrap();
7849+
3_000_000, 50, nodes[0].logger, &scorer, &random_seed_bytes).unwrap();
78487850
let payment_preimage = send_along_route(&nodes[0], route, &[&nodes[1]], 3_000_000).0;
78497851
let payment_params = PaymentParameters::from_node_id(nodes[0].node.get_our_node_id()).with_features(InvoiceFeatures::known());
78507852
let route = get_route(&nodes[1].node.get_our_node_id(), &payment_params, nodes[1].network_graph, None,
7851-
3_000_000, 50, nodes[0].logger, &scorer).unwrap();
7853+
3_000_000, 50, nodes[0].logger, &scorer, &random_seed_bytes).unwrap();
78527854
send_along_route(&nodes[1], route, &[&nodes[0]], 3_000_000);
78537855

78547856
let revoked_local_txn = get_local_commitment_txn!(nodes[1], chan.2);
@@ -9617,10 +9619,11 @@ fn test_dup_htlc_second_fail_panic() {
96179619
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id())
96189620
.with_features(InvoiceFeatures::known());
96199621
let scorer = test_utils::TestScorer::with_penalty(0);
9622+
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
96209623
let route = get_route(
96219624
&nodes[0].node.get_our_node_id(), &payment_params, &nodes[0].network_graph,
96229625
Some(&nodes[0].node.list_usable_channels().iter().collect::<Vec<_>>()),
9623-
10_000, TEST_FINAL_CLTV, nodes[0].logger, &scorer).unwrap();
9626+
10_000, TEST_FINAL_CLTV, nodes[0].logger, &scorer, &random_seed_bytes).unwrap();
96249627

96259628
let (_, our_payment_hash, our_payment_secret) = get_payment_preimage_hash!(&nodes[1]);
96269629

@@ -9689,7 +9692,8 @@ fn test_keysend_payments_to_public_node() {
96899692
final_cltv_expiry_delta: 40,
96909693
};
96919694
let scorer = test_utils::TestScorer::with_penalty(0);
9692-
let route = find_route(&payer_pubkey, &route_params, network_graph, None, nodes[0].logger, &scorer).unwrap();
9695+
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
9696+
let route = find_route(&payer_pubkey, &route_params, network_graph, None, nodes[0].logger, &scorer, &random_seed_bytes).unwrap();
96939697

96949698
let test_preimage = PaymentPreimage([42; 32]);
96959699
let (payment_hash, _) = nodes[0].node.send_spontaneous_payment(&route, Some(test_preimage)).unwrap();
@@ -9723,9 +9727,10 @@ fn test_keysend_payments_to_private_node() {
97239727
let network_graph = nodes[0].network_graph;
97249728
let first_hops = nodes[0].node.list_usable_channels();
97259729
let scorer = test_utils::TestScorer::with_penalty(0);
9730+
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
97269731
let route = find_route(
97279732
&payer_pubkey, &route_params, network_graph, Some(&first_hops.iter().collect::<Vec<_>>()),
9728-
nodes[0].logger, &scorer
9733+
nodes[0].logger, &scorer, &random_seed_bytes
97299734
).unwrap();
97309735

97319736
let test_preimage = PaymentPreimage([42; 32]);

0 commit comments

Comments
 (0)