Skip to content
Open
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
# Changelog
## v0.30.0 (Unreleased)

#### Features

- Added trusted trace proving input serialization for remote proving ([#3314](https://github.com/0xMiden/miden-vm/pull/3314)).

## v0.29.0 (2026-08-04)

#### Changes
Expand Down
3 changes: 3 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ paste = { version = "1.0", default-features = false }
proptest = { version = "1.8", default-features = false, features = ["no_std", "alloc"] }
proptest-derive = { version = "0.7", default-features = false }
rand = { version = "0.10", default-features = false }
rayon = "1.10"
rayon = { version = "1.10", default-features = false }
rocksdb = { version = "0.24", default-features = false }
seq-macro = "0.3"
serde = { version = "1.0", default-features = false, features = ["alloc", "derive", "rc"] }
Expand Down
8 changes: 7 additions & 1 deletion core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,13 @@ serde = [
"miden-debug-types/serde",
"miden-utils-indexing/serde",
]
arbitrary = ["dep:proptest"]
arbitrary = [
"dep:proptest",
# TODO: switch to miden-crypto/arbitrary once it exists. For now, the crypto-owned
# Arbitrary impls for Felt and Word are exposed by testing:
# https://github.com/0xMiden/crypto/issues/1071
"miden-crypto/testing",
]
testing = ["arbitrary"]
fuzzing = []

Expand Down
27 changes: 27 additions & 0 deletions core/src/mast/sparse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,17 @@ use crate::{
// `MastNodeId`, which is meaningful only within one forest's node store.
newtype_id!(MastForestId);

#[cfg(feature = "arbitrary")]
impl proptest::prelude::Arbitrary for MastForestId {
type Parameters = ();
type Strategy = proptest::prelude::BoxedStrategy<Self>;

fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy {
use proptest::prelude::*;
any::<u32>().prop_map(Self::from).boxed()
}
}

// SPARSE MAST FOREST
// ================================================================================================

Expand Down Expand Up @@ -267,6 +278,22 @@ impl ExecutableMastForest for SparseMastForest {
}
}

#[cfg(all(feature = "arbitrary", test))]
mod serde_tests {
use proptest::prelude::*;

use super::*;
use crate::serde::{Deserializable, Serializable};

proptest! {
#[test]
fn mast_forest_id_binary_serde_roundtrip(id in any::<MastForestId>()) {
let bytes = id.to_bytes();
prop_assert_eq!(id, MastForestId::read_from_bytes(&bytes).unwrap());
}
}
}

// SPARSE MAST FOREST BUILDER
// ================================================================================================

Expand Down
2 changes: 2 additions & 0 deletions core/src/utils/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,8 @@ pub fn packed_u32_elements_to_bytes(elements: &[Felt]) -> Vec<u8> {

#[cfg(test)]
mod tests {
use alloc::vec::Vec;

use proptest::prelude::*;

use super::*;
Expand Down
5 changes: 4 additions & 1 deletion processor/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ bench = false
doctest = false

[features]
arbitrary = ["dep:proptest", "miden-core/arbitrary"]
concurrent = ["std", "miden-air/concurrent"]
default = ["std"]
std = [
Expand All @@ -27,7 +28,7 @@ std = [
"miden-utils-diagnostics/std",
"thiserror/std",
]
testing = ["miden-air/testing"]
testing = ["arbitrary", "miden-air/testing"]
# Pulls in the LogUp debug surface from miden-air (under `#[cfg(feature = "std")]`).
# NOTE: the real-trace bus debugger is not yet wired into the prover/processor paths,
# so today this feature only compiles in the LookupAir shape-validation walker.
Expand All @@ -47,12 +48,14 @@ miden-utils-indexing.workspace = true
hashbrown.workspace = true
itertools.workspace = true
paste.workspace = true
proptest = { workspace = true, optional = true }
rayon.workspace = true
tracing.workspace = true
thiserror.workspace = true

[dev-dependencies]
miden-assembly = { workspace = true, features = ["testing"] }
miden-test-serde-macros.workspace = true
tracing = { workspace = true, features = ["std"] }
tracing-subscriber.workspace = true
miden-utils-testing.workspace = true
Expand Down
Loading
Loading