Skip to content

Commit 6c5dbbe

Browse files
committed
make async
1 parent ac3d697 commit 6c5dbbe

File tree

3 files changed

+39
-15
lines changed

3 files changed

+39
-15
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ macro_rules! define_run_body {
313313
$channel_manager: ident, $process_channel_manager_events: expr,
314314
$onion_messenger: ident, $process_onion_message_handler_events: expr,
315315
$peer_manager: ident, $gossip_sync: ident,
316-
$sweeper: ident,
316+
$sweeper: expr,
317317
$logger: ident, $scorer: ident, $loop_exit_check: expr, $await: expr, $get_timer: expr,
318318
$timer_elapsed: expr, $check_slow_await: expr, $time_fetch: expr,
319319
) => { {
@@ -473,7 +473,7 @@ macro_rules! define_run_body {
473473

474474
if $timer_elapsed(&mut last_sweeper_call, SWEEPER_TIMER) {
475475
log_trace!($logger, "Regenerate sweeper spends if necessary");
476-
let _ = $sweeper.regenerate_and_broadcast_spend_if_necessary_locked();
476+
let _ = $sweeper;
477477
last_sweeper_call = $get_timer(SWEEPER_TIMER);
478478
}
479479
}
@@ -757,6 +757,10 @@ pub async fn process_events_async<
757757
+ Sync,
758758
CM: 'static + Deref + Send + Sync,
759759
OM: 'static + Deref + Send + Sync,
760+
D: 'static + Deref + Send + Sync,
761+
O: 'static + Deref + Send + Sync,
762+
K: 'static + Deref + Send + Sync,
763+
OS: 'static + Deref<Target = OutputSweeper<T, D, F, CF, K, L, O>> + Send + Sync,
760764
PGS: 'static + Deref<Target = P2PGossipSync<G, UL, L>> + Send + Sync,
761765
RGS: 'static + Deref<Target = RapidGossipSync<G, L>> + Send,
762766
PM: 'static + Deref + Send + Sync,
@@ -768,12 +772,13 @@ pub async fn process_events_async<
768772
>(
769773
persister: PS, event_handler: EventHandler, chain_monitor: M, channel_manager: CM,
770774
onion_messenger: Option<OM>, gossip_sync: GossipSync<PGS, RGS, G, UL, L>, peer_manager: PM,
775+
sweeper: OS,
771776
logger: L, scorer: Option<S>, sleeper: Sleeper, mobile_interruptable_platform: bool,
772777
fetch_time: FetchTime,
773778
) -> Result<(), lightning::io::Error>
774779
where
775780
UL::Target: 'static + UtxoLookup,
776-
CF::Target: 'static + chain::Filter,
781+
CF::Target: 'static + chain::Filter + Sync + Send,
777782
T::Target: 'static + BroadcasterInterface,
778783
F::Target: 'static + FeeEstimator,
779784
L::Target: 'static + Logger,
@@ -782,6 +787,9 @@ where
782787
CM::Target: AChannelManager + Send + Sync,
783788
OM::Target: AOnionMessenger + Send + Sync,
784789
PM::Target: APeerManager + Send + Sync,
790+
O::Target: 'static + OutputSpender + Send + Sync,
791+
D::Target: 'static + ChangeDestinationSource + Send + Sync,
792+
K::Target: 'static + KVStore + Send + Sync,
785793
{
786794
let mut should_break = false;
787795
let async_event_handler = |event| {
@@ -825,6 +833,7 @@ where
825833
},
826834
peer_manager,
827835
gossip_sync,
836+
sweeper.regenerate_and_broadcast_spend_if_necessary_locked().await,
828837
logger,
829838
scorer,
830839
should_break,
@@ -1109,7 +1118,7 @@ mod tests {
11091118
use lightning::routing::router::{CandidateRouteHop, DefaultRouter, Path, RouteHop};
11101119
use lightning::routing::scoring::{ChannelUsage, LockableScore, ScoreLookUp, ScoreUpdate};
11111120
use lightning::routing::utxo::UtxoLookup;
1112-
use lightning::sign::{ChangeDestinationSource, InMemorySigner, KeysManager};
1121+
use lightning::sign::{AsyncGetChangeDestinationScriptResult, ChangeDestinationSource, InMemorySigner, KeysManager};
11131122
use lightning::types::features::{ChannelFeatures, NodeFeatures};
11141123
use lightning::types::payment::PaymentHash;
11151124
use lightning::util::config::UserConfig;
@@ -1544,8 +1553,10 @@ mod tests {
15441553
struct TestWallet {}
15451554

15461555
impl ChangeDestinationSource for TestWallet {
1547-
fn get_change_destination_script(&self) -> Result<ScriptBuf, ()> {
1548-
Ok(ScriptBuf::new())
1556+
fn get_change_destination_script<'a>(&self) -> AsyncGetChangeDestinationScriptResult<'a, ScriptBuf> {
1557+
Box::pin(async move {
1558+
Ok(ScriptBuf::new())
1559+
})
15491560
}
15501561
}
15511562

@@ -2027,6 +2038,7 @@ mod tests {
20272038
Some(nodes[0].messenger.clone()),
20282039
nodes[0].rapid_gossip_sync(),
20292040
nodes[0].peer_manager.clone(),
2041+
nodes[0].sweeper.clone(),
20302042
nodes[0].logger.clone(),
20312043
Some(nodes[0].scorer.clone()),
20322044
move |dur: Duration| {
@@ -2514,6 +2526,7 @@ mod tests {
25142526
Some(nodes[0].messenger.clone()),
25152527
nodes[0].rapid_gossip_sync(),
25162528
nodes[0].peer_manager.clone(),
2529+
nodes[0].sweeper.clone(),
25172530
nodes[0].logger.clone(),
25182531
Some(nodes[0].scorer.clone()),
25192532
move |dur: Duration| {
@@ -2727,6 +2740,7 @@ mod tests {
27272740
Some(nodes[0].messenger.clone()),
27282741
nodes[0].no_gossip_sync(),
27292742
nodes[0].peer_manager.clone(),
2743+
nodes[0].sweeper.clone(),
27302744
nodes[0].logger.clone(),
27312745
Some(nodes[0].scorer.clone()),
27322746
move |dur: Duration| {

lightning/src/sign/mod.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ use crate::sign::ecdsa::EcdsaChannelSigner;
6767
use crate::sign::taproot::TaprootChannelSigner;
6868
use crate::util::atomic_counter::AtomicCounter;
6969
use core::convert::TryInto;
70+
use core::future::Future;
71+
use core::pin::Pin;
7072
use core::sync::atomic::{AtomicUsize, Ordering};
7173
#[cfg(taproot)]
7274
use musig2::types::{PartialSignature, PublicNonce};
@@ -975,6 +977,14 @@ pub trait SignerProvider {
975977
fn get_shutdown_scriptpubkey(&self) -> Result<ShutdownScript, ()>;
976978
}
977979

980+
981+
/// Result type for `BlockSource` requests.
982+
pub type GetChangeDestinationScriptResult<T> = Result<T, ()>;
983+
984+
/// A type alias for a future that returns a [`GetChangeDestinationScriptResult`].
985+
pub type AsyncGetChangeDestinationScriptResult<'a, T> =
986+
Pin<Box<dyn Future<Output = GetChangeDestinationScriptResult<T>> + 'a + Send>>;
987+
978988
/// A helper trait that describes an on-chain wallet capable of returning a (change) destination
979989
/// script.
980990
pub trait ChangeDestinationSource {
@@ -983,7 +993,7 @@ pub trait ChangeDestinationSource {
983993
///
984994
/// This method should return a different value each time it is called, to avoid linking
985995
/// on-chain funds controlled to the same user.
986-
fn get_change_destination_script(&self) -> Result<ScriptBuf, ()>;
996+
fn get_change_destination_script<'a>(&self) -> AsyncGetChangeDestinationScriptResult<'a, ScriptBuf>;
987997
}
988998

989999
mod sealed {

lightning/src/util/sweep.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -450,15 +450,15 @@ where
450450
}
451451

452452
/// Regenerates and broadcasts the spending transaction for any outputs that are pending
453-
pub fn regenerate_and_broadcast_spend_if_necessary_locked(&self) -> Result<(), ()> {
453+
pub async fn regenerate_and_broadcast_spend_if_necessary_locked(&self) -> Result<(), ()> {
454454
let mut sweeper_state = self.sweeper_state.lock().unwrap();
455-
self.regenerate_and_broadcast_spend_if_necessary(&mut *sweeper_state)
455+
self.regenerate_and_broadcast_spend_if_necessary(&mut *sweeper_state).await
456456
}
457457

458-
fn regenerate_and_broadcast_spend_if_necessary(
458+
async fn regenerate_and_broadcast_spend_if_necessary(
459459
&self, sweeper_state: &mut SweeperState,
460460
) -> Result<(), ()> {
461-
let spending_tx_opt = self.regenerate_spend_if_necessary(sweeper_state);
461+
let spending_tx_opt = self.regenerate_spend_if_necessary(sweeper_state).await;
462462
if let Some(spending_tx) = spending_tx_opt {
463463
self.persist_state(&*sweeper_state).map_err(|e| {
464464
log_error!(self.logger, "Error persisting OutputSweeper: {:?}", e);
@@ -470,7 +470,7 @@ where
470470
Ok(())
471471
}
472472

473-
fn regenerate_spend_if_necessary(
473+
async fn regenerate_spend_if_necessary(
474474
&self, sweeper_state: &mut SweeperState,
475475
) -> Option<Transaction> {
476476
let cur_height = sweeper_state.best_block.height;
@@ -502,7 +502,7 @@ where
502502
return None;
503503
}
504504

505-
let spending_tx = match self.spend_outputs(&*sweeper_state, respend_descriptors) {
505+
let spending_tx = match self.spend_outputs(&*sweeper_state, respend_descriptors).await {
506506
Ok(spending_tx) => {
507507
log_debug!(
508508
self.logger,
@@ -573,13 +573,13 @@ where
573573
})
574574
}
575575

576-
fn spend_outputs(
576+
async fn spend_outputs(
577577
&self, sweeper_state: &SweeperState, descriptors: Vec<&SpendableOutputDescriptor>,
578578
) -> Result<Transaction, ()> {
579579
let tx_feerate =
580580
self.fee_estimator.get_est_sat_per_1000_weight(ConfirmationTarget::OutputSpendingFee);
581581
let change_destination_script =
582-
self.change_destination_source.get_change_destination_script()?;
582+
self.change_destination_source.get_change_destination_script().await?;
583583
let cur_height = sweeper_state.best_block.height;
584584
let locktime = Some(LockTime::from_height(cur_height).unwrap_or(LockTime::ZERO));
585585
self.output_spender.spend_spendable_outputs(

0 commit comments

Comments
 (0)