- Fix panics while decoding large miniscripts from script #712
- Update MSRV to Rust
v1.56.1
#639 - Remove sketchy
LikelyFalse
error #645 - Drop the
Property
trait entirely #652 - Improve compiler logic when deciding between conjunctions and
multi
/multi_a
#657 - Several locktime improvements #654
- Derive
Hash
forpub
items #659 - Upgrade
bech32
dependency tov0.11.0
#661 - Return
Weight
type formax_weight_to_satisfy
methods #664
- Remove recursion in
semantic
module #612 - Remove generics from
Error
by making fragment aString
#642 - Remove unused generic on
check_witness
#644 - Add conditional formatting for
Terminal
#651
- Remove
internals
dependency #631 - Introduce an example binary useful for profiling #646
- Refactor out
type_check
#649 - Replace macros with traits, using trait bound trick #650
- Add the planning module #592
- Bump MSRV to 1.48 #569
- Upgrade
rust-bitcoin
to v0.31.0 #618 - Reduce binary bloat by removing generic param from type_check 584
- Add height to tap tree 588
- Improve
TapTree
API 617 - Remove "unstable" feature 482
- Remove hashbrown dependency 564
- Add method to convert expr_raw_pkh into pkh 557
- psbt: Rewrite input replacement to avoid forgetting fields 568
- Works with rust-bitcoin 0.30.0
- Add support for [multi-path descriptors] (https://github.com/rust-bitcoin/rust-miniscript#470)
- Fix bugs in max_satisfaction_weight
- DefiniteDescriptorKey: provide additional methods for converting to a DescriptorPublicKey (https://github.com/rust-bitcoin/rust-miniscript#492)
- Remove
DummyKey
(https://github.com/rust-bitcoin/rust-miniscript#508) - Update TranslatePk trait to cleanly separate errors during translation itself and script context errors. PR
- Fixes to improve CI infrastructure with Nix support and bitcoind tests.
- Fixed a bug dealing with dissatisfying pkh inside thresh
- Changed the signature of
Satisfier::lookup_raw_pkh_pk
API. Only custom implementations ofSatisfier
need to be updated. The psbt APIs are unchanged. - Fixed a bug related to display of
raw_pk_h
. These descriptors are experimental and only usable by opting viaExtParams
while parsing string.
This release contains several significant API overhauls, as well as a bump of our MSRV from 1.29 to 1.41. Users are encouraged to update their compiler to 1.41 before updating to this version.
It includes more Taproot support, but users should be aware that Taproot support for Miniscript is not standardized and is subject to change in the future. See this gist for our thinking regarding this at the time of release.
- Works with bitcoin crate 0.29
- Correctly return an error when
SortedMulti
is constructed with too many keys - Cleanly separate
experimental/insane miniscripts
from sane miniscripts. - allow disabling the checksum with
alternate Display
- Correct
max_satisfaction_size
offrom_multi_a
fragment - Add
PsbtInputExt
trait withupdate_with_descriptor
method andPsbtOutputExt
trait - Rename several descriptor types to reduce redundancy
- Bump MSRV to 1.41 and edition to 2018
- Rename
as_public
toto_public
on some descriptor key types - Split fully derived
DescriptorPublicKey
s into their own type followup - Remove the
DescriptorTrait
in favor of theDescriptor
enum - Fix signature costing to account for ECDSA vs Schnorr
- Add a Taproot-enabled compiler v1 v2 v3
- Rename
stackelem
tostack_elem
in the interpreter - Add
no-std
- Reworked the
TranslatePk
APIs. Add a Translator trait to cleanly allow downstream users without dealing with APIs that accept function pointers. Also providestranslate_assoc_clone
andtranslate_assoc_fail
macros for helping in writing code. - Updated
MiniscriptKey trait
,#439 to accept associated types for Sha256, Hash256, Ripemd160 and Hash160. This allows users to write abstract miniscripts hashes as "sha256(H)" instead of specifying the entire hash in the string. that updates the psbt with descriptor bip32 paths. - Re-name
as_public
APIs ->to_public
- Significantly improve the timelock code with new rust-bitcoin APIs.
- rust-miniscript minor implementation detail:
PkH
fragment now hasPk
generic instead ofPk::Hash
. This only concerns users that operate withMiniscriptKey = bitcoin::PublicKey
or users that use custom implementation ofMiniscriptKey
. Users that useDescriptorPublicKey
need not be concerned. See PR for details.- To elaborate, "pkh(<20-byte-hex>)" is no longer parsed by the
MiniscriptKey = bitcoin::PublicKey
. This is consistent with the descriptor spec as defined. Parsing frombitcoin::Script
for pkh<20-byte-hex> is still supported, but the library would not analyze them. These raw descriptors are still in spec discussions. Rust-miniscript will support them once they are completely specified.
- To elaborate, "pkh(<20-byte-hex>)" is no longer parsed by the
- Fixed miniscript type system bug. This is a security vulnerability and users are strongly encouraged to upgrade. See this (link)[https://github.com/rust-bitcoin/rust-miniscript/pull/349/commits/db97c39afa4053c2c3917f04392f6e24964b3972] for details.
- Support for
tr
descriptors with miniscript leaves and multi_a fragment - Changes to MiniscriptKey and ToPublicKey traits for x-only keys support
- Add
PsbtExt
trait for psbt operationsPsbt::update_desc
adds information from a descriptor to a psbt. This figures out the type of the descriptor and adds corresponding redeem script/witness script and tap tree information
- Add
derived_descriptor
API to Descriptor so that users no longer need to usetranslate
APIs. See examples/xpub_descriptor
for usage - Update
DescriptorTrait
:script_code
andexplicit_script
can now fail because of taproot descriptors - Add
PreTaprootDescriptor
andPreTaprootDescriptorTrait
to support non-failing versions ofscript_code
andexplicit_script
for non taproot descriptors - Overhaul the interpreter API to provide simpler APIs
iter(prevouts)
anditer_assume_sig()
so that it no longer takes a closure input. - Add interpreter support for taproot transactions.
- Works with rust-bitcoin 0.28.0
- The
lift
method on a Miniscript node was fixed. It would previously mix up theX
andY
argument of anandor
fragment.
- bump
rust-bitcoin
to 0.27 - several bugfixes
- Remove
PkCtx
from the API - Move descriptors into their own types, with an enum containing all of them
- Move descriptor functionality into a trait
- Remove
FromStr
bound fromMiniscriptKey
andMiniscriptKey::Hash
- Various
DescriptorPublicKey
improvements - Allow hardened paths in
DescriptorPublicKey
, remove directToPublicKey
implementation - Change
Option
toResult
in all APIs - bump
rust-bitcoin
to 0.26
- Add support for parsing secret keys
- Add sortedmulti descriptor
- Added standardness and other sanity checks
- Cleaned up
Error
type and return values of most of the API - Overhauled
satisfied_constraints
module into a newIterpreter
API
- Bump MSRV to 1.29
- Changes to the miniscript type system to detect an invalid
combination of heightlocks and timelocks
- Lift miniscripts can now fail. Earlier it always succeeded and gave the resulting Semantic Policy
- Compiler will not compile policies that contain at least one unspendable path
- Added support for Descriptor PublicKeys(xpub)
- Added a generic psbt finalizer and extractor
- Updated Satisfaction API for checking time/height before setting satisfaction
- Added a policy entailment API for more miniscript semantic analysis
- Added the following aliases to miniscript for ease of operations
- Rename
pk
topk_k
- Rename
thresh_m
tomulti
- Add alias
pk(K)
=c:pk_k(K)
- Add alias
pkh(K)
=c:pk_h(K)
- Rename
- Fixed Miniscript parser bugs when decoding Hashlocks
- Added scriptContext(
Legacy
andSegwitv0
) to Miniscript. - Miscellaneous fixes against DoS attacks for heavy nesting.
- Fixed Satisfier bug that caused flipping of arguments for
and_v
andand_n
andand_or