Skip to content

Commit 166f326

Browse files
authored
Merge pull request #2329 from dunxen/2023-05-initgenesischeck
Add support for `networks` field in `Init` message
2 parents ede06d8 + b52b936 commit 166f326

17 files changed

+382
-100
lines changed

fuzz/src/chanmon_consistency.rs

+30-10
Original file line numberDiff line numberDiff line change
@@ -474,8 +474,12 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
474474
let mut channel_txn = Vec::new();
475475
macro_rules! make_channel {
476476
($source: expr, $dest: expr, $chan_id: expr) => { {
477-
$source.peer_connected(&$dest.get_our_node_id(), &Init { features: $dest.init_features(), remote_network_address: None }, true).unwrap();
478-
$dest.peer_connected(&$source.get_our_node_id(), &Init { features: $source.init_features(), remote_network_address: None }, false).unwrap();
477+
$source.peer_connected(&$dest.get_our_node_id(), &Init {
478+
features: $dest.init_features(), networks: None, remote_network_address: None
479+
}, true).unwrap();
480+
$dest.peer_connected(&$source.get_our_node_id(), &Init {
481+
features: $source.init_features(), networks: None, remote_network_address: None
482+
}, false).unwrap();
479483

480484
$source.create_channel($dest.get_our_node_id(), 100_000, 42, 0, None).unwrap();
481485
let open_channel = {
@@ -1006,15 +1010,23 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
10061010
},
10071011
0x0e => {
10081012
if chan_a_disconnected {
1009-
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: nodes[1].init_features(), remote_network_address: None }, true).unwrap();
1010-
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: nodes[0].init_features(), remote_network_address: None }, false).unwrap();
1013+
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init {
1014+
features: nodes[1].init_features(), networks: None, remote_network_address: None
1015+
}, true).unwrap();
1016+
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init {
1017+
features: nodes[0].init_features(), networks: None, remote_network_address: None
1018+
}, false).unwrap();
10111019
chan_a_disconnected = false;
10121020
}
10131021
},
10141022
0x0f => {
10151023
if chan_b_disconnected {
1016-
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: nodes[2].init_features(), remote_network_address: None }, true).unwrap();
1017-
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: nodes[1].init_features(), remote_network_address: None }, false).unwrap();
1024+
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init {
1025+
features: nodes[2].init_features(), networks: None, remote_network_address: None
1026+
}, true).unwrap();
1027+
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init {
1028+
features: nodes[1].init_features(), networks: None, remote_network_address: None
1029+
}, false).unwrap();
10181030
chan_b_disconnected = false;
10191031
}
10201032
},
@@ -1209,13 +1221,21 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
12091221

12101222
// Next, make sure peers are all connected to each other
12111223
if chan_a_disconnected {
1212-
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: nodes[1].init_features(), remote_network_address: None }, true).unwrap();
1213-
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: nodes[0].init_features(), remote_network_address: None }, false).unwrap();
1224+
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init {
1225+
features: nodes[1].init_features(), networks: None, remote_network_address: None
1226+
}, true).unwrap();
1227+
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init {
1228+
features: nodes[0].init_features(), networks: None, remote_network_address: None
1229+
}, false).unwrap();
12141230
chan_a_disconnected = false;
12151231
}
12161232
if chan_b_disconnected {
1217-
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: nodes[2].init_features(), remote_network_address: None }, true).unwrap();
1218-
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: nodes[1].init_features(), remote_network_address: None }, false).unwrap();
1233+
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init {
1234+
features: nodes[2].init_features(), networks: None, remote_network_address: None
1235+
}, true).unwrap();
1236+
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init {
1237+
features: nodes[1].init_features(), networks: None, remote_network_address: None
1238+
}, false).unwrap();
12191239
chan_b_disconnected = false;
12201240
}
12211241

lightning-background-processor/src/lib.rs

