Commit 34a44375 authored by clabby's avatar clabby Committed by GitHub

feat(ctb): Allow setting the initial respected game type in the first init of...

feat(ctb): Allow setting the initial respected game type in the first init of the Portal2 proxy (#10198)

* feat(ctb): Allow setting the initial respected game type in the first init of the Portal2 proxy

* Update initializer signature in `Specs`
parent f11c6a0f
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -603,8 +603,7 @@ contract Deploy is Deployer { ...@@ -603,8 +603,7 @@ contract Deploy is Deployer {
OptimismPortal2 portal = new OptimismPortal2{ salt: _implSalt() }({ OptimismPortal2 portal = new OptimismPortal2{ salt: _implSalt() }({
_proofMaturityDelaySeconds: cfg.proofMaturityDelaySeconds(), _proofMaturityDelaySeconds: cfg.proofMaturityDelaySeconds(),
_disputeGameFinalityDelaySeconds: cfg.disputeGameFinalityDelaySeconds(), _disputeGameFinalityDelaySeconds: cfg.disputeGameFinalityDelaySeconds()
_initialRespectedGameType: GameType.wrap(uint32(cfg.respectedGameType()))
}); });
save("OptimismPortal2", address(portal)); save("OptimismPortal2", address(portal));
...@@ -1178,7 +1177,8 @@ contract Deploy is Deployer { ...@@ -1178,7 +1177,8 @@ contract Deploy is Deployer {
( (
DisputeGameFactory(disputeGameFactoryProxy), DisputeGameFactory(disputeGameFactoryProxy),
SystemConfig(systemConfigProxy), SystemConfig(systemConfigProxy),
SuperchainConfig(superchainConfigProxy) SuperchainConfig(superchainConfigProxy),
GameType.wrap(uint32(cfg.respectedGameType()))
) )
) )
}); });
......
...@@ -36,8 +36,8 @@ ...@@ -36,8 +36,8 @@
"sourceCodeHash": "0xd3450653cecc14bf8fbc21f2fa9b4a5fde348c2b6313d72e74e08666201295a2" "sourceCodeHash": "0xd3450653cecc14bf8fbc21f2fa9b4a5fde348c2b6313d72e74e08666201295a2"
}, },
"src/L1/OptimismPortal2.sol": { "src/L1/OptimismPortal2.sol": {
"initCodeHash": "0xc70422a7500313e2e43fd01123643f4aa5bac3b7e26f304f5b1bb57e14af7598", "initCodeHash": "0x34432a932e5deaebb856320d6e5d243a3db5d9a8e5e572915346875923ba70be",
"sourceCodeHash": "0xab39ebdd0cb534771d11cacb1e217585db20d5b5bd89803c8485dbccb7baaaf8" "sourceCodeHash": "0x16ac8757439b3045a08476d7486a420ff6ed53db519b0191442a6dff8cd1ed79"
}, },
"src/L1/ProtocolVersions.sol": { "src/L1/ProtocolVersions.sol": {
"initCodeHash": "0x72cd467e8bcf019c02675d72ab762e088bcc9cc0f1a4e9f587fa4589f7fdd1b8", "initCodeHash": "0x72cd467e8bcf019c02675d72ab762e088bcc9cc0f1a4e9f587fa4589f7fdd1b8",
......
...@@ -10,11 +10,6 @@ ...@@ -10,11 +10,6 @@
"internalType": "uint256", "internalType": "uint256",
"name": "_disputeGameFinalityDelaySeconds", "name": "_disputeGameFinalityDelaySeconds",
"type": "uint256" "type": "uint256"
},
{
"internalType": "GameType",
"name": "_initialRespectedGameType",
"type": "uint32"
} }
], ],
"stateMutability": "nonpayable", "stateMutability": "nonpayable",
...@@ -283,6 +278,11 @@ ...@@ -283,6 +278,11 @@
"internalType": "contract SuperchainConfig", "internalType": "contract SuperchainConfig",
"name": "_superchainConfig", "name": "_superchainConfig",
"type": "address" "type": "address"
},
{
"internalType": "GameType",
"name": "_initialRespectedGameType",
"type": "uint32"
} }
], ],
"name": "initialize", "name": "initialize",
......
...@@ -121,23 +121,19 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver { ...@@ -121,23 +121,19 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver {
} }
/// @notice Semantic version. /// @notice Semantic version.
/// @custom:semver 3.7.0 /// @custom:semver 3.8.0
string public constant version = "3.7.0"; string public constant version = "3.8.0";
/// @notice Constructs the OptimismPortal contract. /// @notice Constructs the OptimismPortal contract.
constructor( constructor(uint256 _proofMaturityDelaySeconds, uint256 _disputeGameFinalityDelaySeconds) {
uint256 _proofMaturityDelaySeconds,
uint256 _disputeGameFinalityDelaySeconds,
GameType _initialRespectedGameType
) {
PROOF_MATURITY_DELAY_SECONDS = _proofMaturityDelaySeconds; PROOF_MATURITY_DELAY_SECONDS = _proofMaturityDelaySeconds;
DISPUTE_GAME_FINALITY_DELAY_SECONDS = _disputeGameFinalityDelaySeconds; DISPUTE_GAME_FINALITY_DELAY_SECONDS = _disputeGameFinalityDelaySeconds;
respectedGameType = _initialRespectedGameType;
initialize({ initialize({
_disputeGameFactory: DisputeGameFactory(address(0)), _disputeGameFactory: DisputeGameFactory(address(0)),
_systemConfig: SystemConfig(address(0)), _systemConfig: SystemConfig(address(0)),
_superchainConfig: SuperchainConfig(address(0)) _superchainConfig: SuperchainConfig(address(0)),
_initialRespectedGameType: GameType.wrap(0)
}); });
} }
...@@ -148,7 +144,8 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver { ...@@ -148,7 +144,8 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver {
function initialize( function initialize(
DisputeGameFactory _disputeGameFactory, DisputeGameFactory _disputeGameFactory,
SystemConfig _systemConfig, SystemConfig _systemConfig,
SuperchainConfig _superchainConfig SuperchainConfig _superchainConfig,
GameType _initialRespectedGameType
) )
public public
initializer initializer
...@@ -156,9 +153,20 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver { ...@@ -156,9 +153,20 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver {
disputeGameFactory = _disputeGameFactory; disputeGameFactory = _disputeGameFactory;
systemConfig = _systemConfig; systemConfig = _systemConfig;
superchainConfig = _superchainConfig; superchainConfig = _superchainConfig;
// Set the `l2Sender` slot, only if it is currently empty. This signals the first initialization of the
// contract.
if (l2Sender == address(0)) { if (l2Sender == address(0)) {
l2Sender = Constants.DEFAULT_L2_SENDER; l2Sender = Constants.DEFAULT_L2_SENDER;
// Set the `respectedGameTypeUpdatedAt` timestamp, to ignore all games of the respected type prior
// to this operation.
respectedGameTypeUpdatedAt = uint64(block.timestamp);
// Set the initial respected game type
respectedGameType = _initialRespectedGameType;
} }
__ResourceMetering_init(); __ResourceMetering_init();
} }
......
...@@ -269,7 +269,7 @@ contract Specification_Test is CommonTest { ...@@ -269,7 +269,7 @@ contract Specification_Test is CommonTest {
}); });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("finalizedWithdrawals(bytes32)") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("finalizedWithdrawals(bytes32)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("guardian()") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("guardian()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("initialize(address,address,address)") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("initialize(address,address,address,uint32)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("l2Sender()") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("l2Sender()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("minimumGasLimit(uint64)") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("minimumGasLimit(uint64)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("params()") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("params()") });
......
...@@ -11,6 +11,7 @@ import { ResourceMetering } from "src/L1/ResourceMetering.sol"; ...@@ -11,6 +11,7 @@ import { ResourceMetering } from "src/L1/ResourceMetering.sol";
import { OptimismPortal } from "src/L1/OptimismPortal.sol"; import { OptimismPortal } from "src/L1/OptimismPortal.sol";
import { ForgeArtifacts } from "scripts/ForgeArtifacts.sol"; import { ForgeArtifacts } from "scripts/ForgeArtifacts.sol";
import "src/L1/ProtocolVersions.sol"; import "src/L1/ProtocolVersions.sol";
import "src/libraries/DisputeTypes.sol";
import "scripts/Deployer.sol"; import "scripts/Deployer.sol";
/// @title Initializer_Test /// @title Initializer_Test
...@@ -132,7 +133,13 @@ contract Initializer_Test is Bridge_Initializer { ...@@ -132,7 +133,13 @@ contract Initializer_Test is Bridge_Initializer {
InitializeableContract({ InitializeableContract({
target: deploy.mustGetAddress("OptimismPortal2"), target: deploy.mustGetAddress("OptimismPortal2"),
initCalldata: abi.encodeCall( initCalldata: abi.encodeCall(
optimismPortal2.initialize, (disputeGameFactory, systemConfig, superchainConfig) optimismPortal2.initialize,
(
disputeGameFactory,
systemConfig,
superchainConfig,
GameType.wrap(uint32(deploy.cfg().respectedGameType()))
)
), ),
initializedSlotVal: deploy.loadInitializedSlot("OptimismPortal2") initializedSlotVal: deploy.loadInitializedSlot("OptimismPortal2")
}) })
......
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