From b500cfe4e59dd16de9d69ad706e231642207a757 Mon Sep 17 00:00:00 2001 From: Alekos Filini Date: Wed, 15 Sep 2021 10:21:38 +0200 Subject: [PATCH] [descriptor] Fix `extract_policy()` for descriptors with `pk_h()` --- src/descriptor/policy.rs | 34 +++------------------------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/src/descriptor/policy.rs b/src/descriptor/policy.rs index 4a6e93b4..6184365c 100644 --- a/src/descriptor/policy.rs +++ b/src/descriptor/policy.rs @@ -47,14 +47,12 @@ use bitcoin::util::bip32::Fingerprint; use bitcoin::PublicKey; use miniscript::descriptor::{DescriptorPublicKey, ShInner, SortedMultiVec, WshInner}; -use miniscript::{ - Descriptor, Miniscript, MiniscriptKey, Satisfier, ScriptContext, Terminal, ToPublicKey, -}; +use miniscript::{Descriptor, Miniscript, MiniscriptKey, Satisfier, ScriptContext, Terminal}; #[allow(unused_imports)] use log::{debug, error, info, trace}; -use crate::descriptor::{DerivedDescriptorKey, ExtractPolicy}; +use crate::descriptor::ExtractPolicy; use crate::wallet::signer::{SignerId, SignersContainer}; use crate::wallet::utils::{self, After, Older, SecpCtx}; @@ -88,13 +86,6 @@ impl PkOrF { }, } } - - fn from_key_hash(k: hash160::Hash) -> Self { - PkOrF { - pubkey_hash: Some(k), - ..Default::default() - } - } } /// An item that needs to be satisfied @@ -779,25 +770,6 @@ fn signature_in_psbt(psbt: &Psbt, key: &DescriptorPublicKey, secp: &SecpCtx) -> }) } -fn signature_key( - key: &::Hash, - signers: &SignersContainer, - secp: &SecpCtx, -) -> Policy { - let key_hash = DerivedDescriptorKey::new(key.clone(), secp) - .to_public_key() - .to_pubkeyhash(); - let mut policy: Policy = SatisfiableItem::Signature(PkOrF::from_key_hash(key_hash)).into(); - - if signers.find(SignerId::PkHash(key_hash)).is_some() { - policy.contribution = Satisfaction::Complete { - condition: Default::default(), - } - } - - policy -} - impl ExtractPolicy for Miniscript { fn extract_policy( &self, @@ -809,7 +781,7 @@ impl ExtractPolicy for Miniscript // Leaves Terminal::True | Terminal::False => None, Terminal::PkK(pubkey) => Some(signature(pubkey, signers, build_sat, secp)), - Terminal::PkH(pubkey_hash) => Some(signature_key(pubkey_hash, signers, secp)), + Terminal::PkH(pubkey_hash) => Some(signature(pubkey_hash, signers, build_sat, secp)), Terminal::After(value) => { let mut policy: Policy = SatisfiableItem::AbsoluteTimelock { value: *value }.into(); policy.contribution = Satisfaction::Complete {