Drop Deref indirection for chain::Filter
What changed, and why it matters
This commit is a routine internal code cleanup in the Lightning Dev Kit Rust library. It removes an extra layer of generic pointer indirection (the Deref trait) for the chain filter type and instead uses the Filter trait directly. The commit message and diff show no security-related intent, and the change preserves equivalent behavior while making the code less verbose.
No security action required. Treat as a normal refactoring commit and review through standard code-quality processes.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch refactors generic bounds across ChainMonitor, ChannelMonitor, LiquidityManager, OutputSweeper, and background processor code. Previously, many types accepted a generic C or F bounded by Deref whose target implemented chain::Filter. The commit changes those bounds to require the type to implement chain::Filter directly, and adds a blanket impl of Filter for any Deref
Changed components
lightning/src/chain/chainmonitor.rslightning/src/chain/channelmonitor.rslightning/src/chain/mod.rslightning/src/util/anchor_channel_reserves.rslightning/src/util/sweep.rslightning-background-processor/src/lib.rslightning-liquidity/src/lsps1/service.rslightning-liquidity/src/manager.rsInspect captured patch +57 / −99
diff --git a/lightning-background-processor/src/lib.rs b/lightning-background-processor/src/lib.rs
index 4c41a2c..905782c 100644
--- a/lightning-background-processor/src/lib.rs
+++ b/lightning-background-processor/src/lib.rs
@@ -467,7 +467,6 @@ pub const NO_LIQUIDITY_MANAGER: Option<
NodeSigner = &(dyn lightning::sign::NodeSigner + Send + Sync),
AChannelManager = DynChannelManager,
CM = &DynChannelManager,
- Filter = dyn chain::Filter + Send + Sync,
C = &(dyn chain::Filter + Send + Sync),
K = &DummyKVStore,
TimeProvider = dyn lightning_liquidity::utils::time::TimeProvider + Send + Sync,
@@ -490,7 +489,6 @@ pub const NO_LIQUIDITY_MANAGER_SYNC: Option<
NodeSigner = &(dyn lightning::sign::NodeSigner + Send + Sync),
AChannelManager = DynChannelManager,
CM = &DynChannelManager,
- Filter = dyn chain::Filter + Send + Sync,
C = &(dyn chain::Filter + Send + Sync),
KVStoreSync = dyn lightning::util::persist::KVStoreSync + Send + Sync,
KS = &(dyn lightning::util::persist::KVStoreSync + Send + Sync),
@@ -931,7 +929,7 @@ use futures_util::{dummy_waker, Joiner, OptionalSelector, Selector, SelectorOutp
pub async fn process_events_async<
'a,
UL: Deref,
- CF: Deref,
+ CF: chain::Filter,
T: BroadcasterInterface,
F: FeeEstimator,
G: Deref<Target = NetworkGraph<L>>,
@@ -964,7 +962,6 @@ pub async fn process_events_async<
) -> Result<(), lightning::io::Error>
where
UL::Target: UtxoLookup,
- CF::Target: chain::Filter,
P::Target: Persist<<CM::Target as AChannelManager>::Signer>,
CM::Target: AChannelManager,
OM::Target: AOnionMessenger,
@@ -1427,7 +1424,7 @@ fn check_and_reset_sleeper<
/// synchronous background persistence.
pub async fn process_events_async_with_kv_store_sync<
UL: Deref,
- CF: Deref,
+ CF: chain::Filter,
T: BroadcasterInterface,
F: FeeEstimator,
G: Deref<Target = NetworkGraph<L>>,
@@ -1460,7 +1457,6 @@ pub async fn process_events_async_with_kv_store_sync<
) -> Result<(), lightning::io::Error>
where
UL::Target: UtxoLookup,
- CF::Target: chain::Filter,
P::Target: Persist<<CM::Target as AChannelManager>::Signer>,
CM::Target: AChannelManager,
OM::Target: AOnionMessenger,
@@ -1537,7 +1533,7 @@ impl BackgroundProcessor {
pub fn start<
'a,
UL: 'static + Deref,
- CF: 'static + Deref,
+ CF: 'static + chain::Filter,
T: 'static + BroadcasterInterface,
F: 'static + FeeEstimator + Send,
G: 'static + Deref<Target = NetworkGraph<L>>,
@@ -1570,7 +1566,6 @@ impl BackgroundProcessor {
) -> Self
where
UL::Target: 'static + UtxoLookup,
- CF::Target: 'static + chain::Filter,
L::Target: 'static + Logger,
P::Target: 'static + Persist<<CM::Target as AChannelManager>::Signer>,
CM::Target: AChannelManager,
diff --git a/lightning-liquidity/src/lsps1/service.rs b/lightning-liquidity/src/lsps1/service.rs
index 154c6f5..d701065 100644
--- a/lightning-liquidity/src/lsps1/service.rs
+++ b/lightning-liquidity/src/lsps1/service.rs
@@ -132,10 +132,9 @@ impl PeerState {
}
/// The main object allowing to send and receive bLIP-51 / LSPS1 messages.
-pub struct LSPS1ServiceHandler<ES: EntropySource, CM: Deref + Clone, C: Deref, K: KVStore + Clone>
+pub struct LSPS1ServiceHandler<ES: EntropySource, CM: Deref + Clone, C: Filter, K: KVStore + Clone>
where
CM::Target: AChannelManager,
- C::Target: Filter,
{
entropy_source: ES,
channel_manager: CM,
@@ -146,11 +145,10 @@ where
config: LSPS1ServiceConfig,
}
-impl<ES: EntropySource, CM: Deref + Clone, C: Deref, K: KVStore + Clone>
+impl<ES: EntropySource, CM: Deref + Clone, C: Filter, K: KVStore + Clone>
LSPS1ServiceHandler<ES, CM, C, K>
where
CM::Target: AChannelManager,
- C::Target: Filter,
{
/// Constructs a `LSPS1ServiceHandler`.
pub(crate) fn new(
@@ -417,11 +415,10 @@ where
}
}
-impl<ES: EntropySource, CM: Deref + Clone, C: Deref, K: KVStore + Clone> LSPSProtocolMessageHandler
+impl<ES: EntropySource, CM: Deref + Clone, C: Filter, K: KVStore + Clone> LSPSProtocolMessageHandler
for LSPS1ServiceHandler<ES, CM, C, K>
where
CM::Target: AChannelManager,
- C::Target: Filter,
{
type ProtocolMessage = LSPS1Message;
const PROTOCOL_NUMBER: Option<u16> = Some(1);
diff --git a/lightning-liquidity/src/manager.rs b/lightning-liquidity/src/manager.rs
index c3e9fa4..1f11fc8 100644
--- a/lightning-liquidity/src/manager.rs
+++ b/lightning-liquidity/src/manager.rs
@@ -112,9 +112,7 @@ pub trait ALiquidityManager {
/// A type that may be dereferenced to [`Self::AChannelManager`].
type CM: Deref<Target = Self::AChannelManager> + Clone;
/// A type implementing [`Filter`].
- type Filter: Filter + ?Sized;
- /// A type that may be dereferenced to [`Self::Filter`].
- type C: Deref<Target = Self::Filter> + Clone;
+ type C: Filter + Clone;
/// A type implementing [`KVStore`].
type K: KVStore + Clone;
/// A type implementing [`TimeProvider`].
@@ -141,21 +139,19 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
K: KVStore + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> ALiquidityManager for LiquidityManager<ES, NS, CM, C, K, TP, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
TP::Target: TimeProvider,
{
type EntropySource = ES;
type NodeSigner = NS;
type AChannelManager = CM::Target;
type CM = CM;
- type Filter = C::Target;
type C = C;
type K = K;
type TimeProvider = TP::Target;
@@ -180,9 +176,7 @@ pub trait ALiquidityManagerSync {
/// A type that may be dereferenced to [`Self::AChannelManager`].
type CM: Deref<Target = Self::AChannelManager> + Clone;
/// A type implementing [`Filter`].
- type Filter: Filter + ?Sized;
- /// A type that may be dereferenced to [`Self::Filter`].
- type C: Deref<Target = Self::Filter> + Clone;
+ type C: Filter + Clone;
/// A type implementing [`KVStoreSync`].
type KVStoreSync: KVStoreSync + ?Sized;
/// A type that may be dereferenced to [`Self::KVStoreSync`].
@@ -224,14 +218,13 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
KS: Deref + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> ALiquidityManagerSync for LiquidityManagerSync<ES, NS, CM, C, KS, TP, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
KS::Target: KVStoreSync,
TP::Target: TimeProvider,
{
@@ -239,7 +232,6 @@ where
type NodeSigner = NS;
type AChannelManager = CM::Target;
type CM = CM;
- type Filter = C::Target;
type C = C;
type KVStoreSync = KS::Target;
type KS = KS;
@@ -289,13 +281,12 @@ pub struct LiquidityManager<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
K: KVStore + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> where
CM::Target: AChannelManager,
- C::Target: Filter,
TP::Target: TimeProvider,
{
pending_messages: Arc<MessageQueue>,
@@ -324,13 +315,12 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
K: KVStore + Clone,
T: BroadcasterInterface + Clone,
> LiquidityManager<ES, NS, CM, C, K, DefaultTimeProvider, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
{
/// Constructor for the [`LiquidityManager`] using the default system clock
///
@@ -361,14 +351,13 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
K: KVStore + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> LiquidityManager<ES, NS, CM, C, K, TP, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
TP::Target: TimeProvider,
{
/// Constructor for the [`LiquidityManager`] with a custom time provider.
@@ -784,14 +773,13 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
K: KVStore + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> CustomMessageReader for LiquidityManager<ES, NS, CM, C, K, TP, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
TP::Target: TimeProvider,
{
type CustomMessage = RawLSPSMessage;
@@ -812,14 +800,13 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
K: KVStore + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> CustomMessageHandler for LiquidityManager<ES, NS, CM, C, K, TP, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
TP::Target: TimeProvider,
{
fn handle_custom_message(
@@ -942,14 +929,13 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
K: KVStore + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> Listen for LiquidityManager<ES, NS, CM, C, K, TP, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
TP::Target: TimeProvider,
{
fn filtered_block_connected(
@@ -984,14 +970,13 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
K: KVStore + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> Confirm for LiquidityManager<ES, NS, CM, C, K, TP, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
TP::Target: TimeProvider,
{
fn transactions_confirmed(
@@ -1026,13 +1011,12 @@ pub struct LiquidityManagerSync<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
KS: Deref + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> where
CM::Target: AChannelManager,
- C::Target: Filter,
KS::Target: KVStoreSync,
TP::Target: TimeProvider,
{
@@ -1044,14 +1028,13 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
KS: Deref + Clone,
T: BroadcasterInterface + Clone,
> LiquidityManagerSync<ES, NS, CM, C, KS, DefaultTimeProvider, T>
where
CM::Target: AChannelManager,
KS::Target: KVStoreSync,
- C::Target: Filter,
{
/// Constructor for the [`LiquidityManagerSync`] using the default system clock
///
@@ -1093,14 +1076,13 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
KS: Deref + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> LiquidityManagerSync<ES, NS, CM, C, KS, TP, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
KS::Target: KVStoreSync,
TP::Target: TimeProvider,
{
@@ -1260,14 +1242,13 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
KS: Deref + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> CustomMessageReader for LiquidityManagerSync<ES, NS, CM, C, KS, TP, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
KS::Target: KVStoreSync,
TP::Target: TimeProvider,
{
@@ -1284,14 +1265,13 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
KS: Deref + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> CustomMessageHandler for LiquidityManagerSync<ES, NS, CM, C, KS, TP, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
KS::Target: KVStoreSync,
TP::Target: TimeProvider,
{
@@ -1328,14 +1308,13 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
KS: Deref + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> Listen for LiquidityManagerSync<ES, NS, CM, C, KS, TP, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
KS::Target: KVStoreSync,
TP::Target: TimeProvider,
{
@@ -1355,14 +1334,13 @@ impl<
ES: EntropySource + Clone,
NS: NodeSigner + Clone,
CM: Deref + Clone,
- C: Deref + Clone,
+ C: Filter + Clone,
KS: Deref + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> Confirm for LiquidityManagerSync<ES, NS, CM, C, KS, TP, T>
where
CM::Target: AChannelManager,
- C::Target: Filter,
KS::Target: KVStoreSync,
TP::Target: TimeProvider,
{
diff --git a/lightning/src/chain/chainmonitor.rs b/lightning/src/chain/chainmonitor.rs
index 536a1f9..2db3473 100644
--- a/lightning/src/chain/chainmonitor.rs
+++ b/lightning/src/chain/chainmonitor.rs
@@ -37,7 +37,7 @@ use crate::chain::channelmonitor::{
WithChannelMonitor,
};
use crate::chain::transaction::{OutPoint, TransactionData};
-use crate::chain::{BestBlock, ChannelMonitorUpdateStatus, Filter, WatchedOutput};
+use crate::chain::{BestBlock, ChannelMonitorUpdateStatus, WatchedOutput};
use crate::events::{self, Event, EventHandler, ReplayEvent};
use crate::ln::channel_state::ChannelDetails;
#[cfg(peer_storage)]
@@ -340,14 +340,13 @@ where
/// [`rebroadcast_pending_claims`]: Self::rebroadcast_pending_claims
pub struct ChainMonitor<
ChannelSigner: EcdsaChannelSigner,
- C: Deref,
+ C: chain::Filter,
T: BroadcasterInterface,
F: FeeEstimator,
L: Logger,
P: Deref,
ES: EntropySource,
> where
- C::Target: chain::Filter,
P::Target: Persist<ChannelSigner>,
{
monitors: RwLock<HashMap<ChannelId, MonitorHolder<ChannelSigner>>>,
@@ -378,14 +377,13 @@ impl<
K: KVStore + MaybeSend + MaybeSync + 'static,
S: FutureSpawner,
SP: SignerProvider + MaybeSend + MaybeSync + 'static,
- C: Deref,
+ C: chain::Filter,
T: BroadcasterInterface + MaybeSend + MaybeSync + 'static,
F: FeeEstimator + MaybeSend + MaybeSync + 'static,
L: Logger + MaybeSend + MaybeSync + 'static,
ES: EntropySource + MaybeSend + MaybeSync + 'static,
> ChainMonitor<SP::EcdsaSigner, C, T, F, L, AsyncPersister<K, S, L, ES, SP, T, F>, ES>
where
- C::Target: chain::Filter,
SP::EcdsaSigner: MaybeSend + 'static,
{
/// Creates a new `ChainMonitor` used to watch on-chain activity pertaining to channels.
@@ -422,7 +420,7 @@ where
impl<
ChannelSigner: EcdsaChannelSigner,
- C: Deref,
+ C: chain::Filter,
T: BroadcasterInterface,
F: FeeEstimator,
L: Logger,
@@ -430,7 +428,6 @@ impl<
ES: EntropySource,
> ChainMonitor<ChannelSigner, C, T, F, L, P, ES>
where
- C::Target: chain::Filter,
P::Target: Persist<ChannelSigner>,
{
/// Dispatches to per-channel monitors, which are responsible for updating their on-chain view
@@ -1065,7 +1062,7 @@ where
impl<
ChannelSigner: EcdsaChannelSigner,
- C: Deref,
+ C: chain::Filter,
T: BroadcasterInterface,
F: FeeEstimator,
L: Logger,
@@ -1073,7 +1070,6 @@ impl<
ES: EntropySource,
> BaseMessageHandler for ChainMonitor<ChannelSigner, C, T, F, L, P, ES>
where
- C::Target: chain::Filter,
P::Target: Persist<ChannelSigner>,
{
fn get_and_clear_pending_msg_events(&self) -> Vec<MessageSendEvent> {
@@ -1100,7 +1096,7 @@ where
impl<
ChannelSigner: EcdsaChannelSigner,
- C: Deref,
+ C: chain::Filter,
T: BroadcasterInterface,
F: FeeEstimator,
L: Logger,
@@ -1108,14 +1104,13 @@ impl<
ES: EntropySource,
> SendOnlyMessageHandler for ChainMonitor<ChannelSigner, C, T, F, L, P, ES>
where
- C::Target: chain::Filter,
P::Target: Persist<ChannelSigner>,
{
}
impl<
ChannelSigner: EcdsaChannelSigner,
- C: Deref,
+ C: chain::Filter,
T: BroadcasterInterface,
F: FeeEstimator,
L: Logger,
@@ -1123,7 +1118,6 @@ impl<
ES: EntropySource,
> chain::Listen for ChainMonitor<ChannelSigner, C, T, F, L, P, ES>
where
- C::Target: chain::Filter,
P::Target: Persist<ChannelSigner>,
{
fn filtered_block_connected(&self, header: &Header, txdata: &TransactionData, height: u32) {
@@ -1175,7 +1169,7 @@ where
impl<
ChannelSigner: EcdsaChannelSigner,
- C: Deref,
+ C: chain::Filter,
T: BroadcasterInterface,
F: FeeEstimator,
L: Logger,
@@ -1183,7 +1177,6 @@ impl<
ES: EntropySource,
> chain::Confirm for ChainMonitor<ChannelSigner, C, T, F, L, P, ES>
where
- C::Target: chain::Filter,
P::Target: Persist<ChannelSigner>,
{
fn transactions_confirmed(&self, header: &Header, txdata: &TransactionData, height: u32) {
@@ -1266,7 +1259,7 @@ where
impl<
ChannelSigner: EcdsaChannelSigner,
- C: Deref,
+ C: chain::Filter,
T: BroadcasterInterface,
F: FeeEstimator,
L: Logger,
@@ -1274,7 +1267,6 @@ impl<
ES: EntropySource,
> chain::Watch<ChannelSigner> for ChainMonitor<ChannelSigner, C, T, F, L, P, ES>
where
- C::Target: chain::Filter,
P::Target: Persist<ChannelSigner>,
{
fn watch_channel(
@@ -1458,7 +1450,7 @@ where
impl<
ChannelSigner: EcdsaChannelSigner,
- C: Deref,
+ C: chain::Filter,
T: BroadcasterInterface,
F: FeeEstimator,
L: Logger,
@@ -1466,7 +1458,6 @@ impl<
ES: EntropySource,
> events::EventsProvider for ChainMonitor<ChannelSigner, C, T, F, L, P, ES>
where
- C::Target: chain::Filter,
P::Target: Persist<ChannelSigner>,
{
/// Processes [`SpendableOutputs`] events produced from each [`ChannelMonitor`] upon maturity.
diff --git a/lightning/src/chain/channelmonitor.rs b/lightning/src/chain/channelmonitor.rs
index 015cae7..80d0ef1 100644
--- a/lightning/src/chain/channelmonitor.rs
+++ b/lightning/src/chain/channelmonitor.rs
@@ -42,7 +42,6 @@ use crate::chain::package::{
HolderHTLCOutput, PackageSolvingData, PackageTemplate, RevokedHTLCOutput, RevokedOutput,
};
use crate::chain::transaction::{OutPoint, TransactionData};
-use crate::chain::Filter;
use crate::chain::{BestBlock, WatchedOutput};
use crate::events::bump_transaction::{AnchorDescriptor, BumpTransactionEvent};
use crate::events::{ClosureReason, Event, EventHandler, ReplayEvent};
@@ -2125,8 +2124,7 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitor<Signer> {
/// calling `chain::Filter::register_output` and `chain::Filter::register_tx` until all outputs
/// have been registered.
#[rustfmt::skip]
- pub fn load_outputs_to_watch<F: Deref, L: Logger>(&self, filter: &F, logger: &L)
- where F::Target: chain::Filter {
+ pub fn load_outputs_to_watch<F: chain::Filter, L: Logger>(&self, filter: &F, logger: &L) {
let lock = self.inner.lock().unwrap();
let logger = WithChannelMonitor::from_impl(logger, &*lock, None);
for funding in core::iter::once(&lock.funding).chain(&lock.pending_funding) {
diff --git a/lightning/src/chain/mod.rs b/lightning/src/chain/mod.rs
index 9f5c965..e8baa7a 100644
--- a/lightning/src/chain/mod.rs
+++ b/lightning/src/chain/mod.rs
@@ -412,6 +412,16 @@ pub trait Filter {
fn register_output(&self, output: WatchedOutput);
}
+impl<T: Filter + ?Sized, F: Deref<Target = T>> Filter for F {
+ fn register_tx(&self, txid: &Txid, script_pubkey: &Script) {
+ self.deref().register_tx(txid, script_pubkey)
+ }
+
+ fn register_output(&self, output: WatchedOutput) {
+ self.deref().register_output(output)
+ }
+}
+
/// A transaction output watched by a [`ChannelMonitor`] for spends on-chain.
///
/// Used to convey to a [`Filter`] such an output with a given spending condition. Any transaction
diff --git a/lightning/src/util/anchor_channel_reserves.rs b/lightning/src/util/anchor_channel_reserves.rs
index 3e9945f..8026af0 100644
--- a/lightning/src/util/anchor_channel_reserves.rs
+++ b/lightning/src/util/anchor_channel_reserves.rs
@@ -272,20 +272,19 @@ pub fn get_supportable_anchor_channels(
pub fn can_support_additional_anchor_channel<
AChannelManagerRef: Deref,
ChannelSigner: EcdsaChannelSigner,
- FilterRef: Deref,
+ FI: Filter,
B: BroadcasterInterface,
FE: FeeEstimator,
L: Logger,
PersistRef: Deref,
ES: EntropySource,
- ChainMonitorRef: Deref<Target = ChainMonitor<ChannelSigner, FilterRef, B, FE, L, PersistRef, ES>>,
+ ChainMonitorRef: Deref<Target = ChainMonitor<ChannelSigner, FI, B, FE, L, PersistRef, ES>>,
>(
context: &AnchorChannelReserveContext, utxos: &[Utxo], a_channel_manager: AChannelManagerRef,
chain_monitor: ChainMonitorRef,
) -> bool
where
AChannelManagerRef::Target: AChannelManager,
- FilterRef::Target: Filter,
PersistRef::Target: Persist<ChannelSigner>,
{
let mut anchor_channels = new_hash_set();
diff --git a/lightning/src/util/sweep.rs b/lightning/src/util/sweep.rs
index 2d22244..e69b3a9 100644
--- a/lightning/src/util/sweep.rs
+++ b/lightning/src/util/sweep.rs
@@ -341,13 +341,12 @@ pub struct OutputSweeper<
B: BroadcasterInterface,
D: Deref,
E: FeeEstimator,
- F: Deref,
+ F: Filter,
K: KVStore,
L: Logger,
O: Deref,
> where
D::Target: ChangeDestinationSource,
- F::Target: Filter,
O::Target: OutputSpender,
{
sweeper_state: Mutex<SweeperState>,
@@ -365,14 +364,13 @@ impl<
B: BroadcasterInterface,
D: Deref,
E: FeeEstimator,
- F: Deref,
+ F: Filter,
K: KVStore,
L: Logger,
O: Deref,
> OutputSweeper<B, D, E, F, K, L, O>
where
D::Target: ChangeDestinationSource,
- F::Target: Filter,
O::Target: OutputSpender,
{
/// Constructs a new [`OutputSweeper`].
@@ -720,14 +718,13 @@ impl<
B: BroadcasterInterface,
D: Deref,
E: FeeEstimator,
- F: Deref,
+ F: Filter + Sync + Send,
K: KVStore,
L: Logger,
O: Deref,
> Listen for OutputSweeper<B, D, E, F, K, L, O>
where
D::Target: ChangeDestinationSource,
- F::Target: Filter + Sync + Send,
O::Target: OutputSpender,
{
fn filtered_block_connected(
@@ -764,14 +761,13 @@ impl<
B: BroadcasterInterface,
D: Deref,
E: FeeEstimator,
- F: Deref,
+ F: Filter + Sync + Send,
K: KVStore,
L: Logger,
O: Deref,
> Confirm for OutputSweeper<B, D, E, F, K, L, O>
where
D::Target: ChangeDestinationSource,
- F::Target: Filter + Sync + Send,
O::Target: OutputSpender,
{
fn transactions_confirmed(
@@ -864,14 +860,13 @@ impl<
B: BroadcasterInterface,
D: Deref,
E: FeeEstimator,
- F: Deref,
+ F: Filter + Sync + Send,
K: KVStore,
L: Logger,
O: Deref,
> ReadableArgs<(B, E, Option<F>, O, D, K, L)> for (BestBlock, OutputSweeper<B, D, E, F, K, L, O>)
where
D::Target: ChangeDestinationSource,
- F::Target: Filter + Sync + Send,
O::Target: OutputSpender,
{
#[inline]
@@ -937,13 +932,12 @@ pub struct OutputSweeperSync<
B: BroadcasterInterface,
D: Deref,
E: FeeEstimator,
- F: Deref,
+ F: Filter,
K: Deref,
L: Logger,
O: Deref,
> where
D::Target: ChangeDestinationSourceSync,
- F::Target: Filter,
K::Target: KVStoreSync,
O::Target: OutputSpender,
{
@@ -955,14 +949,13 @@ impl<
B: BroadcasterInterface,
D: Deref,
E: FeeEstimator,
- F: Deref,
+ F: Filter,
K: Deref,
L: Logger,
O: Deref,
> OutputSweeperSync<B, D, E, F, K, L, O>
where
D::Target: ChangeDestinationSourceSync,
- F::Target: Filter,
K::Target: KVStoreSync,
O::Target: OutputSpender,
{
@@ -1079,14 +1072,13 @@ impl<
B: BroadcasterInterface,
D: Deref,
E: FeeEstimator,
- F: Deref,
+ F: Filter + Sync + Send,
K: Deref,
L: Logger,
O: Deref,
> Listen for OutputSweeperSync<B, D, E, F, K, L, O>
where
D::Target: ChangeDestinationSourceSync,
- F::Target: Filter + Sync + Send,
K::Target: KVStoreSync,
O::Target: OutputSpender,
{
@@ -1105,14 +1097,13 @@ impl<
B: BroadcasterInterface,
D: Deref,
E: FeeEstimator,
- F: Deref,
+ F: Filter + Sync + Send,
K: Deref,
L: Logger,
O: Deref,
> Confirm for OutputSweeperSync<B, D, E, F, K, L, O>
where
D::Target: ChangeDestinationSourceSync,
- F::Target: Filter + Sync + Send,
K::Target: KVStoreSync,
O::Target: OutputSpender,
{
@@ -1139,7 +1130,7 @@ impl<
B: BroadcasterInterface,
D: Deref,
E: FeeEstimator,
- F: Deref,
+ F: Filter + Sync + Send,
K: Deref,
L: Logger,
O: Deref,
@@ -1147,7 +1138,6 @@ impl<
for (BestBlock, OutputSweeperSync<B, D, E, F, K, L, O>)
where
D::Target: ChangeDestinationSourceSync,
- F::Target: Filter + Sync + Send,
K::Target: KVStoreSync,
O::Target: OutputSpender,
{
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.