mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-03-09 02:09:38 +01:00
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.
This commit is contained in:
parent
3716227359
commit
5d5c8187b4
11 changed files with 86 additions and 103 deletions
|
@ -103,11 +103,9 @@ impl Router for FuzzRouter {
|
|||
})
|
||||
}
|
||||
|
||||
fn create_blinded_payment_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
fn create_blinded_payment_paths<T: secp256k1::Signing + secp256k1::Verification>(
|
||||
&self, _recipient: PublicKey, _first_hops: Vec<ChannelDetails>, _tlvs: ReceiveTlvs,
|
||||
_amount_msats: u64, _entropy_source: &ES, _secp_ctx: &Secp256k1<T>
|
||||
_amount_msats: u64, _secp_ctx: &Secp256k1<T>,
|
||||
) -> Result<Vec<(BlindedPayInfo, BlindedPath)>, ()> {
|
||||
unreachable!()
|
||||
}
|
||||
|
@ -120,11 +118,8 @@ impl MessageRouter for FuzzRouter {
|
|||
unreachable!()
|
||||
}
|
||||
|
||||
fn create_blinded_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES,
|
||||
_secp_ctx: &Secp256k1<T>
|
||||
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
|
||||
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>,
|
||||
) -> Result<Vec<BlindedPath>, ()> {
|
||||
unreachable!()
|
||||
}
|
||||
|
|
|
@ -146,11 +146,9 @@ impl Router for FuzzRouter {
|
|||
})
|
||||
}
|
||||
|
||||
fn create_blinded_payment_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
fn create_blinded_payment_paths<T: secp256k1::Signing + secp256k1::Verification>(
|
||||
&self, _recipient: PublicKey, _first_hops: Vec<ChannelDetails>, _tlvs: ReceiveTlvs,
|
||||
_amount_msats: u64, _entropy_source: &ES, _secp_ctx: &Secp256k1<T>
|
||||
_amount_msats: u64, _secp_ctx: &Secp256k1<T>,
|
||||
) -> Result<Vec<(BlindedPayInfo, BlindedPath)>, ()> {
|
||||
unreachable!()
|
||||
}
|
||||
|
@ -163,11 +161,8 @@ impl MessageRouter for FuzzRouter {
|
|||
unreachable!()
|
||||
}
|
||||
|
||||
fn create_blinded_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES,
|
||||
_secp_ctx: &Secp256k1<T>
|
||||
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
|
||||
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>,
|
||||
) -> Result<Vec<BlindedPath>, ()> {
|
||||
unreachable!()
|
||||
}
|
||||
|
|
|
@ -86,11 +86,8 @@ impl MessageRouter for TestMessageRouter {
|
|||
})
|
||||
}
|
||||
|
||||
fn create_blinded_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES,
|
||||
_secp_ctx: &Secp256k1<T>
|
||||
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
|
||||
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>,
|
||||
) -> Result<Vec<BlindedPath>, ()> {
|
||||
unreachable!()
|
||||
}
|
||||
|
|
|
@ -984,6 +984,7 @@ mod tests {
|
|||
Arc<DefaultRouter<
|
||||
Arc<NetworkGraph<Arc<test_utils::TestLogger>>>,
|
||||
Arc<test_utils::TestLogger>,
|
||||
Arc<KeysManager>,
|
||||
Arc<LockingWrapper<TestScorer>>,
|
||||
(),
|
||||
TestScorer>
|
||||
|
@ -1263,12 +1264,12 @@ mod tests {
|
|||
let genesis_block = genesis_block(network);
|
||||
let network_graph = Arc::new(NetworkGraph::new(network, logger.clone()));
|
||||
let scorer = Arc::new(LockingWrapper::new(TestScorer::new()));
|
||||
let now = Duration::from_secs(genesis_block.header.time as u64);
|
||||
let seed = [i as u8; 32];
|
||||
let router = Arc::new(DefaultRouter::new(network_graph.clone(), logger.clone(), seed, scorer.clone(), Default::default()));
|
||||
let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos()));
|
||||
let router = Arc::new(DefaultRouter::new(network_graph.clone(), logger.clone(), Arc::clone(&keys_manager), scorer.clone(), Default::default()));
|
||||
let chain_source = Arc::new(test_utils::TestChainSource::new(Network::Bitcoin));
|
||||
let kv_store = Arc::new(FilesystemStore::new(format!("{}_persister_{}", &persist_dir, i).into()));
|
||||
let now = Duration::from_secs(genesis_block.header.time as u64);
|
||||
let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos()));
|
||||
let chain_monitor = Arc::new(chainmonitor::ChainMonitor::new(Some(chain_source.clone()), tx_broadcaster.clone(), logger.clone(), fee_estimator.clone(), kv_store.clone()));
|
||||
let best_block = BestBlock::from_network(network);
|
||||
let params = ChainParameters { network, best_block };
|
||||
|
|
|
@ -964,6 +964,7 @@ pub type SimpleArcChannelManager<M, T, F, L> = ChannelManager<
|
|||
Arc<DefaultRouter<
|
||||
Arc<NetworkGraph<Arc<L>>>,
|
||||
Arc<L>,
|
||||
Arc<KeysManager>,
|
||||
Arc<RwLock<ProbabilisticScorer<Arc<NetworkGraph<Arc<L>>>, Arc<L>>>>,
|
||||
ProbabilisticScoringFeeParameters,
|
||||
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> =
|
|||
&'e DefaultRouter<
|
||||
&'f NetworkGraph<&'g L>,
|
||||
&'g L,
|
||||
&'c KeysManager,
|
||||
&'h RwLock<ProbabilisticScorer<&'f NetworkGraph<&'g L>, &'g L>>,
|
||||
ProbabilisticScoringFeeParameters,
|
||||
ProbabilisticScorer<&'f NetworkGraph<&'g L>, &'g L>
|
||||
|
@ -7933,7 +7935,6 @@ where
|
|||
/// Errors if the `MessageRouter` errors or returns an empty `Vec`.
|
||||
fn create_blinded_path(&self) -> Result<BlindedPath, ()> {
|
||||
let recipient = self.get_our_node_id();
|
||||
let entropy_source = self.entropy_source.deref();
|
||||
let secp_ctx = &self.secp_ctx;
|
||||
|
||||
let peers = self.per_peer_state.read().unwrap()
|
||||
|
@ -7943,7 +7944,7 @@ where
|
|||
.collect::<Vec<_>>();
|
||||
|
||||
self.router
|
||||
.create_blinded_paths(recipient, peers, entropy_source, secp_ctx)
|
||||
.create_blinded_paths(recipient, peers, secp_ctx)
|
||||
.and_then(|paths| paths.into_iter().next().ok_or(()))
|
||||
}
|
||||
|
||||
|
@ -7952,7 +7953,6 @@ where
|
|||
fn create_blinded_payment_paths(
|
||||
&self, amount_msats: u64, payment_secret: PaymentSecret
|
||||
) -> Result<Vec<(BlindedPayInfo, BlindedPath)>, ()> {
|
||||
let entropy_source = self.entropy_source.deref();
|
||||
let secp_ctx = &self.secp_ctx;
|
||||
|
||||
let first_hops = self.list_usable_channels();
|
||||
|
@ -7967,7 +7967,7 @@ where
|
|||
},
|
||||
};
|
||||
self.router.create_blinded_payment_paths(
|
||||
payee_node_id, first_hops, payee_tlvs, amount_msats, entropy_source, secp_ctx
|
||||
payee_node_id, first_hops, payee_tlvs, amount_msats, secp_ctx
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -2932,7 +2932,7 @@ pub fn create_node_cfgs_with_persisters<'a>(node_count: usize, chanmon_cfgs: &'a
|
|||
tx_broadcaster: &chanmon_cfgs[i].tx_broadcaster,
|
||||
fee_estimator: &chanmon_cfgs[i].fee_estimator,
|
||||
router: test_utils::TestRouter::new(network_graph.clone(), &chanmon_cfgs[i].logger, &chanmon_cfgs[i].scorer),
|
||||
message_router: test_utils::TestMessageRouter::new(network_graph.clone()),
|
||||
message_router: test_utils::TestMessageRouter::new(network_graph.clone(), &chanmon_cfgs[i].keys_manager),
|
||||
chain_monitor,
|
||||
keys_manager: &chanmon_cfgs[i].keys_manager,
|
||||
node_seed: seed,
|
||||
|
|
|
@ -5534,7 +5534,7 @@ fn test_key_derivation_params() {
|
|||
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &chanmon_cfgs[0].logger));
|
||||
let scorer = RwLock::new(test_utils::TestScorer::new());
|
||||
let router = test_utils::TestRouter::new(network_graph.clone(), &chanmon_cfgs[0].logger, &scorer);
|
||||
let message_router = test_utils::TestMessageRouter::new(network_graph.clone());
|
||||
let message_router = test_utils::TestMessageRouter::new(network_graph.clone(), &keys_manager);
|
||||
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)) };
|
||||
let mut node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
|
||||
node_cfgs.remove(0);
|
||||
|
|
|
@ -13,7 +13,7 @@ use crate::blinded_path::BlindedPath;
|
|||
use crate::events::{Event, EventsProvider};
|
||||
use crate::ln::features::InitFeatures;
|
||||
use crate::ln::msgs::{self, DecodeError, OnionMessageHandler, SocketAddress};
|
||||
use crate::sign::{EntropySource, NodeSigner, Recipient};
|
||||
use crate::sign::{NodeSigner, Recipient};
|
||||
use crate::util::ser::{FixedLengthReader, LengthReadable, Writeable, Writer};
|
||||
use crate::util::test_utils;
|
||||
use super::messenger::{CustomOnionMessageHandler, Destination, MessageRouter, OnionMessagePath, OnionMessenger, PendingOnionMessage, SendError};
|
||||
|
@ -59,10 +59,9 @@ impl MessageRouter for TestMessageRouter {
|
|||
}
|
||||
|
||||
fn create_blinded_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES,
|
||||
_secp_ctx: &Secp256k1<T>
|
||||
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>,
|
||||
) -> Result<Vec<BlindedPath>, ()> {
|
||||
unreachable!()
|
||||
}
|
||||
|
|
|
@ -96,8 +96,8 @@ pub(super) const MAX_TIMER_TICKS: usize = 2;
|
|||
/// # first_node_addresses: None,
|
||||
/// # })
|
||||
/// # }
|
||||
/// # fn create_blinded_paths<ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification>(
|
||||
/// # &self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES, _secp_ctx: &Secp256k1<T>
|
||||
/// # fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
|
||||
/// # &self, _recipient: PublicKey, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>
|
||||
/// # ) -> Result<Vec<BlindedPath>, ()> {
|
||||
/// # unreachable!()
|
||||
/// # }
|
||||
|
@ -285,34 +285,37 @@ pub trait MessageRouter {
|
|||
/// Creates [`BlindedPath`]s to the `recipient` node. The nodes in `peers` are assumed to be
|
||||
/// direct peers with the `recipient`.
|
||||
fn create_blinded_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
&self, recipient: PublicKey, peers: Vec<PublicKey>, entropy_source: &ES,
|
||||
secp_ctx: &Secp256k1<T>
|
||||
&self, recipient: PublicKey, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
|
||||
) -> Result<Vec<BlindedPath>, ()>;
|
||||
}
|
||||
|
||||
/// A [`MessageRouter`] that can only route to a directly connected [`Destination`].
|
||||
pub struct DefaultMessageRouter<G: Deref<Target=NetworkGraph<L>>, L: Deref>
|
||||
pub struct DefaultMessageRouter<G: Deref<Target=NetworkGraph<L>>, L: Deref, ES: Deref>
|
||||
where
|
||||
L::Target: Logger,
|
||||
ES::Target: EntropySource,
|
||||
{
|
||||
network_graph: G,
|
||||
entropy_source: ES,
|
||||
}
|
||||
|
||||
impl<G: Deref<Target=NetworkGraph<L>>, L: Deref> DefaultMessageRouter<G, L>
|
||||
impl<G: Deref<Target=NetworkGraph<L>>, L: Deref, ES: Deref> DefaultMessageRouter<G, L, ES>
|
||||
where
|
||||
L::Target: Logger,
|
||||
ES::Target: EntropySource,
|
||||
{
|
||||
/// Creates a [`DefaultMessageRouter`] using the given [`NetworkGraph`].
|
||||
pub fn new(network_graph: G) -> Self {
|
||||
Self { network_graph }
|
||||
pub fn new(network_graph: G, entropy_source: ES) -> Self {
|
||||
Self { network_graph, entropy_source }
|
||||
}
|
||||
}
|
||||
|
||||
impl<G: Deref<Target=NetworkGraph<L>>, L: Deref> MessageRouter for DefaultMessageRouter<G, L>
|
||||
impl<G: Deref<Target=NetworkGraph<L>>, L: Deref, ES: Deref> MessageRouter for DefaultMessageRouter<G, L, ES>
|
||||
where
|
||||
L::Target: Logger,
|
||||
ES::Target: EntropySource,
|
||||
{
|
||||
fn find_path(
|
||||
&self, _sender: PublicKey, peers: Vec<PublicKey>, destination: Destination
|
||||
|
@ -343,10 +346,9 @@ where
|
|||
}
|
||||
|
||||
fn create_blinded_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
&self, recipient: PublicKey, peers: Vec<PublicKey>, entropy_source: &ES,
|
||||
secp_ctx: &Secp256k1<T>
|
||||
&self, recipient: PublicKey, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
|
||||
) -> Result<Vec<BlindedPath>, ()> {
|
||||
// Limit the number of blinded paths that are computed.
|
||||
const MAX_PATHS: usize = 3;
|
||||
|
@ -366,7 +368,7 @@ where
|
|||
.unwrap_or(false)
|
||||
)
|
||||
.map(|pubkey| vec![*pubkey, recipient])
|
||||
.map(|node_pks| BlindedPath::new_for_message(&node_pks, entropy_source, secp_ctx))
|
||||
.map(|node_pks| BlindedPath::new_for_message(&node_pks, &*self.entropy_source, secp_ctx))
|
||||
.take(MAX_PATHS)
|
||||
.collect::<Result<Vec<_>, _>>();
|
||||
|
||||
|
@ -374,7 +376,7 @@ where
|
|||
Ok(paths) if !paths.is_empty() => Ok(paths),
|
||||
_ => {
|
||||
if network_graph.nodes().contains_key(&NodeId::from_pubkey(&recipient)) {
|
||||
BlindedPath::one_hop_for_message(recipient, entropy_source, secp_ctx)
|
||||
BlindedPath::one_hop_for_message(recipient, &*self.entropy_source, secp_ctx)
|
||||
.map(|path| vec![path])
|
||||
} else {
|
||||
Err(())
|
||||
|
@ -1069,7 +1071,7 @@ pub type SimpleArcOnionMessenger<M, T, F, L> = OnionMessenger<
|
|||
Arc<KeysManager>,
|
||||
Arc<KeysManager>,
|
||||
Arc<L>,
|
||||
Arc<DefaultMessageRouter<Arc<NetworkGraph<Arc<L>>>, Arc<L>>>,
|
||||
Arc<DefaultMessageRouter<Arc<NetworkGraph<Arc<L>>>, Arc<L>, Arc<KeysManager>>>,
|
||||
Arc<SimpleArcChannelManager<M, T, F, L>>,
|
||||
IgnoringMessageHandler
|
||||
>;
|
||||
|
@ -1088,7 +1090,7 @@ pub type SimpleRefOnionMessenger<
|
|||
&'a KeysManager,
|
||||
&'a KeysManager,
|
||||
&'b L,
|
||||
&'i DefaultMessageRouter<&'g NetworkGraph<&'b L>, &'b L>,
|
||||
&'i DefaultMessageRouter<&'g NetworkGraph<&'b L>, &'b L, &'a KeysManager>,
|
||||
&'j SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, M, T, F, L>,
|
||||
IgnoringMessageHandler
|
||||
>;
|
||||
|
|
|
@ -10,8 +10,6 @@
|
|||
//! The router finds paths within a [`NetworkGraph`] for a payment.
|
||||
|
||||
use bitcoin::secp256k1::{PublicKey, Secp256k1, self};
|
||||
use bitcoin::hashes::Hash;
|
||||
use bitcoin::hashes::sha256::Hash as Sha256;
|
||||
|
||||
use crate::blinded_path::{BlindedHop, BlindedPath};
|
||||
use crate::blinded_path::payment::{ForwardNode, ForwardTlvs, PaymentConstraints, PaymentRelay, ReceiveTlvs};
|
||||
|
@ -30,39 +28,40 @@ use crate::crypto::chacha20::ChaCha20;
|
|||
|
||||
use crate::io;
|
||||
use crate::prelude::*;
|
||||
use crate::sync::Mutex;
|
||||
use alloc::collections::BinaryHeap;
|
||||
use core::{cmp, fmt};
|
||||
use core::ops::Deref;
|
||||
|
||||
/// A [`Router`] implemented using [`find_route`].
|
||||
pub struct DefaultRouter<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, S: Deref, SP: Sized, Sc: ScoreLookUp<ScoreParams = SP>> where
|
||||
pub struct DefaultRouter<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, ES: Deref, S: Deref, SP: Sized, Sc: ScoreLookUp<ScoreParams = SP>> where
|
||||
L::Target: Logger,
|
||||
S::Target: for <'a> LockableScore<'a, ScoreLookUp = Sc>,
|
||||
ES::Target: EntropySource,
|
||||
{
|
||||
network_graph: G,
|
||||
logger: L,
|
||||
random_seed_bytes: Mutex<[u8; 32]>,
|
||||
entropy_source: ES,
|
||||
scorer: S,
|
||||
score_params: SP,
|
||||
message_router: DefaultMessageRouter<G, L>,
|
||||
message_router: DefaultMessageRouter<G, L, ES>,
|
||||
}
|
||||
|
||||
impl<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, S: Deref, SP: Sized, Sc: ScoreLookUp<ScoreParams = SP>> DefaultRouter<G, L, S, SP, Sc> where
|
||||
impl<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, ES: Deref + Clone, S: Deref, SP: Sized, Sc: ScoreLookUp<ScoreParams = SP>> DefaultRouter<G, L, ES, S, SP, Sc> where
|
||||
L::Target: Logger,
|
||||
S::Target: for <'a> LockableScore<'a, ScoreLookUp = Sc>,
|
||||
ES::Target: EntropySource,
|
||||
{
|
||||
/// Creates a new router.
|
||||
pub fn new(network_graph: G, logger: L, random_seed_bytes: [u8; 32], scorer: S, score_params: SP) -> Self {
|
||||
let random_seed_bytes = Mutex::new(random_seed_bytes);
|
||||
let message_router = DefaultMessageRouter::new(network_graph.clone());
|
||||
Self { network_graph, logger, random_seed_bytes, scorer, score_params, message_router }
|
||||
pub fn new(network_graph: G, logger: L, entropy_source: ES, scorer: S, score_params: SP) -> Self {
|
||||
let message_router = DefaultMessageRouter::new(network_graph.clone(), entropy_source.clone());
|
||||
Self { network_graph, logger, entropy_source, scorer, score_params, message_router }
|
||||
}
|
||||
}
|
||||
|
||||
impl<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, S: Deref, SP: Sized, Sc: ScoreLookUp<ScoreParams = SP>> Router for DefaultRouter<G, L, S, SP, Sc> where
|
||||
impl<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, ES: Deref, S: Deref, SP: Sized, Sc: ScoreLookUp<ScoreParams = SP>> Router for DefaultRouter<G, L, ES, S, SP, Sc> where
|
||||
L::Target: Logger,
|
||||
S::Target: for <'a> LockableScore<'a, ScoreLookUp = Sc>,
|
||||
ES::Target: EntropySource,
|
||||
{
|
||||
fn find_route(
|
||||
&self,
|
||||
|
@ -71,11 +70,7 @@ impl<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, S: Deref, SP: Sized,
|
|||
first_hops: Option<&[&ChannelDetails]>,
|
||||
inflight_htlcs: InFlightHtlcs
|
||||
) -> Result<Route, LightningError> {
|
||||
let random_seed_bytes = {
|
||||
let mut locked_random_seed_bytes = self.random_seed_bytes.lock().unwrap();
|
||||
*locked_random_seed_bytes = Sha256::hash(&*locked_random_seed_bytes).to_byte_array();
|
||||
*locked_random_seed_bytes
|
||||
};
|
||||
let random_seed_bytes = self.entropy_source.get_secure_random_bytes();
|
||||
find_route(
|
||||
payer, params, &self.network_graph, first_hops, &*self.logger,
|
||||
&ScorerAccountingForInFlightHtlcs::new(self.scorer.read_lock(), &inflight_htlcs),
|
||||
|
@ -85,10 +80,10 @@ impl<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, S: Deref, SP: Sized,
|
|||
}
|
||||
|
||||
fn create_blinded_payment_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
T: secp256k1::Signing + secp256k1::Verification
|
||||
> (
|
||||
&self, recipient: PublicKey, first_hops: Vec<ChannelDetails>, tlvs: ReceiveTlvs,
|
||||
amount_msats: u64, entropy_source: &ES, secp_ctx: &Secp256k1<T>
|
||||
amount_msats: u64, secp_ctx: &Secp256k1<T>
|
||||
) -> Result<Vec<(BlindedPayInfo, BlindedPath)>, ()> {
|
||||
// Limit the number of blinded paths that are computed.
|
||||
const MAX_PAYMENT_PATHS: usize = 3;
|
||||
|
@ -139,7 +134,7 @@ impl<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, S: Deref, SP: Sized,
|
|||
})
|
||||
.map(|forward_node| {
|
||||
BlindedPath::new_for_payment(
|
||||
&[forward_node], recipient, tlvs.clone(), u64::MAX, entropy_source, secp_ctx
|
||||
&[forward_node], recipient, tlvs.clone(), u64::MAX, &*self.entropy_source, secp_ctx
|
||||
)
|
||||
})
|
||||
.take(MAX_PAYMENT_PATHS)
|
||||
|
@ -149,7 +144,7 @@ impl<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, S: Deref, SP: Sized,
|
|||
Ok(paths) if !paths.is_empty() => Ok(paths),
|
||||
_ => {
|
||||
if network_graph.nodes().contains_key(&NodeId::from_pubkey(&recipient)) {
|
||||
BlindedPath::one_hop_for_payment(recipient, tlvs, entropy_source, secp_ctx)
|
||||
BlindedPath::one_hop_for_payment(recipient, tlvs, &*self.entropy_source, secp_ctx)
|
||||
.map(|path| vec![path])
|
||||
} else {
|
||||
Err(())
|
||||
|
@ -159,9 +154,10 @@ impl<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, S: Deref, SP: Sized,
|
|||
}
|
||||
}
|
||||
|
||||
impl< G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, S: Deref, SP: Sized, Sc: ScoreLookUp<ScoreParams = SP>> MessageRouter for DefaultRouter<G, L, S, SP, Sc> where
|
||||
impl< G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, ES: Deref, S: Deref, SP: Sized, Sc: ScoreLookUp<ScoreParams = SP>> MessageRouter for DefaultRouter<G, L, ES, S, SP, Sc> where
|
||||
L::Target: Logger,
|
||||
S::Target: for <'a> LockableScore<'a, ScoreLookUp = Sc>,
|
||||
ES::Target: EntropySource,
|
||||
{
|
||||
fn find_path(
|
||||
&self, sender: PublicKey, peers: Vec<PublicKey>, destination: Destination
|
||||
|
@ -170,12 +166,11 @@ impl< G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, S: Deref, SP: Sized,
|
|||
}
|
||||
|
||||
fn create_blinded_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
&self, recipient: PublicKey, peers: Vec<PublicKey>, entropy_source: &ES,
|
||||
secp_ctx: &Secp256k1<T>
|
||||
T: secp256k1::Signing + secp256k1::Verification
|
||||
> (
|
||||
&self, recipient: PublicKey, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
|
||||
) -> Result<Vec<BlindedPath>, ()> {
|
||||
self.message_router.create_blinded_paths(recipient, peers, entropy_source, secp_ctx)
|
||||
self.message_router.create_blinded_paths(recipient, peers, secp_ctx)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -209,10 +204,10 @@ pub trait Router: MessageRouter {
|
|||
/// are assumed to be with the `recipient`'s peers. The payment secret and any constraints are
|
||||
/// given in `tlvs`.
|
||||
fn create_blinded_payment_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
T: secp256k1::Signing + secp256k1::Verification
|
||||
> (
|
||||
&self, recipient: PublicKey, first_hops: Vec<ChannelDetails>, tlvs: ReceiveTlvs,
|
||||
amount_msats: u64, entropy_source: &ES, secp_ctx: &Secp256k1<T>
|
||||
amount_msats: u64, secp_ctx: &Secp256k1<T>
|
||||
) -> Result<Vec<(BlindedPayInfo, BlindedPath)>, ()>;
|
||||
}
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ use crate::sync::{Mutex, Arc};
|
|||
use core::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
||||
use core::mem;
|
||||
use bitcoin::bech32::u5;
|
||||
use crate::sign::{InMemorySigner, Recipient, EntropySource, NodeSigner, SignerProvider};
|
||||
use crate::sign::{InMemorySigner, RandomBytes, Recipient, EntropySource, NodeSigner, SignerProvider};
|
||||
|
||||
#[cfg(feature = "std")]
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
|
@ -107,10 +107,12 @@ pub struct TestRouter<'a> {
|
|||
pub router: DefaultRouter<
|
||||
Arc<NetworkGraph<&'a TestLogger>>,
|
||||
&'a TestLogger,
|
||||
Arc<RandomBytes>,
|
||||
&'a RwLock<TestScorer>,
|
||||
(),
|
||||
TestScorer,
|
||||
>,
|
||||
//pub entropy_source: &'a RandomBytes,
|
||||
pub network_graph: Arc<NetworkGraph<&'a TestLogger>>,
|
||||
pub next_routes: Mutex<VecDeque<(RouteParameters, Result<Route, LightningError>)>>,
|
||||
pub scorer: &'a RwLock<TestScorer>,
|
||||
|
@ -119,10 +121,11 @@ pub struct TestRouter<'a> {
|
|||
impl<'a> TestRouter<'a> {
|
||||
pub fn new(
|
||||
network_graph: Arc<NetworkGraph<&'a TestLogger>>, logger: &'a TestLogger,
|
||||
scorer: &'a RwLock<TestScorer>
|
||||
scorer: &'a RwLock<TestScorer>,
|
||||
) -> Self {
|
||||
let entropy_source = Arc::new(RandomBytes::new([42; 32]));
|
||||
Self {
|
||||
router: DefaultRouter::new(network_graph.clone(), logger, [42u8; 32], scorer, ()),
|
||||
router: DefaultRouter::new(network_graph.clone(), logger, entropy_source, scorer, ()),
|
||||
network_graph,
|
||||
next_routes: Mutex::new(VecDeque::new()),
|
||||
scorer,
|
||||
|
@ -205,13 +208,13 @@ impl<'a> Router for TestRouter<'a> {
|
|||
}
|
||||
|
||||
fn create_blinded_payment_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
&self, recipient: PublicKey, first_hops: Vec<ChannelDetails>, tlvs: ReceiveTlvs,
|
||||
amount_msats: u64, entropy_source: &ES, secp_ctx: &Secp256k1<T>
|
||||
amount_msats: u64, secp_ctx: &Secp256k1<T>,
|
||||
) -> Result<Vec<(BlindedPayInfo, BlindedPath)>, ()> {
|
||||
self.router.create_blinded_payment_paths(
|
||||
recipient, first_hops, tlvs, amount_msats, entropy_source, secp_ctx
|
||||
recipient, first_hops, tlvs, amount_msats, secp_ctx
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -224,12 +227,11 @@ impl<'a> MessageRouter for TestRouter<'a> {
|
|||
}
|
||||
|
||||
fn create_blinded_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
&self, recipient: PublicKey, peers: Vec<PublicKey>, entropy_source: &ES,
|
||||
secp_ctx: &Secp256k1<T>
|
||||
&self, recipient: PublicKey, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
|
||||
) -> Result<Vec<BlindedPath>, ()> {
|
||||
self.router.create_blinded_paths(recipient, peers, entropy_source, secp_ctx)
|
||||
self.router.create_blinded_paths(recipient, peers, secp_ctx)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -245,12 +247,12 @@ impl<'a> Drop for TestRouter<'a> {
|
|||
}
|
||||
|
||||
pub struct TestMessageRouter<'a> {
|
||||
inner: DefaultMessageRouter<Arc<NetworkGraph<&'a TestLogger>>, &'a TestLogger>,
|
||||
inner: DefaultMessageRouter<Arc<NetworkGraph<&'a TestLogger>>, &'a TestLogger, &'a TestKeysInterface>,
|
||||
}
|
||||
|
||||
impl<'a> TestMessageRouter<'a> {
|
||||
pub fn new(network_graph: Arc<NetworkGraph<&'a TestLogger>>) -> Self {
|
||||
Self { inner: DefaultMessageRouter::new(network_graph) }
|
||||
pub fn new(network_graph: Arc<NetworkGraph<&'a TestLogger>>, entropy_source: &'a TestKeysInterface) -> Self {
|
||||
Self { inner: DefaultMessageRouter::new(network_graph, entropy_source) }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -261,13 +263,10 @@ impl<'a> MessageRouter for TestMessageRouter<'a> {
|
|||
self.inner.find_path(sender, peers, destination)
|
||||
}
|
||||
|
||||
fn create_blinded_paths<
|
||||
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
|
||||
>(
|
||||
&self, recipient: PublicKey, peers: Vec<PublicKey>, entropy_source: &ES,
|
||||
secp_ctx: &Secp256k1<T>
|
||||
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
|
||||
&self, recipient: PublicKey, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
|
||||
) -> Result<Vec<BlindedPath>, ()> {
|
||||
self.inner.create_blinded_paths(recipient, peers, entropy_source, secp_ctx)
|
||||
self.inner.create_blinded_paths(recipient, peers, secp_ctx)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue