diff --git a/.github/workflows/test-common.yml b/.github/workflows/test-common.yml index b1eb739..89e7561 100644 --- a/.github/workflows/test-common.yml +++ b/.github/workflows/test-common.yml @@ -40,6 +40,9 @@ jobs: - name: Run cargo clippy run: cargo clippy --all-targets --package ${{ matrix.crate }} -- -D warnings + - name: Run cargo test on documentation + run: cargo test --doc --package ${{ matrix.crate }} + - name: Run cargo test if: ${{ matrix.run_test }} run: cargo test --release --package ${{ matrix.crate }} diff --git a/crates/ere-dockerized/src/lib.rs b/crates/ere-dockerized/src/lib.rs index 2b2354a..3d3f35e 100644 --- a/crates/ere-dockerized/src/lib.rs +++ b/crates/ere-dockerized/src/lib.rs @@ -24,17 +24,17 @@ //! use zkvm_interface::{Compiler, Input, ProverResourceType, zkVM}; //! use std::path::Path; //! +//! // The zkVM we plan to use +//! let zkvm = ErezkVM::SP1; +//! //! // Compile a guest program -//! let compiler = EreDockerizedCompiler::new(ErezkVM::SP1, "mounting/directory"); +//! let compiler = EreDockerizedCompiler::new(zkvm, "mounting/directory")?; //! let guest_path = Path::new("relative/path/to/guest/program"); //! let program = compiler.compile(&guest_path)?; //! //! // Create zkVM instance -//! let zkvm = EreDockerizedzkVM::new( -//! ErezkVM::SP1, -//! program, -//! ProverResourceType::Cpu -//! )?; +//! let resource = ProverResourceType::Cpu; +//! let zkvm = EreDockerizedzkVM::new(zkvm, program, resource)?; //! //! // Prepare inputs //! let mut inputs = Input::new(); @@ -42,15 +42,15 @@ //! inputs.write(100u16); //! //! // Execute program -//! let execution_report = zkvm.execute(&inputs)?; +//! let (public_values, execution_report) = zkvm.execute(&inputs)?; //! println!("Execution cycles: {}", execution_report.total_num_cycles); //! //! // Generate proof -//! let (proof, proving_report) = zkvm.prove(&inputs)?; +//! let (public_values, proof, proving_report) = zkvm.prove(&inputs)?; //! println!("Proof generated in: {:?}", proving_report.proving_time); //! //! // Verify proof -//! zkvm.verify(&proof)?; +//! let public_values = zkvm.verify(&proof)?; //! println!("Proof verified successfully!"); //! # Ok(()) //! # } @@ -123,9 +123,9 @@ impl ErezkVM { } /// This method builds 3 Docker images in sequence: - /// 1. `ere-base:latest`: Base image with common dependencies - /// 2. `ere-base-{zkvm}:latest`: zkVM-specific base image with the zkVM SDK - /// 3. `ere-cli-{zkvm}:latest`: CLI image with the `ere-cli` binary built with feature `{zkvm}` + /// 1. `ere-base:{version}`: Base image with common dependencies + /// 2. `ere-base-{zkvm}:{version}`: zkVM-specific base image with the zkVM SDK + /// 3. `ere-cli-{zkvm}:{version}`: CLI image with the `ere-cli` binary built with feature `{zkvm}` /// /// Images are cached and only rebuilt if they don't exist or if the /// `ERE_FORCE_REBUILD_DOCKER_IMAGE=true` environment variable is set. @@ -210,11 +210,12 @@ pub struct EreDockerizedCompiler { } impl EreDockerizedCompiler { - pub fn new(zkvm: ErezkVM, mount_directory: impl AsRef) -> Self { - Self { + pub fn new(zkvm: ErezkVM, mount_directory: impl AsRef) -> Result { + zkvm.build_docker_image()?; + Ok(Self { zkvm, mount_directory: mount_directory.as_ref().to_path_buf(), - } + }) } pub fn zkvm(&self) -> ErezkVM { @@ -231,8 +232,6 @@ impl Compiler for EreDockerizedCompiler { type Program = SerializedProgram; fn compile(&self, guest_directory: &Path) -> Result { - self.zkvm.build_docker_image()?; - let guest_relative_path = guest_directory .strip_prefix(&self.mount_directory) .map_err(|_| CompileError::GuestNotInMountingDirecty { @@ -292,6 +291,18 @@ impl EreDockerizedzkVM { resource, }) } + + pub fn zkvm(&self) -> ErezkVM { + self.zkvm + } + + pub fn program(&self) -> &SerializedProgram { + &self.program + } + + pub fn resource(&self) -> &ProverResourceType { + &self.resource + } } impl zkVM for EreDockerizedzkVM { @@ -508,6 +519,7 @@ mod test { let guest_directory = testing_guest_directory(zkvm.as_str(), "basic"); let program = EreDockerizedCompiler::new(zkvm, workspace_dir()) + .unwrap() .compile(&guest_directory) .unwrap(); @@ -524,6 +536,7 @@ mod test { let guest_directory = testing_guest_directory(zkvm.as_str(), "basic"); let program = EreDockerizedCompiler::new(zkvm, workspace_dir()) + .unwrap() .compile(&guest_directory) .unwrap(); @@ -540,6 +553,7 @@ mod test { let guest_directory = testing_guest_directory(zkvm.as_str(), "basic"); let program = EreDockerizedCompiler::new(zkvm, workspace_dir()) + .unwrap() .compile(&guest_directory) .unwrap(); @@ -556,6 +570,7 @@ mod test { let guest_directory = testing_guest_directory(zkvm.as_str(), "basic"); let program = EreDockerizedCompiler::new(zkvm, workspace_dir()) + .unwrap() .compile(&guest_directory) .unwrap();