Skip to content

Latest commit

 

History

History
321 lines (260 loc) · 20.2 KB

File metadata and controls

321 lines (260 loc) · 20.2 KB

13.0.0 - October 22, 2025

This release is a pretty big one and includes several significant refactors:

  • Eliminate recursion throughout (most of) the library, by writing iterative algorithms. Includes many small bugfixes.
  • Eliminate many of the stringly typed errors; refactor PolicyError
  • Rewrite the Taproot API based on feedback from Mike Tidwell's development of the "Capture the Bitcoin" competition at TABConf 6. (See #766.)

The full changelog:

  • remove Ctx::check_witness and replace Miniscript::parse_insane with Miniscript::decode_consensus #871
  • refactor data structures in the typechecker and fix some issues around thresholds #859
  • fix multiple bugs in size estimation and limit enforcement for descriptors with uncompressed keys #849
  • fix size estimation for Taproot control blocks in satisfactions #858
  • Extend GetKey impls and fix some bugs #851 #861 #862 #863 (backport in #860)
  • improve decoder from Script implementation and error type; rename parse_with_ext to decode_with_ext #845
  • enforce that xpubs in descriptors have the same network #848
  • fix malleability behavior in Taproot satisfier #826
  • Fix DefiniteDescriptorKey::new to forbid multipath keys and hardened derivations (which would cause assertion failures) #830 #839 (backports in #831 #832 #833 #833)
  • add Descriptor::iter_pk to iterate over pubkeys in an arbitrary descriptor #823
  • satisfy: pass public key to lookup_tap_key_spend_sig to remind satisfier of the keyspend key #827
  • plan: remove unused AssetProvider::provider_lookup_tap_control_block_map from trait #826
  • Add conversions from XOnlyPublicKey to rust-miniscript descriptor keytypes #818 (backport in #819)
  • Fix crash in parse_descriptor #809 (backport in #816)
  • Eliminate the stringly-typed errors from descriptor key parsing #804
  • Rewrite the expression parser to be non-recursive, have much better error messages, and to be more correct. #773 #775 #778 #780 #784
  • Remove the no-std and actual-serde features #769
  • Rewrite the Taproot API #751 #802 #807 #808 #815 #828 (includes bugfix for compiler crash with 0-probability policy fragments)
  • Separate out many distinct "max size exceeded" errors #758 #760
  • Fix spelling of MaxWitnessItemsExceeded error variant #759
  • Support conversion of multi-Xprivs into multi-Xpubs #757
  • Split "witness size exceeded" error from "bare script size exceeded" #756
  • Fix decoding WIF privkeys with BIP32 origins #753
  • Allow compiling pk descriptors to keyspend-only tr descriptors #677
  • Reduce "maximum pubkeys in multi_a" limit to 999 #746
  • Remove PartialEq from Error and introduce StaticDebugAndDisplay trait to help with boxing errors #741 #801
  • Fix lower limit of relative locktime #740
  • Remove TranslatePk trait; move generics on Translator to associated types #733
  • Fix upper limit of absolute locktime #719
  • Clean up Taproot compiler and policy errors #732
  • Eliminate recursion throughout the library; extend the TreeLike trait; remove Liftable for Terminal #722 #724 #725
  • Update MSRV to Rust 1.63 #719

12.3.1 - April 1, 2025

  • Silent fix for CVE-2025-43707 (crash on satisfaction of particularly crafted thresh fragments) #798

12.3.0 - August 31, 2024

  • Fix incorrect string serialization of and_b #735

12.2.0 - July 20, 2024

  • Fix panics while decoding large miniscripts from script #712

12.1.0 - July 9, 2024

  • Make LoggerAssetProvider constructible #697
  • Explicitly track recursion depth in fragments #704

12.0.0 - May 22, 2024

  • 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 for pub items #659
  • Upgrade bech32 dependency to v0.11.0 #661
  • Return Weight type for max_weight_to_satisfy methods #664

Introduce a new Threshold type

Performance/compiled time improvements

  • Remove recursion in semantic module #612
  • Remove generics from Error by making fragment a String #642
  • Remove unused generic on check_witness #644
  • Add conditional formatting for Terminal #651

Other internal cleanups / improvements

  • 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

11.2.0 - July 20, 2024

  • Fix panics while decoding large miniscripts from script #712

11.1.0 - July 9, 2024

  • Explicitly track recursion depth in fragments #704

11.0.0 - November 16, 2023

  • 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

# 10.2.0 - July 20, 2024

  • Fix panics while decoding large miniscripts from script #712

10.1.0 - July 9, 2024

  • Explicitly track recursion depth in fragments #704

10.0.0 - May 24, 2023

9.2.0 - July 20, 2024

  • Fix panics while decoding large miniscripts from script #712

9.1.0 - July 13, 2023

  • Explicitly track recursion depth in fragments #704

9.0.2

  • Workaround for recursion bug in rustc #566

9.0.1 - March 8, 2023

  • Fixed a typing rule in multi_a for taproot miniscript descriptors. Current typing rules incorrectly tagged multi_a with the n property. Certain miniscripts of the form j:multi_a could could not spent without the first key. We could not find any evidence of these scripts being used in the wild. While this is technically a breaking change, any downstream users whose code would break by this change are already vulnerable.

9.0.0 - November 5, 2022

  • Fixed a bug dealing with dissatisfying pkh inside thresh
  • Changed the signature of Satisfier::lookup_raw_pkh_pk API. Only custom implementations of Satisfier 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 via ExtParams while parsing string.

8.0.0 - October 20, 2022

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.

7.0.0 - April 20, 2022

  • 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 operations
    • Psbt::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 use translate APIs. See examples/xpub_descriptor for usage
  • Update DescriptorTrait: script_code and explicit_script can now fail because of taproot descriptors
  • Add PreTaprootDescriptor and PreTaprootDescriptorTrait to support non-failing versions of script_code and explicit_script for non taproot descriptors
  • Overhaul the interpreter API to provide simpler APIs iter(prevouts) and iter_assume_sig() so that it no longer takes a closure input.
  • Add interpreter support for taproot transactions.
  • Works with rust-bitcoin 0.28.0

6.0.1 - Aug 5, 2021

  • The lift method on a Miniscript node was fixed. It would previously mix up the X and Y argument of an andor fragment.

6.0.0 - Jul 29, 2021

  • bump rust-bitcoin to 0.27
  • several bugfixes

5.0.0 - Jan 14, 2021

  • 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 from MiniscriptKeyand MiniscriptKey::Hash
  • Various DescriptorPublicKey improvements
  • Allow hardened paths in DescriptorPublicKey, remove direct ToPublicKey implementation
  • Change Option to Result in all APIs
  • bump rust-bitcoin to 0.26

4.0.0 - Nov 23, 2020

  • 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 new Interpreter API

3.0.0 - Oct 13, 2020

  • Bump MSRV to 1.29

2.0.0 - Oct 1, 2020

  • 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

1.0.0 - July 6, 2020

  • Added the following aliases to miniscript for ease of operations
    • Rename pk to pk_k
    • Rename thresh_m to multi
    • Add alias pk(K) = c:pk_k(K)
    • Add alias pkh(K) = c:pk_h(K)
  • Fixed Miniscript parser bugs when decoding Hashlocks
  • Added scriptContext(Legacy and Segwitv0) to Miniscript.
  • Miscellaneous fixes against DoS attacks for heavy nesting.
  • Fixed Satisfier bug that caused flipping of arguments for and_v and and_n and and_or