11use crate :: {
2- hex_utils, ChannelId , ChannelManager , Config , Error , KeysManager , NetworkGraph , UserChannelId ,
3- Wallet ,
2+ hex_utils, ChannelId , ChannelManager , Config , Error , NetworkGraph , UserChannelId , Wallet ,
43} ;
54
65use crate :: payment_store:: {
76 PaymentDetails , PaymentDetailsUpdate , PaymentDirection , PaymentStatus , PaymentStore ,
87} ;
98
109use crate :: io:: { KVStore , EVENT_QUEUE_PERSISTENCE_KEY , EVENT_QUEUE_PERSISTENCE_NAMESPACE } ;
11- use crate :: logger:: { log_debug, log_error, log_info, Logger } ;
10+ use crate :: logger:: { log_error, log_info, Logger } ;
11+ use crate :: types:: Sweeper ;
1212
13- use lightning:: chain:: chaininterface:: { BroadcasterInterface , ConfirmationTarget , FeeEstimator } ;
13+ use lightning:: chain:: chaininterface:: ConfirmationTarget ;
1414use lightning:: events:: Event as LdkEvent ;
1515use lightning:: events:: PaymentPurpose ;
1616use lightning:: impl_writeable_tlv_based_enum;
@@ -19,8 +19,8 @@ use lightning::routing::gossip::NodeId;
1919use lightning:: util:: errors:: APIError ;
2020use lightning:: util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
2121
22- use bitcoin:: secp256k1:: { PublicKey , Secp256k1 } ;
23- use bitcoin:: { LockTime , OutPoint , PackedLockTime } ;
22+ use bitcoin:: secp256k1:: PublicKey ;
23+ use bitcoin:: { LockTime , OutPoint } ;
2424use rand:: { thread_rng, Rng } ;
2525use std:: collections:: VecDeque ;
2626use std:: ops:: Deref ;
@@ -227,8 +227,8 @@ where
227227 event_queue : Arc < EventQueue < K , L > > ,
228228 channel_manager : Arc < ChannelManager < K > > ,
229229 network_graph : Arc < NetworkGraph > ,
230- keys_manager : Arc < KeysManager > ,
231230 payment_store : Arc < PaymentStore < K , L > > ,
231+ output_sweeper : Arc < Sweeper < K > > ,
232232 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
233233 logger : L ,
234234 config : Arc < Config > ,
@@ -241,16 +241,16 @@ where
241241 pub fn new (
242242 wallet : Arc < Wallet < bdk:: database:: SqliteDatabase , L > > , event_queue : Arc < EventQueue < K , L > > ,
243243 channel_manager : Arc < ChannelManager < K > > , network_graph : Arc < NetworkGraph > ,
244- keys_manager : Arc < KeysManager > , payment_store : Arc < PaymentStore < K , L > > ,
244+ payment_store : Arc < PaymentStore < K , L > > , output_sweeper : Arc < Sweeper < K > > ,
245245 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > , logger : L , config : Arc < Config > ,
246246 ) -> Self {
247247 Self {
248248 event_queue,
249249 wallet,
250250 channel_manager,
251251 network_graph,
252- keys_manager,
253252 payment_store,
253+ output_sweeper,
254254 logger,
255255 runtime,
256256 config,
@@ -552,40 +552,7 @@ where
552552 } ) ;
553553 }
554554 }
555- LdkEvent :: SpendableOutputs { outputs } => {
556- // TODO: We should eventually remember the outputs and supply them to the wallet's coin selection, once BDK allows us to do so.
557- let destination_address = self . wallet . get_new_address ( ) . unwrap_or_else ( |e| {
558- log_error ! ( self . logger, "Failed to get destination address: {}" , e) ;
559- panic ! ( "Failed to get destination address" ) ;
560- } ) ;
561-
562- let output_descriptors = & outputs. iter ( ) . collect :: < Vec < _ > > ( ) ;
563- let tx_feerate =
564- self . wallet . get_est_sat_per_1000_weight ( ConfirmationTarget :: Normal ) ;
565-
566- // We set nLockTime to the current height to discourage fee sniping.
567- let cur_height = self . channel_manager . current_best_block ( ) . height ( ) ;
568- let locktime: PackedLockTime =
569- LockTime :: from_height ( cur_height) . map_or ( PackedLockTime :: ZERO , |l| l. into ( ) ) ;
570- let res = self . keys_manager . spend_spendable_outputs (
571- output_descriptors,
572- Vec :: new ( ) ,
573- destination_address. script_pubkey ( ) ,
574- tx_feerate,
575- Some ( locktime) ,
576- & Secp256k1 :: new ( ) ,
577- ) ;
578-
579- match res {
580- Ok ( Some ( spending_tx) ) => self . wallet . broadcast_transactions ( & [ & spending_tx] ) ,
581- Ok ( None ) => {
582- log_debug ! ( self . logger, "Omitted spending static outputs: {:?}" , outputs) ;
583- }
584- Err ( err) => {
585- log_error ! ( self . logger, "Error spending outputs: {:?}" , err) ;
586- }
587- }
588- }
555+ LdkEvent :: SpendableOutputs { outputs } => self . output_sweeper . add_outputs ( outputs) ,
589556 LdkEvent :: OpenChannelRequest {
590557 temporary_channel_id,
591558 counterparty_node_id,
0 commit comments