Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/brown-islands-listen.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@eth-optimism/contracts-bedrock': patch
---

Standardizes revert strings globally
2 changes: 1 addition & 1 deletion op-bindings/bindings/l2outputoracle.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion op-bindings/bindings/optimismportal.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion op-bindings/bindings/optimismportal_deployed.go

Large diffs are not rendered by default.

76 changes: 38 additions & 38 deletions packages/contracts-bedrock/.gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -42,39 +42,39 @@ L1CrossDomainMessenger_Test:test_L1MessengerPause() (gas: 48061)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageFirstStuckSecondSucceeds() (gas: 201827)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageRevertsOnReentrancy() (gas: 195116)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageSucceeds() (gas: 77762)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas: 67801)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas: 67873)
L1CrossDomainMessenger_Test:test_L1MessengerRelayShouldRevertIfPaused() (gas: 60471)
L1CrossDomainMessenger_Test:test_L1MessengerReplayMessageWithValue() (gas: 38127)
L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 297745)
L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1490048)
L1CrossDomainMessenger_Test:test_L1MessengerUnpause() (gas: 40908)
L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 24249)
L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 86168)
L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 24291)
L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 86269)
L1StandardBridge_Test:test_depositERC20() (gas: 578911)
L1StandardBridge_Test:test_depositERC20To() (gas: 581092)
L1StandardBridge_Test:test_depositETH() (gas: 372953)
L1StandardBridge_Test:test_depositETHTo() (gas: 330097)
L1StandardBridge_Test:test_finalizeBridgeERC20FailSendBack() (gas: 681339)
L1StandardBridge_Test:test_finalizeBridgeERC20FailSendBack() (gas: 681356)
L1StandardBridge_Test:test_finalizeERC20Withdrawal() (gas: 490817)
L1StandardBridge_Test:test_finalizeETHWithdrawal() (gas: 64453)
L1StandardBridge_Test:test_initialize() (gas: 26401)
L1StandardBridge_Test:test_onlyEOADepositERC20() (gas: 22341)
L1StandardBridge_Test:test_onlyEOADepositETH() (gas: 40882)
L1StandardBridge_Test:test_onlyL2BridgeFinalizeERC20Withdrawal() (gas: 36294)
L1StandardBridge_Test:test_onlyPortalFinalizeERC20Withdrawal() (gas: 35578)
L1StandardBridge_Test:test_onlyEOADepositERC20() (gas: 22377)
L1StandardBridge_Test:test_onlyEOADepositETH() (gas: 40918)
L1StandardBridge_Test:test_onlyL2BridgeFinalizeERC20Withdrawal() (gas: 36330)
L1StandardBridge_Test:test_onlyPortalFinalizeERC20Withdrawal() (gas: 35614)
L1StandardBridge_Test:test_receive() (gas: 519538)
L2CrossDomainMessenger_Test:testCannot_L2MessengerPause() (gas: 10823)
L2CrossDomainMessenger_Test:test_L1MessengerRelayMessageRevertsOnReentrancy() (gas: 171968)
L2CrossDomainMessenger_Test:test_L2MessengerMessageVersion() (gas: 8455)
L2CrossDomainMessenger_Test:test_L2MessengerPause() (gas: 31750)
L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageFirstStuckSecondSucceeds() (gas: 173004)
L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageSucceeds() (gas: 57311)
L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageToSystemContract() (gas: 36115)
L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageToSystemContract() (gas: 36151)
L2CrossDomainMessenger_Test:test_L2MessengerRelayShouldRevertIfPaused() (gas: 41578)
L2CrossDomainMessenger_Test:test_L2MessengerSendMessage() (gas: 120536)
L2CrossDomainMessenger_Test:test_L2MessengerTwiceSendMessage() (gas: 133720)
L2CrossDomainMessenger_Test:test_L2MessengerXDomainSenderReverts() (gas: 10554)
L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 54732)
L2CrossDomainMessenger_Test:test_L2MessengerXDomainSenderReverts() (gas: 10590)
L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 54798)
L2OutputOracleTest:testCannot_ProposeWithUnmatchedBlockhash() (gas: 26786)
L2OutputOracleTest:testCannot_deleteL2Output_ifNotOwner() (gas: 24844)
L2OutputOracleTest:testCannot_deleteL2Output_withWrongRoot() (gas: 91114)
Expand All @@ -98,16 +98,16 @@ L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 19451)
L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 24450)
L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 38899)
L2OutputOracleUpgradeable_Test:test_upgrading() (gas: 230843)
L2StandardBridge_Test:test_ERC20BridgeFailed_whenLocalTokenIsBridge() (gas: 133459)
L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21656)
L2StandardBridge_Test:test_finalizeBridgeERC20FailSendBack() (gas: 499042)
L2StandardBridge_Test:test_ERC20BridgeFailed_whenLocalTokenIsBridge() (gas: 133477)
L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21689)
L2StandardBridge_Test:test_finalizeBridgeERC20FailSendBack() (gas: 499057)
L2StandardBridge_Test:test_finalizeDeposit() (gas: 93203)
L2StandardBridge_Test:test_finalizeDeposit_failsToCompleteOutboundTransfer() (gas: 140492)
L2StandardBridge_Test:test_initialize() (gas: 14802)
L2StandardBridge_Test:test_receive() (gas: 136864)
L2StandardBridge_Test:test_withdraw() (gas: 353022)
L2StandardBridge_Test:test_withdrawTo() (gas: 353706)
L2StandardBridge_Test:test_withdraw_onlyEOA() (gas: 252006)
L2StandardBridge_Test:test_withdraw_onlyEOA() (gas: 252032)
L2ToL1MessagePasserTest:test_burn() (gas: 112037)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract() (gas: 67892)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromEOA() (gas: 74831)
Expand All @@ -130,9 +130,9 @@ OptimismMintableERC20_Test:test_mint() (gas: 65754)
OptimismMintableERC20_Test:test_mintRevertsFromNotBridge() (gas: 13243)
OptimismMintableERC20_Test:test_remoteToken() (gas: 9740)
OptimismMintableTokenFactory_Test:test_bridge() (gas: 7663)
OptimismMintableTokenFactory_Test:test_createStandardL2Token() (gas: 1113150)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenSameTwice() (gas: 2209211)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenShouldRevertIfRemoteIsZero() (gas: 9399)
OptimismMintableTokenFactory_Test:test_createStandardL2Token() (gas: 1113127)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenSameTwice() (gas: 2209165)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenShouldRevertIfRemoteIsZero() (gas: 9398)
OptimismPortalUpgradeable_Test:test_cannotInitImpl() (gas: 10686)
OptimismPortalUpgradeable_Test:test_cannotInitProxy() (gas: 15662)
OptimismPortalUpgradeable_Test:test_initValuesOnProxy() (gas: 15990)
Expand Down Expand Up @@ -189,37 +189,37 @@ ProxyAdmin_Test:test_setImplementationName() (gas: 39002)
RLPReader_Test:testReadBool() (gas: 1109)
RLPReader_Test:test_readAddress() (gas: 1347)
RLPReader_Test:test_readAddressSmall() (gas: 614)
RLPReader_Test:test_readAddressTooLarge() (gas: 3646)
RLPReader_Test:test_readAddressTooShort() (gas: 3603)
RLPReader_Test:test_readAddressTooLarge() (gas: 3679)
RLPReader_Test:test_readAddressTooShort() (gas: 3636)
RLPReader_Test:test_readBoolInvalidValue() (gas: 3677)
RLPReader_Test:test_readBoolLargeInput() (gas: 3550)
RLPReader_Test:test_readBytes32_revertOnList() (gas: 3998)
RLPReader_Test:test_readBytes32_revertOnTooLong() (gas: 3588)
RLPReader_Test:test_readBoolLargeInput() (gas: 3583)
RLPReader_Test:test_readBytes32_revertOnList() (gas: 4031)
RLPReader_Test:test_readBytes32_revertOnTooLong() (gas: 3621)
RLPReader_Test:test_readBytes_bytestring00() (gas: 1823)
RLPReader_Test:test_readBytes_bytestring01() (gas: 1846)
RLPReader_Test:test_readBytes_bytestring7f() (gas: 1844)
RLPReader_Test:test_readBytes_invalidListLength() (gas: 3812)
RLPReader_Test:test_readBytes_invalidStringLength() (gas: 3768)
RLPReader_Test:test_readBytes_revertListItem() (gas: 3922)
RLPReader_Test:test_readBytes_invalidListLength() (gas: 3845)
RLPReader_Test:test_readBytes_invalidStringLength() (gas: 3801)
RLPReader_Test:test_readBytes_revertListItem() (gas: 3955)
RLPReader_Test:test_readList_dictTest1() (gas: 23791)
RLPReader_Test:test_readList_empty() (gas: 4472)
RLPReader_Test:test_readList_incorrectLengthInArray() (gas: 4210)
RLPReader_Test:test_readList_int32Overflow() (gas: 3955)
RLPReader_Test:test_readList_int32Overflow2() (gas: 4021)
RLPReader_Test:test_readList_invalidShortList() (gas: 3855)
RLPReader_Test:test_readList_invalidValue() (gas: 3787)
RLPReader_Test:test_readList_leadingZerosInLongLengthArray1() (gas: 4193)
RLPReader_Test:test_readList_leadingZerosInLongLengthArray2() (gas: 4177)
RLPReader_Test:test_readList_incorrectLengthInArray() (gas: 4243)
RLPReader_Test:test_readList_int32Overflow() (gas: 3988)
RLPReader_Test:test_readList_int32Overflow2() (gas: 4015)
RLPReader_Test:test_readList_invalidShortList() (gas: 3888)
RLPReader_Test:test_readList_invalidValue() (gas: 3820)
RLPReader_Test:test_readList_leadingZerosInLongLengthArray1() (gas: 4226)
RLPReader_Test:test_readList_leadingZerosInLongLengthArray2() (gas: 4210)
RLPReader_Test:test_readList_leadingZerosInLongLengthList1() (gas: 38560)
RLPReader_Test:test_readList_listOfLists() (gas: 9619)
RLPReader_Test:test_readList_listOfLists2() (gas: 12479)
RLPReader_Test:test_readList_longList1() (gas: 29013)
RLPReader_Test:test_readList_longList2() (gas: 202895)
RLPReader_Test:test_readList_longStringLength() (gas: 3853)
RLPReader_Test:test_readList_longStringLength() (gas: 3886)
RLPReader_Test:test_readList_multiList() (gas: 12025)
RLPReader_Test:test_readList_nonOptimalLongLengthArray1() (gas: 4200)
RLPReader_Test:test_readList_nonOptimalLongLengthArray2() (gas: 4223)
RLPReader_Test:test_readList_notLongEnough() (gas: 3841)
RLPReader_Test:test_readList_nonOptimalLongLengthArray1() (gas: 4233)
RLPReader_Test:test_readList_nonOptimalLongLengthArray2() (gas: 4256)
RLPReader_Test:test_readList_notLongEnough() (gas: 3874)
RLPReader_Test:test_readList_shortListMax1() (gas: 40662)
RLPReader_Test:test_readList_stringList() (gas: 16796)
RLPReader_Test:test_readString_emptyString() (gas: 1719)
Expand Down Expand Up @@ -276,4 +276,4 @@ SequencerFeeVault_Test:test_constructor() (gas: 7656)
SequencerFeeVault_Test:test_minWithdrawalAmount() (gas: 5407)
SequencerFeeVault_Test:test_receive() (gas: 17338)
SequencerFeeVault_Test:test_revertWithdraw() (gas: 9332)
SequencerFeeVault_Test:test_withdraw() (gas: 147582)
SequencerFeeVault_Test:test_withdraw() (gas: 147588)
36 changes: 25 additions & 11 deletions packages/contracts-bedrock/contracts/L1/L2OutputOracle.sol
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
* @notice Reverts if called by any account other than the proposer.
*/
modifier onlyProposer() {
require(proposer == msg.sender, "OutputOracle: caller is not the proposer");
require(proposer == msg.sender, "L2OutputOracle: function can only be called by proposer");
_;
}

