@@ -9218,6 +9218,56 @@ fn test_onchain_htlc_settlement_after_close() {
9218
9218
do_test_onchain_htlc_settlement_after_close(false, false);
9219
9219
}
9220
9220
9221
+ #[test]
9222
+ fn test_duplicate_temporary_channel_id_from_different_peers() {
9223
+ // Tests that we can accept two different `OpenChannel` requests with the same
9224
+ // `temporary_channel_id`, as long as they are from different peers.
9225
+ let chanmon_cfgs = create_chanmon_cfgs(3);
9226
+ let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
9227
+ let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
9228
+ let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
9229
+
9230
+ // Create an first channel channel
9231
+ nodes[1].node.create_channel(nodes[0].node.get_our_node_id(), 100000, 10001, 42, None).unwrap();
9232
+ let mut open_chan_msg_chan_1_0 = get_event_msg!(nodes[1], MessageSendEvent::SendOpenChannel, nodes[0].node.get_our_node_id());
9233
+
9234
+ // Create an second channel
9235
+ nodes[2].node.create_channel(nodes[0].node.get_our_node_id(), 100000, 10001, 43, None).unwrap();
9236
+ let mut open_chan_msg_chan_2_0 = get_event_msg!(nodes[2], MessageSendEvent::SendOpenChannel, nodes[0].node.get_our_node_id());
9237
+
9238
+ // Modify the `OpenChannel` from `nodes[2]` to `nodes[0]` to ensure that it uses the same
9239
+ // `temporary_channel_id` as the `OpenChannel` from nodes[1] to nodes[0].
9240
+ open_chan_msg_chan_2_0.temporary_channel_id = open_chan_msg_chan_1_0.temporary_channel_id;
9241
+
9242
+ // Assert that `nodes[0]` can accept both `OpenChannel` requests, even though they use the same
9243
+ // `temporary_channel_id` as they are from different peers.
9244
+ nodes[0].node.handle_open_channel(&nodes[1].node.get_our_node_id(), InitFeatures::known(), &open_chan_msg_chan_1_0);
9245
+ {
9246
+ let events = nodes[0].node.get_and_clear_pending_msg_events();
9247
+ assert_eq!(events.len(), 1);
9248
+ match &events[0] {
9249
+ MessageSendEvent::SendAcceptChannel { node_id, msg } => {
9250
+ assert_eq!(node_id, &nodes[1].node.get_our_node_id());
9251
+ assert_eq!(msg.temporary_channel_id, open_chan_msg_chan_1_0.temporary_channel_id);
9252
+ },
9253
+ _ => panic!("Unexpected event"),
9254
+ }
9255
+ }
9256
+
9257
+ nodes[0].node.handle_open_channel(&nodes[2].node.get_our_node_id(), InitFeatures::known(), &open_chan_msg_chan_2_0);
9258
+ {
9259
+ let events = nodes[0].node.get_and_clear_pending_msg_events();
9260
+ assert_eq!(events.len(), 1);
9261
+ match &events[0] {
9262
+ MessageSendEvent::SendAcceptChannel { node_id, msg } => {
9263
+ assert_eq!(node_id, &nodes[2].node.get_our_node_id());
9264
+ assert_eq!(msg.temporary_channel_id, open_chan_msg_chan_1_0.temporary_channel_id);
9265
+ },
9266
+ _ => panic!("Unexpected event"),
9267
+ }
9268
+ }
9269
+ }
9270
+
9221
9271
#[test]
9222
9272
fn test_duplicate_chan_id() {
9223
9273
// Test that if a given peer tries to open a channel with the same channel_id as one that is
0 commit comments