Skip to content

Commit 5d5c818

Browse files
committed
Store EntropySource in DefaultRouter instead of passing it
...as an arg to `Router`. Passing an `EntropySource` around all the time is a bit strange as the `Router` may or may not actually use it, and the `DefaultRouter` can just as easily store it.
1 parent 3716227 commit 5d5c818

File tree

11 files changed

+86
-103
lines changed

11 files changed

+86
-103
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,9 @@ impl Router for FuzzRouter {
103103
})
104104
}
105105

106-
fn create_blinded_payment_paths<
107-
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
108-
>(
106+
fn create_blinded_payment_paths<T: secp256k1::Signing + secp256k1::Verification>(
109107
&self, _recipient: PublicKey, _first_hops: Vec<ChannelDetails>, _tlvs: ReceiveTlvs,
110-
_amount_msats: u64, _entropy_source: &ES, _secp_ctx: &Secp256k1<T>
108+
_amount_msats: u64, _secp_ctx: &Secp256k1<T>,
111109
) -> Result<Vec<(BlindedPayInfo, BlindedPath)>, ()> {
112110
unreachable!()
113111
}
@@ -120,11 +118,8 @@ impl MessageRouter for FuzzRouter {
120118
unreachable!()
121119
}
122120

123-
fn create_blinded_paths<
124-
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
125-
>(
126-
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES,
127-
_secp_ctx: &Secp256k1<T>
121+
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
122+
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>,
128123
) -> Result<Vec<BlindedPath>, ()> {
129124
unreachable!()
130125
}

fuzz/src/full_stack.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,9 @@ impl Router for FuzzRouter {
146146
})
147147
}
148148

149-
fn create_blinded_payment_paths<
150-
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
151-
>(
149+
fn create_blinded_payment_paths<T: secp256k1::Signing + secp256k1::Verification>(
152150
&self, _recipient: PublicKey, _first_hops: Vec<ChannelDetails>, _tlvs: ReceiveTlvs,
153-
_amount_msats: u64, _entropy_source: &ES, _secp_ctx: &Secp256k1<T>
151+
_amount_msats: u64, _secp_ctx: &Secp256k1<T>,
154152
) -> Result<Vec<(BlindedPayInfo, BlindedPath)>, ()> {
155153
unreachable!()
156154
}
@@ -163,11 +161,8 @@ impl MessageRouter for FuzzRouter {
163161
unreachable!()
164162
}
165163

166-
fn create_blinded_paths<
167-
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
168-
>(
169-
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES,
170-
_secp_ctx: &Secp256k1<T>
164+
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
165+
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>,
171166
) -> Result<Vec<BlindedPath>, ()> {
172167
unreachable!()
173168
}

fuzz/src/onion_message.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,8 @@ impl MessageRouter for TestMessageRouter {
8686
})
8787
}
8888

89-
fn create_blinded_paths<
90-
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
91-
>(
92-
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES,
93-
_secp_ctx: &Secp256k1<T>
89+
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
90+
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>,
9491
) -> Result<Vec<BlindedPath>, ()> {
9592
unreachable!()
9693
}

lightning-background-processor/src/lib.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -984,6 +984,7 @@ mod tests {
984984
Arc<DefaultRouter<
985985
Arc<NetworkGraph<Arc<test_utils::TestLogger>>>,
986986
Arc<test_utils::TestLogger>,
987+
Arc<KeysManager>,
987988
Arc<LockingWrapper<TestScorer>>,
988989
(),
989990
TestScorer>
@@ -1263,12 +1264,12 @@ mod tests {
12631264
let genesis_block = genesis_block(network);
12641265
let network_graph = Arc::new(NetworkGraph::new(network, logger.clone()));
12651266
let scorer = Arc::new(LockingWrapper::new(TestScorer::new()));
1267+
let now = Duration::from_secs(genesis_block.header.time as u64);
12661268
let seed = [i as u8; 32];
1267-
let router = Arc::new(DefaultRouter::new(network_graph.clone(), logger.clone(), seed, scorer.clone(), Default::default()));
1269+
let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos()));
1270+
let router = Arc::new(DefaultRouter::new(network_graph.clone(), logger.clone(), Arc::clone(&keys_manager), scorer.clone(), Default::default()));
12681271
let chain_source = Arc::new(test_utils::TestChainSource::new(Network::Bitcoin));
12691272
let kv_store = Arc::new(FilesystemStore::new(format!("{}_persister_{}", &persist_dir, i).into()));
1270-
let now = Duration::from_secs(genesis_block.header.time as u64);
1271-
let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos()));
12721273
let chain_monitor = Arc::new(chainmonitor::ChainMonitor::new(Some(chain_source.clone()), tx_broadcaster.clone(), logger.clone(), fee_estimator.clone(), kv_store.clone()));
12731274
let best_block = BestBlock::from_network(network);
12741275
let params = ChainParameters { network, best_block };

