use std::cell::RefCell; use std::collections::BTreeMap; use std::convert::{Into, TryFrom}; use std::fmt; use std::str::FromStr; use bitcoin::hashes::{hash160, Hash}; use bitcoin::secp256k1::{All, Secp256k1}; use bitcoin::util::bip32::{DerivationPath, ExtendedPrivKey, Fingerprint}; use bitcoin::util::psbt::PartiallySignedTransaction as PSBT; use bitcoin::{PrivateKey, PublicKey, Script}; pub use miniscript::{descriptor::Descriptor, Miniscript}; use serde::{Deserialize, Serialize}; use crate::psbt::utils::PSBTUtils; pub mod checksum; pub mod error; pub mod extended_key; pub mod policy; pub use self::checksum::get_checksum; pub use self::error::Error; pub use self::extended_key::{DerivationIndex, DescriptorExtendedKey}; pub use self::policy::Policy; trait MiniscriptExtractPolicy { fn extract_policy(&self, lookup_map: &BTreeMap>) -> Option; } pub trait ExtractPolicy { fn extract_policy(&self) -> Option; } #[derive(Debug, Clone, Hash, PartialEq, PartialOrd, Eq, Ord, Default)] struct DummyKey(); impl fmt::Display for DummyKey { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "DummyKey") } } impl std::str::FromStr for DummyKey { type Err = (); fn from_str(_: &str) -> Result { Ok(DummyKey::default()) } } impl miniscript::MiniscriptKey for DummyKey { type Hash = DummyKey; fn to_pubkeyhash(&self) -> DummyKey { DummyKey::default() } } pub type DerivedDescriptor = Descriptor; pub type StringDescriptor = Descriptor; pub trait DescriptorMeta { fn is_witness(&self) -> bool; fn psbt_redeem_script(&self) -> Option