Add concrete `NO_*` consts to avoid users having to specify types
What changed, and why it matters
This commit is a developer-convenience change only. It adds named constants like NO_ONION_MESSENGER and NO_LIQUIDITY_MANAGER so users don't have to write out complex Rust type names when they don't need those optional features. There is no security fix or behavior change.
No security action needed; treat as a normal API ergonomics improvement.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch introduces public const Option
Changed components
lightning-background-processor/src/lib.rsInspect captured patch +126 / −0
diff --git a/lightning-background-processor/src/lib.rs b/lightning-background-processor/src/lib.rs
index 1376f43..95adc65 100644
--- a/lightning-background-processor/src/lib.rs
+++ b/lightning-background-processor/src/lib.rs
@@ -84,6 +84,8 @@ use std::time::Instant;
#[cfg(not(feature = "std"))]
use alloc::boxed::Box;
+#[cfg(all(not(c_bindings), not(feature = "std")))]
+use alloc::sync::Arc;
/// `BackgroundProcessor` takes care of tasks that (1) need to happen periodically to keep
/// Rust-Lightning running properly, and (2) either can or should be run in the background. Its
@@ -331,6 +333,104 @@ fn update_scorer<'a, S: 'static + Deref<Target = SC> + Send + Sync, SC: 'a + Wri
true
}
+#[cfg(not(c_bindings))]
+type DynRouter = lightning::routing::router::DefaultRouter<
+ &'static NetworkGraph<&'static dyn Logger>,
+ &'static dyn Logger,
+ &'static dyn EntropySource,
+ &'static core::cell::RefCell<
+ lightning::routing::scoring::ProbabilisticScorer<
+ &'static NetworkGraph<&'static dyn Logger>,
+ &'static dyn Logger,
+ >,
+ >,
+ lightning::routing::scoring::ProbabilisticScoringFeeParameters,
+ lightning::routing::scoring::ProbabilisticScorer<
+ &'static NetworkGraph<&'static dyn Logger>,
+ &'static dyn Logger,
+ >,
+>;
+
+#[cfg(not(c_bindings))]
+type DynMessageRouter = lightning::onion_message::messenger::DefaultMessageRouter<
+ &'static NetworkGraph<&'static dyn Logger>,
+ &'static dyn Logger,
+ &'static dyn EntropySource,
+>;
+
+#[cfg(all(not(c_bindings), not(taproot)))]
+type DynSignerProvider =
+ dyn lightning::sign::SignerProvider<EcdsaSigner = lightning::sign::InMemorySigner>;
+
+#[cfg(all(not(c_bindings), taproot))]
+type DynSignerProvider = dyn lightning::sign::SignerProvider<
+ EcdsaSigner = lightning::sign::InMemorySigner,
+ TaprootSigner = lightning::sign::InMemorySigner,
+>;
+
+#[cfg(not(c_bindings))]
+type DynChannelManager = lightning::ln::channelmanager::ChannelManager<
+ &'static dyn chain::Watch<lightning::sign::InMemorySigner>,
+ &'static dyn BroadcasterInterface,
+ &'static dyn EntropySource,
+ &'static dyn lightning::sign::NodeSigner,
+ &'static DynSignerProvider,
+ &'static dyn FeeEstimator,
+ &'static DynRouter,
+ &'static DynMessageRouter,
+ &'static dyn Logger,
+>;
+
+/// When initializing a background processor without an onion messenger, this can be used to avoid
+/// specifying a concrete `OnionMessenger` type.
+#[cfg(not(c_bindings))]
+pub const NO_ONION_MESSENGER: Option<
+ Arc<
+ dyn AOnionMessenger<
+ EntropySource = dyn EntropySource,
+ ES = &dyn EntropySource,
+ NodeSigner = dyn lightning::sign::NodeSigner,
+ NS = &dyn lightning::sign::NodeSigner,
+ Logger = dyn Logger,
+ L = &'static dyn Logger,
+ NodeIdLookUp = DynChannelManager,
+ NL = &'static DynChannelManager,
+ MessageRouter = DynMessageRouter,
+ MR = &'static DynMessageRouter,
+ OffersMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
+ OMH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
+ AsyncPaymentsMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
+ APH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
+ DNSResolverMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
+ DRH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
+ CustomOnionMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
+ CMH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
+ > + Send
+ + Sync,
+ >,
+> = None;
+
+/// When initializing a background processor without a liquidity manager, this can be used to avoid
+/// specifying a concrete `LiquidityManager` type.
+#[cfg(not(c_bindings))]
+pub const NO_LIQUIDITY_MANAGER: Option<
+ Arc<
+ dyn ALiquidityManager<
+ EntropySource = dyn EntropySource,
+ ES = &dyn EntropySource,
+ NodeSigner = dyn lightning::sign::NodeSigner,
+ NS = &dyn lightning::sign::NodeSigner,
+ AChannelManager = DynChannelManager,
+ CM = &DynChannelManager,
+ Filter = dyn chain::Filter,
+ C = &dyn chain::Filter,
+ TimeProvider = dyn lightning_liquidity::utils::time::TimeProvider,
+ TP = &dyn lightning_liquidity::utils::time::TimeProvider,
+ > + Send
+ + Sync,
+ >,
+> = None;
+
pub(crate) mod futures_util {
use core::future::Future;
use core::marker::Unpin;
@@ -3384,4 +3484,30 @@ mod tests {
r1.unwrap().unwrap();
r2.unwrap()
}
+
+ #[test]
+ #[cfg(not(c_bindings))]
+ fn test_no_consts() {
+ // Compile-test the NO_* constants can be used.
+ let (_, nodes) = create_nodes(1, "test_no_consts");
+ let data_dir = nodes[0].kv_store.get_data_dir();
+ let persister = Arc::new(Persister::new(data_dir));
+ let bg_processor = BackgroundProcessor::start(
+ persister,
+ move |_: Event| Ok(()),
+ Arc::clone(&nodes[0].chain_monitor),
+ Arc::clone(&nodes[0].node),
+ crate::NO_ONION_MESSENGER,
+ nodes[0].no_gossip_sync(),
+ Arc::clone(&nodes[0].peer_manager),
+ crate::NO_LIQUIDITY_MANAGER,
+ Some(Arc::clone(&nodes[0].sweeper)),
+ Arc::clone(&nodes[0].logger),
+ Some(Arc::clone(&nodes[0].scorer)),
+ );
+
+ if !std::thread::panicking() {
+ bg_processor.stop().unwrap();
+ }
+ }
}
Why this scored 15/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.