Enum miniscript::miniscript::decode::Terminal
source · pub enum Terminal<Pk: MiniscriptKey, Ctx: ScriptContext> {
Show 28 variants
True,
False,
PkK(Pk),
PkH(Pk),
RawPkH(Hash),
After(AbsLockTime),
Older(Sequence),
Sha256(Pk::Sha256),
Hash256(Pk::Hash256),
Ripemd160(Pk::Ripemd160),
Hash160(Pk::Hash160),
Alt(Arc<Miniscript<Pk, Ctx>>),
Swap(Arc<Miniscript<Pk, Ctx>>),
Check(Arc<Miniscript<Pk, Ctx>>),
DupIf(Arc<Miniscript<Pk, Ctx>>),
Verify(Arc<Miniscript<Pk, Ctx>>),
NonZero(Arc<Miniscript<Pk, Ctx>>),
ZeroNotEqual(Arc<Miniscript<Pk, Ctx>>),
AndV(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>),
AndB(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>),
AndOr(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>),
OrB(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>),
OrD(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>),
OrC(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>),
OrI(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>),
Thresh(usize, Vec<Arc<Miniscript<Pk, Ctx>>>),
Multi(usize, Vec<Pk>),
MultiA(usize, Vec<Pk>),
}
Expand description
All AST elements.
This variant is the inner Miniscript variant that allows the user to bypass some of the
miniscript rules. You should never construct Terminal
directly. This is only exposed to
external users to allow matching on the Miniscript
.
The average user should always use the Descriptor
APIs. Advanced users who want deal
with Miniscript ASTs should use the Miniscript
APIs.
Variants§
True
1
False
0
PkK(Pk)
<key>
PkH(Pk)
DUP HASH160 <keyhash> EQUALVERIFY
RawPkH(Hash)
Only for parsing PkH for Script. These raw descriptors are not yet specified in miniscript. We only this variant internally for inferring miniscripts from raw Scripts. It is not possible to construct this variant from any of the Miniscript APIs. We don’t have a generic over here because we don’t want to user to have any abstract reasoning over raw descriptors.
After(AbsLockTime)
n CHECKLOCKTIMEVERIFY
Older(Sequence)
n CHECKSEQUENCEVERIFY
Sha256(Pk::Sha256)
SIZE 32 EQUALVERIFY SHA256 <hash> EQUAL
Hash256(Pk::Hash256)
SIZE 32 EQUALVERIFY HASH256 <hash> EQUAL
Ripemd160(Pk::Ripemd160)
SIZE 32 EQUALVERIFY RIPEMD160 <hash> EQUAL
Hash160(Pk::Hash160)
SIZE 32 EQUALVERIFY HASH160 <hash> EQUAL
Alt(Arc<Miniscript<Pk, Ctx>>)
TOALTSTACK [E] FROMALTSTACK
Swap(Arc<Miniscript<Pk, Ctx>>)
SWAP [E1]
Check(Arc<Miniscript<Pk, Ctx>>)
[Kt]/[Ke] CHECKSIG
DupIf(Arc<Miniscript<Pk, Ctx>>)
DUP IF [V] ENDIF
Verify(Arc<Miniscript<Pk, Ctx>>)
[T] VERIFY
NonZero(Arc<Miniscript<Pk, Ctx>>)
SIZE 0NOTEQUAL IF [Fn] ENDIF
ZeroNotEqual(Arc<Miniscript<Pk, Ctx>>)
[X] 0NOTEQUAL
AndV(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>)
[V] [T]/[V]/[F]/[Kt]
AndB(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>)
[E] [W] BOOLAND
AndOr(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>)
[various] NOTIF [various] ELSE [various] ENDIF
OrB(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>)
[E] [W] BOOLOR
OrD(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>)
[E] IFDUP NOTIF [T]/[E] ENDIF
OrC(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>)
[E] NOTIF [V] ENDIF
OrI(Arc<Miniscript<Pk, Ctx>>, Arc<Miniscript<Pk, Ctx>>)
IF [various] ELSE [various] ENDIF
Thresh(usize, Vec<Arc<Miniscript<Pk, Ctx>>>)
[E] ([W] ADD)* k EQUAL
Multi(usize, Vec<Pk>)
k (<key>)* n CHECKMULTISIG
MultiA(usize, Vec<Pk>)
<key> CHECKSIG (<key> CHECKSIGADD)*(n-1) k NUMEQUAL
Implementations§
source§impl<Pk: MiniscriptKey, Ctx: ScriptContext> Terminal<Pk, Ctx>
impl<Pk: MiniscriptKey, Ctx: ScriptContext> Terminal<Pk, Ctx>
sourcepub fn encode(&self, builder: Builder) -> Builderwhere
Pk: ToPublicKey,
pub fn encode(&self, builder: Builder) -> Builderwhere
Pk: ToPublicKey,
Encode the element as a fragment of Bitcoin Script. The inverse
function, from Script to an AST element, is implemented in the
parse
module.
Trait Implementations§
source§impl<Pk: Clone + MiniscriptKey, Ctx: Clone + ScriptContext> Clone for Terminal<Pk, Ctx>
impl<Pk: Clone + MiniscriptKey, Ctx: Clone + ScriptContext> Clone for Terminal<Pk, Ctx>
source§impl<Pk: MiniscriptKey, Ctx: ScriptContext> Debug for Terminal<Pk, Ctx>
impl<Pk: MiniscriptKey, Ctx: ScriptContext> Debug for Terminal<Pk, Ctx>
source§impl<Pk: MiniscriptKey, Ctx: ScriptContext> Display for Terminal<Pk, Ctx>
impl<Pk: MiniscriptKey, Ctx: ScriptContext> Display for Terminal<Pk, Ctx>
source§impl<Pk, Ctx> FromTree for Terminal<Pk, Ctx>where
Pk: MiniscriptKey + FromStr,
Pk::Sha256: FromStr,
Pk::Hash256: FromStr,
Pk::Ripemd160: FromStr,
Pk::Hash160: FromStr,
<Pk as FromStr>::Err: ToString,
<<Pk as MiniscriptKey>::Sha256 as FromStr>::Err: ToString,
<<Pk as MiniscriptKey>::Hash256 as FromStr>::Err: ToString,
<<Pk as MiniscriptKey>::Ripemd160 as FromStr>::Err: ToString,
<<Pk as MiniscriptKey>::Hash160 as FromStr>::Err: ToString,
Ctx: ScriptContext,
impl<Pk, Ctx> FromTree for Terminal<Pk, Ctx>where
Pk: MiniscriptKey + FromStr,
Pk::Sha256: FromStr,
Pk::Hash256: FromStr,
Pk::Ripemd160: FromStr,
Pk::Hash160: FromStr,
<Pk as FromStr>::Err: ToString,
<<Pk as MiniscriptKey>::Sha256 as FromStr>::Err: ToString,
<<Pk as MiniscriptKey>::Hash256 as FromStr>::Err: ToString,
<<Pk as MiniscriptKey>::Ripemd160 as FromStr>::Err: ToString,
<<Pk as MiniscriptKey>::Hash160 as FromStr>::Err: ToString,
Ctx: ScriptContext,
source§impl<Pk: Hash + MiniscriptKey, Ctx: Hash + ScriptContext> Hash for Terminal<Pk, Ctx>
impl<Pk: Hash + MiniscriptKey, Ctx: Hash + ScriptContext> Hash for Terminal<Pk, Ctx>
source§impl<Pk: MiniscriptKey, Ctx: ScriptContext> Liftable<Pk> for Terminal<Pk, Ctx>
impl<Pk: MiniscriptKey, Ctx: ScriptContext> Liftable<Pk> for Terminal<Pk, Ctx>
source§impl<Pk: Ord + MiniscriptKey, Ctx: Ord + ScriptContext> Ord for Terminal<Pk, Ctx>
impl<Pk: Ord + MiniscriptKey, Ctx: Ord + ScriptContext> Ord for Terminal<Pk, Ctx>
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl<Pk: PartialEq + MiniscriptKey, Ctx: PartialEq + ScriptContext> PartialEq for Terminal<Pk, Ctx>
impl<Pk: PartialEq + MiniscriptKey, Ctx: PartialEq + ScriptContext> PartialEq for Terminal<Pk, Ctx>
source§impl<Pk: PartialOrd + MiniscriptKey, Ctx: PartialOrd + ScriptContext> PartialOrd for Terminal<Pk, Ctx>where
Pk::Sha256: PartialOrd,
Pk::Hash256: PartialOrd,
Pk::Ripemd160: PartialOrd,
Pk::Hash160: PartialOrd,
impl<Pk: PartialOrd + MiniscriptKey, Ctx: PartialOrd + ScriptContext> PartialOrd for Terminal<Pk, Ctx>where
Pk::Sha256: PartialOrd,
Pk::Hash256: PartialOrd,
Pk::Ripemd160: PartialOrd,
Pk::Hash160: PartialOrd,
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more