- Added
miden_core::utils::sync::racy_lockmodule (#1463). - Updated
miden_core::utilsto re-exportstd::sync::LazyLockandracy_lock::RacyLock as LazyLockfor std and no_std environments, respectively (#1463). - Debug instructions can be enabled in the cli
runcommand using--debugflag (#1502). - Added support for procedure annotation (attribute) syntax to Miden Assembly (#1510).
- Make
miden-prover::prove()method conditionally asynchronous (#1563).
- [BREAKING] Wrapped
MastForests inProgramandLibrarystructs inArc(#1465). MastForestBuilder: useMastNodeIdinstead of MAST root to uniquely identify procedures (#1473).- Made the undocumented behavior of the VM with regard to undefined behavior of u32 operations, stricter (#1480).
- Introduced the
Emitinstruction (#1496). - [BREAKING] ExecutionOptions::new constructor requires a boolean to explicitly set debug mode (#1502).
- [BREAKING] The
runand theprovecommands in the cli will accept--traceflag instead of--tracing(#1502). - Migrated to new padding rule for RPO (#1343).
- Migrated to
miden-cryptov0.11.0 (#1343). - Implemented
MastForestmerging (#1534). - Rename
EqHashtoMastNodeFingerprintand make itpub(#1539). - Updated Winterfell dependency to v0.10 (#1533).
- [BREAKING]
DYNoperation now expects a memory address pointing to the procedure hash (#1535). - [BREAKING]
DYNCALLoperation fixed, and now expects a memory address pointing to the procedure hash (#1535). - Permit child
MastNodeIds to exceed theMastNodeIds of their parents (#1542). - Don't validate export names on
Librarydeserialization (#1554)
- Fixed an issue with formatting of blocks in Miden Assembly syntax
- Fixed the construction of the block hash table (#1506)
- Fixed a bug in the block stack table (#1511) (#1512) (#1557)
- Fixed the construction of the chiplets virtual table (#1514) (#1556)
- Fixed the construction of the chiplets bus (#1516) (#1525)
- Decorators are now allowed in empty basic blocks (#1466)
- Added
PartialEq,Eq,SerializeandDeserializetoAdviceMapandAdviceInputsstructs (#1494).
- Updated
MastForest::read_fromto deserialize without computing node hashes unnecessarily (#1453). - Assembler: Merge contiguous basic blocks (#1454).
- Assembler: Add a threshold number of operations after which we stop merging more in the same block (#1461).
- Added
new_unsafe()constructors to MAST node types which do not compute node hashes (#1453). - Consolidated
BasicBlockNodeconstructors and converted assert flow toMastForestError::EmptyBasicBlock(#1453).
- Fixed an issue with registering non-local procedures in
MemMastForestStore(#1462). - Added a check for circular external node lookups in the processor (#1464).
- Added support for executing
Dynnodes from external MAST forests (#1455).
- Added
with-debug-infofeature tomiden-stdlib(#1445). - Added
Assembler::add_modules_from_dir()method (#1445). - [BREAKING] Implemented building of multi-module kernels (#1445).
- [BREAKING] Replaced
SourceManagerparameter withAssemblerinLibrary::from_dir(#1445). - [BREAKING] Moved
LibraryandKernelLibraryexports to the root of themiden-assemblycrate. (#1445). - [BREAKING] Depth of the input and output stack was restricted to 16 (#1456).
- Removed linear search of trace rows from
BlockHashTableRow::table_init()(#1439). - Exposed some pretty printing internals for
MastNode(#1441). - Made
KernelLibraryimplCloneandAsRef<Library>(#1441). - Added serialization to the
Programstruct (#1442).
- [BREAKING] Removed serialization of AST structs (#1442).
- Added source location tracking to assembled MAST (#1419).
- Added error codes support for the
mtree_verifyinstruction (#1328). - Added support for immediate values for
lt,lte,gt,gtecomparison instructions (#1346). - Added support for immediate values for
u32lt,u32lte,u32gt,u32gte,u32minandu32maxcomparison instructions (#1358). - Added support for the
nopinstruction, which corresponds to the VM opcode of the same name, and has the same semantics. - Added support for the
if.falseinstruction, which can be used in the same manner asif.true - Added support for immediate values for
u32and,u32or,u32xorandu32notbitwise instructions (#1362). - [BREAKING] Assembler: add the ability to compile MAST libraries, and to assemble a program using compiled libraries (#1401)
- Changed MAST to a table-based representation (#1349).
- Introduced
MastForestStore(#1359). - Adjusted prover's metal acceleration code to work with 0.9 versions of the crates (#1357).
- Relaxed the parser to allow one branch of an
if.(true|false)to be empty. - Optimized
std::sys::truncate_stuckprocedure (#1384). - Updated CI and Makefile to standardize it across Miden repositories (#1342).
- Add serialization/deserialization for
MastForest(#1370). - Updated CI to support
CHANGELOG.mdmodification checking andno changeloglabel (#1406). - Introduced
MastForestErrorto enforceMastForestnode count invariant (#1394). - Added functions to
MastForestBuilderto allow ensuring of nodes with fewer LOC (#1404). - [BREAKING] Made
Assemblersingle-use (#1409). - Removed
ProcedureCachefrom the assembler (#1411). - Added functions to
MastForestandMastForestBuilderto add and ensure nodes with fewer LOC (#1404, #1412). - Added
Assembler::assemble_library()andAssembler::assemble_kernel()(#1413, #1418). - Added
miden_core::prettier::pretty_print_csvhelper, for formatting of iterators overPrettyPrintvalues as comma-separated items. - Added source code management primitives in
miden-core(#1419). - Added
make test-fastandmake test-skip-proptestsMakefile targets for faster testing during local development. - Added
ProgramFile::read_withconstructor that takes aSourceManagerimpl to use for source management. - Added
RowIndex(u32)(#1408).
- When using
if.(true|false) .. end, the parser used to emit an empty block for the branch that was elided. The parser now emits a block containing a singlenopinstruction instead. - [BREAKING]
internalsconfiguration feature was renamed totesting(#1399). - The
AssemblyOpdecorator now contains an optionalLocation(#1419) - The
Assemblernow requires passing in aArc<dyn SourceManager>, for use in rendering diagnostics. - The
Module::parse_fileandModule::parse_strfunctions have been removed in favor of callingModule::parserand then using theModuleParsermethods. - The
Compiletrait now requires passing aSourceManagerreference along with the item to be compiled. - Update minimum supported Rust version to 1.80 (#1425).
- Skip writing MASM documentation to file when building on docs.rs (#1341).
- Remove usage of
group_vector_elements()fromcombine_blocks()(#1331).
- Allowed enabling debug mode via
ExecutionOptions(#1316).
- Added additional trait implementations to error types (#1306).
- [BREAKING] The package
miden-vmcrate was renamed frommidentomiden-vm. Now the package and crate names match (#1271).
- Added
init_no_paddingprocedure tostd::crypto::hashes::native(#1313). - [BREAKING]
nativemodule was renamed to therpo,hash_memoryprocedure was renamed to thehash_memory_words(#1368). - Added
hash_memoryprocedure tostd::crypto::hashes::rpo(#1368).
- Removed unused
find_lone_leaf()function from the Advice Provider (#1262). - [BREAKING] Changed fields type of the
StackOutputsstruct fromVec<u64>toVec<Felt>(#1268). - [BREAKING] Migrated to
miden-cryptov0.9.0 (#1287).
- Expanded capabilities of the
debugdecorator. Addeddebug.memanddebug.localvariations (#1103). - Introduced the
emit.<event_id>assembly instruction (#1119). - Introduced the
procref.<proc_name>assembly instruction (#1113). - Added the ability to use constants as counters in
repeatloops (#1124). - [BREAKING] Removed all
checkedversions of the u32 instructions. Renamed alluncheckedversions (#1115). - Introduced the
u32clz,u32ctz,u32clo,u32ctoandilog2assembly instructions (#1176). - Added support for hexadecimal values in constants (#1199).
- Added the
RCombBaseinstruction (#1216).
- Introduced
std::utilsmodule withis_empty_wordprocedure. Refactoredstd::collections::smtandstd::collections::smt64to use the procedure (#1107). - [BREAKING] Removed
checkedversions of the instructions in thestd::math::u64module (#1142). - Introduced
clz,ctz,cloandctoinstructions in thestd::math::u64module (#1179). - [BREAKING] Refactored
std::collections::smtto useSimpleSmt-based implementation (#1215). - [BREAKING] Removed
std::collections::smt64(#1249)
- Introduced the
Eventdecorator and an associatedon_eventhandler on theHosttrait (#1119). - Added methods
StackOutputs::get_stack_item()andStackOutputs::get_stack_word()(#1155). - Added Tracing logger to the VM (#1139).
- Refactored auxiliary trace construction (#1140).
- [BREAKING] Optimized
u32ltinstruction (#1193) - Added
on_assert_failed()method to the Host trait (#1197). - Added support for handling
traceinstruction in theHostinterface (#1198). - Updated Winterfell dependency to v0.8 (#1234).
- Increased min version of
rustcto 1.75.
- Introduced the
!usecommand for the Miden REPL (#1162). - Introduced a
BLAKE3hashing example (#1180).
- Added ability to attach doc comments to re-exported procedures (#994).
- Added support for nested modules (#992).
- Added support for the arithmetic expressions in constant values (#1026).
- Added support for module aliases (#1037).
- Added
adv.insert_hpermdecorator (#1042). - Added
adv.push_smtpeekdecorator (#1056). - Added
debugdecorator (#1069). - Refactored
pushinstruction so now it parses long hex string in little-endian (#1076).
- Implemented ability to output compiled
.masbfiles to disk (#1102).
- Simplified range checker and removed 1 main and 1 auxiliary trace column (#949).
- Migrated range checker lookups to use LogUp and reduced the number of trace columns to 2 main and 1 auxiliary (#1027).
- Added
get_mapped_values()andget_store_subset()methods to theAdviceProvidertrait (#987). - [BREAKING] Added options to specify maximum number of cycles and expected number of cycles for a program (#998).
- Improved handling of invalid/incomplete parameters in
StackOutputsconstructors (#1010). - Allowed the assembler to produce programs with "phantom" calls (#1019).
- Added
TraceLenSummarystruct which holds information about traces lengths to theExecutionTrace(#1029). - Imposed the 2^32 limit for the memory addresses used in the memory chiplet (#1049).
- Supported
PartialMerkleTreeas a secret input in.inputfile (#1072). - [BREAKING] Refactored
AdviceProviderinterface intoHostinterface (#1082).
- Completed
std::collections::smtmodule by implementinginsertandsetprocedures (#1036, #1038, #1046). - Added new module
std::crypto::dsa::rpo_falcon512to support Falcon signature verification (#1000, #1094)
- Fixed
no-stdcompilation formiden-core,miden-assembly, andmiden-processorcrates.
- Added new instructions:
mtree_verify. - [BREAKING] Refactored
adv.memdecorator to use parameters from operand stack instead of immediate values. - [BREAKING] Refactored
mem_streamandadv_pipeinstructions. - Added constant support for memory operations.
- Enabled incremental compilation via
compile_in_context()method. - Exposed ability to compile individual modules publicly via
compile_module()method. - [BREAKING] Refactored advice injector instructions.
- Implemented procedure re-exports from modules.
- Implemented support for all types of nondeterministic inputs (advice stack, advice map, and Merkle store).
- Implemented ability to generate proofs suitable for recursion.
- Added new module:
std::collections::smt(onlysmt::getavailable). - Added new module:
std::collections::mmr. - Added new module:
std::collections::smt64. - Added several convenience procedures to
std::memmodule. - [BREAKING] Added procedures to compute 1-to-1 hashes in
std::crypto::hashesmodule and renamed existing procedures to remove ambiguity. - Greatly optimized recursive STARK verifier (reduced number of cycles by 6x - 8x).
- Moved test framework from
miden-vmcrate tomiden-test-utilscrate. - Updated Winterfell dependency to v0.6.4.
- Added support for GPU acceleration on Apple silicon (Metal).
- Added source locations to all AST nodes.
- Added 8 more instruction slots to the VM (not yet used).
- Completed kernel ROM trace generation.
- Implemented ability to record advice provider requests to the initial dataset via
RecAdviceProvider.
- Renamed
ProgramInfotoExecutionDetailssince there is anotherProgramInfostruct in the source code. - [BREAKING] renamed
stack_initandadvice_tapetooperand_stackandadvice_stackin input files. - Enabled specifying additional advice provider inputs (i.e., advice map and Merkle store) via the input files.
- Added new instructions:
is_odd,assert_eqw,mtree_merge. - [BREAKING] Removed
mtree_cwminstruction. - Added
breakpointinstruction to help with debugging.
- [BREAKING] Renamed
Read,ReadWoperations intoAdvPop,AdvPopW. - [BREAKING] Replaced
AdviceSetwithMerkleStore. - Updated Winterfell dependency to v0.6.0.
- [BREAKING] Renamed
Read/ReadWoperations intoAdvPop/AdvPopW.
- [BREAKING] Converted
AdviceProviderinto a trait which can be provided to the processor. - Added a decorator for interpolating polynomials over degree 2 extension field (
ext2intt). - Added
AdviceSourceenum for greater future flexibility of advice injectors.
- Added
debugsubcommand to enable stepping through program execution forward/backward. - Added cycle count to the output of program execution.
- Added support for constant declarations.
- Added new instructions:
clk,ext2*,fri_ext2fold4,hash,u32checked_popcnt,u32unchecked_popcnt. - [BREAKING] Renamed
rppermtohpermandrphashtohmerge. - Removed requirement that code blocks must be non-empty (i.e., allowed empty blocks).
- [BREAKING] Refactored
mtree_setandmtree_cwminstructions to leave the old value on the stack. - [BREAKING] Replaced
ModuleProviderwithLibraryto improve 3rd party library support.
- [BREAKING] Refactored
execute(),prove(),verify()functions to takeStackInputsas one of the parameters. - [BREAKING] Refactored
prove()function to returnExecutionProof(which is a wrapper forStarkProof). - [BREAKING] Refactored
verify()function to takeProgramInfo,StackInputs, andExecutionProofas parameters and return au32indicating security level of the verified proof.
- Added
std::mem::memcopyprocedure for copying regions of memory. - Added
std::crypto::fri::frie2f4::verifyfor verifying FRI proofs over degree 2 extension field.
- [BREAKING] Migrated to Rescue Prime Optimized hash function.
- Updated Winterfell backend to v0.5.1
- Implemented
calloperation for context-isolated function calls. - Added support for custom kernels.
- Implemented
syscalloperation for kernel calls, and added a newcallerinstruction for accessing the hash of the calling function. - Implemented
mem_streamoperation for fast hashing of memory regions. - Implemented
adv_pipeoperation for fast "unhashing" of inputs into memory. - Added support for unlimited number of stack inputs/outputs.
- [BREAKING] Redesigned Miden assembly input/output instructions for environment, random access memory, local memory, and non-deterministic "advice" inputs.
- [BREAKING] Reordered the output stack for Miden assembly cryptographic operations
mtree_setandmtree_getto improve efficiency. - Refactored the advice provider to add support for advice maps, and added the
adv.memdecorator for copying memory regions into the advice map. - [BREAKING] Refactored the Assembler and added support for module providers. (Standard library is no longer available by default.)
- Implemented AIR constraints for the stack component.
- Added Miden REPL tool.
- Improved performance with various internal refactorings and optimizations.
- Implemented new decoder which removes limitations on the depth of control flow logic.
- Introduced chiplet architecture to offload complex computations to specialized modules.
- Added read-write random access memory.
- Added support for operations with 32-bit unsigned integers.
- Redesigned advice provider to include Merkle path advice sets.
- Changed base field of the VM to the prime field with modulus 2^64 - 2^32 + 1.
- Initial release (migration of the original Distaff VM codebase to Winterfell backend).