Skip to content

Commit 4f7388b

Browse files
committed
Make TaprooBuilder::finalize able to return keyspend only
1 parent 6f83e22 commit 4f7388b

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/util/taproot.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -467,20 +467,21 @@ impl TaprootBuilder {
467467
}
468468

469469
/// Creates a [`TaprootSpendInfo`] with the given internal key.
470+
///
471+
// TODO: in a future breaking API change, this no longer needs to return result
470472
pub fn finalize<C: secp256k1::Verification>(
471473
mut self,
472474
secp: &Secp256k1<C>,
473475
internal_key: UntweakedPublicKey,
474476
) -> Result<TaprootSpendInfo, TaprootBuilderError> {
475-
if self.branch.len() > 1 {
476-
return Err(TaprootBuilderError::IncompleteTree);
477+
match self.branch.pop() {
478+
None => Ok(TaprootSpendInfo::new_key_spend(secp, internal_key, None)),
479+
Some(Some(node)) => {
480+
Ok(TaprootSpendInfo::from_node_info(secp, internal_key, node))
481+
}
482+
_ => Err(TaprootBuilderError::IncompleteTree),
483+
477484
}
478-
let node = self
479-
.branch
480-
.pop()
481-
.ok_or(TaprootBuilderError::EmptyTree)?
482-
.expect("Builder invariant: last element of the branch must be some");
483-
Ok(TaprootSpendInfo::from_node_info(secp, internal_key, node))
484485
}
485486

486487
pub(crate) fn branch(&self) -> &[Option<NodeInfo>] {

0 commit comments

Comments
 (0)