@@ -16,6 +16,7 @@ use bitcoin_bech32::WitnessProgram;
16
16
use disk:: { INBOUND_PAYMENTS_FNAME , OUTBOUND_PAYMENTS_FNAME } ;
17
17
use lightning:: chain:: { chainmonitor, ChannelMonitorUpdateStatus } ;
18
18
use lightning:: chain:: { Filter , Watch } ;
19
+ use lightning:: events:: bump_transaction:: { BumpTransactionEventHandler , Wallet } ;
19
20
use lightning:: events:: { Event , PaymentFailureReason , PaymentPurpose } ;
20
21
use lightning:: ln:: channelmanager:: { self , RecentPaymentDetails } ;
21
22
use lightning:: ln:: channelmanager:: {
@@ -141,10 +142,17 @@ pub(crate) type NetworkGraph = gossip::NetworkGraph<Arc<FilesystemLogger>>;
141
142
142
143
type OnionMessenger = SimpleArcOnionMessenger < FilesystemLogger > ;
143
144
145
+ pub ( crate ) type BumpTxEventHandler = BumpTransactionEventHandler <
146
+ Arc < BitcoindClient > ,
147
+ Arc < Wallet < Arc < BitcoindClient > , Arc < FilesystemLogger > > > ,
148
+ Arc < KeysManager > ,
149
+ Arc < FilesystemLogger > ,
150
+ > ;
151
+
144
152
async fn handle_ldk_events (
145
153
channel_manager : & Arc < ChannelManager > , bitcoind_client : & BitcoindClient ,
146
154
network_graph : & NetworkGraph , keys_manager : & KeysManager ,
147
- inbound_payments : Arc < Mutex < PaymentInfoStorage > > ,
155
+ bump_tx_event_handler : & BumpTxEventHandler , inbound_payments : Arc < Mutex < PaymentInfoStorage > > ,
148
156
outbound_payments : Arc < Mutex < PaymentInfoStorage > > , persister : & Arc < FilesystemPersister > ,
149
157
network : Network , event : Event ,
150
158
) {
@@ -278,8 +286,34 @@ async fn handle_ldk_events(
278
286
}
279
287
persister. persist ( OUTBOUND_PAYMENTS_FNAME , & * outbound) . unwrap ( ) ;
280
288
}
281
- Event :: OpenChannelRequest { .. } => {
282
- // Unreachable, we don't set manually_accept_inbound_channels
289
+ Event :: OpenChannelRequest {
290
+ ref temporary_channel_id, ref counterparty_node_id, ..
291
+ } => {
292
+ let mut random_bytes = [ 0u8 ; 16 ] ;
293
+ random_bytes. copy_from_slice ( & keys_manager. get_secure_random_bytes ( ) [ ..16 ] ) ;
294
+ let user_channel_id = u128:: from_be_bytes ( random_bytes) ;
295
+ let res = channel_manager. accept_inbound_channel (
296
+ temporary_channel_id,
297
+ counterparty_node_id,
298
+ user_channel_id,
299
+ ) ;
300
+
301
+ if let Err ( e) = res {
302
+ print ! (
303
+ "\n EVENT: Failed to accept inbound channel ({}) from {}: {:?}" ,
304
+ hex_utils:: hex_str( & temporary_channel_id[ ..] ) ,
305
+ hex_utils:: hex_str( & counterparty_node_id. serialize( ) ) ,
306
+ e,
307
+ ) ;
308
+ } else {
309
+ print ! (
310
+ "\n EVENT: Accepted inbound channel ({}) from {}" ,
311
+ hex_utils:: hex_str( & temporary_channel_id[ ..] ) ,
312
+ hex_utils:: hex_str( & counterparty_node_id. serialize( ) ) ,
313
+ ) ;
314
+ }
315
+ print ! ( "> " ) ;
316
+ io:: stdout ( ) . flush ( ) . unwrap ( ) ;
283
317
}
284
318
Event :: PaymentPathSuccessful { .. } => { }
285
319
Event :: PaymentPathFailed { .. } => { }
@@ -429,7 +463,7 @@ async fn handle_ldk_events(
429
463
// the funding transaction either confirms, or this event is generated.
430
464
}
431
465
Event :: HTLCIntercepted { .. } => { }
432
- Event :: BumpTransaction ( _ ) => { }
466
+ Event :: BumpTransaction ( event ) => bump_tx_event_handler . handle_event ( & event ) ,
433
467
}
434
468
}
435
469
@@ -532,6 +566,13 @@ async fn start_ldk() {
532
566
let cur = SystemTime :: now ( ) . duration_since ( SystemTime :: UNIX_EPOCH ) . unwrap ( ) ;
533
567
let keys_manager = Arc :: new ( KeysManager :: new ( & keys_seed, cur. as_secs ( ) , cur. subsec_nanos ( ) ) ) ;
534
568
569
+ let bump_tx_event_handler = Arc :: new ( BumpTransactionEventHandler :: new (
570
+ Arc :: clone ( & broadcaster) ,
571
+ Arc :: new ( Wallet :: new ( Arc :: clone ( & bitcoind_client) , Arc :: clone ( & logger) ) ) ,
572
+ Arc :: clone ( & keys_manager) ,
573
+ Arc :: clone ( & logger) ,
574
+ ) ) ;
575
+
535
576
// Step 7: Read ChannelMonitor state from disk
536
577
let mut channelmonitors =
537
578
persister. read_channelmonitors ( keys_manager. clone ( ) , keys_manager. clone ( ) ) . unwrap ( ) ;
@@ -566,6 +607,8 @@ async fn start_ldk() {
566
607
// Step 11: Initialize the ChannelManager
567
608
let mut user_config = UserConfig :: default ( ) ;
568
609
user_config. channel_handshake_limits . force_announced_channel_preference = false ;
610
+ user_config. channel_handshake_config . negotiate_anchors_zero_fee_htlc_tx = true ;
611
+ user_config. manually_accept_inbound_channels = true ;
569
612
let mut restarting_node = true ;
570
613
let ( channel_manager_blockhash, channel_manager) = {
571
614
if let Ok ( mut f) = fs:: File :: open ( format ! ( "{}/manager" , ldk_data_dir. clone( ) ) ) {
@@ -778,6 +821,7 @@ async fn start_ldk() {
778
821
let bitcoind_client_event_listener = Arc :: clone ( & bitcoind_client_event_listener) ;
779
822
let network_graph_event_listener = Arc :: clone ( & network_graph_event_listener) ;
780
823
let keys_manager_event_listener = Arc :: clone ( & keys_manager_event_listener) ;
824
+ let bump_tx_event_handler = Arc :: clone ( & bump_tx_event_handler) ;
781
825
let inbound_payments_event_listener = Arc :: clone ( & inbound_payments_event_listener) ;
782
826
let outbound_payments_event_listener = Arc :: clone ( & outbound_payments_event_listener) ;
783
827
let persister_event_listener = Arc :: clone ( & persister_event_listener) ;
@@ -787,6 +831,7 @@ async fn start_ldk() {
787
831
& bitcoind_client_event_listener,
788
832
& network_graph_event_listener,
789
833
& keys_manager_event_listener,
834
+ & bump_tx_event_handler,
790
835
inbound_payments_event_listener,
791
836
outbound_payments_event_listener,
792
837
& persister_event_listener,
0 commit comments