Commit 9a062d54 authored by clabby's avatar clabby Committed by GitHub

feat(ctb): Add `OptimismPortal2` (#9267)

* Add `OptimismPortal2`

* old portal

* new portal

* fmt
parent f6affa41
...@@ -31,6 +31,10 @@ ...@@ -31,6 +31,10 @@
"initCodeHash": "0x54658799b54481f56acb6481db4f37ad830a8238a8fd592c96e8b1a2b60e0627", "initCodeHash": "0x54658799b54481f56acb6481db4f37ad830a8238a8fd592c96e8b1a2b60e0627",
"sourceCodeHash": "0xdc27421279afb6c3b26fc8c589c5d213695f666c74d2c2c41cb7df719d172f37" "sourceCodeHash": "0xdc27421279afb6c3b26fc8c589c5d213695f666c74d2c2c41cb7df719d172f37"
}, },
"src/L1/OptimismPortal2.sol": {
"initCodeHash": "0x3b140ef8e85169a59c626974aeb31be43bc58c5a48592611d74004925732ab5f",
"sourceCodeHash": "0xf28140c13ea7cefb9525ee106268e7d482f3e6e13d8b300d3b1423de8ac173f3"
},
"src/L1/ProtocolVersions.sol": { "src/L1/ProtocolVersions.sol": {
"initCodeHash": "0x72cd467e8bcf019c02675d72ab762e088bcc9cc0f1a4e9f587fa4589f7fdd1b8", "initCodeHash": "0x72cd467e8bcf019c02675d72ab762e088bcc9cc0f1a4e9f587fa4589f7fdd1b8",
"sourceCodeHash": "0xbd56a23cd3221cb9d25029e80cd9f2afe2c615ae9c0b3956bf6ed373b8b805b6" "sourceCodeHash": "0xbd56a23cd3221cb9d25029e80cd9f2afe2c615ae9c0b3956bf6ed373b8b805b6"
......
...@@ -1031,6 +1031,30 @@ ...@@ -1031,6 +1031,30 @@
"length": 41, "length": 41,
"filename_relative": "src/universal/CrossDomainMessenger.sol" "filename_relative": "src/universal/CrossDomainMessenger.sol"
}, },
{
"id": "7d4963a32dc1dafcf8cfac2d7ac767f3cf4a2ee7ffa0cbd4ff7e6dbdf4d47727",
"impact": "Medium",
"confidence": "Medium",
"check": "tx-origin",
"description": "OptimismPortal2.finalizeWithdrawalTransaction(Types.WithdrawalTransaction) (src/L1/OptimismPortal2.sol#308-390) uses tx.origin for authorization: ! success && tx.origin == Constants.ESTIMATION_ADDRESS (src/L1/OptimismPortal2.sol#387)\n",
"type": "function",
"name": "finalizeWithdrawalTransaction",
"start": 14716,
"length": 4789,
"filename_relative": "src/L1/OptimismPortal2.sol"
},
{
"id": "7d4963a32dc1dafcf8cfac2d7ac767f3cf4a2ee7ffa0cbd4ff7e6dbdf4d47727",
"impact": "Medium",
"confidence": "Medium",
"check": "tx-origin",
"description": "OptimismPortal2.finalizeWithdrawalTransaction(Types.WithdrawalTransaction) (src/L1/OptimismPortal2.sol#308-390) uses tx.origin for authorization: ! success && tx.origin == Constants.ESTIMATION_ADDRESS (src/L1/OptimismPortal2.sol#387)\n",
"type": "node",
"name": "! success && tx.origin == Constants.ESTIMATION_ADDRESS",
"start": 19376,
"length": 53,
"filename_relative": "src/L1/OptimismPortal2.sol"
},
{ {
"id": "b507540468fdf3f9972d33e723efb8c120f8d824ffe54842e1e998244944abaf", "id": "b507540468fdf3f9972d33e723efb8c120f8d824ffe54842e1e998244944abaf",
"impact": "Medium", "impact": "Medium",
...@@ -1139,6 +1163,42 @@ ...@@ -1139,6 +1163,42 @@
"length": 20, "length": 20,
"filename_relative": "src/dispute/FaultDisputeGame.sol" "filename_relative": "src/dispute/FaultDisputeGame.sol"
}, },
{
"id": "7dadbc3ea20cc8f9e628681fed9b1d804359f2f8e3ec7b768e65a39d72eb2db7",
"impact": "Medium",
"confidence": "High",
"check": "write-after-write",
"description": "OptimismPortal2.l2Sender (src/L1/OptimismPortal2.sol#54) is written in both\n\tl2Sender = _tx.sender (src/L1/OptimismPortal2.sol#366)\n\tl2Sender = Constants.DEFAULT_L2_SENDER (src/L1/OptimismPortal2.sol#378)\n",
"type": "variable",
"name": "l2Sender",
"start": 2796,
"length": 23,
"filename_relative": "src/L1/OptimismPortal2.sol"
},
{
"id": "7dadbc3ea20cc8f9e628681fed9b1d804359f2f8e3ec7b768e65a39d72eb2db7",
"impact": "Medium",
"confidence": "High",
"check": "write-after-write",
"description": "OptimismPortal2.l2Sender (src/L1/OptimismPortal2.sol#54) is written in both\n\tl2Sender = _tx.sender (src/L1/OptimismPortal2.sol#366)\n\tl2Sender = Constants.DEFAULT_L2_SENDER (src/L1/OptimismPortal2.sol#378)\n",
"type": "node",
"name": "l2Sender = _tx.sender",
"start": 18077,
"length": 21,
"filename_relative": "src/L1/OptimismPortal2.sol"
},
{
"id": "7dadbc3ea20cc8f9e628681fed9b1d804359f2f8e3ec7b768e65a39d72eb2db7",
"impact": "Medium",
"confidence": "High",
"check": "write-after-write",
"description": "OptimismPortal2.l2Sender (src/L1/OptimismPortal2.sol#54) is written in both\n\tl2Sender = _tx.sender (src/L1/OptimismPortal2.sol#366)\n\tl2Sender = Constants.DEFAULT_L2_SENDER (src/L1/OptimismPortal2.sol#378)\n",
"type": "node",
"name": "l2Sender = Constants.DEFAULT_L2_SENDER",
"start": 18871,
"length": 38,
"filename_relative": "src/L1/OptimismPortal2.sol"
},
{ {
"id": "858b95108475bbb08343b6f5701b03c0762d00b73cec53751173e93c3ec10c1a", "id": "858b95108475bbb08343b6f5701b03c0762d00b73cec53751173e93c3ec10c1a",
"impact": "Medium", "impact": "Medium",
......
This diff is collapsed.
[
{
"bytes": "1",
"label": "_initialized",
"offset": 0,
"slot": "0",
"type": "uint8"
},
{
"bytes": "1",
"label": "_initializing",
"offset": 1,
"slot": "0",
"type": "bool"
},
{
"bytes": "32",
"label": "params",
"offset": 0,
"slot": "1",
"type": "struct ResourceMetering.ResourceParams"
},
{
"bytes": "1536",
"label": "__gap",
"offset": 0,
"slot": "2",
"type": "uint256[48]"
},
{
"bytes": "20",
"label": "l2Sender",
"offset": 0,
"slot": "50",
"type": "address"
},
{
"bytes": "32",
"label": "finalizedWithdrawals",
"offset": 0,
"slot": "51",
"type": "mapping(bytes32 => bool)"
},
{
"bytes": "32",
"label": "spacer_52_0_32",
"offset": 0,
"slot": "52",
"type": "bytes32"
},
{
"bytes": "1",
"label": "spacer_53_0_1",
"offset": 0,
"slot": "53",
"type": "bool"
},
{
"bytes": "20",
"label": "superchainConfig",
"offset": 1,
"slot": "53",
"type": "contract SuperchainConfig"
},
{
"bytes": "20",
"label": "spacer_54_0_20",
"offset": 0,
"slot": "54",
"type": "address"
},
{
"bytes": "20",
"label": "systemConfig",
"offset": 0,
"slot": "55",
"type": "contract SystemConfig"
},
{
"bytes": "20",
"label": "disputeGameFactory",
"offset": 0,
"slot": "56",
"type": "contract DisputeGameFactory"
},
{
"bytes": "32",
"label": "provenWithdrawals",
"offset": 0,
"slot": "57",
"type": "mapping(bytes32 => struct OptimismPortal2.ProvenWithdrawal)"
},
{
"bytes": "32",
"label": "disputeGameBlacklist",
"offset": 0,
"slot": "58",
"type": "mapping(contract IDisputeGame => bool)"
},
{
"bytes": "4",
"label": "respectedGameType",
"offset": 0,
"slot": "59",
"type": "GameType"
}
]
\ No newline at end of file
This diff is collapsed.
...@@ -16,6 +16,10 @@ interface IDisputeGame is IInitializable { ...@@ -16,6 +16,10 @@ interface IDisputeGame is IInitializable {
/// @return createdAt_ The timestamp that the DisputeGame contract was created at. /// @return createdAt_ The timestamp that the DisputeGame contract was created at.
function createdAt() external view returns (Timestamp createdAt_); function createdAt() external view returns (Timestamp createdAt_);
/// @notice Returns the timestamp that the DisputeGame contract was resolved at.
/// @return resolvedAt_ The timestamp that the DisputeGame contract was resolved at.
function resolvedAt() external view returns (Timestamp resolvedAt_);
/// @notice Returns the current status of the game. /// @notice Returns the current status of the game.
/// @return status_ The current status of the game. /// @return status_ The current status of the game.
function status() external view returns (GameStatus status_); function status() external view returns (GameStatus status_);
......
...@@ -6,6 +6,7 @@ import { Executables } from "scripts/Executables.sol"; ...@@ -6,6 +6,7 @@ import { Executables } from "scripts/Executables.sol";
import { console2 as console } from "forge-std/console2.sol"; import { console2 as console } from "forge-std/console2.sol";
import { ProtocolVersions } from "src/L1/ProtocolVersions.sol"; import { ProtocolVersions } from "src/L1/ProtocolVersions.sol";
import { OptimismPortal } from "src/L1/OptimismPortal.sol"; import { OptimismPortal } from "src/L1/OptimismPortal.sol";
import { OptimismPortal2 } from "src/L1/OptimismPortal2.sol";
import { SystemConfig } from "src/L1/SystemConfig.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol";
/// @title Specification_Test /// @title Specification_Test
...@@ -222,6 +223,35 @@ contract Specification_Test is CommonTest { ...@@ -222,6 +223,35 @@ contract Specification_Test is CommonTest {
_addSpec({ _name: "OptimismPortal", _sel: _getSel("systemConfig()") }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("systemConfig()") });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("version()") }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("version()") });
// OptimismPortal2
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("GUARDIAN()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("SYSTEM_CONFIG()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("depositTransaction(address,uint256,uint64,bool,bytes)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("donateETH()") });
_addSpec({
_name: "OptimismPortal2",
_sel: OptimismPortal2.finalizeWithdrawalTransaction.selector,
_pausable: true
});
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("finalizedWithdrawals(bytes32)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("guardian()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("initialize(address,address,address)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("l2Sender()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("minimumGasLimit(uint64)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("params()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("paused()") });
_addSpec({ _name: "OptimismPortal2", _sel: OptimismPortal2.proveWithdrawalTransaction.selector, _pausable: true });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("provenWithdrawals(bytes32)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("superchainConfig()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("systemConfig()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("version()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("disputeGameFactory()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("disputeGameBlacklist(address)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("respectedGameType()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("blacklistDisputeGame(address)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("deleteProvenWithdrawal(bytes32)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("setRespectedGameType(uint32)") });
// ProtocolVersions // ProtocolVersions
_addSpec({ _name: "ProtocolVersions", _sel: _getSel("RECOMMENDED_SLOT()") }); _addSpec({ _name: "ProtocolVersions", _sel: _getSel("RECOMMENDED_SLOT()") });
_addSpec({ _name: "ProtocolVersions", _sel: _getSel("REQUIRED_SLOT()") }); _addSpec({ _name: "ProtocolVersions", _sel: _getSel("REQUIRED_SLOT()") });
......
...@@ -271,8 +271,9 @@ contract Initializer_Test is Bridge_Initializer { ...@@ -271,8 +271,9 @@ contract Initializer_Test is Bridge_Initializer {
/// 3. The `initialize()` function of each contract cannot be called more than once. /// 3. The `initialize()` function of each contract cannot be called more than once.
function test_cannotReinitialize_succeeds() public { function test_cannotReinitialize_succeeds() public {
// Ensure that all L1, L2 `Initializable` contracts are accounted for, in addition to // Ensure that all L1, L2 `Initializable` contracts are accounted for, in addition to
// OptimismMintableERC20FactoryImpl and OptimismMintableERC20FactoryProxy // OptimismMintableERC20FactoryImpl and OptimismMintableERC20FactoryProxy.
assertEq(_getNumInitializable() + 2, contracts.length); // TODO: Add `OptimismPortal2` and `OptimismPortal2Proxy` once the deployment scripts are updated.
assertEq(_getNumInitializable(), contracts.length);
// Attempt to re-initialize all contracts within the `contracts` array. // Attempt to re-initialize all contracts within the `contracts` array.
for (uint256 i; i < contracts.length; i++) { for (uint256 i; i < contracts.length; i++) {
......
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