1- use crate :: types:: { Broadcaster , FeeEstimator , 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,11 +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:: {
15- BroadcasterInterface , ConfirmationTarget , FeeEstimator as LDKFeeEstimator ,
16- } ;
14+ use lightning:: chain:: chaininterface:: ConfirmationTarget ;
1715use lightning:: events:: Event as LdkEvent ;
1816use lightning:: events:: PaymentPurpose ;
1917use lightning:: impl_writeable_tlv_based_enum;
@@ -23,8 +21,8 @@ use lightning::util::errors::APIError;
2321use lightning:: util:: persist:: KVStore ;
2422use lightning:: util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
2523
26- use bitcoin:: secp256k1:: { PublicKey , Secp256k1 } ;
27- use bitcoin:: { LockTime , OutPoint , PackedLockTime } ;
24+ use bitcoin:: secp256k1:: PublicKey ;
25+ use bitcoin:: { LockTime , OutPoint } ;
2826use rand:: { thread_rng, Rng } ;
2927use std:: collections:: VecDeque ;
3028use std:: ops:: Deref ;
@@ -246,11 +244,9 @@ where
246244 event_queue : Arc < EventQueue < K , L > > ,
247245 wallet : Arc < Wallet > ,
248246 channel_manager : Arc < ChannelManager < K > > ,
249- tx_broadcaster : Arc < Broadcaster > ,
250- fee_estimator : Arc < FeeEstimator > ,
251247 network_graph : Arc < NetworkGraph > ,
252- keys_manager : Arc < KeysManager > ,
253248 payment_store : Arc < PaymentStore < K , L > > ,
249+ output_sweeper : Arc < Sweeper < K > > ,
254250 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
255251 logger : L ,
256252 config : Arc < Config > ,
@@ -262,20 +258,17 @@ where
262258{
263259 pub fn new (
264260 event_queue : Arc < EventQueue < K , L > > , wallet : Arc < Wallet > ,
265- channel_manager : Arc < ChannelManager < K > > , tx_broadcaster : Arc < Broadcaster > ,
266- fee_estimator : Arc < FeeEstimator > , network_graph : Arc < NetworkGraph > ,
267- 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 > > ,
268263 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > , logger : L , config : Arc < Config > ,
269264 ) -> Self {
270265 Self {
271266 event_queue,
272267 wallet,
273268 channel_manager,
274- tx_broadcaster,
275- fee_estimator,
276269 network_graph,
277- keys_manager,
278270 payment_store,
271+ output_sweeper,
279272 logger,
280273 runtime,
281274 config,
@@ -580,36 +573,7 @@ where
580573 }
581574 }
582575 LdkEvent :: SpendableOutputs { outputs, channel_id : _ } => {
583- // TODO: We should eventually remember the outputs and supply them to the wallet's coin selection, once BDK allows us to do so.
584- let destination_address = self . wallet . get_new_address ( ) . unwrap_or_else ( |e| {
585- log_error ! ( self . logger, "Failed to get destination address: {}" , e) ;
586- panic ! ( "Failed to get destination address" ) ;
587- } ) ;
588-
589- let output_descriptors = & outputs. iter ( ) . collect :: < Vec < _ > > ( ) ;
590- let tx_feerate = self
591- . fee_estimator
592- . get_est_sat_per_1000_weight ( ConfirmationTarget :: NonAnchorChannelFee ) ;
593-
594- // We set nLockTime to the current height to discourage fee sniping.
595- let cur_height = self . channel_manager . current_best_block ( ) . height ( ) ;
596- let locktime: PackedLockTime =
597- LockTime :: from_height ( cur_height) . map_or ( PackedLockTime :: ZERO , |l| l. into ( ) ) ;
598- let res = self . keys_manager . spend_spendable_outputs (
599- output_descriptors,
600- Vec :: new ( ) ,
601- destination_address. script_pubkey ( ) ,
602- tx_feerate,
603- Some ( locktime) ,
604- & Secp256k1 :: new ( ) ,
605- ) ;
606-
607- match res {
608- Ok ( spending_tx) => self . tx_broadcaster . broadcast_transactions ( & [ & spending_tx] ) ,
609- Err ( err) => {
610- log_error ! ( self . logger, "Error spending outputs: {:?}" , err) ;
611- }
612- }
576+ self . output_sweeper . add_outputs ( outputs)
613577 }
614578 LdkEvent :: OpenChannelRequest {
615579 temporary_channel_id,
0 commit comments