@@ -8174,6 +8174,210 @@ fn test_override_0msat_htlc_minimum() {
8174
8174
assert_eq ! ( res. htlc_minimum_msat, 1 ) ;
8175
8175
}
8176
8176
8177
+ #[ test]
8178
+ fn test_manually_accept_inbound_channel_request ( ) {
8179
+ let mut manually_accept_conf = UserConfig :: default ( ) ;
8180
+ manually_accept_conf. manually_accept_inbound_channels = true ;
8181
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
8182
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
8183
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , Some ( manually_accept_conf. clone ( ) ) ] ) ;
8184
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
8185
+
8186
+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 100000 , 10001 , 42 , Some ( manually_accept_conf) ) . unwrap ( ) ;
8187
+ let res = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
8188
+
8189
+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & res) ;
8190
+
8191
+ // Assert that [`nodes[1]`] has no [`MessageSendEvent::SendAcceptChannel`] in the
8192
+ // [`msg_events`] before accepting the inbound request
8193
+ assert ! ( nodes[ 1 ] . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
8194
+
8195
+ let events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
8196
+ match events[ 0 ] {
8197
+ Event :: OpenChannelRequest { temporary_channel_id, .. } => {
8198
+ nodes[ 1 ] . node . accept_inbound_channel ( & temporary_channel_id) . unwrap ( ) ;
8199
+ }
8200
+ _ => panic ! ( "Unexpected event" ) ,
8201
+ }
8202
+
8203
+ let accept_msg_ev = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
8204
+ assert_eq ! ( accept_msg_ev. len( ) , 1 ) ;
8205
+
8206
+ match accept_msg_ev[ 0 ] {
8207
+ MessageSendEvent :: SendAcceptChannel { ref node_id, .. } => {
8208
+ assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
8209
+ }
8210
+ _ => panic ! ( "Unexpected event" ) ,
8211
+ }
8212
+ }
8213
+
8214
+ #[ test]
8215
+ fn test_manually_reject_inbound_channel_request ( ) {
8216
+ let mut manually_accept_conf = UserConfig :: default ( ) ;
8217
+ manually_accept_conf. manually_accept_inbound_channels = true ;
8218
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
8219
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
8220
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , Some ( manually_accept_conf. clone ( ) ) ] ) ;
8221
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
8222
+
8223
+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 100000 , 10001 , 42 , Some ( manually_accept_conf) ) . unwrap ( ) ;
8224
+ let res = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
8225
+
8226
+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & res) ;
8227
+
8228
+ // Assert that [`nodes[1]`] has no [`MessageSendEvent::SendAcceptChannel`] in the
8229
+ // [`msg_events`] before rejecting the inbound request
8230
+ assert ! ( nodes[ 1 ] . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
8231
+
8232
+ let events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
8233
+ match events[ 0 ] {
8234
+ Event :: OpenChannelRequest { temporary_channel_id, .. } => {
8235
+ nodes[ 1 ] . node . force_close_channel ( & temporary_channel_id) . unwrap ( ) ;
8236
+ }
8237
+ _ => panic ! ( "Unexpected event" ) ,
8238
+ }
8239
+
8240
+ let close_msg_ev = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
8241
+ assert_eq ! ( close_msg_ev. len( ) , 1 ) ;
8242
+
8243
+ match close_msg_ev[ 0 ] {
8244
+ MessageSendEvent :: HandleError { ref node_id, .. } => {
8245
+ assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
8246
+ }
8247
+ _ => panic ! ( "Unexpected event" ) ,
8248
+ }
8249
+ check_closed_event ! ( nodes[ 1 ] , 1 , ClosureReason :: HolderForceClosed ) ;
8250
+ }
8251
+
8252
+ #[ test]
8253
+ fn test_reject_funding_before_inbound_channel_accepted ( ) {
8254
+ // This tests that when the [`util::config::UserConfig.manually_accept_inbound_channels`] is
8255
+ // set to true, inbound channels must to be manually accepted through the
8256
+ // [`ln::channelmanager::ChannelManager::accept_inbound_channel`] function by the node operator
8257
+ // before the counterparty sends a [`FundingCreated`] message. If a [`FundingCreated`] message
8258
+ // is received before the channel is accepted, it should be rejected and the channel should be
8259
+ // closed.
8260
+ let mut manually_accept_conf = UserConfig :: default ( ) ;
8261
+ manually_accept_conf. manually_accept_inbound_channels = true ;
8262
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
8263
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
8264
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , Some ( manually_accept_conf. clone ( ) ) ] ) ;
8265
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
8266
+
8267
+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 100000 , 10001 , 42 , Some ( manually_accept_conf) ) . unwrap ( ) ;
8268
+ let res = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
8269
+ let temp_channel_id = res. temporary_channel_id ;
8270
+
8271
+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & res) ;
8272
+
8273
+ // Assert that [`nodes[1]`] has no [`MessageSendEvent::SendAcceptChannel`] in the
8274
+ // [`msg_events`].
8275
+ assert ! ( nodes[ 1 ] . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
8276
+
8277
+ // Clear the [`Event::OpenChannelRequest`] event without responding to the request.
8278
+ nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
8279
+
8280
+ // Get the [`AcceptChannel`] message of [`nodes[1]`] without calling the
8281
+ // [`ChannelManager::accept_inbound_channel`] function, which generates the
8282
+ // [`MessageSendEvent::SendAcceptChannel`] event. This is passed to [`nodes[0]`]
8283
+ // [`handle_accept_channel`] function, which is required in order for the
8284
+ // [`create_funding_transaction`] function to succeed when [`nodes[0]`] is passed to it.
8285
+ {
8286
+ let mut lock;
8287
+ let channel = get_channel_ref ! ( & nodes[ 1 ] , lock, temp_channel_id) ;
8288
+ let accept_chan_msg = channel. get_accept_channel_message ( ) ;
8289
+ nodes[ 0 ] . node . handle_accept_channel ( & nodes[ 1 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & accept_chan_msg) ;
8290
+ }
8291
+
8292
+ let ( temporary_channel_id, tx, _) = create_funding_transaction ( & nodes[ 0 ] , 100000 , 42 ) ;
8293
+
8294
+ nodes[ 0 ] . node . funding_transaction_generated ( & temporary_channel_id, tx. clone ( ) ) . unwrap ( ) ;
8295
+ let funding_created_msg = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendFundingCreated , nodes[ 1 ] . node. get_our_node_id( ) ) ;
8296
+
8297
+ // The [`funding_created_msg`] should be rejected by [`nodes[1]`] as it hasn't accepted the
8298
+ // channel.
8299
+ nodes[ 1 ] . node . handle_funding_created ( & nodes[ 0 ] . node . get_our_node_id ( ) , & funding_created_msg) ;
8300
+
8301
+ let close_msg_ev = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
8302
+ assert_eq ! ( close_msg_ev. len( ) , 1 ) ;
8303
+
8304
+ let expected_err = "FundingCreated message received before the channel was accepted" ;
8305
+ match close_msg_ev[ 0 ] {
8306
+ MessageSendEvent :: HandleError { action : ErrorAction :: SendErrorMessage { ref msg } , ref node_id, } => {
8307
+ assert_eq ! ( msg. channel_id, temp_channel_id) ;
8308
+ assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
8309
+ assert_eq ! ( msg. data, expected_err) ;
8310
+ }
8311
+ _ => panic ! ( "Unexpected event" ) ,
8312
+ }
8313
+
8314
+ check_closed_event ! ( nodes[ 1 ] , 1 , ClosureReason :: ProcessingError { err: expected_err. to_string( ) } ) ;
8315
+ }
8316
+
8317
+ #[ test]
8318
+ fn test_can_not_accept_inbound_channel_twice ( ) {
8319
+ let mut manually_accept_conf = UserConfig :: default ( ) ;
8320
+ manually_accept_conf. manually_accept_inbound_channels = true ;
8321
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
8322
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
8323
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , Some ( manually_accept_conf. clone ( ) ) ] ) ;
8324
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
8325
+
8326
+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 100000 , 10001 , 42 , Some ( manually_accept_conf) ) . unwrap ( ) ;
8327
+ let res = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
8328
+
8329
+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & res) ;
8330
+
8331
+ // Assert that [`nodes[1]`] has no [`MessageSendEvent::SendAcceptChannel`] in the
8332
+ // [`msg_events`] before accepting the inbound request
8333
+ assert ! ( nodes[ 1 ] . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
8334
+
8335
+ let events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
8336
+ match events[ 0 ] {
8337
+ Event :: OpenChannelRequest { temporary_channel_id, .. } => {
8338
+ nodes[ 1 ] . node . accept_inbound_channel ( & temporary_channel_id) . unwrap ( ) ;
8339
+ let api_res = nodes[ 1 ] . node . accept_inbound_channel ( & temporary_channel_id) ;
8340
+ match api_res {
8341
+ Err ( APIError :: APIMisuseError { err } ) => {
8342
+ assert_eq ! ( err, "The channel isn't currently awaiting to be accepted." ) ;
8343
+ } ,
8344
+ Ok ( _) => panic ! ( "Channel shouldn't be possible to be accepted twice" ) ,
8345
+ Err ( _) => panic ! ( "Unexpected Error" ) ,
8346
+ }
8347
+ }
8348
+ _ => panic ! ( "Unexpected event" ) ,
8349
+ }
8350
+
8351
+ // Ensure that the channel wasn't closed after attempting to accept it twice.
8352
+ let accept_msg_ev = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
8353
+ assert_eq ! ( accept_msg_ev. len( ) , 1 ) ;
8354
+
8355
+ match accept_msg_ev[ 0 ] {
8356
+ MessageSendEvent :: SendAcceptChannel { ref node_id, .. } => {
8357
+ assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
8358
+ }
8359
+ _ => panic ! ( "Unexpected event" ) ,
8360
+ }
8361
+ }
8362
+
8363
+ #[ test]
8364
+ fn test_can_not_accept_unknown_inbound_channel ( ) {
8365
+ let chanmon_cfg = create_chanmon_cfgs ( 1 ) ;
8366
+ let node_cfg = create_node_cfgs ( 1 , & chanmon_cfg) ;
8367
+ let node_chanmgr = create_node_chanmgrs ( 1 , & node_cfg, & [ None ] ) ;
8368
+ let node = create_network ( 1 , & node_cfg, & node_chanmgr) [ 0 ] . node ;
8369
+
8370
+ let unknown_channel_id = [ 0 ; 32 ] ;
8371
+ let api_res = node. accept_inbound_channel ( & unknown_channel_id) ;
8372
+ match api_res {
8373
+ Err ( APIError :: ChannelUnavailable { err } ) => {
8374
+ assert_eq ! ( err, "Can't accept a channel that doesn't exist" ) ;
8375
+ } ,
8376
+ Ok ( _) => panic ! ( "It shouldn't be possible to accept an unkown channel" ) ,
8377
+ Err ( _) => panic ! ( "Unexpected Error" ) ,
8378
+ }
8379
+ }
8380
+
8177
8381
#[ test]
8178
8382
fn test_simple_mpp ( ) {
8179
8383
// Simple test of sending a multi-path payment.
0 commit comments