Skip to content

Commit

Permalink
feat(ctb): make SUBMISSION_INTERVAL modifiable
Browse files Browse the repository at this point in the history
Updates the L2OutputOracle so that SUBMISSION_INTERVAL can be modified.
This is a relatively significant refactor that makes the l2Outputs
mapping keyed by index rather than L2 block number.
  • Loading branch information
smartcontracts committed Nov 29, 2022
1 parent 66f7de2 commit 136ea17
Show file tree
Hide file tree
Showing 20 changed files with 673 additions and 367 deletions.
7 changes: 7 additions & 0 deletions .changeset/quick-bananas-pretend.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@eth-optimism/contracts-bedrock': patch
'@eth-optimism/core-utils': patch
'@eth-optimism/sdk': patch
---

Refactors the L2OutputOracle to key the l2Outputs mapping by index instead of by L2 block number.
8 changes: 7 additions & 1 deletion indexer/integration_tests/bedrock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,12 @@ func TestBedrockIndexer(t *testing.T) {
wParams, err := withdrawals.ProveWithdrawalParameters(context.Background(), proofCl, receiptCl, wdTx.Hash(), finHeader)
require.NoError(t, err)

oracle, err := bindings.NewL2OutputOracleCaller(predeploys.DevL2OutputOracleAddr, l1Client)
require.Nil(t, err)

l2OutputIndex, err := oracle.GetL2OutputIndexAfter(&bind.CallOpts{}, wParams.BlockNumber)
require.Nil(t, err)

l1Opts.Value = big.NewInt(0)
// Prove our withdrawal
proveTx, err := portal.ProveWithdrawalTransaction(
Expand All @@ -216,7 +222,7 @@ func TestBedrockIndexer(t *testing.T) {
GasLimit: wParams.GasLimit,
Data: wParams.Data,
},
wParams.BlockNumber,
l2OutputIndex,
wParams.OutputRootProof,
wParams.WithdrawalProof,
)
Expand Down
267 changes: 201 additions & 66 deletions op-bindings/bindings/l2outputoracle.go

Large diffs are not rendered by default.

62 changes: 31 additions & 31 deletions op-bindings/bindings/optimismportal.go

Large diffs are not rendered by default.

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

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion op-e2e/actions/l2_proposer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func TestProposer(gt *testing.T) {
outputOracleContract, err := bindings.NewL2OutputOracle(sd.DeploymentsL1.L2OutputOracleProxy, miner.EthClient())
require.NoError(t, err)
block := sequencer.SyncStatus().FinalizedL2
outputOnL1, err := outputOracleContract.GetL2Output(nil, new(big.Int).SetUint64(block.Number))
outputOnL1, err := outputOracleContract.GetL2OutputAfter(nil, new(big.Int).SetUint64(block.Number))
require.NoError(t, err)
require.Less(t, block.Time, outputOnL1.Timestamp.Uint64(), "output is registered with L1 timestamp of proposal tx, past L2 block")
outputComputed, err := sequencer.RollupClient().OutputAtBlock(t.Ctx(), block.Number)
Expand Down
4 changes: 3 additions & 1 deletion op-e2e/actions/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,8 @@ func (s *CrossLayerUser) ProveWithdrawal(t Testing, l2TxHash common.Hash) common
require.NoError(t, err)
l2OutputBlock, err := s.L2.env.EthCl.BlockByNumber(t.Ctx(), l2OutputBlockNr)
require.NoError(t, err)
l2OutputIndex, err := s.L1.env.Bindings.L2OutputOracle.GetL2OutputIndexAfter(&bind.CallOpts{}, l2OutputBlockNr)
require.NoError(t, err)

// Check if the L2 output is even old enough to include the withdrawal
if l2OutputBlock.NumberU64() < l2WithdrawalBlock.NumberU64() {
Expand All @@ -421,7 +423,7 @@ func (s *CrossLayerUser) ProveWithdrawal(t Testing, l2TxHash common.Hash) common
GasLimit: params.GasLimit,
Data: params.Data,
},
params.BlockNumber,
l2OutputIndex,
params.OutputRootProof,
params.WithdrawalProof,
)
Expand Down
10 changes: 8 additions & 2 deletions op-e2e/system_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ func TestL2OutputSubmitter(t *testing.T) {
// timestamp set in the contract constructor.
if l2ooBlockNumber.Cmp(initialOutputBlockNumber) > 0 {
// Retrieve the l2 output committed at this updated timestamp.
committedL2Output, err := l2OutputOracle.GetL2Output(&bind.CallOpts{}, l2ooBlockNumber)
committedL2Output, err := l2OutputOracle.GetL2OutputAfter(&bind.CallOpts{}, l2ooBlockNumber)
require.NotEqual(t, [32]byte{}, committedL2Output.OutputRoot, "Empty L2 Output")
require.Nil(t, err)

Expand Down Expand Up @@ -842,6 +842,12 @@ func TestWithdrawals(t *testing.T) {
portal, err := bindings.NewOptimismPortal(predeploys.DevOptimismPortalAddr, l1Client)
require.Nil(t, err)

oracle, err := bindings.NewL2OutputOracleCaller(predeploys.DevL2OutputOracleAddr, l1Client)
require.Nil(t, err)

l2OutputIndex, err := oracle.GetL2OutputIndexAfter(&bind.CallOpts{}, params.BlockNumber)
require.Nil(t, err)

opts.Value = nil

// Prove withdrawal
Expand All @@ -855,7 +861,7 @@ func TestWithdrawals(t *testing.T) {
GasLimit: params.GasLimit,
Data: params.Data,
},
params.BlockNumber,
l2OutputIndex,
params.OutputRootProof,
params.WithdrawalProof,
)
Expand Down
2 changes: 1 addition & 1 deletion op-node/withdrawals/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ loop:
}

// Now wait for it to be finalized
output, err := l2OO.GetL2Output(opts, l2BlockNumber)
output, err := l2OO.GetL2OutputAfter(opts, l2BlockNumber)
if err != nil {
return 0, err
}
Expand Down
106 changes: 55 additions & 51 deletions packages/contracts-bedrock/.gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -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_1() (gas: 112253)
GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 40502)
GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 70685)
GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 88513)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 74956)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35693)
CrossDomainMessenger_Test:testFuzz_baseGas(uint32) (runs: 256, μ: 20196, ~: 20196)
Expand Down Expand Up @@ -44,18 +44,18 @@ L1CrossDomainMessenger_Test:testCannot_L1MessengerPause() (gas: 24538)
L1CrossDomainMessenger_Test:testCannot_L1MessengerUnpause() (gas: 24496)
L1CrossDomainMessenger_Test:test_L1MessengerMessageVersion() (gas: 24715)
L1CrossDomainMessenger_Test:test_L1MessengerPause() (gas: 52920)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageFirstStuckSecondSucceeds() (gas: 197247)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageRevertsOnReentrancy() (gas: 190936)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageSucceeds() (gas: 73672)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas: 65881)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageFirstStuckSecondSucceeds() (gas: 197224)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageRevertsOnReentrancy() (gas: 190913)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageSucceeds() (gas: 73649)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas: 65858)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageV0Fails() (gas: 33236)
L1CrossDomainMessenger_Test:test_L1MessengerRelayShouldRevertIfPaused() (gas: 60475)
L1CrossDomainMessenger_Test:test_L1MessengerReplayMessageWithValue() (gas: 38192)
L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 299569)
L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1490463)
L1CrossDomainMessenger_Test:test_L1MessengerUnpause() (gas: 45186)
L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 24232)
L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 84079)
L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 84056)
L1StandardBridge_DepositERC20To_Test:test_depositERC20To_success() (gas: 575965)
L1StandardBridge_DepositERC20_Test:test_depositERC20_succeeds() (gas: 573789)
L1StandardBridge_DepositERC20_TestFail:test_depositERC20_revert_notEoa() (gas: 22298)
Expand Down Expand Up @@ -85,28 +85,32 @@ L2CrossDomainMessenger_Test:test_L2MessengerSendMessage() (gas: 122423)
L2CrossDomainMessenger_Test:test_L2MessengerTwiceSendMessage() (gas: 134632)
L2CrossDomainMessenger_Test:test_L2MessengerXDomainSenderReverts() (gas: 10568)
L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 52615)
L2OutputOracleTest:testCannot_ProposeWithUnmatchedBlockhash() (gas: 29072)
L2OutputOracleTest:testCannot_constructWithBadTimestamp() (gas: 70566)
L2OutputOracleTest:testCannot_deleteL2Outputs_afterLatest() (gas: 195025)
L2OutputOracleTest:testCannot_deleteL2Outputs_ifNotChallenger() (gas: 16716)
L2OutputOracleTest:testCannot_deleteL2Outputs_nonExistent() (gas: 86795)
L2OutputOracleTest:testCannot_proposeEmptyOutput() (gas: 26359)
L2OutputOracleTest:testCannot_proposeFutureTimetamp() (gas: 28316)
L2OutputOracleTest:testCannot_proposeL2Output_ifNotProposer() (gas: 25601)
L2OutputOracleTest:testCannot_proposeOnWrongFork() (gas: 28645)
L2OutputOracleTest:testCannot_proposeUnexpectedBlockNumber() (gas: 28020)
L2OutputOracleTest:test_computeL2Timestamp() (gas: 37163)
L2OutputOracleTest:test_constructor() (gas: 33592)
L2OutputOracleTest:test_deleteOutputs_multipleOutputs() (gas: 258025)
L2OutputOracleTest:test_deleteOutputs_singleOutput() (gas: 148182)
L2OutputOracleTest:test_getL2Output() (gas: 87205)
L2OutputOracleTest:test_latestBlockNumber() (gas: 78460)
L2OutputOracleTest:test_nextBlockNumber() (gas: 15143)
L2OutputOracleTest:test_proposeWithBlockhashAndHeight() (gas: 77309)
L2OutputOracleTest:test_proposingAnotherOutput() (gas: 79089)
L2OutputOracleTest:testCannot_ProposeWithUnmatchedBlockhash() (gas: 29434)
L2OutputOracleTest:testCannot_constructWithBadTimestamp() (gas: 70674)
L2OutputOracleTest:testCannot_deleteL2Outputs_afterLatest() (gas: 200324)
L2OutputOracleTest:testCannot_deleteL2Outputs_ifNotChallenger() (gas: 18915)
L2OutputOracleTest:testCannot_deleteL2Outputs_nonExistent() (gas: 103509)
L2OutputOracleTest:testCannot_proposeEmptyOutput() (gas: 26721)
L2OutputOracleTest:testCannot_proposeFutureTimetamp() (gas: 28678)
L2OutputOracleTest:testCannot_proposeL2Output_ifNotProposer() (gas: 25782)
L2OutputOracleTest:testCannot_proposeOnWrongFork() (gas: 28941)
L2OutputOracleTest:testCannot_proposeUnexpectedBlockNumber() (gas: 28382)
L2OutputOracleTest:test_computeL2Timestamp() (gas: 37185)
L2OutputOracleTest:test_constructor() (gas: 33715)
L2OutputOracleTest:test_deleteOutputs_multipleOutputs() (gas: 286718)
L2OutputOracleTest:test_deleteOutputs_singleOutput() (gas: 173018)
L2OutputOracleTest:test_getL2Output() (gas: 101700)
L2OutputOracleTest:test_getL2OutputIndexAfter_multipleOutputsExist() (gas: 267181)
L2OutputOracleTest:test_getL2OutputIndexAfter_noOutputsExist() (gas: 17938)
L2OutputOracleTest:test_getL2OutputIndexAfter_previousBlock_succeeds() (gas: 96086)
L2OutputOracleTest:test_getL2OutputIndexAfter_sameBlock_succeeds() (gas: 95994)
L2OutputOracleTest:test_latestBlockNumber() (gas: 96937)
L2OutputOracleTest:test_nextBlockNumber() (gas: 17468)
L2OutputOracleTest:test_proposeWithBlockhashAndHeight() (gas: 95251)
L2OutputOracleTest:test_proposingAnotherOutput() (gas: 97175)
L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 15171)
L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 20152)
L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 26095)
L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 26052)
L2OutputOracleUpgradeable_Test:test_upgrading() (gas: 180457)
L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 19621)
L2StandardBridge_Test:test_finalizeBridgeETH_incorrectValueReverts() (gas: 23733)
Expand Down Expand Up @@ -145,40 +149,40 @@ OptimismMintableTokenFactory_Test:test_bridge() (gas: 7577)
OptimismMintableTokenFactory_Test:test_createStandardL2Token() (gas: 1095274)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenSameTwice() (gas: 2176691)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenShouldRevertIfRemoteIsZero() (gas: 9413)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10791)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15767)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10813)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15789)
OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_success() (gas: 16010)
OptimismPortalUpgradeable_Test:test_upgradeToAndCall_upgrading_success() (gas: 180435)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 199455)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 201655)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 39634)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 197131)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 195340)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 175375)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 235617)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 239873)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_success() (gas: 231564)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 334179)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 195745)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 85517)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 199749)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 202002)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 39656)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 197091)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 197813)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 177828)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 236176)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 237807)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_success() (gas: 229533)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 332148)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 193771)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 83520)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onSelfCall_reverts() (gas: 50754)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_oninvalidWithdrawalProof_reverts() (gas: 138775)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_success() (gas: 279092)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 191154)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_success() (gas: 181342)
OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17298)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_oninvalidWithdrawalProof_reverts() (gas: 136780)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_success() (gas: 277100)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 189161)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_success() (gas: 179346)
OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17253)
OptimismPortal_Test:test_OptimismPortalReceiveEth_success() (gas: 127483)
OptimismPortal_Test:test_depositTransaction_NoValueContract_success() (gas: 76706)
OptimismPortal_Test:test_depositTransaction_NoValueContract_success() (gas: 76684)
OptimismPortal_Test:test_depositTransaction_NoValueEOA_success() (gas: 76984)
OptimismPortal_Test:test_depositTransaction_contractCreation_reverts() (gas: 14245)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract_success() (gas: 76710)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA_success() (gas: 77032)
OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation_success() (gas: 83712)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_success() (gas: 75852)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_success() (gas: 83370)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_success() (gas: 83964)
OptimismPortal_Test:test_isBlockFinalized_success() (gas: 107478)
OptimismPortal_Test:test_simple_isBlockFinalized_success() (gas: 24142)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_success() (gas: 75875)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_success() (gas: 83414)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_success() (gas: 83942)
OptimismPortal_Test:test_isOutputFinalized_success() (gas: 119473)
OptimismPortal_Test:test_simple_isOutputFinalized_success() (gas: 24186)
Proxy_Test:test_clashingFunctionSignatures() (gas: 101347)
Proxy_Test:test_implementationKey() (gas: 20887)
Proxy_Test:test_implementationProxyCallIfNotAdmin() (gas: 29963)
Expand Down

0 comments on commit 136ea17

Please sign in to comment.