+ self.features.write(w)?;
+ let mut highest_gossip_encoding = 0;
+ for enc in self.gossip_compression_encodings.iter() {
+ highest_gossip_encoding = cmp::max(1 << (*enc as u8), highest_gossip_encoding);
+ }
+ let mut gossip_compression_bits = Vec::new();
+ gossip_compression_bits.resize(((highest_gossip_encoding + 7) / 8) as usize, 0);
+ for enc in self.gossip_compression_encodings.iter() {
+ let val = 1u32 << (*enc as u8);
+ gossip_compression_bits[(val / 8) as usize] |= (val % 8) as u8;
+ }
+ encode_tlv_stream!(w, {
+ // 1 - networks field to list genesis block hashes
+ (3, IterWriteWrapper(gossip_compression_bits.iter()), required)
+ });
+ Ok(())