@@ -666,14 +666,6 @@ impl<T: sealed::Context> Features<T> {
666
666
}
667
667
}
668
668
669
- /// Creates a Features with the bits set which are known by the implementation
670
- pub fn known ( ) -> Self {
671
- Self {
672
- flags : T :: KNOWN_FEATURE_FLAGS . to_vec ( ) ,
673
- mark : PhantomData ,
674
- }
675
- }
676
-
677
669
/// Converts `Features<T>` to `Features<C>`. Only known `T` features relevant to context `C` are
678
670
/// included in the result.
679
671
fn to_context_internal < C : sealed:: Context > ( & self ) -> Features < C > {
@@ -765,24 +757,6 @@ impl<T: sealed::UpfrontShutdownScript> Features<T> {
765
757
}
766
758
}
767
759
768
-
769
- impl < T : sealed:: GossipQueries > Features < T > {
770
- #[ cfg( test) ]
771
- pub ( crate ) fn clear_gossip_queries ( mut self ) -> Self {
772
- <T as sealed:: GossipQueries >:: clear_bits ( & mut self . flags ) ;
773
- self
774
- }
775
- }
776
-
777
- impl < T : sealed:: InitialRoutingSync > Features < T > {
778
- // Note that initial_routing_sync is ignored if gossip_queries is set.
779
- #[ cfg( test) ]
780
- pub ( crate ) fn clear_initial_routing_sync ( mut self ) -> Self {
781
- <T as sealed:: InitialRoutingSync >:: clear_bits ( & mut self . flags ) ;
782
- self
783
- }
784
- }
785
-
786
760
impl < T : sealed:: ShutdownAnySegwit > Features < T > {
787
761
#[ cfg( test) ]
788
762
pub ( crate ) fn clear_shutdown_anysegwit ( mut self ) -> Self {
@@ -836,97 +810,9 @@ impl Readable for ChannelTypeFeatures {
836
810
837
811
#[ cfg( test) ]
838
812
mod tests {
839
- use super :: { ChannelFeatures , ChannelTypeFeatures , InitFeatures , InvoiceFeatures , NodeFeatures } ;
813
+ use super :: { ChannelFeatures , ChannelTypeFeatures , InitFeatures , InvoiceFeatures , NodeFeatures , sealed } ;
840
814
use bitcoin:: bech32:: { Base32Len , FromBase32 , ToBase32 , u5} ;
841
815
842
- #[ test]
843
- fn sanity_test_known_features ( ) {
844
- assert ! ( !ChannelFeatures :: known( ) . requires_unknown_bits( ) ) ;
845
- assert ! ( !ChannelFeatures :: known( ) . supports_unknown_bits( ) ) ;
846
- assert ! ( !InitFeatures :: known( ) . requires_unknown_bits( ) ) ;
847
- assert ! ( !InitFeatures :: known( ) . supports_unknown_bits( ) ) ;
848
- assert ! ( !NodeFeatures :: known( ) . requires_unknown_bits( ) ) ;
849
- assert ! ( !NodeFeatures :: known( ) . supports_unknown_bits( ) ) ;
850
-
851
- assert ! ( InitFeatures :: known( ) . supports_upfront_shutdown_script( ) ) ;
852
- assert ! ( NodeFeatures :: known( ) . supports_upfront_shutdown_script( ) ) ;
853
- assert ! ( !InitFeatures :: known( ) . requires_upfront_shutdown_script( ) ) ;
854
- assert ! ( !NodeFeatures :: known( ) . requires_upfront_shutdown_script( ) ) ;
855
-
856
- assert ! ( InitFeatures :: known( ) . supports_gossip_queries( ) ) ;
857
- assert ! ( NodeFeatures :: known( ) . supports_gossip_queries( ) ) ;
858
- assert ! ( !InitFeatures :: known( ) . requires_gossip_queries( ) ) ;
859
- assert ! ( !NodeFeatures :: known( ) . requires_gossip_queries( ) ) ;
860
-
861
- assert ! ( InitFeatures :: known( ) . supports_data_loss_protect( ) ) ;
862
- assert ! ( NodeFeatures :: known( ) . supports_data_loss_protect( ) ) ;
863
- assert ! ( !InitFeatures :: known( ) . requires_data_loss_protect( ) ) ;
864
- assert ! ( !NodeFeatures :: known( ) . requires_data_loss_protect( ) ) ;
865
-
866
- assert ! ( InitFeatures :: known( ) . supports_variable_length_onion( ) ) ;
867
- assert ! ( NodeFeatures :: known( ) . supports_variable_length_onion( ) ) ;
868
- assert ! ( InvoiceFeatures :: known( ) . supports_variable_length_onion( ) ) ;
869
- assert ! ( InitFeatures :: known( ) . requires_variable_length_onion( ) ) ;
870
- assert ! ( NodeFeatures :: known( ) . requires_variable_length_onion( ) ) ;
871
- assert ! ( InvoiceFeatures :: known( ) . requires_variable_length_onion( ) ) ;
872
-
873
- assert ! ( InitFeatures :: known( ) . supports_static_remote_key( ) ) ;
874
- assert ! ( NodeFeatures :: known( ) . supports_static_remote_key( ) ) ;
875
- assert ! ( InitFeatures :: known( ) . requires_static_remote_key( ) ) ;
876
- assert ! ( NodeFeatures :: known( ) . requires_static_remote_key( ) ) ;
877
-
878
- assert ! ( InitFeatures :: known( ) . supports_payment_secret( ) ) ;
879
- assert ! ( NodeFeatures :: known( ) . supports_payment_secret( ) ) ;
880
- assert ! ( InvoiceFeatures :: known( ) . supports_payment_secret( ) ) ;
881
- assert ! ( InitFeatures :: known( ) . requires_payment_secret( ) ) ;
882
- assert ! ( NodeFeatures :: known( ) . requires_payment_secret( ) ) ;
883
- assert ! ( InvoiceFeatures :: known( ) . requires_payment_secret( ) ) ;
884
-
885
- assert ! ( InitFeatures :: known( ) . supports_basic_mpp( ) ) ;
886
- assert ! ( NodeFeatures :: known( ) . supports_basic_mpp( ) ) ;
887
- assert ! ( InvoiceFeatures :: known( ) . supports_basic_mpp( ) ) ;
888
- assert ! ( !InitFeatures :: known( ) . requires_basic_mpp( ) ) ;
889
- assert ! ( !NodeFeatures :: known( ) . requires_basic_mpp( ) ) ;
890
- assert ! ( !InvoiceFeatures :: known( ) . requires_basic_mpp( ) ) ;
891
-
892
- assert ! ( InitFeatures :: known( ) . supports_channel_type( ) ) ;
893
- assert ! ( NodeFeatures :: known( ) . supports_channel_type( ) ) ;
894
- assert ! ( !InitFeatures :: known( ) . requires_channel_type( ) ) ;
895
- assert ! ( !NodeFeatures :: known( ) . requires_channel_type( ) ) ;
896
-
897
- assert ! ( InitFeatures :: known( ) . supports_shutdown_anysegwit( ) ) ;
898
- assert ! ( NodeFeatures :: known( ) . supports_shutdown_anysegwit( ) ) ;
899
-
900
- assert ! ( InitFeatures :: known( ) . supports_scid_privacy( ) ) ;
901
- assert ! ( NodeFeatures :: known( ) . supports_scid_privacy( ) ) ;
902
- assert ! ( ChannelTypeFeatures :: known( ) . supports_scid_privacy( ) ) ;
903
- assert ! ( !InitFeatures :: known( ) . requires_scid_privacy( ) ) ;
904
- assert ! ( !NodeFeatures :: known( ) . requires_scid_privacy( ) ) ;
905
- assert ! ( ChannelTypeFeatures :: known( ) . requires_scid_privacy( ) ) ;
906
-
907
- assert ! ( InitFeatures :: known( ) . supports_wumbo( ) ) ;
908
- assert ! ( NodeFeatures :: known( ) . supports_wumbo( ) ) ;
909
- assert ! ( !InitFeatures :: known( ) . requires_wumbo( ) ) ;
910
- assert ! ( !NodeFeatures :: known( ) . requires_wumbo( ) ) ;
911
-
912
- assert ! ( InitFeatures :: known( ) . supports_onion_messages( ) ) ;
913
- assert ! ( NodeFeatures :: known( ) . supports_onion_messages( ) ) ;
914
- assert ! ( !InitFeatures :: known( ) . requires_onion_messages( ) ) ;
915
- assert ! ( !NodeFeatures :: known( ) . requires_onion_messages( ) ) ;
916
-
917
- assert ! ( InitFeatures :: known( ) . supports_zero_conf( ) ) ;
918
- assert ! ( !InitFeatures :: known( ) . requires_zero_conf( ) ) ;
919
- assert ! ( NodeFeatures :: known( ) . supports_zero_conf( ) ) ;
920
- assert ! ( !NodeFeatures :: known( ) . requires_zero_conf( ) ) ;
921
- assert ! ( ChannelTypeFeatures :: known( ) . supports_zero_conf( ) ) ;
922
- assert ! ( ChannelTypeFeatures :: known( ) . requires_zero_conf( ) ) ;
923
-
924
- let mut init_features = InitFeatures :: known ( ) ;
925
- assert ! ( init_features. initial_routing_sync( ) ) ;
926
- init_features = init_features. clear_initial_routing_sync ( ) ;
927
- assert ! ( !init_features. initial_routing_sync( ) ) ;
928
- }
929
-
930
816
#[ test]
931
817
fn sanity_test_unknown_bits ( ) {
932
818
let features = ChannelFeatures :: empty ( ) ;
@@ -946,7 +832,22 @@ mod tests {
946
832
947
833
#[ test]
948
834
fn convert_to_context_with_relevant_flags ( ) {
949
- let init_features = InitFeatures :: known ( ) . clear_upfront_shutdown_script ( ) . clear_gossip_queries ( ) ;
835
+ let mut init_features = InitFeatures :: empty ( ) ;
836
+ // Set a bunch of features we use, plus initial_routing_sync_required (which shouldn't get
837
+ // converted as it's only relevant in an init context).
838
+ init_features. set_initial_routing_sync_required ( ) ;
839
+ init_features. set_data_loss_protect_optional ( ) ;
840
+ init_features. set_variable_length_onion_required ( ) ;
841
+ init_features. set_static_remote_key_required ( ) ;
842
+ init_features. set_payment_secret_required ( ) ;
843
+ init_features. set_basic_mpp_optional ( ) ;
844
+ init_features. set_wumbo_optional ( ) ;
845
+ init_features. set_shutdown_any_segwit_optional ( ) ;
846
+ init_features. set_onion_messages_optional ( ) ;
847
+ init_features. set_channel_type_optional ( ) ;
848
+ init_features. set_scid_privacy_optional ( ) ;
849
+ init_features. set_zero_conf_optional ( ) ;
850
+
950
851
assert ! ( init_features. initial_routing_sync( ) ) ;
951
852
assert ! ( !init_features. supports_upfront_shutdown_script( ) ) ;
952
853
assert ! ( !init_features. supports_gossip_queries( ) ) ;
@@ -984,8 +885,9 @@ mod tests {
984
885
#[ test]
985
886
fn convert_to_context_with_unknown_flags ( ) {
986
887
// Ensure the `from` context has fewer known feature bytes than the `to` context.
987
- assert ! ( InvoiceFeatures :: known( ) . flags. len( ) < NodeFeatures :: known( ) . flags. len( ) ) ;
988
- let mut invoice_features = InvoiceFeatures :: known ( ) ;
888
+ assert ! ( <sealed:: InvoiceContext as sealed:: Context >:: KNOWN_FEATURE_MASK . len( ) <
889
+ <sealed:: NodeContext as sealed:: Context >:: KNOWN_FEATURE_MASK . len( ) ) ;
890
+ let mut invoice_features = InvoiceFeatures :: empty ( ) ;
989
891
invoice_features. set_unknown_feature_optional ( ) ;
990
892
assert ! ( invoice_features. supports_unknown_bits( ) ) ;
991
893
let node_features: NodeFeatures = invoice_features. to_context ( ) ;
0 commit comments