Skip to content

Commit 512eaa6

Browse files
committed
complete sync wrapper
1 parent 49c5993 commit 512eaa6

File tree

3 files changed

+64
-22
lines changed

3 files changed

+64
-22
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ use lightning::onion_message::messenger::AOnionMessenger;
3636
use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
3737
use lightning::routing::scoring::{ScoreUpdate, WriteableScore};
3838
use lightning::routing::utxo::UtxoLookup;
39-
use lightning::sign::{ChangeDestinationSource, OutputSpender};
39+
use lightning::sign::{ChangeDestinationSource, ChangeDestinationSourceSync, OutputSpender};
4040
use lightning::util::logger::Logger;
4141
use lightning::util::persist::{KVStore, Persister};
42-
use lightning::util::sweep::OutputSweeper;
42+
use lightning::util::sweep::{OutputSweeper, OutputSweeperSync};
4343
#[cfg(feature = "std")]
4444
use lightning::util::wakers::Sleeper;
4545
use lightning_rapid_gossip_sync::RapidGossipSync;
@@ -946,16 +946,17 @@ impl BackgroundProcessor {
946946
PM: 'static + Deref + Send + Sync,
947947
S: 'static + Deref<Target = SC> + Send + Sync,
948948
SC: for<'b> WriteableScore<'b>,
949-
D: 'static + Deref + Send + Sync,
949+
D: Deref,
950950
O: 'static + Deref + Send + Sync,
951951
K: 'static + Deref + Send + Sync,
952-
OS: 'static + Deref<Target = OutputSweeper<T, D, F, CF, K, L, O>> + Send + Sync,
952+
OS: 'static + Deref<Target = OutputSweeperSync<T, D, F, CF, K, L, O>> + Send + Sync,
953953
>(
954954
persister: PS, event_handler: EH, chain_monitor: M, channel_manager: CM,
955955
onion_messenger: Option<OM>, gossip_sync: GossipSync<PGS, RGS, G, UL, L>, peer_manager: PM,
956956
sweeper: OS, logger: L, scorer: Option<S>,
957957
) -> Self
958958
where
959+
D::Target: ChangeDestinationSourceSync,
959960
UL::Target: 'static + UtxoLookup,
960961
CF::Target: 'static + chain::Filter + Sync + Send,
961962
T::Target: 'static + BroadcasterInterface,
@@ -967,7 +968,6 @@ impl BackgroundProcessor {
967968
OM::Target: AOnionMessenger + Send + Sync,
968969
PM::Target: APeerManager + Send + Sync,
969970
O::Target: 'static + OutputSpender + Send + Sync,
970-
D::Target: 'static + ChangeDestinationSource + Send + Sync,
971971
K::Target: 'static + KVStore + Send + Sync,
972972
{
973973
let stop_thread = Arc::new(AtomicBool::new(false));
@@ -1117,7 +1117,7 @@ mod tests {
11171117
use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
11181118
use lightning::routing::router::{CandidateRouteHop, DefaultRouter, Path, RouteHop};
11191119
use lightning::routing::scoring::{ChannelUsage, LockableScore, ScoreLookUp, ScoreUpdate};
1120-
use lightning::sign::{AsyncGetChangeDestinationScriptResult, ChangeDestinationSource, InMemorySigner, KeysManager};
1120+
use lightning::sign::{AsyncGetChangeDestinationScriptResult, ChangeDestinationSource, ChangeDestinationSourceSync, InMemorySigner, KeysManager};
11211121
use lightning::types::features::{ChannelFeatures, NodeFeatures};
11221122
use lightning::types::payment::PaymentHash;
11231123
use lightning::util::config::UserConfig;
@@ -1129,7 +1129,7 @@ mod tests {
11291129
SCORER_PERSISTENCE_SECONDARY_NAMESPACE,
11301130
};
11311131
use lightning::util::ser::Writeable;
1132-
use lightning::util::sweep::{OutputSpendStatus, OutputSweeper, PRUNE_DELAY_BLOCKS};
1132+
use lightning::util::sweep::{OutputSpendStatus, OutputSweeper, OutputSweeperSync, PRUNE_DELAY_BLOCKS};
11331133
use lightning::util::test_utils;
11341134
use lightning::{get_event, get_event_msg};
11351135
use lightning_persister::fs_store::FilesystemStore;
@@ -1250,7 +1250,7 @@ mod tests {
12501250
best_block: BestBlock,
12511251
scorer: Arc<LockingWrapper<TestScorer>>,
12521252
sweeper: Arc<
1253-
OutputSweeper<
1253+
OutputSweeperSync<
12541254
Arc<test_utils::TestBroadcaster>,
12551255
Arc<TestWallet>,
12561256
Arc<test_utils::TestFeeEstimator>,
@@ -1551,11 +1551,9 @@ mod tests {
15511551

15521552
struct TestWallet {}
15531553

1554-
impl ChangeDestinationSource for TestWallet {
1555-
fn get_change_destination_script<'a>(&self) -> AsyncGetChangeDestinationScriptResult<'a, ScriptBuf> {
1556-
Box::pin(async move {
1557-
Ok(ScriptBuf::new())
1558-
})
1554+
impl ChangeDestinationSourceSync for TestWallet {
1555+
fn get_change_destination_script(&self) -> Result<ScriptBuf, ()> {
1556+
Ok(ScriptBuf::new())
15591557
}
15601558
}
15611559

@@ -1632,7 +1630,7 @@ mod tests {
16321630
IgnoringMessageHandler {},
16331631
));
16341632
let wallet = Arc::new(TestWallet {});
1635-
let sweeper = Arc::new(OutputSweeper::new(
1633+
let sweeper = Arc::new(OutputSweeperSync::new(
16361634
best_block,
16371635
Arc::clone(&tx_broadcaster),
16381636
Arc::clone(&fee_estimator),

lightning/src/sign/mod.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,16 +1006,15 @@ pub trait ChangeDestinationSourceSync {
10061006
}
10071007

10081008
/// A wrapper around [`ChangeDestinationSource`] to allow for async calls.
1009-
pub struct ChangeDestinationSourceSyncWrapper<T>(T) where T: ChangeDestinationSourceSync;
1009+
pub struct ChangeDestinationSourceSyncWrapper<T: Deref>(T) where T::Target:ChangeDestinationSourceSync;
10101010

1011-
impl<T: ChangeDestinationSourceSync> ChangeDestinationSourceSyncWrapper<T> {
1011+
impl<T: Deref> ChangeDestinationSourceSyncWrapper<T> where T::Target:ChangeDestinationSourceSync {
10121012
/// Creates a new [`ChangeDestinationSourceSyncWrapper`].
10131013
pub fn new(source: T) -> Self {
10141014
Self(source)
10151015
}
10161016
}
1017-
1018-
impl<T: ChangeDestinationSourceSync> ChangeDestinationSource for ChangeDestinationSourceSyncWrapper<T> {
1017+
impl<T: Deref> ChangeDestinationSource for ChangeDestinationSourceSyncWrapper<T> where T::Target:ChangeDestinationSourceSync{
10191018
fn get_change_destination_script<'a>(&self) -> AsyncGetChangeDestinationScriptResult<'a, ScriptBuf> {
10201019
let script = self.0.get_change_destination_script();
10211020
Box::pin(async move { script })

lightning/src/util/sweep.rs

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -357,10 +357,11 @@ where
357357
logger: L,
358358
}
359359

360-
/// XXX
361-
pub struct OutputSweeperSync<B: Deref, D: ChangeDestinationSourceSync, E: Deref, F: Deref, K: Deref, L: Deref, O: Deref>
360+
/// A synchronous wrapper around [`OutputSweeper`] to be used in contexts where async is not available.
361+
pub struct OutputSweeperSync<B: Deref, D: Deref, E: Deref, F: Deref, K: Deref, L: Deref, O: Deref>
362362
where
363363
B::Target: BroadcasterInterface,
364+
D::Target: ChangeDestinationSourceSync,
364365
E::Target: FeeEstimator,
365366
F::Target: Filter + Sync + Send,
366367
K::Target: KVStore,
@@ -370,17 +371,19 @@ where
370371
sweeper: OutputSweeper<B, Arc<ChangeDestinationSourceSyncWrapper<D>>, E, F, K, L, O>,
371372
}
372373

373-
impl<B: Deref, D: ChangeDestinationSourceSync, E: Deref, F: Deref, K: Deref, L: Deref, O: Deref>
374+
impl<B: Deref, D: Deref, E: Deref, F: Deref, K: Deref, L: Deref, O: Deref>
374375
OutputSweeperSync<B, D, E, F, K, L, O>
375376
where
376377
B::Target: BroadcasterInterface,
378+
D::Target: ChangeDestinationSourceSync,
377379
E::Target: FeeEstimator,
378380
F::Target: Filter + Sync + Send,
379381
K::Target: KVStore,
380382
L::Target: Logger,
381383
O::Target: OutputSpender,
382384
{
383-
fn new(
385+
/// Constructs a new [`OutputSweeperSync`] instance.
386+
pub fn new(
384387
best_block: BestBlock, broadcaster: B, fee_estimator: E, chain_data_source: Option<F>,
385388
output_spender: O, change_destination_source: D, kv_store: K, logger: L,
386389
) -> Self {
@@ -408,6 +411,48 @@ where
408411
},
409412
}
410413
}
414+
415+
pub fn track_spendable_outputs(
416+
&self, output_descriptors: Vec<SpendableOutputDescriptor>, channel_id: Option<ChannelId>,
417+
exclude_static_outputs: bool, delay_until_height: Option<u32>,
418+
) -> Result<(), ()> {
419+
self.sweeper.track_spendable_outputs(
420+
output_descriptors, channel_id, exclude_static_outputs, delay_until_height,
421+
)
422+
}
423+
424+
pub fn tracked_spendable_outputs(&self) -> Vec<TrackedSpendableOutput> {
425+
self.sweeper.tracked_spendable_outputs()
426+
}
427+
}
428+
429+
impl<B: Deref, D: Deref, E: Deref, F: Deref, K: Deref, L: Deref, O: Deref> Confirm for OutputSweeperSync<B, D, E, F, K, L, O>
430+
where
431+
B::Target: BroadcasterInterface,
432+
D::Target: ChangeDestinationSourceSync,
433+
E::Target: FeeEstimator,
434+
F::Target: Filter + Sync + Send,
435+
K::Target: KVStore,
436+
L::Target: Logger,
437+
O::Target: OutputSpender,
438+
{
439+
fn transactions_confirmed(
440+
&self, header: &Header, txdata: &chain::transaction::TransactionData, height: u32,
441+
) {
442+
self.sweeper.transactions_confirmed(header, txdata, height)
443+
}
444+
445+
fn transaction_unconfirmed(&self, txid: &Txid) {
446+
self.sweeper.transaction_unconfirmed(txid)
447+
}
448+
449+
fn best_block_updated(&self, header: &Header, height: u32) {
450+
self.sweeper.best_block_updated(header, height);
451+
}
452+
453+
fn get_relevant_txids(&self) -> Vec<(Txid, u32, Option<BlockHash>)> {
454+
self.sweeper.get_relevant_txids()
455+
}
411456
}
412457

413458
impl<B: Deref, D: Deref, E: Deref, F: Deref, K: Deref, L: Deref, O: Deref>

0 commit comments

Comments
 (0)