ZKM has released zkMIPS v0.2.0, featuring three major updates designed to simplify and enhance the developer experience for building ZK applications:
The new zkMIPS Rust Toolchain introduces a native Rust development environment to zkMIPS, streamlining the development process. A new target, mips-zkm-zkvm-elf
, has been added to the Rust compiler, enabling developers to seamlessly compile Rust programs into MIPS32R2 ELF files. This can be achieved with a simple command-line installation:
Key benefits include:
The zkMIPS Project Template simplifies the process of creating and deploying end-to-end zkMIPS projects, including generating proofs and creating on-chain Solidity verifiers. Developers can quickly spin up a zkMIPS project using the provided template, which supports both local and network provers:
The workflow (illustrated in Figure 1) involves:
Upgradeable Precompiles enable proof verification within zkMIPS programs, allowing developers to:
Applications include:
Through the zkMIPS precompile, it's also possible to flexibly combine proofs from various Rust zkVM programs into more complex applications.
Compared to other implementations (like SP1), zkMIPS precompiles are upgradeable, meaning they support verification of any proof types without requiring modifications to existing on-chain verifiers. Figure 2 outlines the simplified workflow.
A precompiles sample is provided in the zkMIPS codebase, which works as below.
1.Through the normal proving process, using the utils::prove_segments interface to prove the precompile guest program (which is a regular ELF program containing specific inputs) and obtain its receipt. Here's an example:
2.During execution, the host guest program verifies the precompile program through zkm_runtime::io::verify (the arguments include the precompile program's image id and public input)
The system call zkm_runtime::io::verify uses the function find_assumption to check if there is a corresponding assumption in the proof system's assumptions list. If it's not present, it returns an error; if it is present, it is added to the assumptions_used list (this list will be merged into the final Compositereceipt)
3.The main host program takes the precompile program's receipt as input, and also uses the utils::prove_segments to prove the main guest program with the precompile program's receipt , and returns Compositereceipt which contains the list of receipts utilized by the host guest program.
When verifying the Compositereceipt (proof of the main host program), it is not only necessary to verify the proof of the main host program itself, but also to verify each of the receipts in the assumptions_used list.
Explore the new features in zkMIPS v0.2.0 by visiting our GitHub repository. Whether you're building ZK applications, deploying proofs on-chain, or experimenting with modular proof systems, zkMIPS is here to simplify and accelerate your journey.
ZKM has released zkMIPS v0.2.0, featuring three major updates designed to simplify and enhance the developer experience for building ZK applications:
The new zkMIPS Rust Toolchain introduces a native Rust development environment to zkMIPS, streamlining the development process. A new target, mips-zkm-zkvm-elf
, has been added to the Rust compiler, enabling developers to seamlessly compile Rust programs into MIPS32R2 ELF files. This can be achieved with a simple command-line installation:
Key benefits include:
The zkMIPS Project Template simplifies the process of creating and deploying end-to-end zkMIPS projects, including generating proofs and creating on-chain Solidity verifiers. Developers can quickly spin up a zkMIPS project using the provided template, which supports both local and network provers:
The workflow (illustrated in Figure 1) involves:
Upgradeable Precompiles enable proof verification within zkMIPS programs, allowing developers to:
Applications include:
Through the zkMIPS precompile, it's also possible to flexibly combine proofs from various Rust zkVM programs into more complex applications.
Compared to other implementations (like SP1), zkMIPS precompiles are upgradeable, meaning they support verification of any proof types without requiring modifications to existing on-chain verifiers. Figure 2 outlines the simplified workflow.
A precompiles sample is provided in the zkMIPS codebase, which works as below.
1.Through the normal proving process, using the utils::prove_segments interface to prove the precompile guest program (which is a regular ELF program containing specific inputs) and obtain its receipt. Here's an example:
2.During execution, the host guest program verifies the precompile program through zkm_runtime::io::verify (the arguments include the precompile program's image id and public input)
The system call zkm_runtime::io::verify uses the function find_assumption to check if there is a corresponding assumption in the proof system's assumptions list. If it's not present, it returns an error; if it is present, it is added to the assumptions_used list (this list will be merged into the final Compositereceipt)
3.The main host program takes the precompile program's receipt as input, and also uses the utils::prove_segments to prove the main guest program with the precompile program's receipt , and returns Compositereceipt which contains the list of receipts utilized by the host guest program.
When verifying the Compositereceipt (proof of the main host program), it is not only necessary to verify the proof of the main host program itself, but also to verify each of the receipts in the assumptions_used list.
Explore the new features in zkMIPS v0.2.0 by visiting our GitHub repository. Whether you're building ZK applications, deploying proofs on-chain, or experimenting with modular proof systems, zkMIPS is here to simplify and accelerate your journey.