Skip to content

v0.23.0

Choose a tag to compare

@bobbinth bobbinth released this 09 May 07:56
· 9 commits to main since this release
90f287c

Features

  • Added the miden-vm-synthetic-bench crate for VM-level proving regression detection driven by row-count snapshots from an external producer (#3024).
  • Implemented the miden-registry tool for managing a local filesystem-based package registry. This is intended to help us explore what package management in Miden projects might look like with a central registry for sharing packages, without needing to go all-in on implementing one. #2881.

Fixes

  • Fixed quote-equivalent path ambiguity in library deserialization and linker symbol resolution (#2836).
  • Memoized semantic constant evaluation in AnalysisContext to prevent exponential work from shared constant-dependency graphs during parsing and semantic analysis (#2858).
  • Treat serialized libraries and kernel libraries as untrusted MAST forests during deserialization, rejecting spoofed node digests (#2863).
  • Reverted InvokeKind::ProcRef back to InvokeKind::Exec in visit_mut_procref and added an explanatory comment (#2893).
  • Return typed cycle errors for self-recursive and rootless procedure call graphs, and roll back linker state on failure (#2899).
  • [BREAKING] Reject oversized modules at resolver construction instead of building partial resolver state or panicking (#2899).
  • Return a normal assembly error when pub use <digest> -> <name> does not resolve to an exported procedure (#2899).
  • [BREAKING] Reject non-procedure invoke targets during semantic analysis, and return an assembly error instead of panicking if one still reaches assembly (#2899).
  • Rejected non-syscall references to exported kernel procedures in the linker (#2902).
  • Added Package::content_digest() to identify package contents without changing the MAST digest, including manifest data and semantic package metadata (#2909).
  • Fixed FastProcessor so after_exit trace decorators execute when tracing is enabled without debug mode, and added a tracing-only regression test.
  • Fixed the release dry-run publish cycle between miden-air and miden-ace-codegen, and preserved leaf-only DAG imports with explicit snapshots (#2931).
  • Library deserialization now rejects exports whose MastNodeId is not a procedure root, closing a silent-failure path (#2933).
  • Replaced unsound ptr::read with safe unbox in panic recovery, removing UB from potential double-drop (#2934).
  • Fixed debug-only underflow in memory range-check trace generation when the first memory access is at clk = 0 (#2976).
  • Reverted the MainTrace typed row storage change that caused a large blake3_1to1 trace-building regression (#2949).
  • Fixed Falcon mod_12289 remainder validation and u64::rotr overflow handling for rotations by 0 and 32 (#2968).
  • Added regression coverage for the exact max_num_continuations continuation-stack boundary (#2995).
  • Fixed AEAD padding handling so encrypt does not overwrite memory next to the plaintext buffer and decrypt leaves the plaintext output tail untouched (#3008).
  • Hardened SHA256 message word range checks and U32ADD/U32ADD3 carry constraints, updating recursive verifier relation digest artifacts (#3021).
  • [BREAKING] Removed internal _impl precompile helpers from the core-lib API, hardened proof deserialization and debug storage errors, and added u256 regression vectors (#3026).
  • Fixed host event and advice-mutation diagnostics to point to the triggering emit.event(...) instruction (#3042).
  • Fixed MAST compaction after debug info is cleared so compiler-generated packages do not grow (#3044).
  • Fixed missing smt::set validations in corelib (#3049).
  • Added bounds checks for non-deterministic maybe_value_ptr/maybe_key_ptr hints in sorted_array::find_word and find_partial_key_value (#3051).
  • Fixed same-digest procedure selection so static linking and library-to-executable package conversion preserve the selected procedure's debug metadata (#3054).
  • Canonicalized PathBuf::try_from(String) to match TryFrom<&str>/FromStr, so semantically equivalent quoted path components compare and hash consistently.
  • Fixed u256::wrapping_mul so it preserves caller stack values below its operands (#3071).
  • Rejected empty kernel packages before linking so malformed dependency metadata returns a structured package error instead of reaching the linker's non-empty-kernel assertion (#3082).
  • [BREAKING] Bounded the live advice map by total field elements during execution; advice-provider setup now returns an error when initial advice exceeds this limit (#3085).
  • Fixed FastProcessor stack growth so operand stack depth is bounded by ExecutionOptions::max_stack_depth instead of the internal buffer size (#3086).
  • Hardened MAST forest and package byte-slice deserialization against fuzzed length fields (#3088).
  • [BREAKING] Fixed project artifact reuse to ignore unrelated manifest fields, rejected private cross-module imports, and kept signature-only type imports live (#3091).
  • Fixed stale ReplayProcessor doc comment links to ExecutionTracer after module-structure refactors.

Changes

  • [BREAKING] Refactored MAST forest serialization around fixed-layout full, stripped, and hashless sections, and bumped the MAST wire format to 0.0.3 (#2765).
  • Optimized call graph topological sort from O(V*E) to O(V + E) by pre-computing in-degrees (#2830).
  • [BREAKING] Cleaned up the unreleased MAST forest wire format, with stable node IDs and stricter untrusted validation (#3055).
  • Documented sortedness precondition more prominently for sorted array operations (#2832).
  • Removed AIR constraint tagging instrumentation, applied a uniform constraint description style across components, and optimized constraint evaluation (#2856).
  • [BREAKING] Sync execution and proving APIs now require SyncHost; async Host, execute, and prove remain available (#2865).
  • [BREAKING] miden_processor::execute() and execute_sync() now return ExecutionOutput; trace building remains explicit via execute_trace_inputs*() and trace::build_trace() (#2865).
  • [BREAKING] Removed the deprecated FastProcessor::execute_sync_mut() alias; execute_mut_sync() is now the only sync mutable-execution entrypoint (#2865).
  • [BREAKING] Removed the deprecated FastProcessor::execute_for_trace_sync() and execute_for_trace() wrappers; use execute_trace_inputs_sync() or execute_trace_inputs() instead (#2865).
  • [BREAKING] Removed the deprecated unbound TraceBuildInputs::new() and TraceBuildInputs::from_program() constructors; use execute_trace_inputs_sync() or execute_trace_inputs() instead (#2865).
  • Added prove_from_trace_sync(...) for proving from pre-executed trace inputs (#2865).
  • [BREAKING] Removed the immediate form of adv_push (adv_push.N); use N consecutive adv_push instructions (or repeat.N adv_push end for large N) instead (#2900).
  • Added FastProcessor::into_parts() to extract advice provider, memory, and precompile transcript after step-based execution (#2901).
  • Redesigned the hasher chiplet to use a controller/permutation split architecture with permutation calls deduplication (#2927).
  • Documented that enum variants are module-level constants and must be unique within a module ([#2932])((#2932)).
  • Refactor trace generation to row-major format (#2937).
  • Documented non-overlap requirement for memcopy_words, memcopy_elements, and AEAD encrypt/decrypt procedures (#2941).
  • [BREAKING] Reduced the prove-from-trace API to post-execution trace inputs: TraceBuildInputs no longer carries full execution output, prove_from_trace_sync() takes TraceProvingInputs, and ProvingOptions no longer include ExecutionOptions (#2948).
  • Follow-up refactoring + couple perf improvements on trace generation (#2953).
  • Added chainable Test builders for common test setup in miden-utils-testing (#2957).
  • [BREAKING] Unified all auxiliary-trace buses under a single declarative LogUp LookupAir shared by the verifier, prover aux-trace generator, and recursive ACE circuit; reduced committed boundary values to one per trace (#2962).
  • Collapsed the kernel ROM chiplet to one row per digest with a LogUp multiplicity, eliminating duplicate-callsite rows (#2962).
  • Speed-up AUX range check trace generation by changing divisors to a flat Vec layout (#2966).
  • Added deterministic regression vectors for math::u256 core-lib tests and replaced BigUint-based expectations with an in-test U256 model (#2974).
  • Borrowed operation slices in basic-block batching helpers to avoid cloning in the fingerprinting path (#2994).
  • Clarified that mmr::get fails for positions outside the current MMR rather than returning a sentinel value (#3001).
  • Added fuzz coverage for package semantic deserialization and project parsing, loading, and assembly (#3015).
  • Aligned AEAD key/nonce stack-order documentation and handler comments with the runtime contract (#3036).
  • [BREAKING] Updated the Miden crypto stack to miden-crypto and miden-lifted-stark v0.24, and switched digest-ordering code to Word's native lexicographic ordering (#3039).
  • Cached repeated test compilations to speed up assembler tests without changing coverage, and fixed the core library build watch path (#3047).
  • Made serde opt-in for package crates, and added macro-based binary and serde roundtrip tests for Arbitrary serialization types (#3058).
  • Corrected memory trace delta encoding comments to match first-row and same-word clock delta behavior (#3062).
  • Aligned core_lib::math::u256 user docs with unified LE stack limb ordering (a0/b0 on top), removing conflicting [b7..b0, a7..a0] notation (#3066).
  • Made all internal core::math procedures natively little-endian (#3084).
  • [BREAKING] Updated the Miden crypto stack to miden-crypto v0.25, and switched SMT leaf hashing to use Poseidon2 domain separation so masm-side leaf digests match SmtLeaf::hash() (#3095).
  • [BREAKING] Reject post-last operation-indexed decorators in block assembly and serialized MAST forests; use after_exit for decorators that run after a block exits (#3114).
  • [BREAKING] Removed Continuation::AfterExitDecoratorsBasicBlock. New MAST merges operation-indexed decorators at the post-last-op sentinel index into after_exit at build time; execution uses AfterExitDecorators only, with legacy forests still supported (#2633).