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 and replays the block from it to recompute the hash itself, rather than trusting the composer's claim or reading a state database. 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 one line: ECDSA.recover(publicInputsHash, proof) == signer. So the guarantee today is that a named signer re-executed and agreed — an attestation. 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-EXECUTESFor each BlockWitness, the prover decodes PostBatch’s calldata and replays the block 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 — an attestation, not a succinct proof.
Verified against eez-rollup0 @ a4b9b2f — pre-mainnet; interfaces may move.