lightning/src/ln/channelmanager.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -964,6 +964,7 @@ pub type SimpleArcChannelManager<M, T, F, L> = ChannelManager<
964964
Arc<DefaultRouter<
965965
Arc<NetworkGraph<Arc<L>>>,
966966
Arc<L>,
967+
Arc<KeysManager>,
967968
Arc<RwLock<ProbabilisticScorer<Arc<NetworkGraph<Arc<L>>>, Arc<L>>>>,
968969
ProbabilisticScoringFeeParameters,
969970
ProbabilisticScorer<Arc<NetworkGraph<Arc<L>>>, Arc<L>>,
@@ -994,6 +995,7 @@ pub type SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, M, T, F, L> =
994995
&'e DefaultRouter<
995996
&'f NetworkGraph<&'g L>,
996997
&'g L,
998+
&'c KeysManager,
997999
&'h RwLock<ProbabilisticScorer<&'f NetworkGraph<&'g L>, &'g L>>,
9981000
ProbabilisticScoringFeeParameters,
9991001
ProbabilisticScorer<&'f NetworkGraph<&'g L>, &'g L>
@@ -7933,7 +7935,6 @@ where
79337935
/// Errors if the `MessageRouter` errors or returns an empty `Vec`.
79347936
fn create_blinded_path(&self) -> Result<BlindedPath, ()> {
79357937
let recipient = self.get_our_node_id();
7936-
let entropy_source = self.entropy_source.deref();
79377938
let secp_ctx = &self.secp_ctx;
79387939

79397940
let peers = self.per_peer_state.read().unwrap()
@@ -7943,7 +7944,7 @@ where
79437944
.collect::<Vec<_>>();
79447945

79457946
self.router
7946-
.create_blinded_paths(recipient, peers, entropy_source, secp_ctx)
7947+
.create_blinded_paths(recipient, peers, secp_ctx)
79477948
.and_then(|paths| paths.into_iter().next().ok_or(()))
79487949
}
79497950

@@ -7952,7 +7953,6 @@ where
79527953
fn create_blinded_payment_paths(
79537954
&self, amount_msats: u64, payment_secret: PaymentSecret
79547955
) -> Result<Vec<(BlindedPayInfo, BlindedPath)>, ()> {
7955-
let entropy_source = self.entropy_source.deref();
79567956
let secp_ctx = &self.secp_ctx;
79577957

79587958
let first_hops = self.list_usable_channels();
@@ -7967,7 +7967,7 @@ where
79677967
},
79687968
};
79697969
self.router.create_blinded_payment_paths(
7970-
payee_node_id, first_hops, payee_tlvs, amount_msats, entropy_source, secp_ctx
7970+
payee_node_id, first_hops, payee_tlvs, amount_msats, secp_ctx
79717971
)
79727972
}
79737973

lightning/src/ln/functional_test_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2932,7 +2932,7 @@ pub fn create_node_cfgs_with_persisters<'a>(node_count: usize, chanmon_cfgs: &'a
29322932
tx_broadcaster: &chanmon_cfgs[i].tx_broadcaster,
29332933
fee_estimator: &chanmon_cfgs[i].fee_estimator,
29342934
router: test_utils::TestRouter::new(network_graph.clone(), &chanmon_cfgs[i].logger, &chanmon_cfgs[i].scorer),
2935-
message_router: test_utils::TestMessageRouter::new(network_graph.clone()),
2935+
message_router: test_utils::TestMessageRouter::new(network_graph.clone(), &chanmon_cfgs[i].keys_manager),
29362936
chain_monitor,
29372937
keys_manager: &chanmon_cfgs[i].keys_manager,
29382938
node_seed: seed,

