From b6c92e175e6fe7b5f48f17fdaadb023f5eb3877e Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Tue, 3 Mar 2020 15:27:45 -0500 Subject: [PATCH] Add detection of feature_static_remotekey support and print This adds the ability to check for static_remotekey in appropriate feature contexts and prints it at connect time. It is still considered unknown for the purposes of requires_unknown_bits() as we don't yet implement it. --- lightning/src/ln/features.rs | 16 ++++++++++++---- lightning/src/ln/peer_handler.rs | 3 ++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lightning/src/ln/features.rs b/lightning/src/ln/features.rs index b65b9b1b2..4f263d475 100644 --- a/lightning/src/ln/features.rs +++ b/lightning/src/ln/features.rs @@ -97,7 +97,7 @@ mod sealed { // Byte 0 DataLossProtect | InitialRoutingSync | UpfrontShutdownScript, // Byte 1 - VariableLengthOnion | PaymentSecret, + VariableLengthOnion | StaticRemoteKey | PaymentSecret, // Byte 2 BasicMPP, ], @@ -115,7 +115,7 @@ mod sealed { // Byte 0 DataLossProtect | UpfrontShutdownScript, // Byte 1 - VariableLengthOnion | PaymentSecret, + VariableLengthOnion | StaticRemoteKey | PaymentSecret, // Byte 2 BasicMPP, ], @@ -236,6 +236,8 @@ mod sealed { "Feature flags for `option_upfront_shutdown_script`."); define_feature!(9, VariableLengthOnion, [InitContext, NodeContext], "Feature flags for `var_onion_optin`."); + define_feature!(13, StaticRemoteKey, [InitContext, NodeContext], + "Feature flags for `option_static_remotekey`."); define_feature!(15, PaymentSecret, [InitContext, NodeContext], "Feature flags for `payment_secret`."); define_feature!(17, BasicMPP, [InitContext, NodeContext], @@ -470,6 +472,12 @@ impl Features { } } +impl Features { + pub(crate) fn supports_static_remote_key(&self) -> bool { + ::supports_feature(&self.flags) + } +} + impl Features { pub(crate) fn initial_routing_sync(&self) -> bool { ::supports_feature(&self.flags) @@ -600,11 +608,11 @@ mod tests { { // Check that the flags are as expected: // - option_data_loss_protect - // - var_onion_optin | payment_secret + // - var_onion_optin | static_remote_key | payment_secret // - basic_mpp assert_eq!(node_features.flags.len(), 3); assert_eq!(node_features.flags[0], 0b00000010); - assert_eq!(node_features.flags[1], 0b10000010); + assert_eq!(node_features.flags[1], 0b10100010); assert_eq!(node_features.flags[2], 0b00000010); } diff --git a/lightning/src/ln/peer_handler.rs b/lightning/src/ln/peer_handler.rs index 51a546de6..02bb2625b 100644 --- a/lightning/src/ln/peer_handler.rs +++ b/lightning/src/ln/peer_handler.rs @@ -629,10 +629,11 @@ impl PeerManager where return Err(PeerHandleError{ no_connection_possible: false }); } - log_info!(self, "Received peer Init message: data_loss_protect: {}, initial_routing_sync: {}, upfront_shutdown_script: {}, unkown local flags: {}, unknown global flags: {}", + log_info!(self, "Received peer Init message: data_loss_protect: {}, initial_routing_sync: {}, upfront_shutdown_script: {}, static_remote_key: {}, unkown local flags: {}, unknown global flags: {}", if msg.features.supports_data_loss_protect() { "supported" } else { "not supported"}, if msg.features.initial_routing_sync() { "requested" } else { "not requested" }, if msg.features.supports_upfront_shutdown_script() { "supported" } else { "not supported"}, + if msg.features.supports_static_remote_key() { "supported" } else { "not supported"}, if msg.features.supports_unknown_bits() { "present" } else { "none" }, if msg.features.supports_unknown_bits() { "present" } else { "none" }); -- 2.39.5