diff --git a/src/util/psbt/map/output.rs b/src/util/psbt/map/output.rs index c3f4c295..c49eb760 100644 --- a/src/util/psbt/map/output.rs +++ b/src/util/psbt/map/output.rs @@ -143,6 +143,8 @@ impl TapTree { pub fn from_inner(inner: TaprootBuilder) -> Result { if !inner.is_finalized() { Err(IncompleteTapTree::NotFinalized(inner)) + } else if inner.has_hidden_nodes() { + Err(IncompleteTapTree::HiddenParts(inner)) } else { Ok(TapTree(inner)) } diff --git a/src/util/psbt/serialize.rs b/src/util/psbt/serialize.rs index 319e3a72..589b4193 100644 --- a/src/util/psbt/serialize.rs +++ b/src/util/psbt/serialize.rs @@ -355,7 +355,7 @@ impl Deserialize for TapTree { builder = builder.add_leaf_with_ver(*depth, script, leaf_version) .map_err(|_| encode::Error::ParseFailed("Tree not in DFS order"))?; } - if builder.is_finalized() { + if builder.is_finalized() || !builder.has_hidden_nodes() { Ok(TapTree(builder)) } else { Err(encode::Error::ParseFailed("Incomplete taproot Tree"))