@@ -8511,6 +8511,56 @@ fn test_onchain_htlc_settlement_after_close() {
8511
8511
do_test_onchain_htlc_settlement_after_close ( false , false ) ;
8512
8512
}
8513
8513
8514
+ #[ test]
8515
+ fn test_duplicate_temporary_channel_id_from_different_peers ( ) {
8516
+ // Tests that we can accept two different `OpenChannel` requests with the same
8517
+ // `temporary_channel_id`, as long as they are from different peers.
8518
+ let chanmon_cfgs = create_chanmon_cfgs ( 3 ) ;
8519
+ let node_cfgs = create_node_cfgs ( 3 , & chanmon_cfgs) ;
8520
+ let node_chanmgrs = create_node_chanmgrs ( 3 , & node_cfgs, & [ None , None , None ] ) ;
8521
+ let nodes = create_network ( 3 , & node_cfgs, & node_chanmgrs) ;
8522
+
8523
+ // Create an first channel channel
8524
+ nodes[ 1 ] . node . create_channel ( nodes[ 0 ] . node . get_our_node_id ( ) , 100000 , 10001 , 42 , None ) . unwrap ( ) ;
8525
+ let mut open_chan_msg_chan_1_0 = get_event_msg ! ( nodes[ 1 ] , MessageSendEvent :: SendOpenChannel , nodes[ 0 ] . node. get_our_node_id( ) ) ;
8526
+
8527
+ // Create an second channel
8528
+ nodes[ 2 ] . node . create_channel ( nodes[ 0 ] . node . get_our_node_id ( ) , 100000 , 10001 , 43 , None ) . unwrap ( ) ;
8529
+ let mut open_chan_msg_chan_2_0 = get_event_msg ! ( nodes[ 2 ] , MessageSendEvent :: SendOpenChannel , nodes[ 0 ] . node. get_our_node_id( ) ) ;
8530
+
8531
+ // Modify the `OpenChannel` from `nodes[2]` to `nodes[0]` to ensure that it uses the same
8532
+ // `temporary_channel_id` as the `OpenChannel` from nodes[1] to nodes[0].
8533
+ open_chan_msg_chan_2_0. temporary_channel_id = open_chan_msg_chan_1_0. temporary_channel_id ;
8534
+
8535
+ // Assert that `nodes[0]` can accept both `OpenChannel` requests, even though they use the same
8536
+ // `temporary_channel_id` as they are from different peers.
8537
+ nodes[ 0 ] . node . handle_open_channel ( & nodes[ 1 ] . node . get_our_node_id ( ) , channelmanager:: provided_init_features ( ) , & open_chan_msg_chan_1_0) ;
8538
+ {
8539
+ let events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
8540
+ assert_eq ! ( events. len( ) , 1 ) ;
8541
+ match & events[ 0 ] {
8542
+ MessageSendEvent :: SendAcceptChannel { node_id, msg } => {
8543
+ assert_eq ! ( node_id, & nodes[ 1 ] . node. get_our_node_id( ) ) ;
8544
+ assert_eq ! ( msg. temporary_channel_id, open_chan_msg_chan_1_0. temporary_channel_id) ;
8545
+ } ,
8546
+ _ => panic ! ( "Unexpected event" ) ,
8547
+ }
8548
+ }
8549
+
8550
+ nodes[ 0 ] . node . handle_open_channel ( & nodes[ 2 ] . node . get_our_node_id ( ) , channelmanager:: provided_init_features ( ) , & open_chan_msg_chan_2_0) ;
8551
+ {
8552
+ let events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
8553
+ assert_eq ! ( events. len( ) , 1 ) ;
8554
+ match & events[ 0 ] {
8555
+ MessageSendEvent :: SendAcceptChannel { node_id, msg } => {
8556
+ assert_eq ! ( node_id, & nodes[ 2 ] . node. get_our_node_id( ) ) ;
8557
+ assert_eq ! ( msg. temporary_channel_id, open_chan_msg_chan_1_0. temporary_channel_id) ;
8558
+ } ,
8559
+ _ => panic ! ( "Unexpected event" ) ,
8560
+ }
8561
+ }
8562
+ }
8563
+
8514
8564
#[ test]
8515
8565
fn test_duplicate_chan_id ( ) {
8516
8566
// Test that if a given peer tries to open a channel with the same channel_id as one that is
0 commit comments