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 } ;
3
3
4
4
use crate :: payment_store:: {
5
5
PaymentDetails , PaymentDetailsUpdate , PaymentDirection , PaymentStatus , PaymentStore ,
@@ -9,11 +9,9 @@ use crate::io::{
9
9
EVENT_QUEUE_PERSISTENCE_KEY , EVENT_QUEUE_PERSISTENCE_PRIMARY_NAMESPACE ,
10
10
EVENT_QUEUE_PERSISTENCE_SECONDARY_NAMESPACE ,
11
11
} ;
12
- use crate :: logger:: { log_debug , log_error, log_info, Logger } ;
12
+ use crate :: logger:: { log_error, log_info, Logger } ;
13
13
14
- use lightning:: chain:: chaininterface:: {
15
- BroadcasterInterface , ConfirmationTarget , FeeEstimator as LDKFeeEstimator ,
16
- } ;
14
+ use lightning:: chain:: chaininterface:: ConfirmationTarget ;
17
15
use lightning:: events:: Event as LdkEvent ;
18
16
use lightning:: events:: PaymentPurpose ;
19
17
use lightning:: impl_writeable_tlv_based_enum;
@@ -23,8 +21,8 @@ use lightning::util::errors::APIError;
23
21
use lightning:: util:: persist:: KVStore ;
24
22
use lightning:: util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
25
23
26
- use bitcoin:: secp256k1:: { PublicKey , Secp256k1 } ;
27
- use bitcoin:: { LockTime , OutPoint , PackedLockTime } ;
24
+ use bitcoin:: secp256k1:: PublicKey ;
25
+ use bitcoin:: { LockTime , OutPoint } ;
28
26
use rand:: { thread_rng, Rng } ;
29
27
use std:: collections:: VecDeque ;
30
28
use std:: ops:: Deref ;
@@ -246,11 +244,9 @@ where
246
244
event_queue : Arc < EventQueue < K , L > > ,
247
245
wallet : Arc < Wallet > ,
248
246
channel_manager : Arc < ChannelManager < K > > ,
249
- tx_broadcaster : Arc < Broadcaster > ,
250
- fee_estimator : Arc < FeeEstimator > ,
251
247
network_graph : Arc < NetworkGraph > ,
252
- keys_manager : Arc < KeysManager > ,
253
248
payment_store : Arc < PaymentStore < K , L > > ,
249
+ output_sweeper : Arc < Sweeper < K > > ,
254
250
runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
255
251
logger : L ,
256
252
config : Arc < Config > ,
@@ -262,20 +258,17 @@ where
262
258
{
263
259
pub fn new (
264
260
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 > > ,
268
263
runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > , logger : L , config : Arc < Config > ,
269
264
) -> Self {
270
265
Self {
271
266
event_queue,
272
267
wallet,
273
268
channel_manager,
274
- tx_broadcaster,
275
- fee_estimator,
276
269
network_graph,
277
- keys_manager,
278
270
payment_store,
271
+ output_sweeper,
279
272
logger,
280
273
runtime,
281
274
config,
@@ -580,36 +573,7 @@ where
580
573
}
581
574
}
582
575
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)
613
577
}
614
578
LdkEvent :: OpenChannelRequest {
615
579
temporary_channel_id,
0 commit comments