Skip to content

Commit 644ca0c

Browse files
Drop Deref indirection for OutputSpender
Reduces generics and verbosity across the codebase, should provide equivalent behavior. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent f60a33f commit 644ca0c

3 files changed

Lines changed: 30 additions & 26 deletions

File tree

lightning-background-processor/src/lib.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -946,7 +946,7 @@ pub async fn process_events_async<
946946
PM: Deref,
947947
LM: Deref,
948948
D: Deref,
949-
O: Deref,
949+
O: OutputSpender,
950950
K: KVStore,
951951
OS: Deref<Target = OutputSweeper<T, D, F, CF, K, L, O>>,
952952
S: Deref<Target = SC>,
@@ -967,7 +967,6 @@ where
967967
OM::Target: AOnionMessenger,
968968
PM::Target: APeerManager,
969969
LM::Target: ALiquidityManager,
970-
O::Target: OutputSpender,
971970
D::Target: ChangeDestinationSource,
972971
{
973972
let async_event_handler = |event| {
@@ -1441,7 +1440,7 @@ pub async fn process_events_async_with_kv_store_sync<
14411440
PM: Deref,
14421441
LM: Deref,
14431442
D: Deref,
1444-
O: Deref,
1443+
O: OutputSpender,
14451444
K: Deref,
14461445
OS: Deref<Target = OutputSweeperSync<T, D, F, CF, K, L, O>>,
14471446
S: Deref<Target = SC>,
@@ -1462,7 +1461,6 @@ where
14621461
OM::Target: AOnionMessenger,
14631462
PM::Target: APeerManager,
14641463
LM::Target: ALiquidityManager,
1465-
O::Target: OutputSpender,
14661464
D::Target: ChangeDestinationSourceSync,
14671465
K::Target: KVStoreSync,
14681466
{
@@ -1556,7 +1554,7 @@ impl BackgroundProcessor {
15561554
S: 'static + Deref<Target = SC> + Send + Sync,
15571555
SC: for<'b> WriteableScore<'b>,
15581556
D: 'static + Deref,
1559-
O: 'static + Deref,
1557+
O: 'static + OutputSpender,
15601558
K: 'static + Deref + Send,
15611559
OS: 'static + Deref<Target = OutputSweeperSync<T, D, F, CF, K, L, O>> + Send,
15621560
>(
@@ -1573,7 +1571,6 @@ impl BackgroundProcessor {
15731571
PM::Target: APeerManager,
15741572
LM::Target: ALiquidityManagerSync,
15751573
D::Target: ChangeDestinationSourceSync,
1576-
O::Target: 'static + OutputSpender,
15771574
K::Target: 'static + KVStoreSync,
15781575
{
15791576
let stop_thread = Arc::new(AtomicBool::new(false));

lightning/src/sign/mod.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,6 +1063,23 @@ pub trait OutputSpender {
10631063
) -> Result<Transaction, ()>;
10641064
}
10651065

1066+
impl<T: OutputSpender + ?Sized, O: Deref<Target = T>> OutputSpender for O {
1067+
fn spend_spendable_outputs(
1068+
&self, descriptors: &[&SpendableOutputDescriptor], outputs: Vec<TxOut>,
1069+
change_destination_script: ScriptBuf, feerate_sat_per_1000_weight: u32,
1070+
locktime: Option<LockTime>, secp_ctx: &Secp256k1<All>,
1071+
) -> Result<Transaction, ()> {
1072+
self.deref().spend_spendable_outputs(
1073+
descriptors,
1074+
outputs,
1075+
change_destination_script,
1076+
feerate_sat_per_1000_weight,
1077+
locktime,
1078+
secp_ctx,
1079+
)
1080+
}
1081+
}
1082+
10661083
// Primarily needed in doctests because of https://github.com/rust-lang/rust/issues/67295
10671084
/// A dynamic [`SignerProvider`] temporarily needed for doc tests.
10681085
///

lightning/src/util/sweep.rs

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -344,10 +344,9 @@ pub struct OutputSweeper<
344344
F: Filter,
345345
K: KVStore,
346346
L: Logger,
347-
O: Deref,
347+
O: OutputSpender,
348348
> where
349349
D::Target: ChangeDestinationSource,
350-
O::Target: OutputSpender,
351350
{
352351
sweeper_state: Mutex<SweeperState>,
353352
pending_sweep: AtomicBool,
@@ -367,11 +366,10 @@ impl<
367366
F: Filter,
368367
K: KVStore,
369368
L: Logger,
370-
O: Deref,
369+
O: OutputSpender,
371370
> OutputSweeper<B, D, E, F, K, L, O>
372371
where
373372
D::Target: ChangeDestinationSource,
374-
O::Target: OutputSpender,
375373
{
376374
/// Constructs a new [`OutputSweeper`].
377375
///
@@ -721,11 +719,10 @@ impl<
721719
F: Filter + Sync + Send,
722720
K: KVStore,
723721
L: Logger,
724-
O: Deref,
722+
O: OutputSpender,
725723
> Listen for OutputSweeper<B, D, E, F, K, L, O>
726724
where
727725
D::Target: ChangeDestinationSource,
728-
O::Target: OutputSpender,
729726
{
730727
fn filtered_block_connected(
731728
&self, header: &Header, txdata: &chain::transaction::TransactionData, height: u32,
@@ -764,11 +761,10 @@ impl<
764761
F: Filter + Sync + Send,
765762
K: KVStore,
766763
L: Logger,
767-
O: Deref,
764+
O: OutputSpender,
768765
> Confirm for OutputSweeper<B, D, E, F, K, L, O>
769766
where
770767
D::Target: ChangeDestinationSource,
771-
O::Target: OutputSpender,
772768
{
773769
fn transactions_confirmed(
774770
&self, header: &Header, txdata: &chain::transaction::TransactionData, height: u32,
@@ -863,11 +859,10 @@ impl<
863859
F: Filter + Sync + Send,
864860
K: KVStore,
865861
L: Logger,
866-
O: Deref,
862+
O: OutputSpender,
867863
> ReadableArgs<(B, E, Option<F>, O, D, K, L)> for (BestBlock, OutputSweeper<B, D, E, F, K, L, O>)
868864
where
869865
D::Target: ChangeDestinationSource,
870-
O::Target: OutputSpender,
871866
{
872867
#[inline]
873868
fn read<R: io::Read>(
@@ -935,11 +930,10 @@ pub struct OutputSweeperSync<
935930
F: Filter,
936931
K: Deref,
937932
L: Logger,
938-
O: Deref,
933+
O: OutputSpender,
939934
> where
940935
D::Target: ChangeDestinationSourceSync,
941936
K::Target: KVStoreSync,
942-
O::Target: OutputSpender,
943937
{
944938
sweeper:
945939
OutputSweeper<B, ChangeDestinationSourceSyncWrapper<D>, E, F, KVStoreSyncWrapper<K>, L, O>,
@@ -952,12 +946,11 @@ impl<
952946
F: Filter,
953947
K: Deref,
954948
L: Logger,
955-
O: Deref,
949+
O: OutputSpender,
956950
> OutputSweeperSync<B, D, E, F, K, L, O>
957951
where
958952
D::Target: ChangeDestinationSourceSync,
959953
K::Target: KVStoreSync,
960-
O::Target: OutputSpender,
961954
{
962955
/// Constructs a new [`OutputSweeperSync`] instance.
963956
///
@@ -1075,12 +1068,11 @@ impl<
10751068
F: Filter + Sync + Send,
10761069
K: Deref,
10771070
L: Logger,
1078-
O: Deref,
1071+
O: OutputSpender,
10791072
> Listen for OutputSweeperSync<B, D, E, F, K, L, O>
10801073
where
10811074
D::Target: ChangeDestinationSourceSync,
10821075
K::Target: KVStoreSync,
1083-
O::Target: OutputSpender,
10841076
{
10851077
fn filtered_block_connected(
10861078
&self, header: &Header, txdata: &chain::transaction::TransactionData, height: u32,
@@ -1100,12 +1092,11 @@ impl<
11001092
F: Filter + Sync + Send,
11011093
K: Deref,
11021094
L: Logger,
1103-
O: Deref,
1095+
O: OutputSpender,
11041096
> Confirm for OutputSweeperSync<B, D, E, F, K, L, O>
11051097
where
11061098
D::Target: ChangeDestinationSourceSync,
11071099
K::Target: KVStoreSync,
1108-
O::Target: OutputSpender,
11091100
{
11101101
fn transactions_confirmed(
11111102
&self, header: &Header, txdata: &chain::transaction::TransactionData, height: u32,
@@ -1133,13 +1124,12 @@ impl<
11331124
F: Filter + Sync + Send,
11341125
K: Deref,
11351126
L: Logger,
1136-
O: Deref,
1127+
O: OutputSpender,
11371128
> ReadableArgs<(B, E, Option<F>, O, D, K, L)>
11381129
for (BestBlock, OutputSweeperSync<B, D, E, F, K, L, O>)
11391130
where
11401131
D::Target: ChangeDestinationSourceSync,
11411132
K::Target: KVStoreSync,
1142-
O::Target: OutputSpender,
11431133
{
11441134
#[inline]
11451135
fn read<R: io::Read>(

0 commit comments

Comments
 (0)