X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning-rapid-gossip-sync%2Fsrc%2Fprocessing.rs;h=c7b8a8321724a926c85b42aa9da15de49981a496;hb=cb0849855b7040bdac8cca7c8d8d4c066a1fd57e;hp=11cd69e2095418d72fb3e24507c20c2f74a439da;hpb=1856fd3d64580ed7c76651206dbe305a9cce4cdf;p=rust-lightning diff --git a/lightning-rapid-gossip-sync/src/processing.rs b/lightning-rapid-gossip-sync/src/processing.rs index 11cd69e2..c7b8a832 100644 --- a/lightning-rapid-gossip-sync/src/processing.rs +++ b/lightning-rapid-gossip-sync/src/processing.rs @@ -5,12 +5,15 @@ use core::sync::atomic::Ordering; use bitcoin::blockdata::constants::ChainHash; use bitcoin::secp256k1::PublicKey; -use lightning::ln::msgs::{DecodeError, ErrorAction, LightningError, SocketAddress, UnsignedChannelUpdate, UnsignedNodeAnnouncement}; +use lightning::io; +use lightning::ln::msgs::{ + DecodeError, ErrorAction, LightningError, SocketAddress, UnsignedChannelUpdate, + UnsignedNodeAnnouncement, +}; use lightning::routing::gossip::{NetworkGraph, NodeAlias, NodeId}; use lightning::util::logger::Logger; -use lightning::{log_debug, log_warn, log_trace, log_given_level, log_gossip}; use lightning::util::ser::{BigSize, FixedLengthReader, Readable}; -use lightning::io; +use lightning::{log_debug, log_given_level, log_gossip, log_trace, log_warn}; use crate::{GraphSyncError, RapidGossipSync}; @@ -18,7 +21,7 @@ use crate::{GraphSyncError, RapidGossipSync}; use std::time::{SystemTime, UNIX_EPOCH}; #[cfg(all(not(feature = "std"), not(test)))] -use alloc::{vec::Vec, borrow::ToOwned}; +use alloc::{borrow::ToOwned, vec::Vec}; use lightning::ln::features::NodeFeatures; /// The purpose of this prefix is to identify the serialization format, should other rapid gossip @@ -35,11 +38,13 @@ const MAX_INITIAL_NODE_ID_VECTOR_CAPACITY: u32 = 50_000; /// suggestion. const STALE_RGS_UPDATE_AGE_LIMIT_SECS: u64 = 60 * 60 * 24 * 14; -impl>, L: Deref> RapidGossipSync where L::Target: Logger { +impl>, L: Deref> RapidGossipSync +where + L::Target: Logger, +{ #[cfg(feature = "std")] pub(crate) fn update_network_graph_from_byte_stream( - &self, - read_cursor: &mut R, + &self, read_cursor: &mut R, ) -> Result { #[allow(unused_mut, unused_assignments)] let mut current_time_unix = None; @@ -47,15 +52,18 @@ impl>, L: Deref> RapidGossipSync where L { // Note that many tests rely on being able to set arbitrarily old timestamps, thus we // disable this check during tests! - current_time_unix = Some(SystemTime::now().duration_since(UNIX_EPOCH).expect("Time must be > 1970").as_secs()); + current_time_unix = Some( + SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("Time must be > 1970") + .as_secs(), + ); } self.update_network_graph_from_byte_stream_no_std(read_cursor, current_time_unix) } pub(crate) fn update_network_graph_from_byte_stream_no_std( - &self, - mut read_cursor: &mut R, - current_time_unix: Option + &self, mut read_cursor: &mut R, current_time_unix: Option, ) -> Result { log_trace!(self.logger, "Processing RGS data..."); let mut protocol_prefix = [0u8; 3]; @@ -75,19 +83,24 @@ impl>, L: Deref> RapidGossipSync where L let chain_hash: ChainHash = Readable::read(read_cursor)?; let ng_chain_hash = self.network_graph.get_chain_hash(); if chain_hash != ng_chain_hash { - return Err( - LightningError { - err: "Rapid Gossip Sync data's chain hash does not match the network graph's".to_owned(), - action: ErrorAction::IgnoreError, - }.into() - ); + return Err(LightningError { + err: "Rapid Gossip Sync data's chain hash does not match the network graph's" + .to_owned(), + action: ErrorAction::IgnoreError, + } + .into()); } let latest_seen_timestamp: u32 = Readable::read(read_cursor)?; if let Some(time) = current_time_unix { - if (latest_seen_timestamp as u64) < time.saturating_sub(STALE_RGS_UPDATE_AGE_LIMIT_SECS) { - return Err(LightningError{err: "Rapid Gossip Sync data is more than two weeks old".to_owned(), action: ErrorAction::IgnoreError}.into()); + if (latest_seen_timestamp as u64) < time.saturating_sub(STALE_RGS_UPDATE_AGE_LIMIT_SECS) + { + return Err(LightningError { + err: "Rapid Gossip Sync data is more than two weeks old".to_owned(), + action: ErrorAction::IgnoreError, + } + .into()); } } @@ -157,7 +170,8 @@ impl>, L: Deref> RapidGossipSync where L excess_data: Vec::new(), }; - read_only_network_graph.nodes() + read_only_network_graph + .nodes() .get(¤t_node_id) .and_then(|node| node.announcement_info.as_ref()) .map(|info| { @@ -172,7 +186,8 @@ impl>, L: Deref> RapidGossipSync where L let mut node_addresses: Vec = Vec::new(); for address_index in 0..address_count { let current_byte_count: u8 = Readable::read(read_cursor)?; - let mut address_reader = FixedLengthReader::new(&mut read_cursor, current_byte_count as u64); + let mut address_reader = + FixedLengthReader::new(&mut read_cursor, current_byte_count as u64); if let Ok(current_address) = Readable::read(&mut address_reader) { node_addresses.push(current_address); if address_reader.bytes_remain() { @@ -183,7 +198,8 @@ impl>, L: Deref> RapidGossipSync where L log_gossip!( self.logger, "Failure to parse address at index {} for node ID {}", - address_index, current_node_id + address_index, + current_node_id ); address_reader.eat_remaining()?; } @@ -209,7 +225,11 @@ impl>, L: Deref> RapidGossipSync where L if has_additional_data { let additional_data: Vec = Readable::read(read_cursor)?; - log_gossip!(self.logger, "Ignoring {} bytes of additional data in node announcement", additional_data.len()); + log_gossip!( + self.logger, + "Ignoring {} bytes of additional data in node announcement", + additional_data.len() + ); } } } else { @@ -226,9 +246,8 @@ impl>, L: Deref> RapidGossipSync where L // handle SCID let scid_delta: BigSize = Readable::read(read_cursor)?; - let short_channel_id = previous_scid - .checked_add(scid_delta.0) - .ok_or(DecodeError::InvalidValue)?; + let short_channel_id = + previous_scid.checked_add(scid_delta.0).ok_or(DecodeError::InvalidValue)?; previous_scid = short_channel_id; let node_id_1_index: BigSize = Readable::read(read_cursor)?; @@ -243,8 +262,12 @@ impl>, L: Deref> RapidGossipSync where L let node_id_1 = node_ids[node_id_1_index.0 as usize]; let node_id_2 = node_ids[node_id_2_index.0 as usize]; - log_gossip!(self.logger, "Adding channel {} from RGS announcement at {}", - short_channel_id, latest_seen_timestamp); + log_gossip!( + self.logger, + "Adding channel {} from RGS announcement at {}", + short_channel_id, + latest_seen_timestamp + ); let announcement_result = network_graph.add_channel_from_partial_announcement( short_channel_id, @@ -257,7 +280,11 @@ impl>, L: Deref> RapidGossipSync where L if let ErrorAction::IgnoreDuplicateGossip = lightning_error.action { // everything is fine, just a duplicate channel announcement } else { - log_warn!(self.logger, "Failed to process channel announcement: {:?}", lightning_error); + log_warn!( + self.logger, + "Failed to process channel announcement: {:?}", + lightning_error + ); return Err(lightning_error.into()); } } @@ -265,20 +292,29 @@ impl>, L: Deref> RapidGossipSync where L if version >= 2 && has_additional_data { // forwards compatibility let additional_data: Vec = Readable::read(read_cursor)?; - log_gossip!(self.logger, "Ignoring {} bytes of additional data in channel announcement", additional_data.len()); + log_gossip!( + self.logger, + "Ignoring {} bytes of additional data in channel announcement", + additional_data.len() + ); } } for modification in node_modifications { match network_graph.update_node_from_unsigned_announcement(&modification) { - Ok(_) => {} - Err(LightningError { action: ErrorAction::IgnoreDuplicateGossip, .. }) => {} + Ok(_) => {}, + Err(LightningError { action: ErrorAction::IgnoreDuplicateGossip, .. }) => {}, Err(LightningError { action: ErrorAction::IgnoreAndLog(level), err }) => { - log_given_level!(self.logger, level, "Failed to apply node announcement: {:?}", err); - } + log_given_level!( + self.logger, + level, + "Failed to apply node announcement: {:?}", + err + ); + }, Err(LightningError { action: ErrorAction::IgnoreError, err }) => { log_gossip!(self.logger, "Failed to apply node announcement: {:?}", err); - } + }, Err(e) => return Err(e.into()), } } @@ -304,9 +340,8 @@ impl>, L: Deref> RapidGossipSync where L for _ in 0..update_count { let scid_delta: BigSize = Readable::read(read_cursor)?; - let short_channel_id = previous_scid - .checked_add(scid_delta.0) - .ok_or(DecodeError::InvalidValue)?; + let short_channel_id = + previous_scid.checked_add(scid_delta.0).ok_or(DecodeError::InvalidValue)?; previous_scid = short_channel_id; let channel_flags: u8 = Readable::read(read_cursor)?; @@ -319,7 +354,11 @@ impl>, L: Deref> RapidGossipSync where L if scid_delta.0 == 0 && is_same_direction_update { // this is additional data for forwards compatibility let additional_data: Vec = Readable::read(read_cursor)?; - log_gossip!(self.logger, "Ignoring {} bytes of additional data in channel update", additional_data.len()); + log_gossip!( + self.logger, + "Ignoring {} bytes of additional data in channel update", + additional_data.len() + ); continue; } } @@ -345,15 +384,17 @@ impl>, L: Deref> RapidGossipSync where L if (channel_flags & 0b_1000_0000) != 0 { // incremental update, field flags will indicate mutated values let read_only_network_graph = network_graph.read_only(); - if let Some(directional_info) = - read_only_network_graph.channels().get(&short_channel_id) + if let Some(directional_info) = read_only_network_graph + .channels() + .get(&short_channel_id) .and_then(|channel| channel.get_directional_info(channel_flags)) { synthetic_update.cltv_expiry_delta = directional_info.cltv_expiry_delta; synthetic_update.htlc_minimum_msat = directional_info.htlc_minimum_msat; synthetic_update.htlc_maximum_msat = directional_info.htlc_maximum_msat; synthetic_update.fee_base_msat = directional_info.fees.base_msat; - synthetic_update.fee_proportional_millionths = directional_info.fees.proportional_millionths; + synthetic_update.fee_proportional_millionths = + directional_info.fees.proportional_millionths; } else { log_trace!(self.logger, "Skipping application of channel update for chan {} with flags {} as original data is missing.", @@ -391,13 +432,23 @@ impl>, L: Deref> RapidGossipSync where L continue; } - log_gossip!(self.logger, "Updating channel {} with flags {} from RGS announcement at {}", - short_channel_id, channel_flags, latest_seen_timestamp); + log_gossip!( + self.logger, + "Updating channel {} with flags {} from RGS announcement at {}", + short_channel_id, + channel_flags, + latest_seen_timestamp + ); match network_graph.update_channel_unsigned(&synthetic_update) { Ok(_) => {}, Err(LightningError { action: ErrorAction::IgnoreDuplicateGossip, .. }) => {}, Err(LightningError { action: ErrorAction::IgnoreAndLog(level), err }) => { - log_given_level!(self.logger, level, "Failed to apply channel update: {:?}", err); + log_given_level!( + self.logger, + level, + "Failed to apply channel update: {:?}", + err + ); }, Err(LightningError { action: ErrorAction::IgnoreError, .. }) => {}, Err(e) => return Err(e.into()), @@ -431,21 +482,20 @@ mod tests { use crate::{GraphSyncError, RapidGossipSync}; const VALID_RGS_BINARY: [u8; 300] = [ - 76, 68, 75, 1, 111, 226, 140, 10, 182, 241, 179, 114, 193, 166, 162, 70, 174, 99, 247, - 79, 147, 30, 131, 101, 225, 90, 8, 156, 104, 214, 25, 0, 0, 0, 0, 0, 97, 227, 98, 218, - 0, 0, 0, 4, 2, 22, 7, 207, 206, 25, 164, 197, 231, 230, 231, 56, 102, 61, 250, 251, - 187, 172, 38, 46, 79, 247, 108, 44, 155, 48, 219, 238, 252, 53, 192, 6, 67, 2, 36, 125, - 157, 176, 223, 175, 234, 116, 94, 248, 201, 225, 97, 235, 50, 47, 115, 172, 63, 136, - 88, 216, 115, 11, 111, 217, 114, 84, 116, 124, 231, 107, 2, 158, 1, 242, 121, 152, 106, - 204, 131, 186, 35, 93, 70, 216, 10, 237, 224, 183, 89, 95, 65, 3, 83, 185, 58, 138, - 181, 64, 187, 103, 127, 68, 50, 2, 201, 19, 17, 138, 136, 149, 185, 226, 156, 137, 175, - 110, 32, 237, 0, 217, 90, 31, 100, 228, 149, 46, 219, 175, 168, 77, 4, 143, 38, 128, - 76, 97, 0, 0, 0, 2, 0, 0, 255, 8, 153, 192, 0, 2, 27, 0, 0, 0, 1, 0, 0, 255, 2, 68, - 226, 0, 6, 11, 0, 1, 2, 3, 0, 0, 0, 4, 0, 40, 0, 0, 0, 0, 0, 0, 3, 232, 0, 0, 3, 232, - 0, 0, 0, 1, 0, 0, 0, 0, 29, 129, 25, 192, 255, 8, 153, 192, 0, 2, 27, 0, 0, 60, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 100, 0, 0, 2, 224, 0, 0, 0, 0, 58, 85, 116, 216, 0, 29, 0, - 0, 0, 1, 0, 0, 0, 125, 0, 0, 0, 0, 58, 85, 116, 216, 255, 2, 68, 226, 0, 6, 11, 0, 1, - 0, 0, 1, + 76, 68, 75, 1, 111, 226, 140, 10, 182, 241, 179, 114, 193, 166, 162, 70, 174, 99, 247, 79, + 147, 30, 131, 101, 225, 90, 8, 156, 104, 214, 25, 0, 0, 0, 0, 0, 97, 227, 98, 218, 0, 0, 0, + 4, 2, 22, 7, 207, 206, 25, 164, 197, 231, 230, 231, 56, 102, 61, 250, 251, 187, 172, 38, + 46, 79, 247, 108, 44, 155, 48, 219, 238, 252, 53, 192, 6, 67, 2, 36, 125, 157, 176, 223, + 175, 234, 116, 94, 248, 201, 225, 97, 235, 50, 47, 115, 172, 63, 136, 88, 216, 115, 11, + 111, 217, 114, 84, 116, 124, 231, 107, 2, 158, 1, 242, 121, 152, 106, 204, 131, 186, 35, + 93, 70, 216, 10, 237, 224, 183, 89, 95, 65, 3, 83, 185, 58, 138, 181, 64, 187, 103, 127, + 68, 50, 2, 201, 19, 17, 138, 136, 149, 185, 226, 156, 137, 175, 110, 32, 237, 0, 217, 90, + 31, 100, 228, 149, 46, 219, 175, 168, 77, 4, 143, 38, 128, 76, 97, 0, 0, 0, 2, 0, 0, 255, + 8, 153, 192, 0, 2, 27, 0, 0, 0, 1, 0, 0, 255, 2, 68, 226, 0, 6, 11, 0, 1, 2, 3, 0, 0, 0, 4, + 0, 40, 0, 0, 0, 0, 0, 0, 3, 232, 0, 0, 3, 232, 0, 0, 0, 1, 0, 0, 0, 0, 29, 129, 25, 192, + 255, 8, 153, 192, 0, 2, 27, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 100, 0, 0, 2, 224, + 0, 0, 0, 0, 58, 85, 116, 216, 0, 29, 0, 0, 0, 1, 0, 0, 0, 125, 0, 0, 0, 0, 58, 85, 116, + 216, 255, 2, 68, 226, 0, 6, 11, 0, 1, 0, 0, 1, ]; const VALID_BINARY_TIMESTAMP: u64 = 1642291930; @@ -491,15 +541,15 @@ mod tests { 76, 68, 75, 2, 111, 226, 140, 10, 182, 241, 179, 114, 193, 166, 162, 70, 174, 99, 247, 79, 147, 30, 131, 101, 225, 90, 8, 156, 104, 214, 25, 0, 0, 0, 0, 0, 102, 97, 206, 240, 0, 0, 0, 0, 2, 63, 27, 132, 197, 86, 123, 18, 100, 64, 153, 93, 62, 213, 170, 186, 5, - 101, 215, 30, 24, 52, 96, 72, 25, 255, 156, 23, 245, 233, 213, 221, 7, 143, 5, 38, 4, 1, + 101, 215, 30, 24, 52, 96, 72, 25, 255, 156, 23, 245, 233, 213, 221, 7, 143, 5, 38, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 2, 3, 0, 4, 7, 1, 127, 0, 0, 1, 37, 163, 14, 5, 10, 103, 111, 111, 103, 108, - 101, 46, 99, 111, 109, 1, 187, 19, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, - 57, 13, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 2, 23, 48, 62, 77, 75, 108, 209, - 54, 16, 50, 202, 155, 210, 174, 185, 217, 0, 170, 77, 69, 217, 234, 216, 10, 201, 66, - 51, 116, 196, 81, 167, 37, 77, 7, 102, 0, 0, 2, 25, 48, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, - 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 1 + 1, 1, 1, 0, 2, 3, 0, 4, 7, 1, 127, 0, 0, 1, 37, 163, 14, 5, 10, 103, 111, 111, 103, + 108, 101, 46, 99, 111, 109, 1, 187, 19, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 5, 57, 13, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 2, 23, 48, 62, 77, 75, 108, + 209, 54, 16, 50, 202, 155, 210, 174, 185, 217, 0, 170, 77, 69, 217, 234, 216, 10, 201, + 66, 51, 116, 196, 81, 167, 37, 77, 7, 102, 0, 0, 2, 25, 48, 0, 0, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 1, ]; let rapid_sync = RapidGossipSync::new(&network_graph, &logger); @@ -512,7 +562,11 @@ mod tests { { // address node - let node_id = NodeId::from_slice(&[3, 27, 132, 197, 86, 123, 18, 100, 64, 153, 93, 62, 213, 170, 186, 5, 101, 215, 30, 24, 52, 96, 72, 25, 255, 156, 23, 245, 233, 213, 221, 7, 143]).unwrap(); + let node_id = NodeId::from_slice(&[ + 3, 27, 132, 197, 86, 123, 18, 100, 64, 153, 93, 62, 213, 170, 186, 5, 101, 215, 30, + 24, 52, 96, 72, 25, 255, 156, 23, 245, 233, 213, 221, 7, 143, + ]) + .unwrap(); let node = nodes.get(&node_id).unwrap(); let announcement_info = node.announcement_info.as_ref().unwrap(); let addresses = announcement_info.addresses(); @@ -521,7 +575,11 @@ mod tests { { // feature node - let node_id = NodeId::from_slice(&[2, 77, 75, 108, 209, 54, 16, 50, 202, 155, 210, 174, 185, 217, 0, 170, 77, 69, 217, 234, 216, 10, 201, 66, 51, 116, 196, 81, 167, 37, 77, 7, 102]).unwrap(); + let node_id = NodeId::from_slice(&[ + 2, 77, 75, 108, 209, 54, 16, 50, 202, 155, 210, 174, 185, 217, 0, 170, 77, 69, 217, + 234, 216, 10, 201, 66, 51, 116, 196, 81, 167, 37, 77, 7, 102, + ]) + .unwrap(); let node = nodes.get(&node_id).unwrap(); let announcement_info = node.announcement_info.as_ref().unwrap(); let features = announcement_info.features(); @@ -529,7 +587,11 @@ mod tests { // assert_eq!(addresses.len(), 5); } - logger.assert_log_contains("lightning_rapid_gossip_sync::processing", "Failed to apply node announcement", 0); + logger.assert_log_contains( + "lightning_rapid_gossip_sync::processing", + "Failed to apply node announcement", + 0, + ); } #[test] @@ -540,13 +602,25 @@ mod tests { let rapid_sync = RapidGossipSync::new(&network_graph, &logger); let example_input = vec![ - 76, 68, 75, 2, 111, 226, 140, 10, 182, 241, 179, 114, 193, 166, 162, 70, 174, 99, 247, 79, 147, 30, 131, 101, 225, 90, 8, 156, 104, 214, 25, 0, 0, 0, 0, 0, 102, 105, 183, 240, 0, 0, 0, 0, 1, 63, 27, 132, 197, 86, 123, 18, 100, 64, 153, 93, 62, 213, 170, 186, 5, 101, 215, 30, 24, 52, 96, 72, 25, 255, 156, 23, 245, 233, 213, 221, 7, 143, 5, 13, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 7, 1, 127, 0, 0, 1, 37, 163, 19, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 57, 38, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 3, 0, 4, 14, 5, 10, 103, 111, 111, 103, 108, 101, 46, 99, 111, 109, 1, 187, 0, 2, 23, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 68, 75, 2, 111, 226, 140, 10, 182, 241, 179, 114, 193, 166, 162, 70, 174, 99, 247, + 79, 147, 30, 131, 101, 225, 90, 8, 156, 104, 214, 25, 0, 0, 0, 0, 0, 102, 105, 183, + 240, 0, 0, 0, 0, 1, 63, 27, 132, 197, 86, 123, 18, 100, 64, 153, 93, 62, 213, 170, 186, + 5, 101, 215, 30, 24, 52, 96, 72, 25, 255, 156, 23, 245, 233, 213, 221, 7, 143, 5, 13, + 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 7, 1, 127, 0, 0, 1, 37, 163, 19, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 57, 38, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 3, 0, 4, 14, 5, + 10, 103, 111, 111, 103, 108, 101, 46, 99, 111, 109, 1, 187, 0, 2, 23, 48, 0, 0, 0, 0, + 0, 0, 0, 0, ]; let update_result = rapid_sync.update_network_graph_no_std(&example_input[..], None); assert!(update_result.is_ok()); - logger.assert_log_contains("lightning_rapid_gossip_sync::processing", "Failed to apply node announcement: \"No existing channels for node_announcement\"", 1); + logger.assert_log_contains( + "lightning_rapid_gossip_sync::processing", + "Failed to apply node announcement: \"No existing channels for node_announcement\"", + 1, + ); } #[test] @@ -560,11 +634,12 @@ mod tests { 76, 68, 75, 2, 111, 226, 140, 10, 182, 241, 179, 114, 193, 166, 162, 70, 174, 99, 247, 79, 147, 30, 131, 101, 225, 90, 8, 156, 104, 214, 25, 0, 0, 0, 0, 0, 102, 106, 12, 80, 1, 0, 2, 23, 48, 0, 0, 0, 3, 143, 27, 132, 197, 86, 123, 18, 100, 64, 153, 93, 62, 213, - 170, 186, 5, 101, 215, 30, 24, 52, 96, 72, 25, 255, 156, 23, 245, 233, 213, 221, 7, 143, - 5, 38, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 2, 3, 0, 4, 19, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 5, 57, 13, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 7, 1, 127, 0, 0, 1, 37, 163, 14, 5, - 10, 103, 111, 111, 103, 108, 101, 46, 99, 111, 109, 1, 187, 0, 255, 0, 0, 0, 0, 0, 0, 0, + 170, 186, 5, 101, 215, 30, 24, 52, 96, 72, 25, 255, 156, 23, 245, 233, 213, 221, 7, + 143, 5, 38, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 3, 0, 4, 19, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 5, 57, 13, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 7, 1, 127, 0, 0, 1, 37, 163, + 14, 5, 10, 103, 111, 111, 103, 108, 101, 46, 99, 111, 109, 1, 187, 0, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -572,10 +647,10 @@ mod tests { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 77, 75, 108, 209, 54, 16, + 50, 202, 155, 210, 174, 185, 217, 0, 170, 77, 69, 217, 234, 216, 10, 201, 66, 51, 116, + 196, 81, 167, 37, 77, 7, 102, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 77, 75, 108, 209, 54, 16, 50, 202, - 155, 210, 174, 185, 217, 0, 170, 77, 69, 217, 234, 216, 10, 201, 66, 51, 116, 196, 81, - 167, 37, 77, 7, 102, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -583,10 +658,10 @@ mod tests { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 186, 83, 31, 230, 6, 129, 52, 80, 61, 39, 35, 19, 50, 39, 200, + 103, 172, 143, 166, 200, 60, 83, 126, 154, 68, 195, 197, 189, 189, 203, 31, 227, 55, 0, + 2, 22, 49, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 186, 83, 31, 230, 6, 129, 52, 80, 61, 39, 35, 19, 50, 39, 200, 103, 172, 143, - 166, 200, 60, 83, 126, 154, 68, 195, 197, 189, 189, 203, 31, 227, 55, 0, 2, 22, 49, 0, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -594,26 +669,37 @@ mod tests { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 1, 0, 255, 128, 0, 0, 0, 0, 0, 0, 1, 0, 147, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 0, 0, 0, 1, 0, 0, 1, 0, 255, 128, 0, 0, 0, 0, 0, 0, 1, 0, 147, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 0, 1, 0, 1, 0, 17, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42 + 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 1, 0, 1, 0, 17, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, ]; let update_result = rapid_sync.update_network_graph_no_std(&example_input[..], None); assert!(update_result.is_ok()); - logger.assert_log_contains("lightning_rapid_gossip_sync::processing", "Ignoring 255 bytes of additional data in node announcement", 3); - logger.assert_log_contains("lightning_rapid_gossip_sync::processing", "Ignoring 147 bytes of additional data in channel announcement", 1); - logger.assert_log_contains("lightning_rapid_gossip_sync::processing", "Ignoring 17 bytes of additional data in channel update", 1); + logger.assert_log_contains( + "lightning_rapid_gossip_sync::processing", + "Ignoring 255 bytes of additional data in node announcement", + 3, + ); + logger.assert_log_contains( + "lightning_rapid_gossip_sync::processing", + "Ignoring 147 bytes of additional data in channel announcement", + 1, + ); + logger.assert_log_contains( + "lightning_rapid_gossip_sync::processing", + "Ignoring 17 bytes of additional data in channel update", + 1, + ); } #[test] @@ -692,10 +778,7 @@ mod tests { let rapid_sync = RapidGossipSync::new(&network_graph, &logger); let initialization_result = rapid_sync.update_network_graph(&initialization_input[..]); if initialization_result.is_err() { - panic!( - "Unexpected initialization result: {:?}", - initialization_result - ) + panic!("Unexpected initialization result: {:?}", initialization_result) } assert_eq!(network_graph.read_only().channels().len(), 2); @@ -758,7 +841,8 @@ mod tests { 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 8, 153, 192, 0, 2, 27, 0, 0, 136, 0, 0, 0, 221, 255, 2, 68, 226, 0, 6, 11, 0, 1, 128, ]; - let update_result = rapid_sync.update_network_graph(&single_direction_incremental_update_input[..]); + let update_result = + rapid_sync.update_network_graph(&single_direction_incremental_update_input[..]); if update_result.is_err() { panic!("Unexpected update result: {:?}", update_result) } @@ -818,9 +902,11 @@ mod tests { 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 8, 153, 192, 0, 2, 27, 0, 0, 136, 0, 0, 0, 221, 255, 2, 68, 226, 0, 6, 11, 0, 1, 128, ]; - let update_result_1 = rapid_sync.update_network_graph(&single_direction_incremental_update_input[..]); + let update_result_1 = + rapid_sync.update_network_graph(&single_direction_incremental_update_input[..]); // Apply duplicate update - let update_result_2 = rapid_sync.update_network_graph(&single_direction_incremental_update_input[..]); + let update_result_2 = + rapid_sync.update_network_graph(&single_direction_incremental_update_input[..]); assert!(update_result_1.is_ok()); assert!(update_result_2.is_ok()); } @@ -883,7 +969,8 @@ mod tests { assert_eq!(network_graph.read_only().channels().len(), 0); let rapid_sync = RapidGossipSync::new(&network_graph, &logger); - let update_result = rapid_sync.update_network_graph_no_std(&VALID_RGS_BINARY, Some(latest_nonpruning_time)); + let update_result = rapid_sync + .update_network_graph_no_std(&VALID_RGS_BINARY, Some(latest_nonpruning_time)); assert!(update_result.is_ok()); assert_eq!(network_graph.read_only().channels().len(), 2); } @@ -893,7 +980,8 @@ mod tests { assert_eq!(network_graph.read_only().channels().len(), 0); let rapid_sync = RapidGossipSync::new(&network_graph, &logger); - let update_result = rapid_sync.update_network_graph_no_std(&VALID_RGS_BINARY, Some(latest_nonpruning_time + 1)); + let update_result = rapid_sync + .update_network_graph_no_std(&VALID_RGS_BINARY, Some(latest_nonpruning_time + 1)); assert!(update_result.is_ok()); assert_eq!(network_graph.read_only().channels().len(), 0); } @@ -912,7 +1000,8 @@ mod tests { assert_eq!(network_graph.read_only().channels().len(), 0); let rapid_sync = RapidGossipSync::new(&network_graph, &logger); - let update_result = rapid_sync.update_network_graph_no_std(&VALID_RGS_BINARY, Some(latest_succeeding_time)); + let update_result = rapid_sync + .update_network_graph_no_std(&VALID_RGS_BINARY, Some(latest_succeeding_time)); assert!(update_result.is_ok()); assert_eq!(network_graph.read_only().channels().len(), 0); } @@ -922,7 +1011,8 @@ mod tests { assert_eq!(network_graph.read_only().channels().len(), 0); let rapid_sync = RapidGossipSync::new(&network_graph, &logger); - let update_result = rapid_sync.update_network_graph_no_std(&VALID_RGS_BINARY, Some(earliest_failing_time)); + let update_result = rapid_sync + .update_network_graph_no_std(&VALID_RGS_BINARY, Some(earliest_failing_time)); assert!(update_result.is_err()); if let Err(GraphSyncError::LightningError(lightning_error)) = update_result { assert_eq!( @@ -982,7 +1072,10 @@ mod tests { let update_result = rapid_sync.update_network_graph_no_std(&VALID_RGS_BINARY, Some(0)); assert!(update_result.is_err()); if let Err(GraphSyncError::LightningError(err)) = update_result { - assert_eq!(err.err, "Rapid Gossip Sync data's chain hash does not match the network graph's"); + assert_eq!( + err.err, + "Rapid Gossip Sync data's chain hash does not match the network graph's" + ); } else { panic!("Unexpected update result: {:?}", update_result) }