lightning/src/ln/functional_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5534,7 +5534,7 @@ fn test_key_derivation_params() {
55345534
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &chanmon_cfgs[0].logger));
55355535
let scorer = RwLock::new(test_utils::TestScorer::new());
55365536
let router = test_utils::TestRouter::new(network_graph.clone(), &chanmon_cfgs[0].logger, &scorer);
5537-
let message_router = test_utils::TestMessageRouter::new(network_graph.clone());
5537+
let message_router = test_utils::TestMessageRouter::new(network_graph.clone(), &keys_manager);
55385538
let node = NodeCfg { chain_source: &chanmon_cfgs[0].chain_source, logger: &chanmon_cfgs[0].logger, tx_broadcaster: &chanmon_cfgs[0].tx_broadcaster, fee_estimator: &chanmon_cfgs[0].fee_estimator, router, message_router, chain_monitor, keys_manager: &keys_manager, network_graph, node_seed: seed, override_init_features: alloc::rc::Rc::new(core::cell::RefCell::new(None)) };
55395539
let mut node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
55405540
node_cfgs.remove(0);

lightning/src/onion_message/functional_tests.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use crate::blinded_path::BlindedPath;
1313
use crate::events::{Event, EventsProvider};
1414
use crate::ln::features::InitFeatures;
1515
use crate::ln::msgs::{self, DecodeError, OnionMessageHandler, SocketAddress};
16-
use crate::sign::{EntropySource, NodeSigner, Recipient};
16+
use crate::sign::{NodeSigner, Recipient};
1717
use crate::util::ser::{FixedLengthReader, LengthReadable, Writeable, Writer};
1818
use crate::util::test_utils;
1919
use super::messenger::{CustomOnionMessageHandler, Destination, MessageRouter, OnionMessagePath, OnionMessenger, PendingOnionMessage, SendError};
@@ -59,10 +59,9 @@ impl MessageRouter for TestMessageRouter {
5959
}
6060

6161
fn create_blinded_paths<
62-
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
62+
T: secp256k1::Signing + secp256k1::Verification
6363
>(
64-
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES,
65-
_secp_ctx: &Secp256k1<T>
64+
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>,
6665
) -> Result<Vec<BlindedPath>, ()> {
6766
unreachable!()
6867
}

lightning/src/onion_message/messenger.rs

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ pub(super) const MAX_TIMER_TICKS: usize = 2;
9696
/// # first_node_addresses: None,
9797
/// # })
9898
/// # }
99-
/// # fn create_blinded_paths<ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification>(
100-
/// # &self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES, _secp_ctx: &Secp256k1<T>
99+
/// # fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
100+
/// # &self, _recipient: PublicKey, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>
101101
/// # ) -> Result<Vec<BlindedPath>, ()> {
102102
/// # unreachable!()
103103
/// # }
@@ -285,34 +285,37 @@ pub trait MessageRouter {
285285
/// Creates [`BlindedPath`]s to the `recipient` node. The nodes in `peers` are assumed to be
286286
/// direct peers with the `recipient`.
287287
fn create_blinded_paths<
288-
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
288+
T: secp256k1::Signing + secp256k1::Verification
289289
>(
290-
&self, recipient: PublicKey, peers: Vec<PublicKey>, entropy_source: &ES,
291-
secp_ctx: &Secp256k1<T>
290+
&self, recipient: PublicKey, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
292291
) -> Result<Vec<BlindedPath>, ()>;
293292
}
294293

295294
/// A [`MessageRouter`] that can only route to a directly connected [`Destination`].
296-
pub struct DefaultMessageRouter<G: Deref<Target=NetworkGraph<L>>, L: Deref>
295+
pub struct DefaultMessageRouter<G: Deref<Target=NetworkGraph<L>>, L: Deref, ES: Deref>
297296
where
298297
L::Target: Logger,
298+
ES::Target: EntropySource,
299299
{
300300
network_graph: G,
301+
entropy_source: ES,
301302
}
302303

