Skip to content

Commit d3ddf15

Browse files
committed
Combine common fields of OpenChannel & OpenChannelV2 into struct
1 parent 3751398 commit d3ddf15

8 files changed

+438
-325
lines changed

lightning/src/ln/channel.rs

+86-84
Large diffs are not rendered by default.

lightning/src/ln/channelmanager.rs

+38-27
Original file line numberDiff line numberDiff line change
@@ -6178,12 +6178,14 @@ where
61786178
fn internal_open_channel(&self, counterparty_node_id: &PublicKey, msg: &msgs::OpenChannel) -> Result<(), MsgHandleErrInternal> {
61796179
// Note that the ChannelManager is NOT re-persisted on disk after this, so any changes are
61806180
// likely to be lost on restart!
6181-
if msg.chain_hash != self.chain_hash {
6182-
return Err(MsgHandleErrInternal::send_err_msg_no_close("Unknown genesis block hash".to_owned(), msg.temporary_channel_id.clone()));
6181+
if msg.common_fields.chain_hash != self.chain_hash {
6182+
return Err(MsgHandleErrInternal::send_err_msg_no_close("Unknown genesis block hash".to_owned(),
6183+
msg.common_fields.temporary_channel_id.clone()));
61836184
}
61846185

61856186
if !self.default_configuration.accept_inbound_channels {
6186-
return Err(MsgHandleErrInternal::send_err_msg_no_close("No inbound channels accepted".to_owned(), msg.temporary_channel_id.clone()));
6187+
return Err(MsgHandleErrInternal::send_err_msg_no_close("No inbound channels accepted".to_owned(),
6188+
msg.common_fields.temporary_channel_id.clone()));
61876189
}
61886190

61896191
// Get the number of peers with channels, but without funded ones. We don't care too much
@@ -6196,7 +6198,9 @@ where
61966198
let peer_state_mutex = per_peer_state.get(counterparty_node_id)
61976199
.ok_or_else(|| {
61986200
debug_assert!(false);
6199-
MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {}", counterparty_node_id), msg.temporary_channel_id.clone())
6201+
MsgHandleErrInternal::send_err_msg_no_close(
6202+
format!("Can't find a peer matching the passed counterparty node_id {}", counterparty_node_id),
6203+
msg.common_fields.temporary_channel_id.clone())
62006204
})?;
62016205
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
62026206
let peer_state = &mut *peer_state_lock;
@@ -6210,34 +6214,36 @@ where
62106214
{
62116215
return Err(MsgHandleErrInternal::send_err_msg_no_close(
62126216
"Have too many peers with unfunded channels, not accepting new ones".to_owned(),
6213-
msg.temporary_channel_id.clone()));
6217+
msg.common_fields.temporary_channel_id.clone()));
62146218
}
62156219

62166220
let best_block_height = self.best_block.read().unwrap().height();
62176221
if Self::unfunded_channel_count(peer_state, best_block_height) >= MAX_UNFUNDED_CHANS_PER_PEER {
62186222
return Err(MsgHandleErrInternal::send_err_msg_no_close(
62196223
format!("Refusing more than {} unfunded channels.", MAX_UNFUNDED_CHANS_PER_PEER),
6220-
msg.temporary_channel_id.clone()));
6224+
msg.common_fields.temporary_channel_id.clone()));
62216225
}
62226226

6223-
let channel_id = msg.temporary_channel_id;
6227+
let channel_id = msg.common_fields.temporary_channel_id;
62246228
let channel_exists = peer_state.has_channel(&channel_id);
62256229
if channel_exists {
6226-
return Err(MsgHandleErrInternal::send_err_msg_no_close("temporary_channel_id collision for the same peer!".to_owned(), msg.temporary_channel_id.clone()));
6230+
return Err(MsgHandleErrInternal::send_err_msg_no_close(
6231+
"temporary_channel_id collision for the same peer!".to_owned(),
6232+
msg.common_fields.temporary_channel_id.clone()));
62276233
}
62286234

62296235
// If we're doing manual acceptance checks on the channel, then defer creation until we're sure we want to accept.
62306236
if self.default_configuration.manually_accept_inbound_channels {
62316237
let channel_type = channel::channel_type_from_open_channel(
62326238
&msg, &peer_state.latest_features, &self.channel_type_features()
62336239
).map_err(|e|
6234-
MsgHandleErrInternal::from_chan_no_close(e, msg.temporary_channel_id)
6240+
MsgHandleErrInternal::from_chan_no_close(e, msg.common_fields.temporary_channel_id)
62356241
)?;
62366242
let mut pending_events = self.pending_events.lock().unwrap();
62376243
pending_events.push_back((events::Event::OpenChannelRequest {
6238-
temporary_channel_id: msg.temporary_channel_id.clone(),
6244+
temporary_channel_id: msg.common_fields.temporary_channel_id.clone(),
62396245
counterparty_node_id: counterparty_node_id.clone(),
6240-
funding_satoshis: msg.funding_satoshis,
6246+
funding_satoshis: msg.common_fields.funding_satoshis,
62416247
push_msat: msg.push_msat,
62426248
channel_type,
62436249
}, None));
@@ -6257,17 +6263,21 @@ where
62576263
&self.default_configuration, best_block_height, &self.logger, /*is_0conf=*/false)
62586264
{
62596265
Err(e) => {
6260-
return Err(MsgHandleErrInternal::from_chan_no_close(e, msg.temporary_channel_id));
6266+
return Err(MsgHandleErrInternal::from_chan_no_close(e, msg.common_fields.temporary_channel_id));
62616267
},
62626268
Ok(res) => res
62636269
};
62646270

