Miniscript
Miniscript is a structured policy language for Bitcoin Script. It simplifies writing, analyzing, and compiling complex spending conditions.
What Is a Miniscript?
A Miniscript is a structured policy language for Bitcoin Script. Developers use it to express complex spending conditions in a human-readable and analyzable way. It compiles these policies into efficient Bitcoin Script bytecode.
Miniscript works through a typed syntax with modular operators. Each fragment represents a semantic unit, like signatures, hashes, or timelocks. The type system tracks properties such as malleability and script size. Compilers translate Miniscript into Bitcoin Script, optimizing for stack behavior. For example, a 2-of-3 multisignature policy writes as or_b(pk(A),or_b(pk(B),pk(C))).
Miniscript matters because it enhances security and usability in Bitcoin wallets. It enables static analysis to detect issues like unsatisfiable scripts or excessive sizes before deployment. This reduces errors in custom spending policies, such as those for multisig or inheritance setups.
Key characteristics include composability, where fragments combine reliably; exhaustive analysis tools; and support for advanced features like covenants via extensions. Wallets integrate Miniscript to generate output descriptors, improving interoperability and developer productivity.
Bitcoin (BTC) is the first decentralized cryptocurrency, launched in 2009. It uses blockchain technology for secure, peer-to-peer digital transactions without intermediaries.
Read full definitionMultisig (multi-signature) is a security feature that requires multiple private keys to authorize a transaction, enhancing protection against unauthorized access in blockchain networks.
Read full definitionOutput descriptors (BIP 380) concisely describe Bitcoin wallet output scripts and spending conditions without revealing private keys.
Read full definitionInteroperability in blockchain refers to the ability of different blockchain networks to communicate and exchange data or value seamlessly, enabling cross-chain functionality.
Read full definitionReal-World Examples
Example 1: Multisignature Wallets
Developers create a 2-of-3 multisig policy with Miniscript: or_b(pk(A),or_b(pk(B),pk(C))). This compiles to Bitcoin Script bytecode. A wallet then requires any two signatures from keys A, B, or C to spend funds. Businesses use this for shared custody.
Example 2: Inheritance Timelocks
For inheritance, use and_v(or_i(pk(executor),after(365)),pk(guardian))). The guardian spends immediately with their key. Or, after 365 days, the executor spends with theirs. This secures family funds against loss.
Example 3: Wallet Output Descriptors
Sparrow Wallet integrates Miniscript in descriptors like sh(multi(2,[key1],[key2],[key3]))#miniscript. Users import these for custom scripts. The wallet analyzes properties like size and malleability before use.
Example 4: Static Analysis in Development
Tools like miniscript CLI check policies for issues. Input pk(K) outputs satisfiability and script size. Developers catch errors early, avoiding stuck funds in production scripts.
Multisig (multi-signature) is a security feature that requires multiple private keys to authorize a transaction, enhancing protection against unauthorized access in blockchain networks.
Read full definitionBitcoin (BTC) is the first decentralized cryptocurrency, launched in 2009. It uses blockchain technology for secure, peer-to-peer digital transactions without intermediaries.
Read full definitionOutput descriptors (BIP 380) concisely describe Bitcoin wallet output scripts and spending conditions without revealing private keys.
Read full definitionSparrow Wallet is a desktop Bitcoin wallet that focuses on security, privacy, and advanced features for managing Bitcoin transactions and keys.
Read full definitionReady to Choose a Secure Wallet?
Use our tools to find the right hardware wallet for your needs.