1
- use crate :: types:: { Broadcaster , FeeEstimator , Wallet } ;
1
+ use crate :: types:: { Sweeper , Wallet } ;
2
2
use crate :: {
3
- hex_utils, ChannelManager , Config , Error , KeysManager , NetworkGraph , PeerInfo , PeerStore ,
4
- UserChannelId ,
3
+ hex_utils, ChannelManager , Config , Error , NetworkGraph , PeerInfo , PeerStore , UserChannelId ,
5
4
} ;
6
5
7
6
use crate :: payment_store:: {
@@ -12,11 +11,9 @@ use crate::io::{
12
11
EVENT_QUEUE_PERSISTENCE_KEY , EVENT_QUEUE_PERSISTENCE_PRIMARY_NAMESPACE ,
13
12
EVENT_QUEUE_PERSISTENCE_SECONDARY_NAMESPACE ,
14
13
} ;
15
- use crate :: logger:: { log_debug , log_error, log_info, Logger } ;
14
+ use crate :: logger:: { log_error, log_info, Logger } ;
16
15
17
- use lightning:: chain:: chaininterface:: {
18
- BroadcasterInterface , ConfirmationTarget , FeeEstimator as LDKFeeEstimator ,
19
- } ;
16
+ use lightning:: chain:: chaininterface:: ConfirmationTarget ;
20
17
use lightning:: events:: Event as LdkEvent ;
21
18
use lightning:: events:: PaymentPurpose ;
22
19
use lightning:: impl_writeable_tlv_based_enum;
@@ -26,8 +23,8 @@ use lightning::util::errors::APIError;
26
23
use lightning:: util:: persist:: KVStore ;
27
24
use lightning:: util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
28
25
29
- use bitcoin:: secp256k1:: { PublicKey , Secp256k1 } ;
30
- use bitcoin:: { LockTime , OutPoint , PackedLockTime } ;
26
+ use bitcoin:: secp256k1:: PublicKey ;
27
+ use bitcoin:: { LockTime , OutPoint } ;
31
28
use rand:: { thread_rng, Rng } ;
32
29
use std:: collections:: VecDeque ;
33
30
use std:: ops:: Deref ;
@@ -249,10 +246,8 @@ where
249
246
event_queue : Arc < EventQueue < K , L > > ,
250
247
wallet : Arc < Wallet > ,
251
248
channel_manager : Arc < ChannelManager < K > > ,
252
- tx_broadcaster : Arc < Broadcaster > ,
253
- fee_estimator : Arc < FeeEstimator > ,
249
+ output_sweeper : Arc < Sweeper < K > > ,
254
250
network_graph : Arc < NetworkGraph > ,
255
- keys_manager : Arc < KeysManager > ,
256
251
payment_store : Arc < PaymentStore < K , L > > ,
257
252
peer_store : Arc < PeerStore < K , L > > ,
258
253
runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
@@ -266,20 +261,17 @@ where
266
261
{
267
262
pub fn new (
268
263
event_queue : Arc < EventQueue < K , L > > , wallet : Arc < Wallet > ,
269
- channel_manager : Arc < ChannelManager < K > > , tx_broadcaster : Arc < Broadcaster > ,
270
- fee_estimator : Arc < FeeEstimator > , network_graph : Arc < NetworkGraph > ,
271
- keys_manager : Arc < KeysManager > , payment_store : Arc < PaymentStore < K , L > > ,
264
+ channel_manager : Arc < ChannelManager < K > > , output_sweeper : Arc < Sweeper < K > > ,
265
+ network_graph : Arc < NetworkGraph > , payment_store : Arc < PaymentStore < K , L > > ,
272
266
peer_store : Arc < PeerStore < K , L > > , runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
273
267
logger : L , config : Arc < Config > ,
274
268
) -> Self {
275
269
Self {
276
270
event_queue,
277
271
wallet,
278
272
channel_manager,
279
- tx_broadcaster,
280
- fee_estimator,
273
+ output_sweeper,
281
274
network_graph,
282
- keys_manager,
283
275
payment_store,
284
276
peer_store,
285
277
logger,
@@ -585,37 +577,8 @@ where
585
577
} ) ;
586
578
}
587
579
}
588
- LdkEvent :: SpendableOutputs { outputs, channel_id : _ } => {
589
- // TODO: We should eventually remember the outputs and supply them to the wallet's coin selection, once BDK allows us to do so.
590
- let destination_address = self . wallet . get_new_address ( ) . unwrap_or_else ( |e| {
591
- log_error ! ( self . logger, "Failed to get destination address: {}" , e) ;
592
- panic ! ( "Failed to get destination address" ) ;
593
- } ) ;
594
-
595
- let output_descriptors = & outputs. iter ( ) . collect :: < Vec < _ > > ( ) ;
596
- let tx_feerate = self
597
- . fee_estimator
598
- . get_est_sat_per_1000_weight ( ConfirmationTarget :: NonAnchorChannelFee ) ;
599
-
600
- // We set nLockTime to the current height to discourage fee sniping.
601
- let cur_height = self . channel_manager . current_best_block ( ) . height ( ) ;
602
- let locktime: PackedLockTime =
603
- LockTime :: from_height ( cur_height) . map_or ( PackedLockTime :: ZERO , |l| l. into ( ) ) ;
604
- let res = self . keys_manager . spend_spendable_outputs (
605
- output_descriptors,
606
- Vec :: new ( ) ,
607
- destination_address. script_pubkey ( ) ,
608
- tx_feerate,
609
- Some ( locktime) ,
610
- & Secp256k1 :: new ( ) ,
611
- ) ;
612
-
613
- match res {
614
- Ok ( spending_tx) => self . tx_broadcaster . broadcast_transactions ( & [ & spending_tx] ) ,
615
- Err ( err) => {
616
- log_error ! ( self . logger, "Error spending outputs: {:?}" , err) ;
617
- }
618
- }
580
+ LdkEvent :: SpendableOutputs { outputs, channel_id } => {
581
+ self . output_sweeper . add_outputs ( outputs, channel_id)
619
582
}
620
583
LdkEvent :: OpenChannelRequest {
621
584
temporary_channel_id,
0 commit comments