@@ -10,7 +10,7 @@ use lightning::routing::gossip::{NetworkGraph, NodeAlias, NodeId};
10
10
use lightning:: util:: logger:: Logger ;
11
11
use lightning:: { log_debug, log_warn, log_trace, log_given_level, log_gossip} ;
12
12
use lightning:: util:: ser:: { BigSize , FixedLengthReader , Readable } ;
13
- use lightning:: { io , io :: Read } ;
13
+ use lightning:: io ;
14
14
15
15
use crate :: { GraphSyncError , RapidGossipSync } ;
16
16
@@ -121,7 +121,8 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
121
121
/*
122
122
We encode additional information in the pubkey parity byte with the following mapping:
123
123
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
125
126
5-3: index of new features among default (1-6). If index is 7 (all 3 bits are set, it's
126
127
outside the present default range). 0 means no feature changes.
127
128
2: addresses have changed
@@ -133,7 +134,8 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
133
134
134
135
let has_address_details = ( node_detail_flag & ( 1 << 2 ) ) > 0 ;
135
136
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 ;
137
139
138
140
// extract the relevant bits for pubkey parity
139
141
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
143
145
let current_node_id = NodeId :: from_pubkey ( & current_pubkey) ;
144
146
node_ids. push ( current_pubkey) ;
145
147
146
- if has_address_details || feature_detail_marker > 0 {
148
+ if is_reminder || has_address_details || feature_detail_marker > 0 {
147
149
let mut synthetic_node_announcement = UnsignedNodeAnnouncement {
148
150
features : NodeFeatures :: empty ( ) ,
149
151
timestamp : backdated_timestamp,
@@ -205,25 +207,9 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
205
207
node_modifications. push ( synthetic_node_announcement) ;
206
208
}
207
209
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( ) ) ;
227
213
}
228
214
}
229
215
} else {
@@ -277,7 +263,8 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
277
263
278
264
if version >= 2 && has_additional_data {
279
265
// 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( ) ) ;
281
268
}
282
269
}
283
270
@@ -329,7 +316,8 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
329
316
330
317
if scid_delta. 0 == 0 && is_same_direction_update {
331
318
// 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( ) ) ;
333
321
continue ;
334
322
}
335
323
}
@@ -561,19 +549,20 @@ mod tests {
561
549
562
550
#[ test]
563
551
fn update_ignores_v2_additional_data ( ) {
564
- let logger = TestLogger :: new ( ) ;
552
+ let mut logger = TestLogger :: new ( ) ;
553
+ logger. enable ( Level :: Gossip ) ;
565
554
let network_graph = NetworkGraph :: new ( Network :: Bitcoin , & logger) ;
566
555
let rapid_sync = RapidGossipSync :: new ( & network_graph, & logger) ;
567
556
568
557
let example_input = vec ! [
569
558
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 ,
577
566
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
578
567
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
579
568
0 , 0 , 0 , 0 , 0 , 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 {
582
571
0 , 0 , 0 , 0 , 0 , 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
572
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
584
573
0 , 0 , 0 , 0 , 0 , 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 ,
588
577
0 , 0 , 0 , 0 , 0 , 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
578
0 , 0 , 0 , 0 , 0 , 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
579
0 , 0 , 0 , 0 , 0 , 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 {
593
582
0 , 0 , 0 , 0 , 0 , 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
583
0 , 0 , 0 , 0 , 0 , 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
584
0 , 0 , 0 , 0 , 0 , 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 ,
597
597
23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
598
598
23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
599
599
23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
600
600
23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
601
601
23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
602
602
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
607
607
] ;
608
608
609
609
let update_result = rapid_sync. update_network_graph_no_std ( & example_input[ ..] , None ) ;
610
610
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 ) ;
611
615
}
612
616
613
617
#[ test]
0 commit comments