( pk ( $key:expr ) ) => ({
$crate::fragment!(c:pk_k ( $key ))
});
- ( pk_h ( $key_hash:expr ) ) => ({
- $crate::impl_leaf_opcode_value!(PkH, $key_hash)
+ ( pk_h ( $key:expr ) ) => ({
+ let secp = $crate::bitcoin::secp256k1::Secp256k1::new();
+ $crate::keys::make_pkh($key, &secp)
});
( after ( $value:expr ) ) => ({
$crate::impl_leaf_opcode_value!(After, $value)
Ok((minisc, key_map, valid_networks))
}
+// Used internally by `bdk::fragment!` to build `pk_h()` fragments
+#[doc(hidden)]
+pub fn make_pkh<Pk: IntoDescriptorKey<Ctx>, Ctx: ScriptContext>(
+ descriptor_key: Pk,
+ secp: &SecpCtx,
+) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> {
+ let (key, key_map, valid_networks) = descriptor_key.into_descriptor_key()?.extract(secp)?;
+ let minisc = Miniscript::from_ast(Terminal::PkH(key))?;
+
+ minisc.check_minsicript()?;
+
+ Ok((minisc, key_map, valid_networks))
+}
+
// Used internally by `bdk::fragment!` to build `multi()` fragments
#[doc(hidden)]
pub fn make_multi<Pk: IntoDescriptorKey<Ctx>, Ctx: ScriptContext>(