+8-4
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,7 @@ impl Drop for BackgroundProcessor {
838838

839839
#[cfg(all(feature = "std", test))]
840840
mod tests {
841-
use bitcoin::blockdata::constants::genesis_block;
841+
use bitcoin::blockdata::constants::{genesis_block, ChainHash};
842842
use bitcoin::blockdata::locktime::PackedLockTime;
843843
use bitcoin::blockdata::transaction::{Transaction, TxOut};
844844
use bitcoin::network::constants::Network;
@@ -1146,7 +1146,7 @@ mod tests {
11461146
let p2p_gossip_sync = Arc::new(P2PGossipSync::new(network_graph.clone(), Some(chain_source.clone()), logger.clone()));
11471147
let rapid_gossip_sync = Arc::new(RapidGossipSync::new(network_graph.clone(), logger.clone()));
11481148
let msg_handler = MessageHandler {
1149-
chan_handler: Arc::new(test_utils::TestChannelMessageHandler::new()),
1149+
chan_handler: Arc::new(test_utils::TestChannelMessageHandler::new(ChainHash::using_genesis_block(Network::Testnet))),
11501150
route_handler: Arc::new(test_utils::TestRoutingMessageHandler::new()),
11511151
onion_message_handler: IgnoringMessageHandler{}, custom_message_handler: IgnoringMessageHandler{}
11521152
};
@@ -1157,8 +1157,12 @@ mod tests {
11571157

11581158
for i in 0..num_nodes {
11591159
for j in (i+1)..num_nodes {
1160-
nodes[i].node.peer_connected(&nodes[j].node.get_our_node_id(), &Init { features: nodes[j].node.init_features(), remote_network_address: None }, true).unwrap();
1161-
nodes[j].node.peer_connected(&nodes[i].node.get_our_node_id(), &Init { features: nodes[i].node.init_features(), remote_network_address: None }, false).unwrap();
1160+
nodes[i].node.peer_connected(&nodes[j].node.get_our_node_id(), &Init {
1161+
features: nodes[j].node.init_features(), networks: None, remote_network_address: None
1162+
}, true).unwrap();
1163+
nodes[j].node.peer_connected(&nodes[i].node.get_our_node_id(), &Init {
1164+
features: nodes[i].node.init_features(), networks: None, remote_network_address: None
1165+
}, false).unwrap();
11621166
}
11631167
}
11641168

lightning-net-tokio/src/lib.rs

+5
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,8 @@ mod tests {
474474
use lightning::routing::gossip::NodeId;
475475
use lightning::events::*;
476476
use lightning::util::test_utils::TestNodeSigner;
477+
use bitcoin::Network;
478+
use bitcoin::blockdata::constants::ChainHash;
477479
use bitcoin::secp256k1::{Secp256k1, SecretKey, PublicKey};
478480

479481
use tokio::sync::mpsc;
@@ -556,6 +558,9 @@ mod tests {
556558
fn handle_error(&self, _their_node_id: &PublicKey, _msg: &ErrorMessage) {}
557559
fn provided_node_features(&self) -> NodeFeatures { NodeFeatures::empty() }
558560
fn provided_init_features(&self, _their_node_id: &PublicKey) -> InitFeatures { InitFeatures::empty() }
561+
fn get_genesis_hashes(&self) -> Option<Vec<ChainHash>> {
562+
Some(vec![ChainHash::using_genesis_block(Network::Testnet)])
563+
}
559564
}
560565
impl MessageSendEventsProvider for MsgHandler {
561566
fn get_and_clear_pending_msg_events(&self) -> Vec<MessageSendEvent> {

lightning/src/ln/chanmon_update_fail_tests.rs

+54-18
Original file line numberDiff line numberDiff line change
@@ -350,10 +350,14 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
350350
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
351351
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
352352

353-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }, true).unwrap();
353+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init {
354+
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
355+
}, true).unwrap();
354356
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
355357
assert_eq!(reestablish_1.len(), 1);
356-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }, false).unwrap();
358+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init {
359+
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
360+
}, false).unwrap();
357361
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
358362
assert_eq!(reestablish_2.len(), 1);
359363

@@ -372,10 +376,14 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
372376
assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
373377
assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
374378

375-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }, true).unwrap();
379+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init {
380+
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
381+
}, true).unwrap();
376382
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
377383
assert_eq!(reestablish_1.len(), 1);
378-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }, false).unwrap();
384+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init {
385+
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
386+
}, false).unwrap();
379387
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
380388
assert_eq!(reestablish_2.len(), 1);
381389

@@ -1136,8 +1144,12 @@ fn test_monitor_update_fail_reestablish() {
11361144
commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
11371145

11381146
chanmon_cfgs[1].persister.set_update_ret(ChannelMonitorUpdateStatus::InProgress);
1139-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }, true).unwrap();
1140-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }, false).unwrap();
1147+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init {
1148+
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
1149+
}, true).unwrap();
1150+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init {
1151+
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
1152+
}, false).unwrap();
11411153

