From 7eee7974b0cf207e8d867c7ffaa9771c1e9d5822 Mon Sep 17 00:00:00 2001 From: Valentine Wallace Date: Fri, 9 Sep 2022 12:17:33 -0400 Subject: [PATCH] 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. --- lightning/src/ln/channelmanager.rs | 2 +- lightning/src/ln/features.rs | 10 +++++++++- lightning/src/util/test_utils.rs | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) 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() -- 2.39.5