1- use crate :: types:: { Broadcaster , Estimator , 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,11 +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 > ,
248- fee_estimator : Arc < Estimator > ,
249247 network_graph : Arc < NetworkGraph > ,
250- keys_manager : Arc < KeysManager > ,
251248 payment_store : Arc < PaymentStore < K , L > > ,
249+ output_sweeper : Arc < Sweeper < K > > ,
252250 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
253251 logger : L ,
254252 config : Arc < Config > ,
@@ -260,20 +258,17 @@ where
260258{
261259 pub fn new (
262260 event_queue : Arc < EventQueue < K , L > > , wallet : Arc < Wallet > ,
263- channel_manager : Arc < ChannelManager < K > > , tx_broadcaster : Arc < Broadcaster > ,
264- fee_estimator : Arc < Estimator > , network_graph : Arc < NetworkGraph > ,
265- keys_manager : Arc < KeysManager > , 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 > > ,
266263 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > , logger : L , config : Arc < Config > ,
267264 ) -> Self {
268265 Self {
269266 event_queue,
270267 wallet,
271268 channel_manager,
272- tx_broadcaster,
273- fee_estimator,
274269 network_graph,
275- keys_manager,
276270 payment_store,
271+ output_sweeper,
277272 logger,
278273 runtime,
279274 config,
@@ -578,36 +573,7 @@ where
578573 }
579574 }
580575 LdkEvent :: SpendableOutputs { outputs, channel_id : _ } => {
581- // TODO: We should eventually remember the outputs and supply them to the wallet's coin selection, once BDK allows us to do so.
582- let destination_address = self . wallet . get_new_address ( ) . unwrap_or_else ( |e| {
583- log_error ! ( self . logger, "Failed to get destination address: {}" , e) ;
584- panic ! ( "Failed to get destination address" ) ;
585- } ) ;
586-
587- let output_descriptors = & outputs. iter ( ) . collect :: < Vec < _ > > ( ) ;
588- let tx_feerate = self
589- . fee_estimator
590- . get_est_sat_per_1000_weight ( ConfirmationTarget :: NonAnchorChannelFee ) ;
591-
592- // We set nLockTime to the current height to discourage fee sniping.
593- let cur_height = self . channel_manager . current_best_block ( ) . height ( ) ;
594- let locktime: PackedLockTime =
595- LockTime :: from_height ( cur_height) . map_or ( PackedLockTime :: ZERO , |l| l. into ( ) ) ;
596- let res = self . keys_manager . spend_spendable_outputs (
597- output_descriptors,
598- Vec :: new ( ) ,
599- destination_address. script_pubkey ( ) ,
600- tx_feerate,
601- Some ( locktime) ,
602- & Secp256k1 :: new ( ) ,
603- ) ;
604-
605- match res {
606- Ok ( spending_tx) => self . tx_broadcaster . broadcast_transactions ( & [ & spending_tx] ) ,
607- Err ( err) => {
608- log_error ! ( self . logger, "Error spending outputs: {:?}" , err) ;
609- }
610- }
576+ self . output_sweeper . add_outputs ( outputs)
611577 }
612578 LdkEvent :: OpenChannelRequest {
613579 temporary_channel_id,
0 commit comments