Commit dcdbd78e authored by Kelvin Fichter's avatar Kelvin Fichter

maint(ctb): minor cleanups in L2OO

Several small cleanups to the L2OutputOracle.
parent 7d0483a1
This diff is collapsed.
...@@ -5,7 +5,7 @@ GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 1122 ...@@ -5,7 +5,7 @@ GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 1122
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 348176) GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 348176)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 112253) GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 112253)
GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 40502) GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 40502)
GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 68648) GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 68620)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 74956) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 74956)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35693) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35693)
CrossDomainMessenger_Test:testFuzz_baseGas(uint32) (runs: 256, μ: 20196, ~: 20196) CrossDomainMessenger_Test:testFuzz_baseGas(uint32) (runs: 256, μ: 20196, ~: 20196)
...@@ -85,29 +85,29 @@ L2CrossDomainMessenger_Test:test_L2MessengerSendMessage() (gas: 122423) ...@@ -85,29 +85,29 @@ L2CrossDomainMessenger_Test:test_L2MessengerSendMessage() (gas: 122423)
L2CrossDomainMessenger_Test:test_L2MessengerTwiceSendMessage() (gas: 134632) L2CrossDomainMessenger_Test:test_L2MessengerTwiceSendMessage() (gas: 134632)
L2CrossDomainMessenger_Test:test_L2MessengerXDomainSenderReverts() (gas: 10568) L2CrossDomainMessenger_Test:test_L2MessengerXDomainSenderReverts() (gas: 10568)
L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 52615) L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 52615)
L2OutputOracleTest:testCannot_ProposeWithUnmatchedBlockhash() (gas: 26850) L2OutputOracleTest:testCannot_ProposeWithUnmatchedBlockhash() (gas: 26798)
L2OutputOracleTest:testCannot_constructWithBadTimestamp() (gas: 50456) L2OutputOracleTest:testCannot_constructWithBadTimestamp() (gas: 50365)
L2OutputOracleTest:testCannot_deleteL2Output_ifNotOwner() (gas: 25090) L2OutputOracleTest:testCannot_deleteL2Output_ifNotOwner() (gas: 25064)
L2OutputOracleTest:testCannot_deleteL2Output_withWrongRoot() (gas: 91399) L2OutputOracleTest:testCannot_deleteL2Output_withWrongRoot() (gas: 91319)
L2OutputOracleTest:testCannot_deleteL2Output_withWrongTime() (gas: 87382) L2OutputOracleTest:testCannot_deleteL2Output_withWrongTime() (gas: 87302)
L2OutputOracleTest:testCannot_proposeEmptyOutput() (gas: 24126) L2OutputOracleTest:testCannot_proposeEmptyOutput() (gas: 24074)
L2OutputOracleTest:testCannot_proposeFutureTimetamp() (gas: 26095) L2OutputOracleTest:testCannot_proposeFutureTimetamp() (gas: 26043)
L2OutputOracleTest:testCannot_proposeL2OutputIfNotProposer() (gas: 23563) L2OutputOracleTest:testCannot_proposeL2OutputIfNotProposer() (gas: 23537)
L2OutputOracleTest:testCannot_proposeOnWrongFork() (gas: 26368) L2OutputOracleTest:testCannot_proposeOnWrongFork() (gas: 26316)
L2OutputOracleTest:testCannot_proposeUnexpectedBlockNumber() (gas: 26003) L2OutputOracleTest:testCannot_proposeUnexpectedBlockNumber() (gas: 25977)
L2OutputOracleTest:test_changeProposer() (gas: 47047) L2OutputOracleTest:test_changeProposer() (gas: 47047)
L2OutputOracleTest:test_computeL2Timestamp() (gas: 30215) L2OutputOracleTest:test_computeL2Timestamp() (gas: 30483)
L2OutputOracleTest:test_constructor() (gas: 45612) L2OutputOracleTest:test_constructor() (gas: 45586)
L2OutputOracleTest:test_deleteOutput() (gas: 77197) L2OutputOracleTest:test_deleteOutput() (gas: 77092)
L2OutputOracleTest:test_getL2Output() (gas: 88478) L2OutputOracleTest:test_getL2Output() (gas: 88702)
L2OutputOracleTest:test_latestBlockNumber() (gas: 76240) L2OutputOracleTest:test_latestBlockNumber() (gas: 76186)
L2OutputOracleTest:test_nextBlockNumber() (gas: 15187) L2OutputOracleTest:test_nextBlockNumber() (gas: 15187)
L2OutputOracleTest:test_proposeWithBlockhashAndHeight() (gas: 75044) L2OutputOracleTest:test_proposeWithBlockhashAndHeight() (gas: 74990)
L2OutputOracleTest:test_proposingAnotherOutput() (gas: 76869) L2OutputOracleTest:test_proposingAnotherOutput() (gas: 76815)
L2OutputOracleTest:test_updateOwner() (gas: 36063) L2OutputOracleTest:test_updateOwner() (gas: 36063)
L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 17403) L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 17403)
L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 22398) L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 22398)
L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 36094) L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 36068)
L2OutputOracleUpgradeable_Test:test_upgrading() (gas: 180457) L2OutputOracleUpgradeable_Test:test_upgrading() (gas: 180457)
L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21749) L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21749)
L2StandardBridge_Test:test_finalizeBridgeETH_incorrectValueReverts() (gas: 23733) L2StandardBridge_Test:test_finalizeBridgeETH_incorrectValueReverts() (gas: 23733)
...@@ -149,21 +149,21 @@ OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10 ...@@ -149,21 +149,21 @@ OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15767) OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15767)
OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_success() (gas: 16010) OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_success() (gas: 16010)
OptimismPortalUpgradeable_Test:test_upgradeToAndCall_upgrading_success() (gas: 180435) OptimismPortalUpgradeable_Test:test_upgradeToAndCall_upgrading_success() (gas: 180435)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 192796) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 192770)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 195084) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 195058)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 39589) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 39589)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 190538) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 190512)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 192953) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 192953)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 173010) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 173010)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 233210) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 233210)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 232682) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 232604)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_success() (gas: 224676) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_success() (gas: 224624)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 327313) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 327261)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 191294) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 191268)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 81333) OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 81307)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onSelfCall_reverts() (gas: 50776) OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onSelfCall_reverts() (gas: 50776)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_oninvalidWithdrawalProof_reverts() (gas: 130105) OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_oninvalidWithdrawalProof_reverts() (gas: 130079)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_success() (gas: 176847) OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_success() (gas: 176821)
OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17298) OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17298)
OptimismPortal_Test:test_OptimismPortalReceiveEth_success() (gas: 127483) OptimismPortal_Test:test_OptimismPortalReceiveEth_success() (gas: 127483)
OptimismPortal_Test:test_depositTransaction_NoValueContract_success() (gas: 76706) OptimismPortal_Test:test_depositTransaction_NoValueContract_success() (gas: 76706)
...@@ -175,7 +175,7 @@ OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreat ...@@ -175,7 +175,7 @@ OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreat
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_success() (gas: 75852) OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_success() (gas: 75852)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_success() (gas: 83370) OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_success() (gas: 83370)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_success() (gas: 83964) OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_success() (gas: 83964)
OptimismPortal_Test:test_isBlockFinalized_success() (gas: 113537) OptimismPortal_Test:test_isBlockFinalized_success() (gas: 113327)
OptimismPortal_Test:test_simple_isBlockFinalized_success() (gas: 24142) OptimismPortal_Test:test_simple_isBlockFinalized_success() (gas: 24142)
Proxy_Test:test_clashingFunctionSignatures() (gas: 101347) Proxy_Test:test_clashingFunctionSignatures() (gas: 101347)
Proxy_Test:test_implementationKey() (gas: 20887) Proxy_Test:test_implementationKey() (gas: 20887)
......
...@@ -222,10 +222,10 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -222,10 +222,10 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
); );
} }
emit OutputProposed(_outputRoot, block.timestamp, _l2BlockNumber);
l2Outputs[_l2BlockNumber] = Types.OutputProposal(_outputRoot, block.timestamp); l2Outputs[_l2BlockNumber] = Types.OutputProposal(_outputRoot, block.timestamp);
latestBlockNumber = _l2BlockNumber; latestBlockNumber = _l2BlockNumber;
emit OutputProposed(_outputRoot, block.timestamp, _l2BlockNumber);
} }
/** /**
...@@ -242,11 +242,6 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -242,11 +242,6 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
view view
returns (Types.OutputProposal memory) returns (Types.OutputProposal memory)
{ {
require(
_l2BlockNumber >= STARTING_BLOCK_NUMBER,
"L2OutputOracle: block number cannot be less than the starting block number."
);
// Find the distance between _l2BlockNumber, and the checkpoint block before it. // Find the distance between _l2BlockNumber, and the checkpoint block before it.
uint256 offset = (_l2BlockNumber - STARTING_BLOCK_NUMBER) % SUBMISSION_INTERVAL; uint256 offset = (_l2BlockNumber - STARTING_BLOCK_NUMBER) % SUBMISSION_INTERVAL;
...@@ -259,23 +254,23 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -259,23 +254,23 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
Types.OutputProposal memory output = l2Outputs[lookupBlockNumber]; Types.OutputProposal memory output = l2Outputs[lookupBlockNumber];
require( require(
output.outputRoot != bytes32(0), output.outputRoot != bytes32(0),
"L2OutputOracle: No output found for that block number." "L2OutputOracle: no output found for the given block number"
); );
return output; return output;
} }
/** /**
* @notice Transfers the proposer role to a new account (`newProposer`). * @notice Allows the owner to change the proposer address.
* Can only be called by the current owner. *
* @param _proposer New proposer address.
*/ */
function changeProposer(address _newProposer) public onlyOwner { function changeProposer(address _proposer) public onlyOwner {
require( require(_proposer != address(0), "L2OutputOracle: new proposer cannot be the zero address");
_newProposer != address(0),
"L2OutputOracle: new proposer cannot be the zero address" emit ProposerChanged(proposer, _proposer);
);
emit ProposerChanged(proposer, _newProposer); proposer = _proposer;
proposer = _newProposer;
} }
/** /**
...@@ -293,11 +288,6 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -293,11 +288,6 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
* @param _l2BlockNumber The L2 block number of the target block. * @param _l2BlockNumber The L2 block number of the target block.
*/ */
function computeL2Timestamp(uint256 _l2BlockNumber) public view returns (uint256) { function computeL2Timestamp(uint256 _l2BlockNumber) public view returns (uint256) {
require(
_l2BlockNumber >= STARTING_BLOCK_NUMBER,
"L2OutputOracle: block number must be greater than or equal to starting block number"
);
return STARTING_TIMESTAMP + ((_l2BlockNumber - STARTING_BLOCK_NUMBER) * L2_BLOCK_TIME); return STARTING_TIMESTAMP + ((_l2BlockNumber - STARTING_BLOCK_NUMBER) * L2_BLOCK_TIME);
} }
} }
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity 0.8.15; pragma solidity 0.8.15;
import { stdError } from "forge-std/Test.sol";
import { L2OutputOracle_Initializer, NextImpl } from "./CommonTest.t.sol"; import { L2OutputOracle_Initializer, NextImpl } from "./CommonTest.t.sol";
import { L2OutputOracle } from "../L1/L2OutputOracle.sol"; import { L2OutputOracle } from "../L1/L2OutputOracle.sol";
import { Proxy } from "../universal/Proxy.sol"; import { Proxy } from "../universal/Proxy.sol";
...@@ -74,13 +75,11 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ...@@ -74,13 +75,11 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer {
assertEq(proposal.timestamp, block.timestamp); assertEq(proposal.timestamp, block.timestamp);
// The block number is too low: // The block number is too low:
vm.expectRevert( vm.expectRevert(stdError.arithmeticError);
"L2OutputOracle: block number cannot be less than the starting block number."
);
oracle.getL2Output(0); oracle.getL2Output(0);
// The block number is larger than the latest proposed output: // The block number is larger than the latest proposed output:
vm.expectRevert("L2OutputOracle: No output found for that block number."); vm.expectRevert("L2OutputOracle: no output found for the given block number");
oracle.getL2Output(nextBlockNumber + 1); oracle.getL2Output(nextBlockNumber + 1);
} }
...@@ -95,9 +94,7 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ...@@ -95,9 +94,7 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer {
function test_computeL2Timestamp() external { function test_computeL2Timestamp() external {
// reverts if timestamp is too low // reverts if timestamp is too low
vm.expectRevert( vm.expectRevert(stdError.arithmeticError);
"L2OutputOracle: block number must be greater than or equal to starting block number"
);
oracle.computeL2Timestamp(startingBlockNumber - 1); oracle.computeL2Timestamp(startingBlockNumber - 1);
// returns the correct value... // returns the correct value...
......
...@@ -242,7 +242,7 @@ contract OptimismPortal_Test is Portal_Initializer { ...@@ -242,7 +242,7 @@ contract OptimismPortal_Test is Portal_Initializer {
// The checkpointed block should not be finalized until 1 second from now. // The checkpointed block should not be finalized until 1 second from now.
assertEq(op.isBlockFinalized(checkpoint), false); assertEq(op.isBlockFinalized(checkpoint), false);
// Nor should a block after it // Nor should a block after it
vm.expectRevert("L2OutputOracle: No output found for that block number."); vm.expectRevert("L2OutputOracle: no output found for the given block number");
assertEq(op.isBlockFinalized(checkpoint + 1), false); assertEq(op.isBlockFinalized(checkpoint + 1), false);
// Nor a block before it, even though the finalization period has passed, there is // Nor a block before it, even though the finalization period has passed, there is
// not yet a checkpoint block on top of it for which that is true. // not yet a checkpoint block on top of it for which that is true.
...@@ -255,7 +255,7 @@ contract OptimismPortal_Test is Portal_Initializer { ...@@ -255,7 +255,7 @@ contract OptimismPortal_Test is Portal_Initializer {
// So should the block before it. // So should the block before it.
assertEq(op.isBlockFinalized(checkpoint - 1), true); assertEq(op.isBlockFinalized(checkpoint - 1), true);
// But not the block after it. // But not the block after it.
vm.expectRevert("L2OutputOracle: No output found for that block number."); vm.expectRevert("L2OutputOracle: no output found for the given block number");
assertEq(op.isBlockFinalized(checkpoint + 1), false); assertEq(op.isBlockFinalized(checkpoint + 1), false);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment