/// Create a Features with the features we support
pub fn supported() -> InitFeatures {
InitFeatures {
- flags: vec![2 | 1 << 5, 1 << (9-8) | 1 << (15 - 8), 1 << (17 - 8*2)],
+ flags: vec![2 | 1 << 3 | 1 << 5, 1 << (9-8) | 1 << (15 - 8), 1 << (17 - 8*2)],
mark: PhantomData,
}
}
match i {
// Blank out initial_routing_sync (feature bits 2/3), gossip_queries (6/7),
// gossip_queries_ex (10/11), option_static_remotekey (12/13), and
- // payment_secret (14/15)
+ // option_support_large_channel (16/17)
0 => flags.push(feature_byte & 0b00110011),
- 1 => flags.push(feature_byte & 0b00000011),
+ 1 => flags.push(feature_byte & 0b11000011),
+ 2 => flags.push(feature_byte & 0b00000011),
_ => (),
}
}
}
#[cfg(test)]
pub(crate) fn unset_upfront_shutdown_script(&mut self) {
- self.flags[0] ^= 1 << 5;
+ self.flags[0] &= !(1 << 5);
}
}
pub(crate) fn initial_routing_sync(&self) -> bool {
self.flags.len() > 0 && (self.flags[0] & (1 << 3)) != 0
}
- pub(crate) fn set_initial_routing_sync(&mut self) {
- if self.flags.len() == 0 {
- self.flags.resize(1, 1 << 3);
- } else {
- self.flags[0] |= 1 << 3;
+ pub(crate) fn clear_initial_routing_sync(&mut self) {
+ if self.flags.len() > 0 {
+ self.flags[0] &= !(1 << 3);
}
}
}
assert!(NodeFeatures::supported().supports_basic_mpp());
let mut init_features = InitFeatures::supported();
- init_features.set_initial_routing_sync();
- assert!(!init_features.requires_unknown_bits());
- assert!(!init_features.supports_unknown_bits());
+ assert!(init_features.initial_routing_sync());
+ init_features.clear_initial_routing_sync();
+ assert!(!init_features.initial_routing_sync());
}
#[test]
#[test]
fn test_node_with_known_relevant_init_flags() {
// Create an InitFeatures with initial_routing_sync supported.
- let mut init_features = InitFeatures::supported();
- init_features.set_initial_routing_sync();
+ let init_features = InitFeatures::supported();
+ assert!(init_features.initial_routing_sync());
// Attempt to pull out non-node-context feature flags from these InitFeatures.
let res = NodeFeatures::with_known_relevant_init_flags(&init_features);
{
// Check that the flags are as expected: optional_data_loss_protect,
- // option_upfront_shutdown_script, and var_onion_optin set.
+ // option_upfront_shutdown_script, var_onion_optin, payment_secret, and
+ // basic_mpp.
+ assert_eq!(res.flags.len(), 3);
assert_eq!(res.flags[0], 0b00100010);
- assert_eq!(res.flags[1], 0b00000010);
- assert_eq!(res.flags.len(), 2);
+ assert_eq!(res.flags[1], 0b10000010);
+ assert_eq!(res.flags[2], 0b00000010);
}
// Check that the initial_routing_sync feature was correctly blanked out.