diff --git a/packages/contracts-bedrock/scripts/fpac/FPACOPS.s.sol b/packages/contracts-bedrock/scripts/fpac/FPACOPS.s.sol index 65d03aaebf6f..05b99098b6c7 100644 --- a/packages/contracts-bedrock/scripts/fpac/FPACOPS.s.sol +++ b/packages/contracts-bedrock/scripts/fpac/FPACOPS.s.sol @@ -187,6 +187,8 @@ contract FPACOPS is Deploy, StdAssertions { // Check the security override yoke configuration. PermissionedDisputeGame soyGameImpl = PermissionedDisputeGame(payable(address(dgfProxy.gameImpls(GameTypes.PERMISSIONED_CANNON)))); + assertEq(soyGameImpl.proposer(), cfg.l2OutputOracleProposer()); + assertEq(soyGameImpl.challenger(), cfg.l2OutputOracleChallenger()); assertEq(soyGameImpl.maxGameDepth(), cfg.faultGameMaxDepth()); assertEq(soyGameImpl.splitDepth(), cfg.faultGameSplitDepth()); assertEq(soyGameImpl.gameDuration().raw(), cfg.faultGameMaxDuration()); diff --git a/packages/contracts-bedrock/snapshots/abi/PermissionedDisputeGame.json b/packages/contracts-bedrock/snapshots/abi/PermissionedDisputeGame.json index f1f48d868298..9357419e9232 100644 --- a/packages/contracts-bedrock/snapshots/abi/PermissionedDisputeGame.json +++ b/packages/contracts-bedrock/snapshots/abi/PermissionedDisputeGame.json @@ -122,6 +122,19 @@ "stateMutability": "payable", "type": "function" }, + { + "inputs": [], + "name": "challenger", + "outputs": [ + { + "internalType": "address", + "name": "challenger_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -442,6 +455,19 @@ "stateMutability": "payable", "type": "function" }, + { + "inputs": [], + "name": "proposer", + "outputs": [ + { + "internalType": "address", + "name": "proposer_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "resolve", diff --git a/packages/contracts-bedrock/src/dispute/PermissionedDisputeGame.sol b/packages/contracts-bedrock/src/dispute/PermissionedDisputeGame.sol index 6063eb0e5476..8fd4bbf7bac1 100644 --- a/packages/contracts-bedrock/src/dispute/PermissionedDisputeGame.sol +++ b/packages/contracts-bedrock/src/dispute/PermissionedDisputeGame.sol @@ -100,4 +100,18 @@ contract PermissionedDisputeGame is FaultDisputeGame { // Fallthrough initialization. super.initialize(); } + + //////////////////////////////////////////////////////////////// + // IMMUTABLE GETTERS // + //////////////////////////////////////////////////////////////// + + /// @notice Returns the proposer address. + function proposer() external view returns (address proposer_) { + proposer_ = PROPOSER; + } + + /// @notice Returns the challenger address. + function challenger() external view returns (address challenger_) { + challenger_ = CHALLENGER; + } } diff --git a/packages/contracts-bedrock/test/dispute/PermissionedDisputeGame.t.sol b/packages/contracts-bedrock/test/dispute/PermissionedDisputeGame.t.sol index b5538c1a0e84..0fc30f99a0bf 100644 --- a/packages/contracts-bedrock/test/dispute/PermissionedDisputeGame.t.sol +++ b/packages/contracts-bedrock/test/dispute/PermissionedDisputeGame.t.sol @@ -73,6 +73,8 @@ contract PermissionedDisputeGame_Init is DisputeGameFactory_Init { PermissionedDisputeGame(payable(address(disputeGameFactory.create(GAME_TYPE, rootClaim, extraData)))); // Check immutables + assertEq(gameProxy.proposer(), PROPOSER); + assertEq(gameProxy.challenger(), CHALLENGER); assertEq(gameProxy.gameType().raw(), GAME_TYPE.raw()); assertEq(gameProxy.absolutePrestate().raw(), absolutePrestate.raw()); assertEq(gameProxy.maxGameDepth(), 2 ** 3);