Enum miniscript::policy::concrete::Policy [−][src]
pub enum Policy<Pk: MiniscriptKey> { Unsatisfiable, Trivial, Key(Pk), After(u32), Older(u32), Sha256(Hash), Hash256(Hash), Ripemd160(Hash), Hash160(Hash), And(Vec<Policy<Pk>>), Or(Vec<(usize, Policy<Pk>)>), Threshold(usize, Vec<Policy<Pk>>), }
Expand description
Concrete policy which corresponds directly to a Miniscript structure, and whose disjunctions are annotated with satisfaction probabilities to assist the compiler
Variants
Unsatisfiable
Trivially satisfiable
A public key which must sign to satisfy the descriptor
After(u32)
An absolute locktime restriction
Older(u32)
A relative locktime restriction
A SHA256 whose preimage must be provided to satisfy the descriptor
A SHA256d whose preimage must be provided to satisfy the descriptor
A RIPEMD160 whose preimage must be provided to satisfy the descriptor
A HASH160 whose preimage must be provided to satisfy the descriptor
A list of sub-policies, all of which must be satisfied
A list of sub-policies, one of which must be satisfied, along with relative probabilities for each one
A set of descriptors, satisfactions must be provided for k
of them
Implementations
pub fn translate_pk<Fpk, Q, E>(&self, translatefpk: Fpk) -> Result<Policy<Q>, E> where
Fpk: FnMut(&Pk) -> Result<Q, E>,
Q: MiniscriptKey,
pub fn translate_pk<Fpk, Q, E>(&self, translatefpk: Fpk) -> Result<Policy<Q>, E> where
Fpk: FnMut(&Pk) -> Result<Q, E>,
Q: MiniscriptKey,
Convert a policy using one kind of public key to another type of public key
Example
use miniscript::{bitcoin::PublicKey, policy::concrete::Policy}; use std::str::FromStr; let alice_key = "0270cf3c71f65a3d93d285d9149fddeeb638f87a2d4d8cf16c525f71c417439777"; let bob_key = "02f43b15c50a436f5335dbea8a64dd3b4e63e34c3b50c42598acb5f4f336b5d2fb"; let placeholder_policy = Policy::<String>::from_str("and(pk(alice_key),pk(bob_key))").unwrap(); let real_policy = placeholder_policy.translate_pk(|placeholder: &String| match placeholder.as_str() { "alice_key" => PublicKey::from_str(alice_key), "bob_key" => PublicKey::from_str(bob_key), _ => panic!("unknown key!") }).unwrap(); let expected_policy = Policy::from_str(&format!("and(pk({}),pk({}))", alice_key, bob_key)).unwrap(); assert_eq!(real_policy, expected_policy);
Check whether the policy contains duplicate public keys
Checks whether the given concrete policy contains a combination of timelocks and heightlocks. Returns an error if there is at least one satisfaction that contains a combination of hieghtlock and timelock.
This returns whether the given policy is valid or not. It maybe possible that the policy
contains Non-two argument and
, or
or a 0
arg thresh.
Validity condition also checks whether there is a possible satisfaction
combination of timelocks and heightlocks
This returns whether any possible compilation of the policy could be compiled as non-malleable and safe. Note that this returns a tuple (safe, non-malleable) to avoid because the non-malleability depends on safety and we would like to cache results.
Trait Implementations
Run a predicate on every key in the descriptor, returning whether the predicate returned true for every key Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
Auto Trait Implementations
impl<Pk> RefUnwindSafe for Policy<Pk> where
Pk: RefUnwindSafe,
impl<Pk> UnwindSafe for Policy<Pk> where
Pk: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more