The Web Prover is infrastructure for generating Web Proofs. There are 3 components of the Web Prover — (1) the Client Crates, which run inside of the app or browser; (2) Notary Crate, which is a hosted service; and (3) the Proofs Crate, which handles running the circuits through the client-side-prover
.
The default option for generating Web Proofs is to use the Pluto-hosted service. We recommend using the Javascript SDK, which uses a Pluto-hosted notary. Learn more here. Developers do not need to set up the prover or host it themselves, unless they explicitly want to self-host this infrastructure or build custom infrastructure.
Pluto's Web Prover repo contains the source code for the three types of Web Proofs:
- Origo proofs,
- Trusted Execution Environment (TEE) proofs and
- MPC proofs via TLSNotary
Visit the Pluto documentation for integration guides, conceptual overviews, and reference materials.
If you have any questions, please reach out to any of Pluto's team members or join our Telegram to ask questions. We'd love to hear from you!
bin
: a mock server for testing.client
: contains components for the client that are shared across both WASM and iOS targets.client_ios
: contains client components specific to the iOS target.client_wasm
: contains client components specific to the WASM target.fixture
: contains testing artifacts such as TLS certificates and configuration files.notary
: notary server which can notarize MPC/ Origo/ TEE proofs.proofs
: contains all of our circom artifacts for the Origo proofs as well as a set of extractor proofs for selective disclosure over response data.
- Install rust nightly:
rustup install toolchain nightly-2024-10-28
- Run
make artifacts
to download circuit artifacts required for Web Prover proxy mode - Compilation errors? Have a look at KNOWN_ISSUES.md
cargo run -p notary -- --config ./fixture/notary-config.toml
# TLSNotary flow (requires --release flag or it will be slow, try release mode for notary as well)
cargo run --release -p client -- --config ./fixture/client.tlsn_tcp_local.json
# Origo flow
cargo run -p client -- --config ./fixture/client.origo_tcp_local.json
# TEE flow (uses DummyToken so it can run outside of TEE)
cargo run -p client -- --config ./fixture/client.tee_tcp_local.json
cargo run -p notary -- --config ./fixture/notary-config.toml
make wasm
make wasm-demo
open https://localhost:8090
As of February 2025, the code in this repository is operational on Ethereum testnets, and we have begun the security auditing process.
While we are actively developing towards a production release in Q2 2025, the system is not yet recommended for production use.
Following completion of audits, we plan to launch with protective guardrails in place, which will be gradually adjusted and removed as the system demonstrates stability in real-world conditions.
- Update the
version
field in the appropriateCargo.toml
file. - Create a pull request with the version update.
- Merge the pull request.
Once merged, the package will be automatically released. Note: Releases are immutable.
The following crates are checked for version changes:
notary/Cargo.toml
client_wasm/Cargo.toml
client_ios/Cargo.toml
# .vscode/settings.json
{
"rust-analyzer.cargo.target": "wasm32-unknown-unknown",
"rust-analyzer.cargo.features": ["websocket"]
}
# Cargo.toml
# set members to:
members =["client", "client_wasm"]
Note that this only works on Mac. The iOS target cannot be built on Linux.
# .vscode/settings.json
{
"rust-analyzer.cargo.target": "aarch64-apple-ios",
"rust-analyzer.cargo.features": []
}
# Cargo.toml
# set members to:
members =["client", "client_ios"]