Expand Down Expand Up @@ -139,7 +139,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
) Semver(0, 0, 1) {
require(
_l2BlockTime < block.timestamp,
"Output Oracle: Initial L2 block time must be less than current time"
"L2OutputOracle: initial L2 block time must be less than current time"
);

SUBMISSION_INTERVAL = _submissionInterval;
Expand Down Expand Up @@ -190,13 +190,18 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
) external payable onlyProposer {
require(
_l2BlockNumber == nextBlockNumber(),
"OutputOracle: Block number must be equal to next expected block number."
"L2OutputOracle: block number must be equal to next expected block number"
);

require(
computeL2Timestamp(_l2BlockNumber) < block.timestamp,
"OutputOracle: Cannot propose L2 output in future."
"L2OutputOracle: cannot propose L2 output in the future"
);

require(
_outputRoot != bytes32(0),
"L2OutputOracle: L2 output proposal cannot be the zero hash"
);
require(_outputRoot != bytes32(0), "OutputOracle: Cannot submit empty L2 output.");

if (_l1Blockhash != bytes32(0)) {
// This check allows the proposer to propose an output based on a given L1 block,
Expand All @@ -209,7 +214,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
// finalized.
require(
blockhash(_l1BlockNumber) == _l1Blockhash,
"OutputOracle: Blockhash does not match the hash at the expected height."
"L2OutputOracle: blockhash does not match the hash at the expected height"
);
}

Expand All @@ -233,11 +238,12 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {

require(
_proposal.outputRoot == outputToDelete.outputRoot,
"OutputOracle: The output root to delete does not match the latest output proposal."
"L2OutputOracle: output root to delete does not match the latest output proposal"
);

require(
_proposal.timestamp == outputToDelete.timestamp,
"OutputOracle: The timestamp to delete does not match the latest output proposal."
"L2OutputOracle: timestamp to delete does not match the latest output proposal"
);

emit OutputDeleted(outputToDelete.outputRoot, outputToDelete.timestamp, latestBlockNumber);
Expand Down Expand Up @@ -272,7 +278,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
function computeL2Timestamp(uint256 _l2BlockNumber) public view returns (uint256) {
require(
_l2BlockNumber >= STARTING_BLOCK_NUMBER,
"OutputOracle: Block number must be greater than or equal to the 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);
Expand All @@ -283,8 +289,16 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
* Can only be called by the current owner.
*/
function changeProposer(address _newProposer) public onlyOwner {
require(_newProposer != address(0), "OutputOracle: new proposer is the zero address");
require(_newProposer != owner(), "OutputOracle: proposer cannot be same as the owner");
require(
_newProposer != address(0),
"L2OutputOracle: new proposer cannot be the zero address"
);

require(
_newProposer != owner(),
"L2OutputOracle: proposer cannot be the same as the owner"
);

emit ProposerChanged(proposer, _newProposer);
proposer = _newProposer;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ abstract contract ResourceMetering is Initializable {
params.prevBoughtGas += _amount;
require(
int256(uint256(params.prevBoughtGas)) <= MAX_RESOURCE_LIMIT,
"OptimismPortal: cannot buy more gas than available gas limit"
"ResourceMetering: cannot buy more gas than available gas limit"
);

// Determine the amount of ETH to be paid.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,11 @@ contract L2StandardBridge is StandardBridge, Semver {
) internal {
address l1Token = OptimismMintableERC20(_l2Token).l1Token();
if (_l2Token == PredeployAddresses.LEGACY_ERC20_ETH) {
require(msg.value == _amount, "ETH withdrawals must include sufficient ETH value.");
require(
msg.value == _amount,
"L2StandardBridge: ETH withdrawals must include sufficient ETH value"
);

_initiateBridgeETH(_from, _to, _amount, _minGasLimit, _extraData);
} else {
_initiateBridgeERC20(_l2Token, l1Token, _from, _to, _amount, _minGasLimit, _extraData);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,11 @@ contract SequencerFeeVault is Semver {
function withdraw() external {
require(
address(this).balance >= MIN_WITHDRAWAL_AMOUNT,
// solhint-disable-next-line max-line-length
"OVM_SequencerFeeVault: withdrawal amount must be greater than minimum withdrawal amount"
"SequencerFeeVault: withdrawal amount must be greater than minimum withdrawal amount"
);

uint256 balance = address(this).balance;

L2StandardBridge(payable(PredeployAddresses.L2_STANDARD_BRIDGE)).withdrawTo{
value: balance
}(PredeployAddresses.LEGACY_ERC20_ETH, l1FeeWallet, balance, 0, bytes(""));
value: address(this).balance
}(PredeployAddresses.LEGACY_ERC20_ETH, l1FeeWallet, address(this).balance, 0, bytes(""));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ contract L1ChugSplashProxy {
// should be doing this check anyway though.
require(
_getAccountCodeHash(newImplementation) == keccak256(_code),
"L1ChugSplashProxy: code was not correctly deployed."
"L1ChugSplashProxy: code was not correctly deployed"
);

_setImplementation(newImplementation);
Expand Down
Loading