Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

contracts-bedrock: move immutables to storage for OptimismPortal #8629

Merged
merged 47 commits into from
Jan 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
4d8b40f
contracts-bedrock: move immutables to storage in OptimismPortal
0xfuturistic Dec 6, 2023
821cdfd
contracts-bedrock: update Deploy script to support changes to Optimis…
0xfuturistic Dec 7, 2023
4c727c3
contracts-bedrock: update tests to support changes to OptimismPortal
0xfuturistic Dec 7, 2023
511f22e
contracts-bedrock: fix Deploy script's function for OptimismPortal
0xfuturistic Dec 8, 2023
a8eed11
op-chain-ops: update upgrade script for OptimismPortal
0xfuturistic Dec 12, 2023
b23862d
contracts-bedrock: fix OptimismPortal spec in Authorization.t.sol
0xfuturistic Dec 14, 2023
d31e5b1
contracts-bedrock: bump semver for OptimismPortal, improve comments
0xfuturistic Dec 14, 2023
9f3bd2b
contracts-bedrock: set L2OutputOracle upgradeToAndCall initialize ver…
0xfuturistic Dec 17, 2023
8b74b92
contracts-bedrock: extend constructor test for OptimismPortal
0xfuturistic Dec 17, 2023
5d31a9f
contracts-bedrock: set initialize version back to 2 in OptimismPortal…
0xfuturistic Dec 17, 2023
13d413b
contracts-bedrock: add more requirements in OptimismPortal deploy script
0xfuturistic Dec 17, 2023
63f5194
contracts-bedrock: represent contracts with addresses in initializeOp…
0xfuturistic Dec 17, 2023
1607277
contracts-bedrock: improve labeling of variables in l1.go for Optimis…
0xfuturistic Dec 17, 2023
7de9fd5
contracts-bedrock: reintroduce ChainAssertions for deployment of Opti…
0xfuturistic Dec 18, 2023
e20893e
op-bindings: make OptimismPortal bindings
0xfuturistic Dec 18, 2023
2b3bc44
contracts-bedrock: update gas-snapshot
0xfuturistic Dec 18, 2023
90d8404
contracts-bedrock: update semver-lock for changes to OptimismPortal
0xfuturistic Dec 18, 2023
69d22bc
contracts-bedrock: update slither report
0xfuturistic Dec 18, 2023
748a277
op-bindings: make OptimismPortal
0xfuturistic Dec 18, 2023
40fd4ca
contracts-bedrock: make snapshots
0xfuturistic Dec 18, 2023
827a764
contracts-bedrock: add test for constructor of OptimismPortal
0xfuturistic Dec 20, 2023
a43ebe3
contracts-bedrock: improve dev comments in OptimismPortal tests
0xfuturistic Dec 20, 2023
148f190
contracts-bedrock: drop isInitialized in ChainAssertions for Optimism…
0xfuturistic Dec 22, 2023
e05a62a
contracts-bedrock: minor improvement in test for OptimismPortal
0xfuturistic Dec 22, 2023
1bff32f
contracts-bedrock: tests for OptimismPortal updated to use non-legacy…
0xfuturistic Dec 22, 2023
a79d919
contracts-bedrock: leverage impl in constructor test for OptimismPortal
0xfuturistic Dec 22, 2023
66066aa
contracts-bedrock: update semver for OptimismPortal
0xfuturistic Dec 22, 2023
957eadc
contracts-bedrock: update semver-lock
0xfuturistic Dec 22, 2023
85f966f
contracts-bedrock: update slither report
0xfuturistic Dec 22, 2023
f00792c
op-bindings: make for OptimismPortal
0xfuturistic Dec 22, 2023
0b1503f
contracts-bedrock: improve documentation in OptimismPortal
0xfuturistic Dec 24, 2023
b2e5183
contracts-bedrock: update slither report
0xfuturistic Dec 24, 2023
057dbb6
contracts-bedrock: update semver-lock
0xfuturistic Dec 24, 2023
36d2753
contracts-bedrock: reorder isProxy in ChainAssertions for OptimismPortal
0xfuturistic Jan 2, 2024
51e8d67
contracts-bedrock: replace dead address by DEFAULT_L2_SENDER from con…
0xfuturistic Jan 4, 2024
37eb9a5
contracts-bedrock: drop redundant test for OptimismPortal
0xfuturistic Jan 4, 2024
bc09c95
contracts-bedrock: update slither report
0xfuturistic Jan 9, 2024
7a11902
contracts-bedrock: update semver-lock
0xfuturistic Jan 9, 2024
9c6b8f4
contracts-bedrock: drop redundant test for OptimismPortal
0xfuturistic Jan 9, 2024
a980bf5
contracts-bedrock: fix Initializable.t.sol
0xfuturistic Jan 10, 2024
1371427
op-chain-ops: check fetched addresses from OptimismPortal against Dep…
0xfuturistic Jan 9, 2024
ef189da
contracts-bedrock: drop redundant line in OptimismPortal
0xfuturistic Jan 10, 2024
70e832d
contracts-bedrock: update semver-lock
tynes Jan 10, 2024
d1828dc
contracts-bedrock: update slither-report
0xfuturistic Jan 11, 2024
d14ccbb
op-bindings: make
0xfuturistic Jan 11, 2024
b9afd7f
contracts-bedrock: update slither report
0xfuturistic Jan 11, 2024
7580960
contracts-bedrock: update gas snapshot
0xfuturistic Jan 11, 2024
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
32 changes: 16 additions & 16 deletions op-bindings/bindings/optimismportal.go

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions op-bindings/bindings/optimismportal_more.go

Large diffs are not rendered by default.

24 changes: 23 additions & 1 deletion op-chain-ops/upgrades/l1.go
Original file line number Diff line number Diff line change
Expand Up @@ -563,7 +563,29 @@ func OptimismPortal(batch *safe.Batch, implementations superchain.Implementation
return err
}

calldata, err := optimismPortalABI.Pack("initialize", superchainConfigProxy)
optimismPortal, err := bindings.NewOptimismPortalCaller(common.HexToAddress(list.OptimismPortalProxy.String()), backend)
if err != nil {
return err
}
l2OutputOracle, err := optimismPortal.L2Oracle(&bind.CallOpts{})
if err != nil {
return err
}
systemConfig, err := optimismPortal.SystemConfig(&bind.CallOpts{})
if err != nil {
return err
}

if config != nil {
0xfuturistic marked this conversation as resolved.
Show resolved Hide resolved
if l2OutputOracle != common.HexToAddress(list.L2OutputOracleProxy.String()) {
return fmt.Errorf("upgrading OptimismPortal: L2OutputOracle address doesn't match config")
}
if systemConfig != config.SystemConfigProxy {
return fmt.Errorf("upgrading OptimismPortal: SystemConfig address doesn't match config")
}
}

calldata, err := optimismPortalABI.Pack("initialize", l2OutputOracle, systemConfig, superchainConfigProxy)
0xfuturistic marked this conversation as resolved.
Show resolved Hide resolved
0xfuturistic marked this conversation as resolved.
Show resolved Hide resolved
if err != nil {
return err
}
Expand Down
18 changes: 9 additions & 9 deletions packages/contracts-bedrock/.gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 356493)
GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2954655)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 544863)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 4057056)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 446222)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 3491971)
GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 356531)
GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2954693)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 544901)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 4057094)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 446088)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 3491837)
GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 55367)
GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 92951)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 68450)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 68899)
GasBenchMark_OptimismPortal:test_proveWithdrawalTransaction_benchmark() (gas: 153456)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 68316)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 68937)
GasBenchMark_OptimismPortal:test_proveWithdrawalTransaction_benchmark() (gas: 155556)
17 changes: 12 additions & 5 deletions packages/contracts-bedrock/scripts/ChainAssertions.sol
Original file line number Diff line number Diff line change
Expand Up @@ -191,23 +191,30 @@ library ChainAssertions {
/// @notice Asserts the OptimismPortal is setup correctly
function checkOptimismPortal(Types.ContractSet memory _contracts, DeployConfig _cfg, bool _isProxy) internal view {
console.log("Running chain assertions on the OptimismPortal");

OptimismPortal portal = OptimismPortal(payable(_contracts.OptimismPortal));

address guardian = _cfg.superchainConfigGuardian();
if (guardian.code.length == 0) {
console.log("Guardian has no code: %s", guardian);
}

0xfuturistic marked this conversation as resolved.
Show resolved Hide resolved
require(address(portal.L2_ORACLE()) == _contracts.L2OutputOracle);
require(address(portal.l2Oracle()) == _contracts.L2OutputOracle);
require(address(portal.SYSTEM_CONFIG()) == _contracts.SystemConfig);
require(address(portal.systemConfig()) == _contracts.SystemConfig);

if (_isProxy) {
require(address(portal.L2_ORACLE()) == _contracts.L2OutputOracle);
require(address(portal.l2Oracle()) == _contracts.L2OutputOracle);
require(address(portal.SYSTEM_CONFIG()) == _contracts.SystemConfig);
require(address(portal.systemConfig()) == _contracts.SystemConfig);

require(portal.GUARDIAN() == _cfg.superchainConfigGuardian());
require(portal.guardian() == _cfg.superchainConfigGuardian());
require(address(portal.superchainConfig()) == address(_contracts.SuperchainConfig));
require(portal.paused() == SuperchainConfig(_contracts.SuperchainConfig).paused());
} else {
require(address(portal.L2_ORACLE()) == address(0));
require(address(portal.l2Oracle()) == address(0));
require(address(portal.SYSTEM_CONFIG()) == address(0));
require(address(portal.systemConfig()) == address(0));
require(address(portal.superchainConfig()) == address(0));
}
}

Expand Down
19 changes: 12 additions & 7 deletions packages/contracts-bedrock/scripts/Deploy.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -481,11 +481,7 @@ contract Deploy is Deployer {
function deployOptimismPortal() public broadcast returns (address addr_) {
console.log("Deploying OptimismPortal implementation");

L2OutputOracle l2OutputOracle = L2OutputOracle(mustGetAddress("L2OutputOracleProxy"));
SystemConfig systemConfig = SystemConfig(mustGetAddress("SystemConfigProxy"));

OptimismPortal portal =
new OptimismPortal{ salt: _implSalt() }({ _l2Oracle: l2OutputOracle, _systemConfig: systemConfig });
OptimismPortal portal = new OptimismPortal{ salt: _implSalt() }();

save("OptimismPortal", address(portal));
console.log("OptimismPortal deployed at %s", address(portal));
Expand Down Expand Up @@ -908,12 +904,21 @@ contract Deploy is Deployer {
console.log("Upgrading and initializing OptimismPortal proxy");
address optimismPortalProxy = mustGetAddress("OptimismPortalProxy");
address optimismPortal = mustGetAddress("OptimismPortal");
SuperchainConfig superchainConfigProxy = SuperchainConfig(mustGetAddress("SuperchainConfigProxy"));
address l2OutputOracleProxy = mustGetAddress("L2OutputOracleProxy");
address systemConfigProxy = mustGetAddress("SystemConfigProxy");
address superchainConfigProxy = mustGetAddress("SuperchainConfigProxy");

_upgradeAndCallViaSafe({
_proxy: payable(optimismPortalProxy),
_implementation: optimismPortal,
_innerCallData: abi.encodeCall(OptimismPortal.initialize, (superchainConfigProxy))
_innerCallData: abi.encodeCall(
OptimismPortal.initialize,
(
L2OutputOracle(l2OutputOracleProxy),
SystemConfig(systemConfigProxy),
SuperchainConfig(superchainConfigProxy)
)
)
0xfuturistic marked this conversation as resolved.
Show resolved Hide resolved
});

OptimismPortal portal = OptimismPortal(payable(optimismPortalProxy));
Expand Down
4 changes: 2 additions & 2 deletions packages/contracts-bedrock/semver-lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@
"sourceCodeHash": "0xad40d88dad5e371af8cd52673c1bec59c02012cc5627cfd60db32a05b3dcb029"
},
"src/L1/OptimismPortal.sol": {
"initCodeHash": "0xaa4733b87fab3a3a0700128cab3e272c02064f38fb0080251566cacefe5d7908",
"sourceCodeHash": "0xb4bb23bf2942de36bb001e3eb888a183840daa30024023cd0d6d0e150572f95a"
"initCodeHash": "0xf3b83a4b6323e012b7473502cb478cce7f062551f00e6c67055b9db3282e0ef9",
"sourceCodeHash": "0xdcca188039f898d719cee00d4e703efa9b2cc2d8a21b51f70bbe6e8452f0d0b5"
},
"src/L1/ProtocolVersions.sol": {
"initCodeHash": "0x72cd467e8bcf019c02675d72ab762e088bcc9cc0f1a4e9f587fa4589f7fdd1b8",
Expand Down
86 changes: 43 additions & 43 deletions packages/contracts-bedrock/slither-report.json
Original file line number Diff line number Diff line change
Expand Up @@ -1032,26 +1032,26 @@
"filename_relative": "src/universal/CrossDomainMessenger.sol"
},
{
"id": "9499bea1e26f68282279d9bf87f2ba9c95d500ba55be2f97dd49060d65abc6e7",
"id": "b507540468fdf3f9972d33e723efb8c120f8d824ffe54842e1e998244944abaf",
"impact": "Medium",
"confidence": "Medium",
"check": "tx-origin",
"description": "OptimismPortal.finalizeWithdrawalTransaction(Types.WithdrawalTransaction) (src/L1/OptimismPortal.sol#266-349) uses tx.origin for authorization: success == false && tx.origin == Constants.ESTIMATION_ADDRESS (src/L1/OptimismPortal.sol#346)\n",
"description": "OptimismPortal.finalizeWithdrawalTransaction(Types.WithdrawalTransaction) (src/L1/OptimismPortal.sol#280-363) uses tx.origin for authorization: success == false && tx.origin == Constants.ESTIMATION_ADDRESS (src/L1/OptimismPortal.sol#360)\n",
"type": "function",
"name": "finalizeWithdrawalTransaction",
"start": 12883,
"length": 4841,
"start": 13252,
"length": 4839,
"filename_relative": "src/L1/OptimismPortal.sol"
},
{
"id": "9499bea1e26f68282279d9bf87f2ba9c95d500ba55be2f97dd49060d65abc6e7",
"id": "b507540468fdf3f9972d33e723efb8c120f8d824ffe54842e1e998244944abaf",
"impact": "Medium",
"confidence": "Medium",
"check": "tx-origin",
"description": "OptimismPortal.finalizeWithdrawalTransaction(Types.WithdrawalTransaction) (src/L1/OptimismPortal.sol#266-349) uses tx.origin for authorization: success == false && tx.origin == Constants.ESTIMATION_ADDRESS (src/L1/OptimismPortal.sol#346)\n",
"description": "OptimismPortal.finalizeWithdrawalTransaction(Types.WithdrawalTransaction) (src/L1/OptimismPortal.sol#280-363) uses tx.origin for authorization: success == false && tx.origin == Constants.ESTIMATION_ADDRESS (src/L1/OptimismPortal.sol#360)\n",
"type": "node",
"name": "success == false && tx.origin == Constants.ESTIMATION_ADDRESS",
"start": 17587,
"start": 17954,
"length": 61,
"filename_relative": "src/L1/OptimismPortal.sol"
},
Expand Down Expand Up @@ -1103,42 +1103,6 @@
"length": 20,
"filename_relative": "src/dispute/FaultDisputeGame.sol"
},
{
"id": "251668d2d92d4034a249cc32c68668cf824fe41d8b21c9a3ead976e6c03bdaf4",
"impact": "Medium",
"confidence": "High",
"check": "write-after-write",
"description": "OptimismPortal.l2Sender (src/L1/OptimismPortal.sol#53) is written in both\n\tl2Sender = _tx.sender (src/L1/OptimismPortal.sol#325)\n\tl2Sender = Constants.DEFAULT_L2_SENDER (src/L1/OptimismPortal.sol#337)\n",
"type": "variable",
"name": "l2Sender",
"start": 2603,
"length": 23,
"filename_relative": "src/L1/OptimismPortal.sol"
},
{
"id": "251668d2d92d4034a249cc32c68668cf824fe41d8b21c9a3ead976e6c03bdaf4",
"impact": "Medium",
"confidence": "High",
"check": "write-after-write",
"description": "OptimismPortal.l2Sender (src/L1/OptimismPortal.sol#53) is written in both\n\tl2Sender = _tx.sender (src/L1/OptimismPortal.sol#325)\n\tl2Sender = Constants.DEFAULT_L2_SENDER (src/L1/OptimismPortal.sol#337)\n",
"type": "node",
"name": "l2Sender = _tx.sender",
"start": 16288,
"length": 21,
"filename_relative": "src/L1/OptimismPortal.sol"
},
{
"id": "251668d2d92d4034a249cc32c68668cf824fe41d8b21c9a3ead976e6c03bdaf4",
"impact": "Medium",
"confidence": "High",
"check": "write-after-write",
"description": "OptimismPortal.l2Sender (src/L1/OptimismPortal.sol#53) is written in both\n\tl2Sender = _tx.sender (src/L1/OptimismPortal.sol#325)\n\tl2Sender = Constants.DEFAULT_L2_SENDER (src/L1/OptimismPortal.sol#337)\n",
"type": "node",
"name": "l2Sender = Constants.DEFAULT_L2_SENDER",
"start": 17082,
"length": 38,
"filename_relative": "src/L1/OptimismPortal.sol"
},
{
"id": "858b95108475bbb08343b6f5701b03c0762d00b73cec53751173e93c3ec10c1a",
"impact": "Medium",
Expand Down Expand Up @@ -1174,5 +1138,41 @@
"start": 14217,
"length": 46,
"filename_relative": "src/universal/CrossDomainMessenger.sol"
},
{
"id": "a43b8cff6d6b33609e8c7e3e89af17a0bc9ec73eb9a1a1b796e69c36ce8bcf71",
"impact": "Medium",
"confidence": "High",
"check": "write-after-write",
"description": "OptimismPortal.l2Sender (src/L1/OptimismPortal.sol#43) is written in both\n\tl2Sender = _tx.sender (src/L1/OptimismPortal.sol#339)\n\tl2Sender = Constants.DEFAULT_L2_SENDER (src/L1/OptimismPortal.sol#351)\n",
"type": "variable",
"name": "l2Sender",
"start": 2193,
"length": 23,
"filename_relative": "src/L1/OptimismPortal.sol"
},
{
"id": "a43b8cff6d6b33609e8c7e3e89af17a0bc9ec73eb9a1a1b796e69c36ce8bcf71",
"impact": "Medium",
"confidence": "High",
"check": "write-after-write",
"description": "OptimismPortal.l2Sender (src/L1/OptimismPortal.sol#43) is written in both\n\tl2Sender = _tx.sender (src/L1/OptimismPortal.sol#339)\n\tl2Sender = Constants.DEFAULT_L2_SENDER (src/L1/OptimismPortal.sol#351)\n",
"type": "node",
"name": "l2Sender = _tx.sender",
"start": 16655,
"length": 21,
"filename_relative": "src/L1/OptimismPortal.sol"
},
{
"id": "a43b8cff6d6b33609e8c7e3e89af17a0bc9ec73eb9a1a1b796e69c36ce8bcf71",
"impact": "Medium",
"confidence": "High",
"check": "write-after-write",
"description": "OptimismPortal.l2Sender (src/L1/OptimismPortal.sol#43) is written in both\n\tl2Sender = _tx.sender (src/L1/OptimismPortal.sol#339)\n\tl2Sender = Constants.DEFAULT_L2_SENDER (src/L1/OptimismPortal.sol#351)\n",
"type": "node",
"name": "l2Sender = Constants.DEFAULT_L2_SENDER",
"start": 17449,
"length": 38,
"filename_relative": "src/L1/OptimismPortal.sol"
}
]
23 changes: 11 additions & 12 deletions packages/contracts-bedrock/snapshots/abi/OptimismPortal.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,6 @@
[
{
"inputs": [
{
"internalType": "contract L2OutputOracle",
"name": "_l2Oracle",
"type": "address"
},
{
"internalType": "contract SystemConfig",
"name": "_systemConfig",
"type": "address"
}
],
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
Expand Down Expand Up @@ -177,6 +166,16 @@
},
{
"inputs": [
{
"internalType": "contract L2OutputOracle",
"name": "_l2Oracle",
"type": "address"
},
{
"internalType": "contract SystemConfig",
"name": "_systemConfig",
"type": "address"
},
{
"internalType": "contract SuperchainConfig",
"name": "_superchainConfig",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,19 @@
"offset": 1,
"slot": "53",
"type": "contract SuperchainConfig"
},
{
"bytes": "20",
"label": "l2Oracle",
"offset": 0,
"slot": "54",
"type": "contract L2OutputOracle"
},
{
"bytes": "20",
"label": "systemConfig",
"offset": 0,
"slot": "55",
"type": "contract SystemConfig"
}
0xfuturistic marked this conversation as resolved.
Show resolved Hide resolved
]
Loading