pub enum Terminal<Pk: MiniscriptKey, Ctx: ScriptContext> {
Show 28 variants
True,
False,
PkK(Pk),
PkH(Pk),
RawPkH(Hash),
After(AbsLockTime),
Older(RelLockTime),
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(Threshold<Arc<Miniscript<Pk, Ctx>>, 0>),
Multi(Threshold<Pk, MAX_PUBKEYS_PER_MULTISIG>),
MultiA(Threshold<Pk, MAX_PUBKEYS_IN_CHECKSIGADD>),
}
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(RelLockTime)
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(Threshold<Arc<Miniscript<Pk, Ctx>>, 0>)
[E] ([W] ADD)* k EQUAL
Multi(Threshold<Pk, MAX_PUBKEYS_PER_MULTISIG>)
k (<key>)* n CHECKMULTISIG
MultiA(Threshold<Pk, MAX_PUBKEYS_IN_CHECKSIGADD>)
<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.