- Added
miden_core::utils::sync::racy_lock
module (#1463). - Updated
miden_core::utils
to re-exportstd::sync::LazyLock
andracy_lock::RacyLock as LazyLock
for std and no_std environments, respectively (#1463). - Debug instructions can be enabled in the cli
run
command using--debug
flag (#1502). - Added support for procedure annotation (attribute) syntax to Miden Assembly (#1510).
- Make
miden-prover::prove()
method conditionally asynchronous (#1563).
- [BREAKING] Wrapped
MastForest
s inProgram
andLibrary
structs inArc
(#1465). MastForestBuilder
: useMastNodeId
instead 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
Emit
instruction (#1496). - [BREAKING] ExecutionOptions::new constructor requires a boolean to explicitly set debug mode (#1502).
- [BREAKING] The
run
and theprove
commands in the cli will accept--trace
flag instead of--tracing
(#1502). - Migrated to new padding rule for RPO (#1343).
- Migrated to
miden-crypto
v0.11.0 (#1343). - Implemented
MastForest
merging (#1534). - Rename
EqHash
toMastNodeFingerprint
and make itpub
(#1539). - Updated Winterfell dependency to v0.10 (#1533).
- [BREAKING]
DYN
operation now expects a memory address pointing to the procedure hash (#1535). - [BREAKING]
DYNCALL
operation fixed, and now expects a memory address pointing to the procedure hash (#1535). - Permit child
MastNodeId
s to exceed theMastNodeId
s of their parents (#1542). - Don't validate export names on
Library
deserialization (#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
,Serialize
andDeserialize
toAdviceMap
andAdviceInputs
structs (#1494).
- Updated
MastForest::read_from
to 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
BasicBlockNode
constructors 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
Dyn
nodes from external MAST forests (#1455).
- Added
with-debug-info
feature tomiden-stdlib
(#1445). - Added
Assembler::add_modules_from_dir()
method (#1445). - [BREAKING] Implemented building of multi-module kernels (#1445).
- [BREAKING] Replaced
SourceManager
parameter withAssembler
inLibrary::from_dir
(#1445). - [BREAKING] Moved
Library
andKernelLibrary
exports to the root of themiden-assembly
crate. (#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
KernelLibrary
implClone
andAsRef<Library>
(#1441). - Added serialization to the
Program
struct (#1442).
- [BREAKING] Removed serialization of AST structs (#1442).
- Added source location tracking to assembled MAST (#1419).
- Added error codes support for the
mtree_verify
instruction (#1328). - Added support for immediate values for
lt
,lte
,gt
,gte
comparison instructions (#1346). - Added support for immediate values for
u32lt
,u32lte
,u32gt
,u32gte
,u32min
andu32max
comparison instructions (#1358). - Added support for the
nop
instruction, which corresponds to the VM opcode of the same name, and has the same semantics. - Added support for the
if.false
instruction, which can be used in the same manner asif.true
- Added support for immediate values for
u32and
,u32or
,u32xor
andu32not
bitwise 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_stuck
procedure (#1384). - Updated CI and Makefile to standardize it across Miden repositories (#1342).
- Add serialization/deserialization for
MastForest
(#1370). - Updated CI to support
CHANGELOG.md
modification checking andno changelog
label (#1406). - Introduced
MastForestError
to enforceMastForest
node count invariant (#1394). - Added functions to
MastForestBuilder
to allow ensuring of nodes with fewer LOC (#1404). - [BREAKING] Made
Assembler
single-use (#1409). - Removed
ProcedureCache
from the assembler (#1411). - Added functions to
MastForest
andMastForestBuilder
to add and ensure nodes with fewer LOC (#1404, #1412). - Added
Assembler::assemble_library()
andAssembler::assemble_kernel()
(#1413, #1418). - Added
miden_core::prettier::pretty_print_csv
helper, for formatting of iterators overPrettyPrint
values as comma-separated items. - Added source code management primitives in
miden-core
(#1419). - Added
make test-fast
andmake test-skip-proptests
Makefile targets for faster testing during local development. - Added
ProgramFile::read_with
constructor that takes aSourceManager
impl 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 singlenop
instruction instead. - [BREAKING]
internals
configuration feature was renamed totesting
(#1399). - The
AssemblyOp
decorator now contains an optionalLocation
(#1419) - The
Assembler
now requires passing in aArc<dyn SourceManager>
, for use in rendering diagnostics. - The
Module::parse_file
andModule::parse_str
functions have been removed in favor of callingModule::parser
and then using theModuleParser
methods. - The
Compile
trait now requires passing aSourceManager
reference 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-vm
crate was renamed frommiden
tomiden-vm
. Now the package and crate names match (#1271).
- Added
init_no_padding
procedure tostd::crypto::hashes::native
(#1313). - [BREAKING]
native
module was renamed to therpo
,hash_memory
procedure was renamed to thehash_memory_words
(#1368). - Added
hash_memory
procedure tostd::crypto::hashes::rpo
(#1368).
- Removed unused
find_lone_leaf()
function from the Advice Provider (#1262). - [BREAKING] Changed fields type of the
StackOutputs
struct fromVec<u64>
toVec<Felt>
(#1268). - [BREAKING] Migrated to
miden-crypto
v0.9.0 (#1287).
- Expanded capabilities of the
debug
decorator. Addeddebug.mem
anddebug.local
variations (#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
repeat
loops (#1124). - [BREAKING] Removed all
checked
versions of the u32 instructions. Renamed allunchecked
versions (#1115). - Introduced the
u32clz
,u32ctz
,u32clo
,u32cto
andilog2
assembly instructions (#1176). - Added support for hexadecimal values in constants (#1199).
- Added the
RCombBase
instruction (#1216).
- Introduced
std::utils
module withis_empty_word
procedure. Refactoredstd::collections::smt
andstd::collections::smt64
to use the procedure (#1107). - [BREAKING] Removed
checked
versions of the instructions in thestd::math::u64
module (#1142). - Introduced
clz
,ctz
,clo
andcto
instructions in thestd::math::u64
module (#1179). - [BREAKING] Refactored
std::collections::smt
to useSimpleSmt
-based implementation (#1215). - [BREAKING] Removed
std::collections::smt64
(#1249)
- Introduced the
Event
decorator and an associatedon_event
handler on theHost
trait (#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
u32lt
instruction (#1193) - Added
on_assert_failed()
method to the Host trait (#1197). - Added support for handling
trace
instruction in theHost
interface (#1198). - Updated Winterfell dependency to v0.8 (#1234).
- Increased min version of
rustc
to 1.75.
- Introduced the
!use
command for the Miden REPL (#1162). - Introduced a
BLAKE3
hashing 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_hperm
decorator (#1042). - Added
adv.push_smtpeek
decorator (#1056). - Added
debug
decorator (#1069). - Refactored
push
instruction so now it parses long hex string in little-endian (#1076).
- Implemented ability to output compiled
.masb
files 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 theAdviceProvider
trait (#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
StackOutputs
constructors (#1010). - Allowed the assembler to produce programs with "phantom" calls (#1019).
- Added
TraceLenSummary
struct 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
PartialMerkleTree
as a secret input in.input
file (#1072). - [BREAKING] Refactored
AdviceProvider
interface intoHost
interface (#1082).
- Completed
std::collections::smt
module by implementinginsert
andset
procedures (#1036, #1038, #1046). - Added new module
std::crypto::dsa::rpo_falcon512
to support Falcon signature verification (#1000, #1094)
- Fixed
no-std
compilation formiden-core
,miden-assembly
, andmiden-processor
crates.
- Added new instructions:
mtree_verify
. - [BREAKING] Refactored
adv.mem
decorator to use parameters from operand stack instead of immediate values. - [BREAKING] Refactored
mem_stream
andadv_pipe
instructions. - 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::get
available). - Added new module:
std::collections::mmr
. - Added new module:
std::collections::smt64
. - Added several convenience procedures to
std::mem
module. - [BREAKING] Added procedures to compute 1-to-1 hashes in
std::crypto::hashes
module and renamed existing procedures to remove ambiguity. - Greatly optimized recursive STARK verifier (reduced number of cycles by 6x - 8x).
- Moved test framework from
miden-vm
crate tomiden-test-utils
crate. - 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
ProgramInfo
toExecutionDetails
since there is anotherProgramInfo
struct in the source code. - [BREAKING] renamed
stack_init
andadvice_tape
tooperand_stack
andadvice_stack
in 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_cwm
instruction. - Added
breakpoint
instruction to help with debugging.
- [BREAKING] Renamed
Read
,ReadW
operations intoAdvPop
,AdvPopW
. - [BREAKING] Replaced
AdviceSet
withMerkleStore
. - Updated Winterfell dependency to v0.6.0.
- [BREAKING] Renamed
Read/ReadW
operations intoAdvPop/AdvPopW
.
- [BREAKING] Converted
AdviceProvider
into a trait which can be provided to the processor. - Added a decorator for interpolating polynomials over degree 2 extension field (
ext2intt
). - Added
AdviceSource
enum for greater future flexibility of advice injectors.
- Added
debug
subcommand 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
rpperm
tohperm
andrphash
tohmerge
. - Removed requirement that code blocks must be non-empty (i.e., allowed empty blocks).
- [BREAKING] Refactored
mtree_set
andmtree_cwm
instructions to leave the old value on the stack. - [BREAKING] Replaced
ModuleProvider
withLibrary
to improve 3rd party library support.
- [BREAKING] Refactored
execute()
,prove()
,verify()
functions to takeStackInputs
as one of the parameters. - [BREAKING] Refactored
prove()
function to returnExecutionProof
(which is a wrapper forStarkProof
). - [BREAKING] Refactored
verify()
function to takeProgramInfo
,StackInputs
, andExecutionProof
as parameters and return au32
indicating security level of the verified proof.
- Added
std::mem::memcopy
procedure for copying regions of memory. - Added
std::crypto::fri::frie2f4::verify
for verifying FRI proofs over degree 2 extension field.
- [BREAKING] Migrated to Rescue Prime Optimized hash function.
- Updated Winterfell backend to v0.5.1
- Implemented
call
operation for context-isolated function calls. - Added support for custom kernels.
- Implemented
syscall
operation for kernel calls, and added a newcaller
instruction for accessing the hash of the calling function. - Implemented
mem_stream
operation for fast hashing of memory regions. - Implemented
adv_pipe
operation 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_set
andmtree_get
to improve efficiency. - Refactored the advice provider to add support for advice maps, and added the
adv.mem
decorator 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).