diff --git a/Cargo.lock b/Cargo.lock index 55665f30f2..29f390a137 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1154,6 +1154,15 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "hostname" version = "0.3.1" @@ -1771,9 +1780,7 @@ dependencies = [ [[package]] name = "miden-air" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c1e48a91d4652c5bd3e6a5f6147e34b5b93484421bd7d5ded8fbe22fee7ec" +version = "0.13.0" dependencies = [ "miden-core", "thiserror 2.0.11", @@ -1783,9 +1790,7 @@ dependencies = [ [[package]] name = "miden-assembly" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f5b09d4f5e4c6b041b8a2358ebf64fdbc0a5b6a4ddc22e48aed9bb20961811" +version = "0.13.0" dependencies = [ "aho-corasick", "lalrpop", @@ -1829,9 +1834,7 @@ dependencies = [ [[package]] name = "miden-core" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9326385003c062affde18cb336a3475033df0a871fb122ecaa9b48561109e40" +version = "0.13.0" dependencies = [ "lock_api", "loom", @@ -1876,6 +1879,24 @@ dependencies = [ "unicode-width 0.1.14", ] +[[package]] +name = "miden-gpu" +version = "0.4.0" +dependencies = [ + "allocator-api2", + "cc", + "miden-crypto", + "once_cell", + "rayon", + "sppark", + "thiserror 2.0.11", + "tracing", + "winter-air", + "winter-math", + "winter-prover", + "winterfell", +] + [[package]] name = "miden-lib" version = "0.8.0" @@ -1961,9 +1982,7 @@ dependencies = [ [[package]] name = "miden-processor" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fbc6f1d5cad60b17da51ee00c8f16e047b3deca50cc42dd18e13cc0c73ca23c" +version = "0.13.0" dependencies = [ "miden-air", "miden-core", @@ -1974,11 +1993,10 @@ dependencies = [ [[package]] name = "miden-prover" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e11ce36f3c6e16e6df6c0ff3bbf025e155b151e430017d4ec65dd617bd691e8" +version = "0.13.0" dependencies = [ "miden-air", + "miden-gpu", "miden-processor", "tracing", "winter-maybe-async", @@ -2049,9 +2067,7 @@ dependencies = [ [[package]] name = "miden-stdlib" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001a8c957ea655e96c91f081cf6bf99bb35109e3a20acda1c2a87e2db53a2696" +version = "0.13.0" dependencies = [ "miden-assembly", ] @@ -2094,9 +2110,7 @@ dependencies = [ [[package]] name = "miden-verifier" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76105a8bc8fb948d02b114ea0540de771b34f446191a08a3393d705aafc70191" +version = "0.13.0" dependencies = [ "miden-air", "miden-core", @@ -3726,6 +3740,16 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "sppark" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16bf457036c0a778140ce4c3bcf9ff30c5c70a9d9c0bb04fe513af025b647b2c" +dependencies = [ + "cc", + "which", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -4746,6 +4770,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index e5805d680b..8e683fb6a8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,18 +35,18 @@ codegen-units = 1 lto = true [workspace.dependencies] -assembly = { package = "miden-assembly", version = "0.12", default-features = false } +assembly = { path = "../miden-vm/assembly", package = "miden-assembly", default-features = false } assert_matches = { version = "1.5", default-features = false } miden-block-prover = { path = "crates/miden-block-prover", version = "0.8", default-features = false } miden-crypto = { version = "0.13", default-features = false } miden-lib = { path = "crates/miden-lib", version = "0.8", default-features = false } miden-objects = { path = "crates/miden-objects", version = "0.8", default-features = false } -miden-prover = { version = "0.12", default-features = false } -miden-stdlib = { version = "0.12", default-features = false } +miden-prover = { path = "../miden-vm/prover", default-features = false } +miden-stdlib = { path = "../miden-vm/stdlib", default-features = false } miden-tx = { path = "crates/miden-tx", version = "0.8", default-features = false } miden-tx-batch-prover = { path = "crates/miden-tx-batch-prover", version = "0.8", default-features = false } -miden-verifier = { version = "0.12", default-features = false } +miden-verifier = { path = "../miden-vm/verifier", default-features = false } rand = { version = "0.8", default-features = false } thiserror = { version = "2.0", default-features = false } -vm-core = { package = "miden-core", version = "0.12", default-features = false } -vm-processor = { package = "miden-processor", version = "0.12", default-features = false } +vm-core = { path = "../miden-vm/core", package = "miden-core", default-features = false } +vm-processor = { path = "../miden-vm/processor", package = "miden-processor", default-features = false } diff --git a/Makefile b/Makefile index fc19b9fcd1..f6a7bd9a7c 100644 --- a/Makefile +++ b/Makefile @@ -84,6 +84,11 @@ test-prove: ## Run `prove` tests (tests which use the Miden prover) $(DEBUG_ASSERTIONS) $(BACKTRACE) cargo nextest run --profile prove --cargo-profile test-release --features concurrent,testing --filter-expr "test(prove)" +.PHONY: test-prove-cuda +test-prove-cuda: ## Run `prove` tests (tests which use the Miden prover) + $(DEBUG_ASSERTIONS) $(BACKTRACE) MIDEN_CUDA_MEM_SIZE_MB=1024 cargo nextest run --profile prove --cargo-profile test-release --features concurrent,testing,cuda --filter-expr "test(prove)" + + .PHONY: test test: test-default test-prove ## Run all tests diff --git a/bin/proving-service/src/api/mod.rs b/bin/proving-service/src/api/mod.rs index a5eb5f9009..8270c2dfba 100644 --- a/bin/proving-service/src/api/mod.rs +++ b/bin/proving-service/src/api/mod.rs @@ -82,14 +82,14 @@ impl ProverRpcApi { &self, transaction_witness: TransactionWitness, ) -> Result, tonic::Status> { - let prover = self + let mut prover = self .provers .try_lock() .map_err(|_| Status::resource_exhausted("Server is busy handling another request"))?; let prover = prover .tx_prover - .as_ref() + .as_mut() .ok_or(Status::unimplemented("Transaction prover is not enabled"))?; let proof = prover.prove(transaction_witness).map_err(internal_error)?; diff --git a/crates/miden-proving-service-client/src/proving_service/tx_prover.rs b/crates/miden-proving-service-client/src/proving_service/tx_prover.rs index 921ab8cef8..28ca2f27ee 100644 --- a/crates/miden-proving-service-client/src/proving_service/tx_prover.rs +++ b/crates/miden-proving-service-client/src/proving_service/tx_prover.rs @@ -81,7 +81,7 @@ impl RemoteTransactionProver { #[async_trait::async_trait(?Send)] impl TransactionProver for RemoteTransactionProver { async fn prove( - &self, + &mut self, tx_witness: TransactionWitness, ) -> Result { use miden_objects::utils::Serializable; diff --git a/crates/miden-tx/Cargo.toml b/crates/miden-tx/Cargo.toml index 606a41705d..9f02e082a5 100644 --- a/crates/miden-tx/Cargo.toml +++ b/crates/miden-tx/Cargo.toml @@ -19,6 +19,7 @@ path = "tests/integration/main.rs" [features] async = ["winter-maybe-async/async"] concurrent = ["miden-prover/concurrent", "std"] +cuda = ["miden-prover/cuda"] default = ["std"] std = ["miden-lib/std", "miden-objects/std", "miden-prover/std", "miden-verifier/std", "vm-processor/std"] testing = ["miden-objects/testing", "miden-lib/testing", "vm-processor/testing", "dep:rand_chacha"] diff --git a/crates/miden-tx/src/prover/mod.rs b/crates/miden-tx/src/prover/mod.rs index c1c5ed14c7..2f00db0e3c 100644 --- a/crates/miden-tx/src/prover/mod.rs +++ b/crates/miden-tx/src/prover/mod.rs @@ -8,7 +8,7 @@ use miden_objects::{ assembly::Library, transaction::{OutputNote, ProvenTransaction, ProvenTransactionBuilder, TransactionWitness}, }; -use miden_prover::prove; +use miden_prover::Prover; pub use miden_prover::ProvingOptions; use vm_processor::MemAdviceProvider; use winter_maybe_async::*; @@ -31,7 +31,7 @@ pub trait TransactionProver { /// - If the transaction result is corrupt. #[maybe_async] fn prove( - &self, + &mut self, tx_witness: TransactionWitness, ) -> Result; } @@ -43,6 +43,7 @@ pub trait TransactionProver { /// /// Local Transaction Prover implements the [TransactionProver] trait. pub struct LocalTransactionProver { + prover: Prover, mast_store: Arc, proof_options: ProvingOptions, } @@ -51,6 +52,7 @@ impl LocalTransactionProver { /// Creates a new [LocalTransactionProver] instance. pub fn new(proof_options: ProvingOptions) -> Self { Self { + prover: Prover::new(), mast_store: Arc::new(TransactionMastStore::new()), proof_options, } @@ -68,6 +70,7 @@ impl LocalTransactionProver { impl Default for LocalTransactionProver { fn default() -> Self { Self { + prover: Prover::new(), mast_store: Arc::new(TransactionMastStore::new()), proof_options: Default::default(), } @@ -78,7 +81,7 @@ impl Default for LocalTransactionProver { impl TransactionProver for LocalTransactionProver { #[maybe_async] fn prove( - &self, + &mut self, tx_witness: TransactionWitness, ) -> Result { let TransactionWitness { @@ -115,7 +118,7 @@ impl TransactionProver for LocalTransactionProver { ) .map_err(TransactionProverError::TransactionHostCreationFailed)?; - let (stack_outputs, proof) = maybe_await!(prove( + let (stack_outputs, proof) = maybe_await!(self.prover.prove( &TransactionKernel::main(), stack_inputs, &mut host, diff --git a/crates/miden-tx/src/tests/mod.rs b/crates/miden-tx/src/tests/mod.rs index 45e75cc45b..faaad069d7 100644 --- a/crates/miden-tx/src/tests/mod.rs +++ b/crates/miden-tx/src/tests/mod.rs @@ -821,7 +821,7 @@ fn prove_witness_and_verify() { let executed_transaction_id = executed_transaction.id(); let proof_options = ProvingOptions::default(); - let prover = LocalTransactionProver::new(proof_options); + let mut prover = LocalTransactionProver::new(proof_options); let proven_transaction = prover.prove(executed_transaction.into()).unwrap(); assert_eq!(proven_transaction.id(), executed_transaction_id); diff --git a/crates/miden-tx/tests/integration/main.rs b/crates/miden-tx/tests/integration/main.rs index a43fee8530..37f105fc16 100644 --- a/crates/miden-tx/tests/integration/main.rs +++ b/crates/miden-tx/tests/integration/main.rs @@ -49,7 +49,7 @@ pub fn prove_and_verify_transaction( // Prove the transaction let proof_options = ProvingOptions::default(); - let prover = LocalTransactionProver::new(proof_options); + let mut prover = LocalTransactionProver::new(proof_options); let proven_transaction = prover.prove(executed_transaction.into()).unwrap(); assert_eq!(proven_transaction.id(), executed_transaction_id);