diff --git a/l1-contracts/src/core/Rollup.sol b/l1-contracts/src/core/Rollup.sol index 7b835a6ad42..d6f8b2c8577 100644 --- a/l1-contracts/src/core/Rollup.sol +++ b/l1-contracts/src/core/Rollup.sol @@ -227,9 +227,18 @@ contract Rollup is EIP712("Aztec Rollup", "1"), Leonidas, IRollup, ITestRollup { bytes calldata _aggregationObject, bytes calldata _proof ) external override(IRollup) { + if (canPrune()) { + _prune(); + } + uint256 previousBlockNumber = tips.provenBlockNumber; uint256 endBlockNumber = previousBlockNumber + _epochSize; + // @note The getEpochForBlock is expected to revert if the block is beyond pending. + // If this changes you are gonna get so rekt you won't believe it. + // I mean proving blocks that have been pruned rekt. + Epoch epochToProve = getEpochForBlock(endBlockNumber); + bytes32[] memory publicInputs = getEpochProofPublicInputs(_epochSize, _args, _fees, _aggregationObject); @@ -287,7 +296,7 @@ contract Rollup is EIP712("Aztec Rollup", "1"), Leonidas, IRollup, ITestRollup { } } - if (proofClaim.epochToProve == getEpochForBlock(endBlockNumber)) { + if (proofClaim.epochToProve == epochToProve) { PROOF_COMMITMENT_ESCROW.unstakeBond(proofClaim.bondProvider, proofClaim.bondAmount); } diff --git a/l1-contracts/test/Rollup.t.sol b/l1-contracts/test/Rollup.t.sol index c7b728bea6a..5ed5e5b2d70 100644 --- a/l1-contracts/test/Rollup.t.sol +++ b/l1-contracts/test/Rollup.t.sol @@ -418,9 +418,7 @@ contract RollupTest is DecoderBase { (bytes32 preArchive, bytes32 preBlockHash,) = rollup.blocks(0); _submitEpochProof(rollup, 1, preArchive, archive, preBlockHash, blockHash, proverId); - vm.expectRevert( - abi.encodeWithSelector(Errors.Rollup__InvalidPreviousArchive.selector, archive, preArchive) - ); + vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__InvalidBlockNumber.selector, 1, 2)); _submitEpochProof(rollup, 1, preArchive, archive, preBlockHash, blockHash, proverId); }