Commit 6958ad7f authored by Maurelian's avatar Maurelian Committed by GitHub

Proxies and Gas benchmark tests (#2901)

* bedrock: Add delegateProxy to forge tests

* bedrock: Add chugsplash proxy to bridge tests

* test(ctb): add gas benchmark tests

* test(ctb): Benchmark deposits at INITIAL_BASE_FEE
Co-authored-by: default avatarmergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
parent 0fea4f52
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 160669)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 77100)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 251879)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 118133)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 251901)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 118130)
GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 45329)
GasBenchMark_L2OutputOracle:test_appendL2Output_benchmark() (gas: 68639)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 75024)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35283)
CrossDomainHashing_Test:test_l2TransactionHash() (gas: 104131)
DeployerWhitelist_Test:test_owner() (gas: 7647)
DeployerWhitelist_Test:test_storageSlots() (gas: 33483)
......@@ -23,40 +33,40 @@ L1BlockTest:test_updateValues() (gas: 28215)
L1BlockNumberTest:test_fallback() (gas: 18773)
L1BlockNumberTest:test_getL1BlockNumber() (gas: 10589)
L1BlockNumberTest:test_receive() (gas: 25436)
L1CrossDomainMessenger_Test:testCannot_L1MessengerPause() (gas: 10844)
L1CrossDomainMessenger_Test:testCannot_L1MessengerUnpause() (gas: 10858)
L1CrossDomainMessenger_Test:test_L1MessengerMessageVersion() (gas: 8388)
L1CrossDomainMessenger_Test:test_L1MessengerPause() (gas: 31860)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageSucceeds() (gas: 61261)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas: 44903)
L1CrossDomainMessenger_Test:test_L1MessengerRelayShouldRevertIfPaused() (gas: 41587)
L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 172133)
L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1254167)
L1CrossDomainMessenger_Test:test_L1MessengerUnpause() (gas: 23804)
L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 10599)
L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 59088)
L1StandardBridge_Test:test_depositERC20() (gas: 452890)
L1StandardBridge_Test:test_depositERC20To() (gas: 454645)
L1StandardBridge_Test:test_depositETH() (gas: 247039)
L1StandardBridge_Test:test_depositETHTo() (gas: 204923)
L1StandardBridge_Test:test_finalizeERC20Withdrawal() (gas: 438816)
L1StandardBridge_Test:test_finalizeETHWithdrawal() (gas: 47983)
L1StandardBridge_Test:test_initialize() (gas: 14863)
L1StandardBridge_Test:test_onlyEOADepositERC20() (gas: 12085)
L1StandardBridge_Test:test_onlyEOADepositETH() (gas: 30615)
L1StandardBridge_Test:test_onlyL2BridgeFinalizeERC20Withdrawal() (gas: 23543)
L1StandardBridge_Test:test_onlyPortalFinalizeERC20Withdrawal() (gas: 22875)
L1StandardBridge_Test:test_receive() (gas: 391801)
L1CrossDomainMessenger_Test:testCannot_L1MessengerPause() (gas: 24495)
L1CrossDomainMessenger_Test:testCannot_L1MessengerUnpause() (gas: 24509)
L1CrossDomainMessenger_Test:test_L1MessengerMessageVersion() (gas: 24636)
L1CrossDomainMessenger_Test:test_L1MessengerPause() (gas: 48060)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageSucceeds() (gas: 80147)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas: 72283)
L1CrossDomainMessenger_Test:test_L1MessengerRelayShouldRevertIfPaused() (gas: 60515)
L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 198908)
L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1275644)
L1CrossDomainMessenger_Test:test_L1MessengerUnpause() (gas: 40924)
L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 24250)
L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 88972)
L1StandardBridge_Test:test_depositERC20() (gas: 477004)
L1StandardBridge_Test:test_depositERC20To() (gas: 479208)
L1StandardBridge_Test:test_depositETH() (gas: 270884)
L1StandardBridge_Test:test_depositETHTo() (gas: 228771)
L1StandardBridge_Test:test_finalizeERC20Withdrawal() (gas: 490577)
L1StandardBridge_Test:test_finalizeETHWithdrawal() (gas: 64083)
L1StandardBridge_Test:test_initialize() (gas: 26247)
L1StandardBridge_Test:test_onlyEOADepositERC20() (gas: 22285)
L1StandardBridge_Test:test_onlyEOADepositETH() (gas: 40816)
L1StandardBridge_Test:test_onlyL2BridgeFinalizeERC20Withdrawal() (gas: 36136)
L1StandardBridge_Test:test_onlyPortalFinalizeERC20Withdrawal() (gas: 35500)
L1StandardBridge_Test:test_receive() (gas: 415514)
L2CrossDomainMessenger_Test:testCannot_L2MessengerPause() (gas: 10843)
L2CrossDomainMessenger_Test:test_L2MessengerMessageVersion() (gas: 8410)
L2CrossDomainMessenger_Test:test_L2MessengerPause() (gas: 31837)
L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageSucceeds() (gas: 57538)
L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageToSystemContract() (gas: 24567)
L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageToSystemContract() (gas: 38257)
L2CrossDomainMessenger_Test:test_L2MessengerRelayShouldRevertIfPaused() (gas: 41599)
L2CrossDomainMessenger_Test:test_L2MessengerSendMessage() (gas: 119682)
L2CrossDomainMessenger_Test:test_L2MessengerTwiceSendMessage() (gas: 133142)
L2CrossDomainMessenger_Test:test_L2MessengerXDomainSenderReverts() (gas: 10599)
L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 54881)
L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 54837)
L2OutputOracleTest:testCannot_AppendWithUnmatchedBlockhash() (gas: 26799)
L2OutputOracleTest:testCannot_appendEmptyOutput() (gas: 24119)
L2OutputOracleTest:testCannot_appendFutureTimetamp() (gas: 26043)
......@@ -77,18 +87,18 @@ L2OutputOracleTest:test_latestBlockNumber() (gas: 76220)
L2OutputOracleTest:test_nextBlockNumber() (gas: 15144)
L2OutputOracleTest:test_updateOwner() (gas: 34602)
L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 8476)
L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 13453)
L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 13431)
L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 38906)
L2OutputOracleUpgradeable_Test:test_upgrading() (gas: 230843)
L2StandardBridge_Test:test_ERC20BridgeFailed_whenLocalTokenIsBridge() (gas: 133097)
L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21611)
L2StandardBridge_Test:test_finalizeDeposit() (gas: 93100)
L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21589)
L2StandardBridge_Test:test_finalizeDeposit() (gas: 93165)
L2StandardBridge_Test:test_finalizeDeposit_failsToCompleteOutboundTransfer() (gas: 140129)
L2StandardBridge_Test:test_initialize() (gas: 14856)
L2StandardBridge_Test:test_receive() (gas: 136415)
L2StandardBridge_Test:test_withdraw() (gas: 352760)
L2StandardBridge_Test:test_initialize() (gas: 14834)
L2StandardBridge_Test:test_receive() (gas: 136482)
L2StandardBridge_Test:test_withdraw() (gas: 352743)
L2StandardBridge_Test:test_withdrawTo() (gas: 353481)
L2StandardBridge_Test:test_withdraw_onlyEOA() (gas: 251970)
L2StandardBridge_Test:test_withdraw_onlyEOA() (gas: 251952)
L2ToL1MessagePasserTest:test_burn() (gas: 112046)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract() (gas: 67890)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromEOA() (gas: 74851)
......@@ -101,39 +111,39 @@ OVM_ETH_Test:test_metadata() (gas: 15608)
OVM_ETH_Test:test_mint() (gas: 10621)
OVM_ETH_Test:test_transfer() (gas: 10726)
OVM_ETH_Test:test_transferFrom() (gas: 13008)
OptimismMintableERC20_Test:test_bridge() (gas: 9785)
OptimismMintableERC20_Test:test_burn() (gas: 52791)
OptimismMintableERC20_Test:test_bridge() (gas: 9850)
OptimismMintableERC20_Test:test_burn() (gas: 52773)
OptimismMintableERC20_Test:test_burnRevertsFromNotBridge() (gas: 13241)
OptimismMintableERC20_Test:test_erc165_supportsInterface() (gas: 7828)
OptimismMintableERC20_Test:test_l1Token() (gas: 9779)
OptimismMintableERC20_Test:test_l2Bridge() (gas: 9790)
OptimismMintableERC20_Test:test_mint() (gas: 65687)
OptimismMintableERC20_Test:test_mintRevertsFromNotBridge() (gas: 13265)
OptimismMintableERC20_Test:test_remoteToken() (gas: 9784)
OptimismMintableTokenFactory_Test:test_bridge() (gas: 9707)
OptimismMintableERC20_Test:test_l1Token() (gas: 9757)
OptimismMintableERC20_Test:test_l2Bridge() (gas: 9768)
OptimismMintableERC20_Test:test_mint() (gas: 65754)
OptimismMintableERC20_Test:test_mintRevertsFromNotBridge() (gas: 13243)
OptimismMintableERC20_Test:test_remoteToken() (gas: 9762)
OptimismMintableTokenFactory_Test:test_bridge() (gas: 9772)
OptimismMintableTokenFactory_Test:test_createStandardL2Token() (gas: 1115359)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenSameTwice() (gas: 2211629)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenShouldRevertIfRemoteIsZero() (gas: 9407)
OptimismMintableTokenFactory_Test:test_initializeShouldRevert() (gas: 12732)
OptimismPortalUpgradeable_Test:test_cannotInitImpl() (gas: 10936)
OptimismPortalUpgradeable_Test:test_cannotInitProxy() (gas: 15934)
OptimismPortalUpgradeable_Test:test_cannotInitProxy() (gas: 15912)
OptimismPortalUpgradeable_Test:test_initValuesOnProxy() (gas: 16034)
OptimismPortalUpgradeable_Test:test_upgrading() (gas: 230843)
OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17330)
OptimismPortal_Test:test_OptimismPortalContractCreationReverts() (gas: 14192)
OptimismPortal_Test:test_OptimismPortalReceiveEth() (gas: 126643)
OptimismPortal_Test:test_cannotVerifyRecentWithdrawal() (gas: 31901)
OptimismPortal_Test:test_OptimismPortalContractCreationReverts() (gas: 14170)
OptimismPortal_Test:test_OptimismPortalReceiveEth() (gas: 126621)
OptimismPortal_Test:test_cannotVerifyRecentWithdrawal() (gas: 31924)
OptimismPortal_Test:test_depositTransaction_NoValueContract() (gas: 75752)
OptimismPortal_Test:test_depositTransaction_NoValueEOA() (gas: 76098)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract() (gas: 75757)
OptimismPortal_Test:test_depositTransaction_NoValueEOA() (gas: 76076)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract() (gas: 75780)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA() (gas: 76101)
OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation() (gas: 82801)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation() (gas: 74919)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract() (gas: 82462)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA() (gas: 83078)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation() (gas: 74984)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract() (gas: 82440)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA() (gas: 83056)
OptimismPortal_Test:test_invalidWithdrawalProof() (gas: 45163)
OptimismPortal_Test:test_isOutputFinalized() (gas: 131744)
OptimismPortal_Test:test_simple_isOutputFinalized() (gas: 23877)
OptimismPortal_Test:test_isOutputFinalized() (gas: 131722)
OptimismPortal_Test:test_simple_isOutputFinalized() (gas: 23920)
Proxy_Test:test_clashingFunctionSignatures() (gas: 101427)
Proxy_Test:test_implementationKey() (gas: 20942)
Proxy_Test:test_implementationProxyCallIfNotAdmin() (gas: 30021)
......@@ -178,6 +188,6 @@ ResourceMetering_Test:test_useMaxSucceeds() (gas: 8017045)
ResourceMetering_Test:test_useMoreThanMaxReverts() (gas: 16024)
SequencerFeeVault_Test:test_constructor() (gas: 7611)
SequencerFeeVault_Test:test_minWithdrawalAmount() (gas: 5429)
SequencerFeeVault_Test:test_receive() (gas: 17280)
SequencerFeeVault_Test:test_revertWithdraw() (gas: 9266)
SequencerFeeVault_Test:test_withdraw() (gas: 147301)
SequencerFeeVault_Test:test_receive() (gas: 17258)
SequencerFeeVault_Test:test_revertWithdraw() (gas: 9244)
SequencerFeeVault_Test:test_withdraw() (gas: 147279)
//SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
/* Testing utilities */
import { Test } from "forge-std/Test.sol";
import { Vm } from "forge-std/Vm.sol";
import "./CommonTest.t.sol";
import { CrossDomainMessenger } from "../universal/CrossDomainMessenger.sol";
import { ResourceMetering } from "../L1/ResourceMetering.sol";
uint128 constant INITIAL_BASE_FEE = 1_000_000_000;
// Free function for setting the prevBaseFee param in the OptimismPortal.
function setPrevBaseFee(
Vm _vm,
address _op,
uint128 _prevBaseFee
) {
_vm.store(
address(_op),
bytes32(uint256(1)),
bytes32(
abi.encode(
ResourceMetering.ResourceParams({
prevBaseFee: _prevBaseFee,
prevBoughtGas: 0,
prevBlockNum: uint64(block.number)
})
)
)
);
}
// Tests for obtaining pure gas cost estimates for commonly used functions.
// The objective with these benchmarks is to strip down the actual test functions
// so that they are nothing more than the call we want measure the gas cost of.
// In order to achieve this we make no assertions, and handle everything else in the setUp()
// function.
contract GasBenchMark_OptimismPortal is Portal_Initializer {
function test_depositTransaction_benchmark() external {
op.depositTransaction{ value: NON_ZERO_VALUE }(
NON_ZERO_ADDRESS,
ZERO_VALUE,
NON_ZERO_GASLIMIT,
false,
NON_ZERO_DATA
);
}
function test_depositTransaction_benchmark_1() external {
setPrevBaseFee(vm, address(op), INITIAL_BASE_FEE);
op.depositTransaction{ value: NON_ZERO_VALUE }(
NON_ZERO_ADDRESS,
ZERO_VALUE,
NON_ZERO_GASLIMIT,
false,
NON_ZERO_DATA
);
}
}
contract GasBenchMark_L1CrossDomainMessenger is Messenger_Initializer {
function test_L1MessengerSendMessage_benchmark_0() external {
// The amount of data typically sent during a bridge deposit.
bytes
memory data = hex"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
L1Messenger.sendMessage(bob, data, uint32(100));
}
function test_L1MessengerSendMessage_benchmark_1() external {
setPrevBaseFee(vm, address(op), INITIAL_BASE_FEE);
// The amount of data typically sent during a bridge deposit.
bytes
memory data = hex"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
L1Messenger.sendMessage(bob, data, uint32(100));
}
}
contract GasBenchMark_L1StandardBridge_Deposit is Bridge_Initializer {
function setUp() public virtual override {
super.setUp();
deal(address(L1Token), alice, 100000, true);
vm.startPrank(alice, alice);
}
function test_depositETH_benchmark_0() external {
L1Bridge.depositETH{ value: 500 }(50000, hex"");
}
function test_depositETH_benchmark_1() external {
setPrevBaseFee(vm, address(op), INITIAL_BASE_FEE);
L1Bridge.depositETH{ value: 500 }(50000, hex"");
}
function test_depositERC20_benchmark_0() external {
L1Bridge.depositETH{ value: 500 }(50000, hex"");
}
function test_depositERC20_benchmark_1() external {
setPrevBaseFee(vm, address(op), INITIAL_BASE_FEE);
L1Bridge.depositETH{ value: 500 }(50000, hex"");
}
}
contract GasBenchMark_L1StandardBridge_Finalize is Bridge_Initializer {
function setUp() public virtual override {
super.setUp();
deal(address(L1Token), address(L1Bridge), 100, true);
vm.mockCall(
address(L1Bridge.messenger()),
abi.encodeWithSelector(CrossDomainMessenger.xDomainMessageSender.selector),
abi.encode(address(L1Bridge.otherBridge()))
);
vm.startPrank(address(L1Bridge.messenger()));
vm.deal(address(L1Bridge.messenger()), 100);
}
function test_finalizeETHWithdrawal_benchmark() external {
// TODO: Make this more accurate. It is underestimating the cost because it pranks
// the call coming from the messenger, which bypasses the portal
// and oracle.
L1Bridge.finalizeETHWithdrawal{ value: 100 }(alice, alice, 100, hex"");
}
}
contract GasBenchMark_L2OutputOracle is L2OutputOracle_Initializer {
uint256 nextBlockNumber;
function setUp() public override {
super.setUp();
nextBlockNumber = oracle.nextBlockNumber();
warpToAppendTime(nextBlockNumber);
vm.startPrank(sequencer);
}
function test_appendL2Output_benchmark() external {
oracle.appendL2Output(nonZeroHash, nextBlockNumber, 0, 0);
}
}
......@@ -19,10 +19,15 @@ import { Lib_PredeployAddresses } from "../libraries/Lib_PredeployAddresses.sol"
import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import { Proxy } from "../universal/Proxy.sol";
import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
import { Lib_ResolvedDelegateProxy } from "../legacy/Lib_ResolvedDelegateProxy.sol";
import { Lib_AddressManager } from "../legacy/Lib_AddressManager.sol";
import { L1ChugSplashProxy } from "../legacy/L1ChugSplashProxy.sol";
import { iL1ChugSplashDeployer } from "../legacy/L1ChugSplashProxy.sol";
contract CommonTest is Test {
address alice = address(128);
address bob = address(256);
address multisig = address(512);
address immutable ZERO_ADDRESS = address(0);
address immutable NON_ZERO_ADDRESS = address(1);
......@@ -36,9 +41,11 @@ contract CommonTest is Test {
// Give alice and bob some ETH
vm.deal(alice, 1 << 16);
vm.deal(bob, 1 << 16);
vm.deal(multisig, 1 << 16);
vm.label(alice, "alice");
vm.label(bob, "bob");
vm.label(multisig, "multisig");
// Make sure we have a non-zero base fee
vm.fee(1000000000);
......@@ -63,6 +70,11 @@ contract L2OutputOracle_Initializer is CommonTest {
// Test data
uint256 initL1Time;
// Advance the evm's time to meet the L2OutputOracle's requirements for appendL2Output
function warpToAppendTime(uint256 _nextBlockNumber) public {
vm.warp(oracle.computeL2Timestamp(_nextBlockNumber) + 1);
}
function setUp() public virtual {
_setUp();
......@@ -82,8 +94,8 @@ contract L2OutputOracle_Initializer is CommonTest {
sequencer,
owner
);
Proxy proxy = new Proxy(alice);
vm.prank(alice);
Proxy proxy = new Proxy(multisig);
vm.prank(multisig);
proxy.upgradeToAndCall(
address(oracleImpl),
abi.encodeWithSelector(
......@@ -103,16 +115,14 @@ contract Portal_Initializer is L2OutputOracle_Initializer {
OptimismPortal opImpl;
OptimismPortal op;
function setUp() public override virtual {
function setUp() public virtual override {
L2OutputOracle_Initializer.setUp();
opImpl = new OptimismPortal(oracle, 7 days);
Proxy proxy = new Proxy(alice);
vm.prank(alice);
Proxy proxy = new Proxy(multisig);
vm.prank(multisig);
proxy.upgradeToAndCall(
address(opImpl),
abi.encodeWithSelector(
OptimismPortal.initialize.selector
)
abi.encodeWithSelector(OptimismPortal.initialize.selector)
);
op = OptimismPortal(payable(address(proxy)));
}
......@@ -120,6 +130,7 @@ contract Portal_Initializer is L2OutputOracle_Initializer {
contract Messenger_Initializer is L2OutputOracle_Initializer {
OptimismPortal op;
Lib_AddressManager addressManager;
L1CrossDomainMessenger L1Messenger;
L2CrossDomainMessenger L2Messenger =
L2CrossDomainMessenger(Lib_PredeployAddresses.L2_CROSS_DOMAIN_MESSENGER);
......@@ -164,7 +175,22 @@ contract Messenger_Initializer is L2OutputOracle_Initializer {
op = new OptimismPortal(oracle, 7 days);
vm.label(address(op), "OptimismPortal");
L1Messenger = new L1CrossDomainMessenger(op);
// Deploy the address manager
vm.prank(multisig);
addressManager = new Lib_AddressManager();
// Setup implementation
L1CrossDomainMessenger L1MessengerImpl = new L1CrossDomainMessenger(op);
// Setup the address manager and proxy
vm.prank(multisig);
addressManager.setAddress("OVM_L1CrossDomainMessenger", address(L1MessengerImpl));
Lib_ResolvedDelegateProxy proxy = new Lib_ResolvedDelegateProxy(
address(addressManager),
"OVM_L1CrossDomainMessenger"
);
L1Messenger = L1CrossDomainMessenger(address(proxy));
L1Messenger.initialize(op);
vm.etch(
Lib_PredeployAddresses.L2_CROSS_DOMAIN_MESSENGER,
......@@ -178,13 +204,13 @@ contract Messenger_Initializer is L2OutputOracle_Initializer {
Lib_PredeployAddresses.L2_TO_L1_MESSAGE_PASSER,
address(new L2ToL1MessagePasser()).code
);
vm.label(address(addressManager), "AddressManager");
vm.label(address(L1MessengerImpl), "L1CrossDomainMessenger_Impl");
vm.label(address(L1Messenger), "L1CrossDomainMessenger_Proxy");
vm.label(Lib_PredeployAddresses.OVM_ETH, "OVM_ETH");
vm.label(Lib_PredeployAddresses.OVM_ETH, "OVM_ETH");
vm.label(Lib_PredeployAddresses.L2_TO_L1_MESSAGE_PASSER, "L2ToL1MessagePasser");
vm.label(Lib_PredeployAddresses.L2_CROSS_DOMAIN_MESSENGER, "L2CrossDomainMessenger");
vm.label(
AddressAliasHelper.applyL1ToL2Alias(address(L1Messenger)),
"L1CrossDomainMessenger_aliased"
......@@ -310,8 +336,23 @@ contract Bridge_Initializer is Messenger_Initializer {
// Deploy the L1 bridge and initialize it with the address of the
// L1CrossDomainMessenger
L1Bridge = new L1StandardBridge(payable(address(L1Messenger)));
vm.label(address(L1Bridge), "L1StandardBridge");
L1ChugSplashProxy proxy = new L1ChugSplashProxy(multisig);
vm.mockCall(
multisig,
abi.encodeWithSelector(iL1ChugSplashDeployer.isUpgrading.selector),
abi.encode(true)
);
vm.startPrank(multisig);
proxy.setCode(type(L1StandardBridge).runtimeCode);
vm.clearMockedCalls();
address L1Bridge_Impl = proxy.getImplementation();
vm.stopPrank();
L1Bridge = L1StandardBridge(payable(address(proxy)));
L1Bridge.initialize(payable(address(L1Messenger)));
vm.label(address(proxy), "L1StandardBridge_Proxy");
vm.label(address(L1Bridge_Impl), "L1StandardBridge_Impl");
// Deploy the L2StandardBridge, move it to the correct predeploy
// address and then initialize it
......
......@@ -13,11 +13,6 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer {
super.setUp();
}
// Advance the evm's time to meet the L2OutputOracle's requirements for appendL2Output
function warpToAppendTime(uint256 _nextBlockNumber) public {
vm.warp(oracle.computeL2Timestamp(_nextBlockNumber) + 1);
}
function test_constructor() external {
assertEq(oracle.owner(), owner);
assertEq(oracle.SUBMISSION_INTERVAL(), submissionInterval);
......@@ -376,7 +371,7 @@ contract L2OutputOracleUpgradeable_Test is L2OutputOracle_Initializer {
assertEq(bytes32(0), slot21Before);
NextImpl nextImpl = new NextImpl();
vm.startPrank(alice);
vm.startPrank(multisig);
proxy.upgradeToAndCall(
address(nextImpl),
abi.encodeWithSelector(NextImpl.initialize.selector)
......
......@@ -348,7 +348,7 @@ contract OptimismPortalUpgradeable_Test is Portal_Initializer {
assertEq(bytes32(0), slot21Before);
NextImpl nextImpl = new NextImpl();
vm.startPrank(alice);
vm.startPrank(multisig);
proxy.upgradeToAndCall(
address(nextImpl),
abi.encodeWithSelector(NextImpl.initialize.selector)
......
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