Merge pull request #2307 from benthecarman/verify-funcs
[rust-lightning] / lightning / src / ln / chan_utils.rs
index d570347fef879af540cdfea9f5a68e9b22f3f57f..fd27d2308664469034564691395c263adb1808bb 100644 (file)
@@ -829,7 +829,6 @@ pub fn get_anchor_redeemscript(funding_pubkey: &PublicKey) -> Script {
                .into_script()
 }
 
-#[cfg(anchors)]
 /// Locates the output with an anchor script paying to `funding_pubkey` within `commitment_tx`.
 pub(crate) fn get_anchor_output<'a>(commitment_tx: &'a Transaction, funding_pubkey: &PublicKey) -> Option<(u32, &'a TxOut)> {
        let anchor_script = chan_utils::get_anchor_redeemscript(funding_pubkey).to_v0_p2wsh();
@@ -939,7 +938,7 @@ impl Readable for ChannelTransactionParameters {
                let mut is_outbound_from_holder = RequiredWrapper(None);
                let mut counterparty_parameters = None;
                let mut funding_outpoint = None;
-               let mut legacy_deserialization_prevention_marker: Option<()> = None;
+               let mut _legacy_deserialization_prevention_marker: Option<()> = None;
                let mut channel_type_features = None;
 
                read_tlv_fields!(reader, {
@@ -948,10 +947,14 @@ impl Readable for ChannelTransactionParameters {
                        (4, is_outbound_from_holder, required),
                        (6, counterparty_parameters, option),
                        (8, funding_outpoint, option),
-                       (10, legacy_deserialization_prevention_marker, option),
+                       (10, _legacy_deserialization_prevention_marker, option),
                        (11, channel_type_features, option),
                });
 
+               let mut additional_features = ChannelTypeFeatures::empty();
+               additional_features.set_anchors_nonzero_fee_htlc_tx_required();
+               chain::package::verify_channel_type_features(&channel_type_features, Some(&additional_features))?;
+
                Ok(Self {
                        holder_pubkeys: holder_pubkeys.0.unwrap(),
                        holder_selected_contest_delay: holder_selected_contest_delay.0.unwrap(),
@@ -1360,7 +1363,7 @@ impl Readable for CommitmentTransaction {
                let mut keys = RequiredWrapper(None);
                let mut built = RequiredWrapper(None);
                _init_tlv_field_var!(htlcs, vec_type);
-               let mut legacy_deserialization_prevention_marker: Option<()> = None;
+               let mut _legacy_deserialization_prevention_marker: Option<()> = None;
                let mut channel_type_features = None;
 
                read_tlv_fields!(reader, {
@@ -1371,10 +1374,14 @@ impl Readable for CommitmentTransaction {
                        (8, keys, required),
                        (10, built, required),
                        (12, htlcs, vec_type),
-                       (14, legacy_deserialization_prevention_marker, option),
+                       (14, _legacy_deserialization_prevention_marker, option),
                        (15, channel_type_features, option),
                });
 
+               let mut additional_features = ChannelTypeFeatures::empty();
+               additional_features.set_anchors_nonzero_fee_htlc_tx_required();
+               chain::package::verify_channel_type_features(&channel_type_features, Some(&additional_features))?;
+
                Ok(Self {
                        commitment_number: commitment_number.0.unwrap(),
                        to_broadcaster_value_sat: to_broadcaster_value_sat.0.unwrap(),