Drop Deref indirection for MessageRouter
What changed, and why it matters
This is a routine Rust code cleanup change. It removes an extra layer of pointer-like wrapping (the Deref trait) around the MessageRouter type used for routing onion messages in the Lightning Dev Kit. The commit explicitly states the goal is to reduce generics and verbosity while keeping behavior the same. There is no indication of a security fix, bug fix, or behavior change.
No security action required. Treat as normal refactoring and review for compilation/test regressions only.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch refactors generic bounds so that MessageRouter is used directly instead of requiring an MR type parameter that implements Deref
Changed components
lightning/src/onion_message/messenger.rslightning/src/ln/channelmanager.rslightning/src/offers/flow.rslightning/src/ln/functional_test_utils.rslightning-background-processor/src/lib.rslightning-dns-resolver/src/lib.rsInspect captured patch +67 / −100
diff --git a/lightning-background-processor/src/lib.rs b/lightning-background-processor/src/lib.rs
index 941de6b..3255d26 100644
--- a/lightning-background-processor/src/lib.rs
+++ b/lightning-background-processor/src/lib.rs
@@ -426,8 +426,7 @@ pub const NO_ONION_MESSENGER: Option<
L = &'static (dyn Logger + Send + Sync),
NodeIdLookUp = DynChannelManager,
NL = &'static DynChannelManager,
- MessageRouter = DynMessageRouter,
- MR = &'static DynMessageRouter,
+ MessageRouter = &'static DynMessageRouter,
OffersMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
OMH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
AsyncPaymentsMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
diff --git a/lightning-dns-resolver/src/lib.rs b/lightning-dns-resolver/src/lib.rs
index d9af330..62b30bf 100644
--- a/lightning-dns-resolver/src/lib.rs
+++ b/lightning-dns-resolver/src/lib.rs
@@ -243,12 +243,6 @@ mod test {
)])
}
}
- impl Deref for DirectlyConnectedRouter {
- type Target = DirectlyConnectedRouter;
- fn deref(&self) -> &DirectlyConnectedRouter {
- self
- }
- }
struct URIResolver {
resolved_uri: Mutex<Option<(HumanReadableName, PaymentId, String)>>,
diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs
index 096942d..1d3f8ec 100644
--- a/lightning/src/ln/channelmanager.rs
+++ b/lightning/src/ln/channelmanager.rs
@@ -1805,9 +1805,7 @@ pub trait AChannelManager {
/// A type implementing [`Router`].
type Router: Router;
/// A type implementing [`MessageRouter`].
- type MessageRouter: MessageRouter + ?Sized;
- /// A type that may be dereferenced to [`Self::MessageRouter`].
- type MR: Deref<Target = Self::MessageRouter>;
+ type MessageRouter: MessageRouter;
/// A type implementing [`Logger`].
type Logger: Logger + ?Sized;
/// A type that may be dereferenced to [`Self::Logger`].
@@ -1823,7 +1821,7 @@ pub trait AChannelManager {
Self::SP,
Self::FeeEstimator,
Self::Router,
- Self::MR,
+ Self::MessageRouter,
Self::L,
>;
}
@@ -1836,13 +1834,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> AChannelManager for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
type Watch = M::Target;
@@ -1855,8 +1852,7 @@ where
type SP = SP;
type FeeEstimator = F;
type Router = R;
- type MessageRouter = MR::Target;
- type MR = MR;
+ type MessageRouter = MR;
type Logger = L::Target;
type L = L;
fn get_cm(&self) -> &ChannelManager<M, T, ES, NS, SP, F, R, MR, L> {
@@ -2611,12 +2607,11 @@ pub struct ChannelManager<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
config: RwLock<UserConfig>,
@@ -3396,13 +3391,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
/// Constructs a new `ChannelManager` to hold several channels and route between them.
@@ -13400,13 +13394,10 @@ macro_rules! create_offer_builder { ($self: ident, $builder: ty) => {
/// [`BlindedMessagePath`]: crate::blinded_path::message::BlindedMessagePath
/// [`Offer`]: crate::offers::offer::Offer
/// [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
- pub fn create_offer_builder_using_router<ME: Deref>(
+ pub fn create_offer_builder_using_router<ME: MessageRouter>(
&$self,
router: ME,
- ) -> Result<$builder, Bolt12SemanticError>
- where
- ME::Target: MessageRouter,
- {
+ ) -> Result<$builder, Bolt12SemanticError> {
let builder = $self.flow.create_offer_builder_using_router(
router, &$self.entropy_source, $self.get_peers_for_blinded_path()
)?;
@@ -13497,13 +13488,10 @@ macro_rules! create_refund_builder { ($self: ident, $builder: ty) => {
/// [`Refund`]: crate::offers::refund::Refund
/// [`BlindedMessagePath`]: crate::blinded_path::message::BlindedMessagePath
/// [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
- pub fn create_refund_builder_using_router<ME: Deref>(
+ pub fn create_refund_builder_using_router<ME: MessageRouter>(
&$self, router: ME, amount_msats: u64, absolute_expiry: Duration, payment_id: PaymentId,
retry_strategy: Retry, route_params_config: RouteParametersConfig
- ) -> Result<$builder, Bolt12SemanticError>
- where
- ME::Target: MessageRouter,
- {
+ ) -> Result<$builder, Bolt12SemanticError> {
let entropy = &$self.entropy_source;
let builder = $self.flow.create_refund_builder_using_router(
@@ -13532,13 +13520,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
#[cfg(not(c_bindings))]
@@ -14404,13 +14391,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> BaseMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
fn provided_node_features(&self) -> NodeFeatures {
@@ -14770,13 +14756,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> EventsProvider for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
/// Processes events that must be periodically handled.
@@ -14800,13 +14785,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> chain::Listen for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
fn filtered_block_connected(&self, header: &Header, txdata: &TransactionData, height: u32) {
@@ -14856,13 +14840,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> chain::Confirm for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
#[rustfmt::skip]
@@ -15024,13 +15007,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
/// Calls a function which handles an on-chain event (blocks dis/connected, transactions
@@ -15381,13 +15363,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> ChannelMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
fn handle_open_channel(&self, counterparty_node_id: PublicKey, message: &msgs::OpenChannel) {
@@ -15951,13 +15932,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> OffersMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
#[rustfmt::skip]
@@ -16164,13 +16144,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> AsyncPaymentsMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
fn handle_offer_paths_request(
@@ -16404,13 +16383,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> DNSResolverMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
fn handle_dnssec_query(
@@ -16467,13 +16445,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> NodeIdLookUp for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
fn next_node_id(&self, short_channel_id: u64) -> Option<PublicKey> {
@@ -16978,13 +16955,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref,
> Writeable for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
#[rustfmt::skip]
@@ -17340,12 +17316,11 @@ pub struct ChannelManagerReadArgs<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref + Clone,
> where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
/// A cryptographically secure source of entropy.
@@ -17415,13 +17390,12 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref + Clone,
> ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
/// Simple utility function to create a ChannelManagerReadArgs which creates the monitor
@@ -17498,14 +17472,13 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref + Clone,
> ReadableArgs<ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>>
for (BlockHash, Arc<ChannelManager<M, T, ES, NS, SP, F, R, MR, L>>)
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
fn read<Reader: io::Read>(
@@ -17526,14 +17499,13 @@ impl<
SP: Deref,
F: FeeEstimator,
R: Router,
- MR: Deref,
+ MR: MessageRouter,
L: Deref + Clone,
> ReadableArgs<ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>>
for (BlockHash, ChannelManager<M, T, ES, NS, SP, F, R, MR, L>)
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
SP::Target: SignerProvider,
- MR::Target: MessageRouter,
L::Target: Logger,
{
fn read<Reader: io::Read>(
diff --git a/lightning/src/ln/functional_test_utils.rs b/lightning/src/ln/functional_test_utils.rs
index 8b3932a..c425bda 100644
--- a/lightning/src/ln/functional_test_utils.rs
+++ b/lightning/src/ln/functional_test_utils.rs
@@ -739,7 +739,7 @@ pub trait NodeHolder {
<Self::CM as AChannelManager>::SP,
<Self::CM as AChannelManager>::FeeEstimator,
<Self::CM as AChannelManager>::Router,
- <Self::CM as AChannelManager>::MR,
+ <Self::CM as AChannelManager>::MessageRouter,
<Self::CM as AChannelManager>::L,
>;
fn chain_monitor(&self) -> Option<&test_utils::TestChainMonitor<'_>>;
@@ -756,7 +756,7 @@ impl<H: NodeHolder> NodeHolder for &H {
<Self::CM as AChannelManager>::SP,
<Self::CM as AChannelManager>::FeeEstimator,
<Self::CM as AChannelManager>::Router,
- <Self::CM as AChannelManager>::MR,
+ <Self::CM as AChannelManager>::MessageRouter,
<Self::CM as AChannelManager>::L,
> {
(*self).node()
diff --git a/lightning/src/offers/flow.rs b/lightning/src/offers/flow.rs
index e22f97c..3ee57c5 100644
--- a/lightning/src/offers/flow.rs
+++ b/lightning/src/offers/flow.rs
@@ -74,9 +74,8 @@ use {
///
/// [`OffersMessageFlow`] is parameterized by a [`MessageRouter`], which is responsible
/// for finding message paths when initiating and retrying onion messages.
-pub struct OffersMessageFlow<MR: Deref, L: Deref>
+pub struct OffersMessageFlow<MR: MessageRouter, L: Deref>
where
- MR::Target: MessageRouter,
L::Target: Logger,
{
chain_hash: ChainHash,
@@ -107,9 +106,8 @@ where
logger: L,
}
-impl<MR: Deref, L: Deref> OffersMessageFlow<MR, L>
+impl<MR: MessageRouter, L: Deref> OffersMessageFlow<MR, L>
where
- MR::Target: MessageRouter,
L::Target: Logger,
{
/// Creates a new [`OffersMessageFlow`]
@@ -266,9 +264,8 @@ const DEFAULT_ASYNC_RECEIVE_OFFER_EXPIRY: Duration = Duration::from_secs(365 * 2
pub(crate) const TEST_DEFAULT_ASYNC_RECEIVE_OFFER_EXPIRY: Duration =
DEFAULT_ASYNC_RECEIVE_OFFER_EXPIRY;
-impl<MR: Deref, L: Deref> OffersMessageFlow<MR, L>
+impl<MR: MessageRouter, L: Deref> OffersMessageFlow<MR, L>
where
- MR::Target: MessageRouter,
L::Target: Logger,
{
/// [`BlindedMessagePath`]s for an async recipient to communicate with this node and interactively
@@ -430,9 +427,8 @@ pub enum HeldHtlcReplyPath {
},
}
-impl<MR: Deref, L: Deref> OffersMessageFlow<MR, L>
+impl<MR: MessageRouter, L: Deref> OffersMessageFlow<MR, L>
where
- MR::Target: MessageRouter,
L::Target: Logger,
{
/// Verifies an [`InvoiceRequest`] using the provided [`OffersContext`] or the [`InvoiceRequest::metadata`].
@@ -620,12 +616,9 @@ where
/// This is not exported to bindings users as builder patterns don't map outside of move semantics.
///
/// See [`Self::create_offer_builder`] for more details on usage.
- pub fn create_offer_builder_using_router<ME: Deref, ES: EntropySource>(
+ pub fn create_offer_builder_using_router<ME: MessageRouter, ES: EntropySource>(
&self, router: ME, entropy_source: ES, peers: Vec<MessageForwardNode>,
- ) -> Result<OfferBuilder<'_, DerivedMetadata, secp256k1::All>, Bolt12SemanticError>
- where
- ME::Target: MessageRouter,
- {
+ ) -> Result<OfferBuilder<'_, DerivedMetadata, secp256k1::All>, Bolt12SemanticError> {
let receive_key = self.get_receive_auth_key();
self.create_offer_builder_intern(&entropy_source, |node_id, context, secp_ctx| {
router
@@ -767,13 +760,10 @@ where
/// [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
/// [`Event::PaymentFailed`]: crate::events::Event::PaymentFailed
/// [`RouteParameters::from_payment_params_and_value`]: crate::routing::router::RouteParameters::from_payment_params_and_value
- pub fn create_refund_builder_using_router<ES: EntropySource, ME: Deref>(
+ pub fn create_refund_builder_using_router<ES: EntropySource, ME: MessageRouter>(
&self, router: ME, entropy_source: ES, amount_msats: u64, absolute_expiry: Duration,
payment_id: PaymentId, peers: Vec<MessageForwardNode>,
- ) -> Result<RefundBuilder<'_, secp256k1::All>, Bolt12SemanticError>
- where
- ME::Target: MessageRouter,
- {
+ ) -> Result<RefundBuilder<'_, secp256k1::All>, Bolt12SemanticError> {
let receive_key = self.get_receive_auth_key();
self.create_refund_builder_intern(
&entropy_source,
diff --git a/lightning/src/onion_message/messenger.rs b/lightning/src/onion_message/messenger.rs
index 5f4b703..525d3a7 100644
--- a/lightning/src/onion_message/messenger.rs
+++ b/lightning/src/onion_message/messenger.rs
@@ -78,9 +78,7 @@ pub trait AOnionMessenger {
/// A type that may be dereferenced to [`Self::NodeIdLookUp`]
type NL: Deref<Target = Self::NodeIdLookUp>;
/// A type implementing [`MessageRouter`]
- type MessageRouter: MessageRouter + ?Sized;
- /// A type that may be dereferenced to [`Self::MessageRouter`]
- type MR: Deref<Target = Self::MessageRouter>;
+ type MessageRouter: MessageRouter;
/// A type implementing [`OffersMessageHandler`]
type OffersMessageHandler: OffersMessageHandler + ?Sized;
/// A type that may be dereferenced to [`Self::OffersMessageHandler`]
@@ -105,7 +103,7 @@ pub trait AOnionMessenger {
Self::NodeSigner,
Self::L,
Self::NL,
- Self::MR,
+ Self::MessageRouter,
Self::OMH,
Self::APH,
Self::DRH,
@@ -118,7 +116,7 @@ impl<
NS: NodeSigner,
L: Deref,
NL: Deref,
- MR: Deref,
+ MR: MessageRouter,
OMH: Deref,
APH: Deref,
DRH: Deref,
@@ -127,7 +125,6 @@ impl<
where
L::Target: Logger,
NL::Target: NodeIdLookUp,
- MR::Target: MessageRouter,
OMH::Target: OffersMessageHandler,
APH::Target: AsyncPaymentsMessageHandler,
DRH::Target: DNSResolverMessageHandler,
@@ -139,8 +136,7 @@ where
type L = L;
type NodeIdLookUp = NL::Target;
type NL = NL;
- type MessageRouter = MR::Target;
- type MR = MR;
+ type MessageRouter = MR;
type OffersMessageHandler = OMH::Target;
type OMH = OMH;
type AsyncPaymentsMessageHandler = APH::Target;
@@ -280,7 +276,7 @@ pub struct OnionMessenger<
NS: NodeSigner,
L: Deref,
NL: Deref,
- MR: Deref,
+ MR: MessageRouter,
OMH: Deref,
APH: Deref,
DRH: Deref,
@@ -288,7 +284,6 @@ pub struct OnionMessenger<
> where
L::Target: Logger,
NL::Target: NodeIdLookUp,
- MR::Target: MessageRouter,
OMH::Target: OffersMessageHandler,
APH::Target: AsyncPaymentsMessageHandler,
DRH::Target: DNSResolverMessageHandler,
@@ -512,6 +507,27 @@ pub trait MessageRouter {
) -> Result<Vec<BlindedMessagePath>, ()>;
}
+impl<T: MessageRouter + ?Sized, R: Deref<Target = T>> MessageRouter for R {
+ fn find_path(
+ &self, sender: PublicKey, peers: Vec<PublicKey>, destination: Destination,
+ ) -> Result<OnionMessagePath, ()> {
+ self.deref().find_path(sender, peers, destination)
+ }
+
+ fn create_blinded_paths<S: secp256k1::Signing + secp256k1::Verification>(
+ &self, recipient: PublicKey, local_node_receive_key: ReceiveAuthKey,
+ context: MessageContext, peers: Vec<MessageForwardNode>, secp_ctx: &Secp256k1<S>,
+ ) -> Result<Vec<BlindedMessagePath>, ()> {
+ self.deref().create_blinded_paths(
+ recipient,
+ local_node_receive_key,
+ context,
+ peers,
+ secp_ctx,
+ )
+ }
+}
+
/// A [`MessageRouter`] that can only route to a directly connected [`Destination`].
///
/// [`DefaultMessageRouter`] tries to construct compact or private [`BlindedMessagePath`]s based on
@@ -1377,7 +1393,7 @@ impl<
NS: NodeSigner,
L: Deref,
NL: Deref,
- MR: Deref,
+ MR: MessageRouter,
OMH: Deref,
APH: Deref,
DRH: Deref,
@@ -1386,7 +1402,6 @@ impl<
where
L::Target: Logger,
NL::Target: NodeIdLookUp,
- MR::Target: MessageRouter,
OMH::Target: OffersMessageHandler,
APH::Target: AsyncPaymentsMessageHandler,
DRH::Target: DNSResolverMessageHandler,
@@ -2019,7 +2034,7 @@ impl<
NS: NodeSigner,
L: Deref,
NL: Deref,
- MR: Deref,
+ MR: MessageRouter,
OMH: Deref,
APH: Deref,
DRH: Deref,
@@ -2028,7 +2043,6 @@ impl<
where
L::Target: Logger,
NL::Target: NodeIdLookUp,
- MR::Target: MessageRouter,
OMH::Target: OffersMessageHandler,
APH::Target: AsyncPaymentsMessageHandler,
DRH::Target: DNSResolverMessageHandler,
@@ -2138,7 +2152,7 @@ impl<
NS: NodeSigner,
L: Deref,
NL: Deref,
- MR: Deref,
+ MR: MessageRouter,
OMH: Deref,
APH: Deref,
DRH: Deref,
@@ -2147,7 +2161,6 @@ impl<
where
L::Target: Logger,
NL::Target: NodeIdLookUp,
- MR::Target: MessageRouter,
OMH::Target: OffersMessageHandler,
APH::Target: AsyncPaymentsMessageHandler,
DRH::Target: DNSResolverMessageHandler,
@@ -2208,7 +2221,7 @@ impl<
NS: NodeSigner,
L: Deref,
NL: Deref,
- MR: Deref,
+ MR: MessageRouter,
OMH: Deref,
APH: Deref,
DRH: Deref,
@@ -2217,7 +2230,6 @@ impl<
where
L::Target: Logger,
NL::Target: NodeIdLookUp,
- MR::Target: MessageRouter,
OMH::Target: OffersMessageHandler,
APH::Target: AsyncPaymentsMessageHandler,
DRH::Target: DNSResolverMessageHandler,
Why this scored 18/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.