Product
Mar 6, 2025
While most ZK systems today are optimized for server-side execution, there is a growing need for client-side proving—where proofs are generated and verified directly on end-user devices. This shift unlocks new use cases, such as trustless light clients and private transactions, while enhancing privacy and security.
Client-side proving refers to the process of generating and verifying zero-knowledge proofs directly on the user's device, such as a web browser on a desktop, laptop, or mobile device. This is in contrast to server-side proving, where proofs are generated on a service provider's infrastructure.
Client-side proving is particularly challenging due to the resource constraints of end-user devices, such as limited memory and computational power. These constraints limit the complexity of computations that can be proven and the speed at which proofs can be generated. However, client-side proving offers significant advantages, including enhanced privacy and security, as sensitive data (e.g., private keys or transaction inputs) never leaves the user's device.
Client-side proving and verification with Valida zkVM opens up a range of innovative use cases in blockchain contexts, including:
To support client-side proving, we compiled Valida’s execution engine, prover, and verifier to WASM using wasm-pack. This allows Valida to run directly in web browsers, enabling seamless integration into web applications.
Key Implementation:
To help you get started with client-side proving, we created an example project located in the Valida toolchain at /valida-toolchain/examples/wasm/client-side-example. Here’s a high-level overview of how to use the Valida client-side API:
Compile the Guest Program: Use cargo +valida build --release to compile your guest program. The compiled program will be located at target/valida-unknown-baremetal-gnu/release/program.
Base64 Encode the Program: Encode the compiled program using a command like base64 program > program.base64.
Ingest the Program: Use Webpack to ingest the base64-encoded program into your client-side application. The example project demonstrates how to configure this in webpack.config.js.
While client-side proving is now possible with our zkVM stack, there are ongoing challenges and opportunities for improvement:
Check out the Valida client-side example and start building privacy-preserving applications in the browser!
Read the full 0.9.0 release notes here.