Merge pull request #908 from TheBlueMatt/2021-04-invoice-real-bindings
[rust-lightning] / lightning / src / ln / features.rs
index 36f29ada14e4609709777d3594a3cfc9b7c2dd7a..02e403b46d9708100f2b86bb0d3346922a9235a6 100644 (file)
@@ -95,7 +95,7 @@ mod sealed {
                        // Byte 0
                        ,
                        // Byte 1
-                       StaticRemoteKey,
+                       StaticRemoteKey | PaymentSecret,
                        // Byte 2
                        ,
                        // Byte 3
@@ -105,7 +105,7 @@ mod sealed {
                        // Byte 0
                        DataLossProtect | InitialRoutingSync | UpfrontShutdownScript | GossipQueries,
                        // Byte 1
-                       VariableLengthOnion | PaymentSecret,
+                       VariableLengthOnion,
                        // Byte 2
                        BasicMPP,
                        // Byte 3
@@ -117,7 +117,7 @@ mod sealed {
                        // Byte 0
                        ,
                        // Byte 1
-                       StaticRemoteKey,
+                       StaticRemoteKey | PaymentSecret,
                        // Byte 2
                        ,
                        // Byte 3
@@ -127,7 +127,7 @@ mod sealed {
                        // Byte 0
                        DataLossProtect | UpfrontShutdownScript | GossipQueries,
                        // Byte 1
-                       VariableLengthOnion | PaymentSecret,
+                       VariableLengthOnion,
                        // Byte 2
                        BasicMPP,
                        // Byte 3
@@ -139,12 +139,19 @@ mod sealed {
                optional_features: [],
        });
        define_context!(InvoiceContext {
-               required_features: [,,,],
+               required_features: [
+                       // Byte 0
+                       ,
+                       // Byte 1
+                       PaymentSecret,
+                       // Byte 2
+                       ,
+               ],
                optional_features: [
                        // Byte 0
                        ,
                        // Byte 1
-                       VariableLengthOnion | PaymentSecret,
+                       VariableLengthOnion,
                        // Byte 2
                        BasicMPP,
                ],
@@ -495,6 +502,7 @@ impl<T: sealed::Context> Features<T> {
 
        /// Create a Features given a set of flags, in little-endian. This is in reverse byte order from
        /// most on-the-wire encodings.
+       /// (C-not exported) as we don't support export across multiple T
        pub fn from_le_bytes(flags: Vec<u8>) -> Features<T> {
                Features {
                        flags,
@@ -732,8 +740,8 @@ mod tests {
 
                assert!(InitFeatures::known().supports_payment_secret());
                assert!(NodeFeatures::known().supports_payment_secret());
-               assert!(!InitFeatures::known().requires_payment_secret());
-               assert!(!NodeFeatures::known().requires_payment_secret());
+               assert!(InitFeatures::known().requires_payment_secret());
+               assert!(NodeFeatures::known().requires_payment_secret());
 
                assert!(InitFeatures::known().supports_basic_mpp());
                assert!(NodeFeatures::known().supports_basic_mpp());
@@ -779,12 +787,12 @@ mod tests {
                {
                        // Check that the flags are as expected:
                        // - option_data_loss_protect
-                       // - var_onion_optin | static_remote_key (req) | payment_secret
+                       // - var_onion_optin | static_remote_key (req) | payment_secret(req)
                        // - basic_mpp
                        // - opt_shutdown_anysegwit
                        assert_eq!(node_features.flags.len(), 4);
                        assert_eq!(node_features.flags[0], 0b00000010);
-                       assert_eq!(node_features.flags[1], 0b10010010);
+                       assert_eq!(node_features.flags[1], 0b01010010);
                        assert_eq!(node_features.flags[2], 0b00000010);
                        assert_eq!(node_features.flags[3], 0b00001000);
                }