62656271
let channel_type = channel.context.get_channel_type();
62666272
if channel_type.requires_zero_conf() {
6267-
return Err(MsgHandleErrInternal::send_err_msg_no_close("No zero confirmation channels accepted".to_owned(), msg.temporary_channel_id.clone()));
6273+
return Err(MsgHandleErrInternal::send_err_msg_no_close(
6274+
"No zero confirmation channels accepted".to_owned(),
6275+
msg.common_fields.temporary_channel_id.clone()));
62686276
}
62696277
if channel_type.requires_anchors_zero_fee_htlc_tx() {
6270-
return Err(MsgHandleErrInternal::send_err_msg_no_close("No channels with anchor outputs accepted".to_owned(), msg.temporary_channel_id.clone()));
6278+
return Err(MsgHandleErrInternal::send_err_msg_no_close(
6279+
"No channels with anchor outputs accepted".to_owned(),
6280+
msg.common_fields.temporary_channel_id.clone()));
62716281
}
62726282

62736283
let outbound_scid_alias = self.create_and_insert_outbound_scid_alias();
@@ -8699,7 +8709,7 @@ where
86998709
fn handle_open_channel_v2(&self, counterparty_node_id: &PublicKey, msg: &msgs::OpenChannelV2) {
87008710
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
87018711
"Dual-funded channels not supported".to_owned(),
8702-
msg.temporary_channel_id.clone())), *counterparty_node_id);
8712+
msg.common_fields.temporary_channel_id.clone())), *counterparty_node_id);
87038713
}
87048714

87058715
fn handle_accept_channel(&self, counterparty_node_id: &PublicKey, msg: &msgs::AcceptChannel) {
@@ -11993,14 +12003,15 @@ mod tests {
1199312003
check_added_monitors!(nodes[0], 1);
1199412004
expect_channel_pending_event(&nodes[0], &nodes[1].node.get_our_node_id());
1199512005
}
11996-
open_channel_msg.temporary_channel_id = ChannelId::temporary_from_entropy_source(&nodes[0].keys_manager);
12006+
open_channel_msg.common_fields.temporary_channel_id = ChannelId::temporary_from_entropy_source(&nodes[0].keys_manager);
1199712007
}
1199812008

1199912009
// A MAX_UNFUNDED_CHANS_PER_PEER + 1 channel will be summarily rejected
12000-
open_channel_msg.temporary_channel_id = ChannelId::temporary_from_entropy_source(&nodes[0].keys_manager);
12010+
open_channel_msg.common_fields.temporary_channel_id = ChannelId::temporary_from_entropy_source(
12011+
&nodes[0].keys_manager);
1200112012
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &open_channel_msg);
1200212013
assert_eq!(get_err_msg(&nodes[1], &nodes[0].node.get_our_node_id()).channel_id,
12003-
open_channel_msg.temporary_channel_id);
12014+
open_channel_msg.common_fields.temporary_channel_id);
1200412015

1200512016
// Further, because all of our channels with nodes[0] are inbound, and none of them funded,
1200612017
// it doesn't count as a "protected" peer, i.e. it counts towards the MAX_NO_CHANNEL_PEERS
@@ -12048,11 +12059,11 @@ mod tests {
1204812059
for i in 0..super::MAX_UNFUNDED_CHANNEL_PEERS - 1 {
1204912060
nodes[1].node.handle_open_channel(&peer_pks[i], &open_channel_msg);
1205012061
get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, peer_pks[i]);
12051-
open_channel_msg.temporary_channel_id = ChannelId::temporary_from_entropy_source(&nodes[0].keys_manager);
12062+
open_channel_msg.common_fields.temporary_channel_id = ChannelId::temporary_from_entropy_source(&nodes[0].keys_manager);
1205212063
}
1205312064
nodes[1].node.handle_open_channel(&last_random_pk, &open_channel_msg);
1205412065
assert_eq!(get_err_msg(&nodes[1], &last_random_pk).channel_id,
12055-
open_channel_msg.temporary_channel_id);
12066+
open_channel_msg.common_fields.temporary_channel_id);
1205612067

