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.
This commit is contained in:
Valentine Wallace 2022-09-09 12:17:33 -04:00
parent c106d4ff9f
commit 7eee7974b0
No known key found for this signature in database
GPG key ID: FD3E106A2CE099B4
3 changed files with 11 additions and 3 deletions

View file

@ -6122,7 +6122,7 @@ impl<Signer: Sign, M: Deref , T: Deref , K: Deref , F: Deref , L: Deref >
}
fn provided_node_features(&self) -> NodeFeatures {
NodeFeatures::known()
NodeFeatures::known_channel_features()
}
fn provided_init_features(&self, _their_init_features: &PublicKey) -> InitFeatures {

View file

@ -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<C>`. Only known `InvoiceFeatures` relevant to
/// context `C` are included in the result.

View file

@ -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()