@@ -6845,6 +6845,41 @@ pub(super) struct InboundV1Channel<SP: Deref> where SP::Target: SignerProvider {
6845
6845
pub unfunded_context: UnfundedChannelContext,
6846
6846
}
6847
6847
6848
+ /// Fetches the [`ChannelTypeFeatures`] that will be used for a channel built from a given
6849
+ /// [`msgs::OpenChannel`].
6850
+ pub(super) fn channel_type_from_open_channel(
6851
+ msg: &msgs::OpenChannel, their_features: &InitFeatures,
6852
+ our_supported_features: &ChannelTypeFeatures
6853
+ ) -> Result<ChannelTypeFeatures, ChannelError> {
6854
+ if let Some(channel_type) = &msg.channel_type {
6855
+ if channel_type.supports_any_optional_bits() {
6856
+ return Err(ChannelError::Close("Channel Type field contained optional bits - this is not allowed".to_owned()));
6857
+ }
6858
+
6859
+ // We only support the channel types defined by the `ChannelManager` in
6860
+ // `provided_channel_type_features`. The channel type must always support
6861
+ // `static_remote_key`.
6862
+ if !channel_type.requires_static_remote_key() {
6863
+ return Err(ChannelError::Close("Channel Type was not understood - we require static remote key".to_owned()));
6864
+ }
6865
+ // Make sure we support all of the features behind the channel type.
6866
+ if !channel_type.is_subset(our_supported_features) {
6867
+ return Err(ChannelError::Close("Channel Type contains unsupported features".to_owned()));
6868
+ }
6869
+ let announced_channel = if (msg.channel_flags & 1) == 1 { true } else { false };
6870
+ if channel_type.requires_scid_privacy() && announced_channel {
6871
+ return Err(ChannelError::Close("SCID Alias/Privacy Channel Type cannot be set on a public channel".to_owned()));
6872
+ }
6873
+ Ok(channel_type.clone())
6874
+ } else {
6875
+ let channel_type = ChannelTypeFeatures::from_init(&their_features);
6876
+ if channel_type != ChannelTypeFeatures::only_static_remote_key() {
6877
+ return Err(ChannelError::Close("Only static_remote_key is supported for non-negotiated channel types".to_owned()));
6878
+ }
6879
+ Ok(channel_type)
6880
+ }
6881
+ }
6882
+
6848
6883
impl<SP: Deref> InboundV1Channel<SP> where SP::Target: SignerProvider {
6849
6884
/// Creates a new channel from a remote sides' request for one.
6850
6885
/// Assumes chain_hash has already been checked and corresponds with what we expect!
@@ -6863,32 +6898,7 @@ impl<SP: Deref> InboundV1Channel<SP> where SP::Target: SignerProvider {
6863
6898
6864
6899
// First check the channel type is known, failing before we do anything else if we don't
6865
6900
// support this channel type.
6866
- let channel_type = if let Some(channel_type) = &msg.channel_type {
6867
- if channel_type.supports_any_optional_bits() {
6868
- return Err(ChannelError::Close("Channel Type field contained optional bits - this is not allowed".to_owned()));
6869
- }
6870
-
6871
- // We only support the channel types defined by the `ChannelManager` in
6872
- // `provided_channel_type_features`. The channel type must always support
6873
- // `static_remote_key`.
6874
- if !channel_type.requires_static_remote_key() {
6875
- return Err(ChannelError::Close("Channel Type was not understood - we require static remote key".to_owned()));
6876
- }
6877
- // Make sure we support all of the features behind the channel type.
6878
- if !channel_type.is_subset(our_supported_features) {
6879
- return Err(ChannelError::Close("Channel Type contains unsupported features".to_owned()));
6880
- }
6881
- if channel_type.requires_scid_privacy() && announced_channel {
6882
- return Err(ChannelError::Close("SCID Alias/Privacy Channel Type cannot be set on a public channel".to_owned()));
6883
- }
6884
- channel_type.clone()
6885
- } else {
6886
- let channel_type = ChannelTypeFeatures::from_init(&their_features);
6887
- if channel_type != ChannelTypeFeatures::only_static_remote_key() {
6888
- return Err(ChannelError::Close("Only static_remote_key is supported for non-negotiated channel types".to_owned()));
6889
- }
6890
- channel_type
6891
- };
6901
+ let channel_type = channel_type_from_open_channel(msg, their_features, our_supported_features)?;
6892
6902
6893
6903
let channel_keys_id = signer_provider.generate_channel_keys_id(true, msg.funding_satoshis, user_id);
6894
6904
let holder_signer = signer_provider.derive_channel_signer(msg.funding_satoshis, channel_keys_id);
0 commit comments