How the composer attests a batch
"Attests", not "proves", and the distinction is the page. Three mechanisms sit behind that word, and only the first is what the name "prover" suggests.
Stateless re-execution. The prover is handed a BlockWitness per block, replays each one, validates the batch's settlement effects, and recomputes the hash itself, rather than reading a state database — the request carries no claimed hash at all. That part is real, and step 2 is it.
ECDSA standing in for succinctness. What comes back is not a succinct proof. ECDSAProofSystem is described upstream as a "temporary proof system that uses ECDSA signature recovery instead of a ZK proof", and its verify is two lines: recover the signer from (publicInputsHash, proof), then compare it to signer. So the guarantee today is that a named signer re-executed and agreed — an attestation bound to that batch's hash, not an unbound mock signature. It is not yet a proof anyone can check without trusting that signer.
A per-rollup prover swap. Which contract does the checking is a per-rollup choice, not a network-wide one. IProofSystem is any contract that can check (proof, publicInputsHash) — ZK, ECDSA, or otherwise — referenced from that rollup's own vkey map. There is no central registry, and upstream is explicit that each rollup owner vets which proof-system addresses their rollup allows. Swapping ECDSA for a real verifier is therefore a per-rollup upgrade, and until a rollup makes it, "attests" is the honest verb for that rollup.
The mechanics below are the first mechanism. The composer opens one gRPC stream to the proof-signer and sends a ProveHeader first — blocks always follow in order.
That one stream carries the header, the blocks and a signature back.
- 01 · ONE STREAM, ONE JOBOne gRPC stream to the proof-signer: ProveHeader first, blocks in order.
- 02 · THE PROVER RE-EXECUTESThe prover decodes PostBatch’s calldata, derives KZG hashes from its blobs, replays every BlockWitness and runs its settlement gates to recompute the hash.
- 03 · SIGN & RETURNThe prover signs the recomputed hash; the composer only trusts it once the signature recovers to the registered attester and the hash matches its own — an attestation, not a succinct proof.
Verified against eez-rollupX Git commit 2c19e36; interfaces may move.