From: Valentine Wallace Date: Fri, 9 Sep 2022 16:17:33 +0000 (-0400) Subject: Add a new NodeFeatures constructor to capture the types of flags X-Git-Tag: v0.0.111~5^2~5 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=7eee7974b0cf207e8d867c7ffaa9771c1e9d5822;p=rust-lightning Add a new NodeFeatures constructor to capture the types of flags When ChannelMessageHandler implementations wish to return a NodeFeatures which contain all the known flags that are relevant to channel handling, but not gossip handling, they currently need to do so by manually constructing a NodeFeatures with all known flags and then clearing the ones they don't want. Instead of spreading this logic across the codebase, this consolidates such construction into one place in features.rs. --- diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index 7d09a5b81..7495af879 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -6122,7 +6122,7 @@ impl } fn provided_node_features(&self) -> NodeFeatures { - NodeFeatures::known() + NodeFeatures::known_channel_features() } fn provided_init_features(&self, _their_init_features: &PublicKey) -> InitFeatures { diff --git a/lightning/src/ln/features.rs b/lightning/src/ln/features.rs index a680d0184..ceb78a4a0 100644 --- a/lightning/src/ln/features.rs +++ b/lightning/src/ln/features.rs @@ -164,7 +164,8 @@ mod sealed { ], optional_features: [ // Note that if new "non-channel-related" flags are added here they should be - // explicitly cleared in InitFeatures::known_channel_features. + // explicitly cleared in InitFeatures::known_channel_features and + // NodeFeatures::known_channel_features. // Byte 0 DataLossProtect | InitialRoutingSync | UpfrontShutdownScript | GossipQueries, // Byte 1 @@ -558,6 +559,13 @@ impl InitFeatures { } } +impl NodeFeatures { + /// Returns the set of known node features that are related to channels. + pub fn known_channel_features() -> NodeFeatures { + Self::known().clear_gossip_queries() + } +} + impl InvoiceFeatures { /// Converts `InvoiceFeatures` to `Features`. Only known `InvoiceFeatures` relevant to /// context `C` are included in the result. diff --git a/lightning/src/util/test_utils.rs b/lightning/src/util/test_utils.rs index abeb874b3..b0f9ba0a9 100644 --- a/lightning/src/util/test_utils.rs +++ b/lightning/src/util/test_utils.rs @@ -358,7 +358,7 @@ impl msgs::ChannelMessageHandler for TestChannelMessageHandler { self.received_msg(wire::Message::Error(msg.clone())); } fn provided_node_features(&self) -> NodeFeatures { - NodeFeatures::empty() + NodeFeatures::known_channel_features() } fn provided_init_features(&self, _their_init_features: &PublicKey) -> InitFeatures { InitFeatures::known_channel_features()