Merge Rollup
The Merge rollup circuit is our in-between circuit, it doesn't need to perform any state updates, but mainly check the consistency of its inputs.
Overview
Below is a subset of the data structures figure from earlier for easy reference.
Validity Conditions
def MergeRollupCircuit(
left: ChildRollupData,
right: ChildRollupData
) -> BaseOrMergeRollupPublicInputs:
assert left.proof.is_valid(left.public_inputs)
assert right.proof.is_valid(right.public_inputs)
assert left.public_inputs.constants == right.public_inputs.constants
assert left.public_inputs.end == right.public_inputs.start
assert left.public_inputs.num_txs >= right.public_inputs.num_txs
assert left.public_inputs.end_sponge == right.public_inputs.start_sponge
return BaseOrMergeRollupPublicInputs(
type=1,
num_txs=left.public_inputs.num_txs + right.public_inputs.num_txs,
out_hash=SHA256(left.public_inputs.out_hash | right.public_inputs.out_hash),
start=left.public_inputs.start,
end=right.public_inputs.end,
start_sponge=left.public_inputs.start_sponge,
end_sponge=right.public_inputs.end_sponge,
constants=left.public_inputs.constants
)