1205712068
// Of course, however, outbound channels are always allowed
1205812069
nodes[1].node.create_channel(last_random_pk, 100_000, 0, 42, None, None).unwrap();
@@ -12088,14 +12099,14 @@ mod tests {
1208812099
for _ in 0..super::MAX_UNFUNDED_CHANS_PER_PEER {
1208912100
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &open_channel_msg);
1209012101
get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
12091-
open_channel_msg.temporary_channel_id = ChannelId::temporary_from_entropy_source(&nodes[0].keys_manager);
12102+
open_channel_msg.common_fields.temporary_channel_id = ChannelId::temporary_from_entropy_source(&nodes[0].keys_manager);
1209212103
}
1209312104

1209412105
// Once we have MAX_UNFUNDED_CHANS_PER_PEER unfunded channels, new inbound channels will be
1209512106
// rejected.
1209612107
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &open_channel_msg);
1209712108
assert_eq!(get_err_msg(&nodes[1], &nodes[0].node.get_our_node_id()).channel_id,
12098-
open_channel_msg.temporary_channel_id);
12109+
open_channel_msg.common_fields.temporary_channel_id);
1209912110

1210012111
// but we can still open an outbound channel.
1210112112
nodes[1].node.create_channel(nodes[0].node.get_our_node_id(), 100_000, 0, 42, None, None).unwrap();
@@ -12104,7 +12115,7 @@ mod tests {
1210412115
// but even with such an outbound channel, additional inbound channels will still fail.
1210512116
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &open_channel_msg);
1210612117
assert_eq!(get_err_msg(&nodes[1], &nodes[0].node.get_our_node_id()).channel_id,
12107-
open_channel_msg.temporary_channel_id);
12118+
open_channel_msg.common_fields.temporary_channel_id);
1210812119
}
1210912120

1211012121
#[test]
@@ -12140,7 +12151,7 @@ mod tests {
1214012151
_ => panic!("Unexpected event"),
1214112152
}
1214212153
get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, random_pk);
12143-
open_channel_msg.temporary_channel_id = ChannelId::temporary_from_entropy_source(&nodes[0].keys_manager);
12154+
open_channel_msg.common_fields.temporary_channel_id = ChannelId::temporary_from_entropy_source(&nodes[0].keys_manager);
1214412155
}
1214512156

1214612157
// If we try to accept a channel from another peer non-0conf it will fail.
@@ -12162,7 +12173,7 @@ mod tests {
1216212173
_ => panic!("Unexpected event"),
1216312174
}
1216412175
assert_eq!(get_err_msg(&nodes[1], &last_random_pk).channel_id,
12165-
open_channel_msg.temporary_channel_id);
12176+
open_channel_msg.common_fields.temporary_channel_id);
1216612177

1216712178
// ...however if we accept the same channel 0conf it should work just fine.
1216812179
nodes[1].node.handle_open_channel(&last_random_pk, &open_channel_msg);
@@ -12307,7 +12318,7 @@ mod tests {
1230712318

1230812319
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100_000, 0, 0, None, None).unwrap();
1230912320
let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
12310-
assert!(open_channel_msg.channel_type.as_ref().unwrap().supports_anchors_zero_fee_htlc_tx());
12321+
assert!(open_channel_msg.common_fields.channel_type.as_ref().unwrap().supports_anchors_zero_fee_htlc_tx());
1231112322

1231212323
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &open_channel_msg);
1231312324
let events = nodes[1].node.get_and_clear_pending_events();
@@ -12322,7 +12333,7 @@ mod tests {
1232212333
nodes[0].node.handle_error(&nodes[1].node.get_our_node_id(), &error_msg);
1232312334

1232412335
let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
12325-
assert!(!open_channel_msg.channel_type.unwrap().supports_anchors_zero_fee_htlc_tx());
12336+
assert!(!open_channel_msg.common_fields.channel_type.unwrap().supports_anchors_zero_fee_htlc_tx());
1232612337

1232712338
// Since nodes[1] should not have accepted the channel, it should
1232812339
// not have generated any events.

lightning/src/ln/functional_test_utils.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1257,7 +1257,7 @@ pub fn open_zero_conf_channel<'a, 'b, 'c, 'd>(initiator: &'a Node<'b, 'c, 'd>, r
12571257
pub fn exchange_open_accept_chan<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b: &Node<'a, 'b, 'c>, channel_value: u64, push_msat: u64) -> ChannelId {
12581258
let create_chan_id = node_a.node.create_channel(node_b.node.get_our_node_id(), channel_value, push_msat, 42, None, None).unwrap();
12591259
let open_channel_msg = get_event_msg!(node_a, MessageSendEvent::SendOpenChannel, node_b.node.get_our_node_id());
1260-
assert_eq!(open_channel_msg.temporary_channel_id, create_chan_id);
1260+
assert_eq!(open_channel_msg.common_fields.temporary_channel_id, create_chan_id);
12611261
assert_eq!(node_a.node.list_channels().iter().find(|channel| channel.channel_id == create_chan_id).unwrap().user_channel_id, 42);
12621262
node_b.node.handle_open_channel(&node_a.node.get_our_node_id(), &open_channel_msg);
12631263
if node_b.node.get_current_default_configuration().manually_accept_inbound_channels {

0 commit comments

Comments
 (0)