303-
impl<G: Deref<Target=NetworkGraph<L>>, L: Deref> DefaultMessageRouter<G, L>
304+
impl<G: Deref<Target=NetworkGraph<L>>, L: Deref, ES: Deref> DefaultMessageRouter<G, L, ES>
304305
where
305306
L::Target: Logger,
307+
ES::Target: EntropySource,
306308
{
307309
/// Creates a [`DefaultMessageRouter`] using the given [`NetworkGraph`].
308-
pub fn new(network_graph: G) -> Self {
309-
Self { network_graph }
310+
pub fn new(network_graph: G, entropy_source: ES) -> Self {
311+
Self { network_graph, entropy_source }
310312
}
311313
}
312314

313-
impl<G: Deref<Target=NetworkGraph<L>>, L: Deref> MessageRouter for DefaultMessageRouter<G, L>
315+
impl<G: Deref<Target=NetworkGraph<L>>, L: Deref, ES: Deref> MessageRouter for DefaultMessageRouter<G, L, ES>
314316
where
315317
L::Target: Logger,
318+
ES::Target: EntropySource,
316319
{
317320
fn find_path(
318321
&self, _sender: PublicKey, peers: Vec<PublicKey>, destination: Destination
@@ -343,10 +346,9 @@ where
343346
}
344347

345348
fn create_blinded_paths<
346-
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
349+
T: secp256k1::Signing + secp256k1::Verification
347350
>(
348-
&self, recipient: PublicKey, peers: Vec<PublicKey>, entropy_source: &ES,
349-
secp_ctx: &Secp256k1<T>
351+
&self, recipient: PublicKey, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
350352
) -> Result<Vec<BlindedPath>, ()> {
351353
// Limit the number of blinded paths that are computed.
352354
const MAX_PATHS: usize = 3;
@@ -366,15 +368,15 @@ where
366368
.unwrap_or(false)
367369
)
368370
.map(|pubkey| vec![*pubkey, recipient])
369-
.map(|node_pks| BlindedPath::new_for_message(&node_pks, entropy_source, secp_ctx))
371+
.map(|node_pks| BlindedPath::new_for_message(&node_pks, &*self.entropy_source, secp_ctx))
370372
.take(MAX_PATHS)
371373
.collect::<Result<Vec<_>, _>>();
372374

373375
match paths {
374376
Ok(paths) if !paths.is_empty() => Ok(paths),
375377
_ => {
376378
if network_graph.nodes().contains_key(&NodeId::from_pubkey(&recipient)) {
377-
BlindedPath::one_hop_for_message(recipient, entropy_source, secp_ctx)
379+
BlindedPath::one_hop_for_message(recipient, &*self.entropy_source, secp_ctx)
378380
.map(|path| vec![path])
379381
} else {
380382
Err(())
@@ -1069,7 +1071,7 @@ pub type SimpleArcOnionMessenger<M, T, F, L> = OnionMessenger<
10691071
Arc<KeysManager>,
10701072
Arc<KeysManager>,
10711073
Arc<L>,
1072-
Arc<DefaultMessageRouter<Arc<NetworkGraph<Arc<L>>>, Arc<L>>>,
1074+
Arc<DefaultMessageRouter<Arc<NetworkGraph<Arc<L>>>, Arc<L>, Arc<KeysManager>>>,
10731075
Arc<SimpleArcChannelManager<M, T, F, L>>,
10741076
IgnoringMessageHandler
10751077
>;
@@ -1088,7 +1090,7 @@ pub type SimpleRefOnionMessenger<
10881090
&'a KeysManager,
10891091
&'a KeysManager,
10901092
&'b L,
1091-
&'i DefaultMessageRouter<&'g NetworkGraph<&'b L>, &'b L>,
1093+
&'i DefaultMessageRouter<&'g NetworkGraph<&'b L>, &'b L, &'a KeysManager>,
10921094
&'j SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, M, T, F, L>,
10931095
IgnoringMessageHandler
10941096
>;

0 commit comments

Comments
 (0)