X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fln%2Fscript.rs;fp=lightning%2Fsrc%2Fln%2Fscript.rs;h=4ad0af02b908599c8e95550b354ca1c6bb21ef52;hb=99ee676a7644e6b4bb02591a1154e7a803730a0c;hp=a01866de679e8762bce76b9fe3a7df4fe666b301;hpb=1e922aeb0c0ad63af46f98b85c733df576009802;p=rust-lightning diff --git a/lightning/src/ln/script.rs b/lightning/src/ln/script.rs index a01866de..4ad0af02 100644 --- a/lightning/src/ln/script.rs +++ b/lightning/src/ln/script.rs @@ -105,6 +105,26 @@ impl ShutdownScript { ShutdownScriptImpl::Bolt2(_) => None, } } + + /// Returns whether the shutdown script is compatible with the features as defined by BOLT #2. + /// + /// Specifically, checks for compliance with feature `option_shutdown_anysegwit`. + pub fn is_compatible(&self, features: &InitFeatures) -> bool { + match &self.0 { + ShutdownScriptImpl::Legacy(_) => true, + ShutdownScriptImpl::Bolt2(script) => is_bolt2_compliant(script, features), + } + } +} + +fn is_bolt2_compliant(script: &Script, features: &InitFeatures) -> bool { + if script.is_p2pkh() || script.is_p2sh() || script.is_v0_p2wpkh() || script.is_v0_p2wsh() { + true + } else if features.supports_shutdown_anysegwit() { + script.is_witness_program() && script.as_bytes()[0] != SEGWIT_V0.into_u8() + } else { + false + } } impl TryFrom