1- use crate :: types:: { Broadcaster , Wallet } ;
2- use crate :: { hex_utils, ChannelManager , Config , Error , KeysManager , NetworkGraph , UserChannelId } ;
1+ use crate :: types:: { Sweeper , Wallet } ;
2+ use crate :: { hex_utils, ChannelManager , Config , Error , NetworkGraph , UserChannelId } ;
33
44use crate :: payment_store:: {
55 PaymentDetails , PaymentDetailsUpdate , PaymentDirection , PaymentStatus , PaymentStore ,
@@ -9,9 +9,9 @@ use crate::io::{
99 EVENT_QUEUE_PERSISTENCE_KEY , EVENT_QUEUE_PERSISTENCE_PRIMARY_NAMESPACE ,
1010 EVENT_QUEUE_PERSISTENCE_SECONDARY_NAMESPACE ,
1111} ;
12- use crate :: logger:: { log_debug , log_error, log_info, Logger } ;
12+ use crate :: logger:: { log_error, log_info, Logger } ;
1313
14- use lightning:: chain:: chaininterface:: { BroadcasterInterface , ConfirmationTarget , FeeEstimator } ;
14+ use lightning:: chain:: chaininterface:: ConfirmationTarget ;
1515use lightning:: events:: Event as LdkEvent ;
1616use lightning:: events:: PaymentPurpose ;
1717use lightning:: impl_writeable_tlv_based_enum;
@@ -21,8 +21,8 @@ use lightning::util::errors::APIError;
2121use lightning:: util:: persist:: KVStore ;
2222use lightning:: util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
2323
24- use bitcoin:: secp256k1:: { PublicKey , Secp256k1 } ;
25- use bitcoin:: { LockTime , OutPoint , PackedLockTime } ;
24+ use bitcoin:: secp256k1:: PublicKey ;
25+ use bitcoin:: { LockTime , OutPoint } ;
2626use rand:: { thread_rng, Rng } ;
2727use std:: collections:: VecDeque ;
2828use std:: ops:: Deref ;
@@ -244,10 +244,9 @@ where
244244 event_queue : Arc < EventQueue < K , L > > ,
245245 wallet : Arc < Wallet > ,
246246 channel_manager : Arc < ChannelManager < K > > ,
247- tx_broadcaster : Arc < Broadcaster > ,
248247 network_graph : Arc < NetworkGraph > ,
249- keys_manager : Arc < KeysManager > ,
250248 payment_store : Arc < PaymentStore < K , L > > ,
249+ output_sweeper : Arc < Sweeper < K > > ,
251250 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
252251 logger : L ,
253252 config : Arc < Config > ,
@@ -259,19 +258,17 @@ where
259258{
260259 pub fn new (
261260 event_queue : Arc < EventQueue < K , L > > , wallet : Arc < Wallet > ,
262- channel_manager : Arc < ChannelManager < K > > , tx_broadcaster : Arc < Broadcaster > ,
263- network_graph : Arc < NetworkGraph > , keys_manager : Arc < KeysManager > ,
264- payment_store : Arc < PaymentStore < K , L > > ,
261+ channel_manager : Arc < ChannelManager < K > > , network_graph : Arc < NetworkGraph > ,
262+ payment_store : Arc < PaymentStore < K , L > > , output_sweeper : Arc < Sweeper < K > > ,
265263 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > , logger : L , config : Arc < Config > ,
266264 ) -> Self {
267265 Self {
268266 event_queue,
269267 wallet,
270268 channel_manager,
271- tx_broadcaster,
272269 network_graph,
273- keys_manager,
274270 payment_store,
271+ output_sweeper,
275272 logger,
276273 runtime,
277274 config,
@@ -576,36 +573,7 @@ where
576573 }
577574 }
578575 LdkEvent :: SpendableOutputs { outputs, channel_id : _ } => {
579- // TODO: We should eventually remember the outputs and supply them to the wallet's coin selection, once BDK allows us to do so.
580- let destination_address = self . wallet . get_new_address ( ) . unwrap_or_else ( |e| {
581- log_error ! ( self . logger, "Failed to get destination address: {}" , e) ;
582- panic ! ( "Failed to get destination address" ) ;
583- } ) ;
584-
585- let output_descriptors = & outputs. iter ( ) . collect :: < Vec < _ > > ( ) ;
586- let tx_feerate = self
587- . wallet
588- . get_est_sat_per_1000_weight ( ConfirmationTarget :: NonAnchorChannelFee ) ;
589-
590- // We set nLockTime to the current height to discourage fee sniping.
591- let cur_height = self . channel_manager . current_best_block ( ) . height ( ) ;
592- let locktime: PackedLockTime =
593- LockTime :: from_height ( cur_height) . map_or ( PackedLockTime :: ZERO , |l| l. into ( ) ) ;
594- let res = self . keys_manager . spend_spendable_outputs (
595- output_descriptors,
596- Vec :: new ( ) ,
597- destination_address. script_pubkey ( ) ,
598- tx_feerate,
599- Some ( locktime) ,
600- & Secp256k1 :: new ( ) ,
601- ) ;
602-
603- match res {
604- Ok ( spending_tx) => self . tx_broadcaster . broadcast_transactions ( & [ & spending_tx] ) ,
605- Err ( err) => {
606- log_error ! ( self . logger, "Error spending outputs: {:?}" , err) ;
607- }
608- }
576+ self . output_sweeper . add_outputs ( outputs)
609577 }
610578 LdkEvent :: OpenChannelRequest {
611579 temporary_channel_id,
0 commit comments