@@ -10,7 +10,7 @@ use lightning::routing::gossip::{NetworkGraph, NodeAlias, NodeId};
1010use lightning:: util:: logger:: Logger ;
1111use lightning:: { log_debug, log_warn, log_trace, log_given_level, log_gossip} ;
1212use lightning:: util:: ser:: { BigSize , FixedLengthReader , Readable } ;
13- use lightning:: { io , io :: Read } ;
13+ use lightning:: io ;
1414
1515use crate :: { GraphSyncError , RapidGossipSync } ;
1616
@@ -121,7 +121,8 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
121121 /*
122122 We encode additional information in the pubkey parity byte with the following mapping:
123123
124- 7-6: expect extra data after the pubkey (01 => u8, 10 => u16, 11 => u32)
124+ 7: expect extra data after the pubkey
125+ 6: use this as a reminder without altering anything
125126 5-3: index of new features among default (1-6). If index is 7 (all 3 bits are set, it's
126127 outside the present default range). 0 means no feature changes.
127128 2: addresses have changed
@@ -133,7 +134,8 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
133134
134135 let has_address_details = ( node_detail_flag & ( 1 << 2 ) ) > 0 ;
135136 let feature_detail_marker = ( node_detail_flag & ( 0b111 << 3 ) ) >> 3 ;
136- let additional_data_marker = ( node_detail_flag & ( 0b11 << 6 ) ) >> 6 ;
137+ let is_reminder = ( node_detail_flag & ( 1 << 6 ) ) > 0 ;
138+ let has_additional_data = ( node_detail_flag & ( 1 << 7 ) ) > 0 ;
137139
138140 // extract the relevant bits for pubkey parity
139141 let key_parity = node_detail_flag & 0b_0000_0011 ;
@@ -143,7 +145,7 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
143145 let current_node_id = NodeId :: from_pubkey ( & current_pubkey) ;
144146 node_ids. push ( current_pubkey) ;
145147
146- if has_address_details || feature_detail_marker > 0 {
148+ if is_reminder || has_address_details || feature_detail_marker > 0 {
147149 let mut synthetic_node_announcement = UnsignedNodeAnnouncement {
148150 features : NodeFeatures :: empty ( ) ,
149151 timestamp : backdated_timestamp,
@@ -205,25 +207,9 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
205207 node_modifications. push ( synthetic_node_announcement) ;
206208 }
207209
208- if additional_data_marker > 0 {
209- let additional_byte_count: u64 = match additional_data_marker {
210- 1 => {
211- u8:: read ( read_cursor) ? as u64
212- }
213- 2 => {
214- u16:: read ( read_cursor) ? as u64
215- }
216- 3 => {
217- u32:: read ( read_cursor) ? as u64
218- }
219- _ => {
220- return Err ( DecodeError :: BadLengthDescriptor . into ( ) ) ;
221- }
222- } ;
223-
224- let mut additional_data_reader = FixedLengthReader :: new ( & mut read_cursor, additional_byte_count) ;
225- let mut additional_data = Vec :: new ( ) ;
226- additional_data_reader. read_to_end ( & mut additional_data) ?;
210+ if has_additional_data {
211+ let additional_data: Vec < u8 > = Readable :: read ( read_cursor) ?;
212+ log_gossip ! ( self . logger, "Ignoring {} bytes of additional data in node announcement" , additional_data. len( ) ) ;
227213 }
228214 }
229215 } else {
@@ -277,7 +263,8 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
277263
278264 if version >= 2 && has_additional_data {
279265 // forwards compatibility
280- let _additional_data: Vec < u8 > = Readable :: read ( read_cursor) ?;
266+ let additional_data: Vec < u8 > = Readable :: read ( read_cursor) ?;
267+ log_gossip ! ( self . logger, "Ignoring {} bytes of additional data in channel announcement" , additional_data. len( ) ) ;
281268 }
282269 }
283270
@@ -329,7 +316,8 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
329316
330317 if scid_delta. 0 == 0 && is_same_direction_update {
331318 // this is additional data for forwards compatibility
332- let _additional_data: Vec < u8 > = Readable :: read ( read_cursor) ?;
319+ let additional_data: Vec < u8 > = Readable :: read ( read_cursor) ?;
320+ log_gossip ! ( self . logger, "Ignoring {} bytes of additional data in channel update" , additional_data. len( ) ) ;
333321 continue ;
334322 }
335323 }
@@ -561,19 +549,20 @@ mod tests {
561549
562550 #[ test]
563551 fn update_ignores_v2_additional_data ( ) {
564- let logger = TestLogger :: new ( ) ;
552+ let mut logger = TestLogger :: new ( ) ;
553+ logger. enable ( Level :: Gossip ) ;
565554 let network_graph = NetworkGraph :: new ( Network :: Bitcoin , & logger) ;
566555 let rapid_sync = RapidGossipSync :: new ( & network_graph, & logger) ;
567556
568557 let example_input = vec ! [
569558 76 , 68 , 75 , 2 , 111 , 226 , 140 , 10 , 182 , 241 , 179 , 114 , 193 , 166 , 162 , 70 , 174 , 99 , 247 ,
570- 79 , 147 , 30 , 131 , 101 , 225 , 90 , 8 , 156 , 104 , 214 , 25 , 0 , 0 , 0 , 0 , 0 , 102 , 105 , 15 , 48 ,
571- 0 , 0 , 0 , 0 , 2 , 127 , 27 , 132 , 197 , 86 , 123 , 18 , 100 , 64 , 153 , 93 , 62 , 213 , 170 , 186 , 5 ,
572- 101 , 215 , 30 , 24 , 52 , 96 , 72 , 25 , 255 , 156 , 23 , 245 , 233 , 213 , 221 , 7 , 143 , 5 , 14 , 5 ,
573- 10 , 103 , 111 , 111 , 103 , 108 , 101 , 46 , 99 , 111 , 109 , 1 , 187 , 38 , 4 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
574- 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 ,
575- 4 , 19 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 5 , 57 , 7 , 1 , 127 , 0 , 0 , 1 , 37 ,
576- 163 , 13 , 3 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 0 , 2 , 23 , 48 , 255 , 0 , 0 , 0 , 0 , 0 , 0 ,
559+ 79 , 147 , 30 , 131 , 101 , 225 , 90 , 8 , 156 , 104 , 214 , 25 , 0 , 0 , 0 , 0 , 0 , 102 , 106 , 12 , 80 ,
560+ 1 , 0 , 2 , 23 , 48 , 0 , 0 , 0 , 3 , 143 , 27 , 132 , 197 , 86 , 123 , 18 , 100 , 64 , 153 , 93 , 62 , 213 ,
561+ 170 , 186 , 5 , 101 , 215 , 30 , 24 , 52 , 96 , 72 , 25 , 255 , 156 , 23 , 245 , 233 , 213 , 221 , 7 , 143 ,
562+ 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 ,
563+ 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 ,
564+ 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 ,
565+ 10 , 103 , 111 , 111 , 103 , 108 , 101 , 46 , 99 , 111 , 109 , 1 , 187 , 0 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
577566 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
578567 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
579568 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
@@ -582,9 +571,9 @@ mod tests {
582571 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
583572 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
584573 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
585- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 66 , 77 , 75 , 108 , 209 , 54 , 16 , 50 ,
586- 202 , 155 , 210 , 174 , 185 , 217 , 0 , 170 , 77 , 69 , 217 , 234 , 216 , 10 , 201 , 66 , 51 , 116 , 196 ,
587- 81 , 167 , 37 , 77 , 7 , 102 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
574+ 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 ,
575+ 155 , 210 , 174 , 185 , 217 , 0 , 170 , 77 , 69 , 217 , 234 , 216 , 10 , 201 , 66 , 51 , 116 , 196 , 81 ,
576+ 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 ,
588577 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
589578 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
590579 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
@@ -593,21 +582,36 @@ mod tests {
593582 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
594583 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
595584 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
596- 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 ,
585+ 0 , 0 , 0 , 186 , 83 , 31 , 230 , 6 , 129 , 52 , 80 , 61 , 39 , 35 , 19 , 50 , 39 , 200 , 103 , 172 , 143 ,
586+ 166 , 200 , 60 , 83 , 126 , 154 , 68 , 195 , 197 , 189 , 189 , 203 , 31 , 227 , 55 , 0 , 2 , 22 , 49 , 0 ,
587+ 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 ,
588+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
589+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
590+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
591+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
592+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
593+ 0 , 0 , 0 , 0 , 0 , 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+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
595+ 0 , 0 , 0 , 0 , 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 ,
596+ 0 , 0 , 1 , 0 , 255 , 128 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 147 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
597597 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
598598 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
599599 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
600600 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
601601 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
602602 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
603- 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 ,
604- 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 ,
605- 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 0 , 1 , 0 , 1 , 0 , 17 , 42 , 42 , 42 , 42 ,
606- 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42
603+ 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 ,
604+ 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 ,
605+ 42 , 42 , 42 , 42 , 42 , 42 , 42 , 0 , 1 , 0 , 1 , 0 , 17 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 , 42 ,
606+ 42 , 42 , 42 , 42 , 42 , 42 , 42
607607 ] ;
608608
609609 let update_result = rapid_sync. update_network_graph_no_std ( & example_input[ ..] , None ) ;
610610 assert ! ( update_result. is_ok( ) ) ;
611+
612+ logger. assert_log_contains ( "lightning_rapid_gossip_sync::processing" , "Ignoring 255 bytes of additional data in node announcement" , 3 ) ;
613+ logger. assert_log_contains ( "lightning_rapid_gossip_sync::processing" , "Ignoring 147 bytes of additional data in channel announcement" , 1 ) ;
614+ logger. assert_log_contains ( "lightning_rapid_gossip_sync::processing" , "Ignoring 17 bytes of additional data in channel update" , 1 ) ;
611615 }
612616
613617 #[ test]
0 commit comments