11421154
let as_reestablish = get_chan_reestablish_msgs!(nodes[0], nodes[1]).pop().unwrap();
11431155
let bs_reestablish = get_chan_reestablish_msgs!(nodes[1], nodes[0]).pop().unwrap();
@@ -1155,8 +1167,12 @@ fn test_monitor_update_fail_reestablish() {
11551167
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
11561168
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
11571169

1158-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }, true).unwrap();
1159-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }, false).unwrap();
1170+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init {
1171+
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
1172+
}, true).unwrap();
1173+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init {
1174+
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
1175+
}, false).unwrap();
11601176

11611177
assert_eq!(get_chan_reestablish_msgs!(nodes[0], nodes[1]).pop().unwrap(), as_reestablish);
11621178
assert_eq!(get_chan_reestablish_msgs!(nodes[1], nodes[0]).pop().unwrap(), bs_reestablish);
@@ -1331,8 +1347,12 @@ fn claim_while_disconnected_monitor_update_fail() {
13311347
check_added_monitors!(nodes[1], 1);
13321348
expect_payment_claimed!(nodes[1], payment_hash_1, 1_000_000);
13331349

1334-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }, true).unwrap();
1335-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }, false).unwrap();
1350+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init {
1351+
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
1352+
}, true).unwrap();
1353+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init {
1354+
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
1355+
}, false).unwrap();
13361356

13371357
let as_reconnect = get_chan_reestablish_msgs!(nodes[0], nodes[1]).pop().unwrap();
13381358
let bs_reconnect = get_chan_reestablish_msgs!(nodes[1], nodes[0]).pop().unwrap();
@@ -1467,8 +1487,12 @@ fn monitor_failed_no_reestablish_response() {
14671487
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
14681488
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
14691489

1470-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }, true).unwrap();
1471-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }, false).unwrap();
1490+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init {
1491+
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
1492+
}, true).unwrap();
1493+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init {
1494+
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
1495+
}, false).unwrap();
14721496

14731497
let as_reconnect = get_chan_reestablish_msgs!(nodes[0], nodes[1]).pop().unwrap();
14741498
let bs_reconnect = get_chan_reestablish_msgs!(nodes[1], nodes[0]).pop().unwrap();
@@ -2076,9 +2100,13 @@ fn test_pending_update_fee_ack_on_reconnect() {
20762100
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
20772101
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
20782102

2079-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }, true).unwrap();
2103+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init {
2104+
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
2105+
}, true).unwrap();
20802106
let as_connect_msg = get_chan_reestablish_msgs!(nodes[0], nodes[1]).pop().unwrap();
2081-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }, false).unwrap();
2107+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init {
2108+
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
2109+
}, false).unwrap();
20822110
let bs_connect_msg = get_chan_reestablish_msgs!(nodes[1], nodes[0]).pop().unwrap();
20832111

20842112
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_connect_msg);
@@ -2204,9 +2232,13 @@ fn do_update_fee_resend_test(deliver_update: bool, parallel_updates: bool) {
22042232
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
22052233
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
22062234

2207-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }, true).unwrap();
2235+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init {
2236+
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
2237+
}, true).unwrap();
22082238
let as_connect_msg = get_chan_reestablish_msgs!(nodes[0], nodes[1]).pop().unwrap();
2209-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }, false).unwrap();
2239+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init {
2240+
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
2241+
}, false).unwrap();
22102242
let bs_connect_msg = get_chan_reestablish_msgs!(nodes[1], nodes[0]).pop().unwrap();
22112243

22122244
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_connect_msg);
@@ -2341,10 +2373,14 @@ fn do_channel_holding_cell_serialize(disconnect: bool, reload_a: bool) {
23412373
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
23422374

23432375
// Now reconnect the two
2344-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }, true).unwrap();
2376+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init {
2377+
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
2378+
}, true).unwrap();
23452379
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
23462380
assert_eq!(reestablish_1.len(), 1);
2347-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }, false).unwrap();
2381+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init {
2382+
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
2383+
}, false).unwrap();
23482384
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
23492385
assert_eq!(reestablish_2.len(), 1);
23502386

0 commit comments

Comments
 (0)