Bidder
SP1 Cluster includes a Bidder binary written in Rust that constantly listens for proof requests from the network and places bids. When scaling up your cluster, you have the option to tune relevant parameters. You can set these parameters in your docker-compose.yml file.
Throughput
BIDDER_THROUGHPUT_MGAS is the cluster's measured sustained proving throughput, in millions of prover gas units per second. The bidder uses this value to estimate how long proving work will take.
Measure throughput under a representative workload and err on the low side. A value that is too high causes the bidder to accept work that the cluster cannot finish before its deadline.
Capacity
Before placing a bid, the bidder checks whether the cluster can complete the request before its deadline.
It estimates proving time from the request's expected gas, work already assigned or awaiting auction settlement, and the measured cluster throughput in BIDDER_THROUGHPUT_MGAS.
The bidder gets the expected gas from the network's estimate for the program. If no estimate is available, it uses the request's gas limit, or its cycle limit when the gas limit is zero. BIDDER_GAS_ESTIMATE_MULTIPLIER (default: 1.0) scales the network estimate without exceeding the request's limit.
It also checks CPU-worker capacity. Every proof needs a CPU worker for its controller task. Groth16 and Plonk proofs also need a CPU worker for their final wrap task.
Set BIDDER_CPU_WORKER_MAX_WEIGHTS to the max_weight reported by each CPU worker, separated by commas. Each worker prints its value in the computed worker max_weight startup log line (FAQ #13). For two workers that each report 96, use 96,96.
Bid
Your main lever is BIDDER_USD_BID_TARGET, a USD-denominated bid target in µUSD per BPGU (1 BPGU = 10⁹ PGU). The bidder polls the latest PROVE/USD rate and converts your target to PROVE wei at submission time. Lower values increase your chances of winning bids but reduce profit margins. Higher values decrease competitiveness but increase potential profits per proof. Market dynamics will determine the optimal bid level.
Two knobs tune how the bidder keeps its PROVE/USD reading fresh:
BIDDER_USD_BID_REFRESH_INTERVAL_SECS(default:60): how often to refresh the PROVE/USD reading.BIDDER_USD_BID_STALENESS_MAX_SECS(default:7200): the maximum age the bidder will trust a reading before deferring to the safety bid (see below). In normal operation the reading is refreshed well within this window.
Safety bid
BIDDER_BID_AMOUNT is a static bid amount in wei per PGU. The bidder uses it for every bid when BIDDER_USD_BID_ENABLED=false. When USD pricing is enabled, the bidder falls back to BIDDER_BID_AMOUNT when:
- the PROVE/USD price is missing or stale,
- the conversion fails, or
- the calculated bid is below one bid tick.
The bid tick is the network's minimum bid increment. The bidder reads it at startup from the network's GetProofRequestParams RPC. When the network reports no tick, the bidder uses 10,000,000 wei per PGU.
The value must be greater than zero and a multiple of the bid tick, or the bidder will exit during startup. Set it to a reasonable value as a safety net. The Succinct Prover Network uses a reverse auction; lower bids are more competitive.
Buffers and Modes
The bidder uses a base safety buffer, estimated wrap times, and per-mode toggles when deciding whether to bid:
BIDDER_BUFFER_SEC(default: 30): Base safety buffer in seconds added to all requests to account for network latency and processing overhead.BIDDER_GROTH16_BUFFER_SEC(default: 30): Estimated duration of the final Groth16 wrap stage.BIDDER_PLONK_BUFFER_SEC(default: 80): Estimated duration of the final Plonk wrap stage.BIDDER_GROTH16_ENABLED(default: true): If false, the bidder will not bid on Groth16 requests.BIDDER_PLONK_ENABLED(default: true): If false, the bidder will not bid on Plonk requests.
The bidder also accounts for the time a wrap may wait for CPU-worker capacity.
Tuning these values helps ensure your cluster only bids on proofs it can complete before the deadline. If a proof mode frequently times out during wrapping, increase its wrap-time estimate or disable that mode temporarily.