Overview
HTTP Prover is a Rust web service that wraps Stone Prover and exposes its functionality through a clean HTTP API. It abstracts away the complexity of configuring and running Stone Prover directly, providing a straightforward interface for submitting proving jobs and retrieving results.
The Problem with Stone Prover
Stone Prover is a powerful but low-level tool. Using it directly requires:
- Setting up the correct configuration files for the specific program being proven
- Managing the execution trace generation step separately
- Handling the output formats and piping data between steps
- Running it as a CLI tool, which is awkward to integrate into distributed systems
For a production system like Saya that needs to prove dozens of blocks per hour, this approach doesn't scale.
What HTTP Prover Provides
The service exposes a REST API with endpoints for:
- Submit a proving job — accepts the execution trace and configuration, queues the job
- Poll job status — check whether proving is in progress or complete
- Retrieve proof — download the completed proof in the required format
Internally, it manages Stone Prover instances, handles configuration generation, and serializes/deserializes the various data formats Stone Prover expects.
Design Goals
- Simplicity — the API surface is minimal; you send a trace, you get a proof
- Reliability — jobs are tracked and retried on transient failures
- Separation of concerns — the proving infrastructure is decoupled from the orchestration logic (Saya)
Integration
HTTP Prover is the STARK backend used by Saya. When Saya needs to prove an L3 block, it sends the execution trace to HTTP Prover's API and polls for the result. This clean separation means the proving infrastructure can be scaled, replaced, or upgraded independently of the orchestrator.
It also makes STARK proving accessible to any service that can make HTTP requests — not just Rust applications.