Commit 8a3e411d authored by clabby's avatar clabby Committed by GitHub

feat(ctb): Remove `SAURON` role (#9452)

* Remove `SAURON` role

* bindings
parent ab3a99ec
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -32,8 +32,8 @@ ...@@ -32,8 +32,8 @@
"sourceCodeHash": "0xdc27421279afb6c3b26fc8c589c5d213695f666c74d2c2c41cb7df719d172f37" "sourceCodeHash": "0xdc27421279afb6c3b26fc8c589c5d213695f666c74d2c2c41cb7df719d172f37"
}, },
"src/L1/OptimismPortal2.sol": { "src/L1/OptimismPortal2.sol": {
"initCodeHash": "0xbbf753c1df3e4eabdd910124948afc5bfda7e219ece0f3a16804ea2129d512ed", "initCodeHash": "0x3c081d9769220a8b4a7538830905be3ebb058d0c01312bdbd9feae7f707a2866",
"sourceCodeHash": "0x78457c09e7e80b1e950f794999dcd5f8426dde850793fbaf9aba9718d29d9141" "sourceCodeHash": "0xc853bb1763d0b6b2008ebfa14148cd0840691f412873fed4ac7d203b7c69e7a7"
}, },
"src/L1/ProtocolVersions.sol": { "src/L1/ProtocolVersions.sol": {
"initCodeHash": "0x72cd467e8bcf019c02675d72ab762e088bcc9cc0f1a4e9f587fa4589f7fdd1b8", "initCodeHash": "0x72cd467e8bcf019c02675d72ab762e088bcc9cc0f1a4e9f587fa4589f7fdd1b8",
......
...@@ -474,19 +474,6 @@ ...@@ -474,19 +474,6 @@
"stateMutability": "view", "stateMutability": "view",
"type": "function" "type": "function"
}, },
{
"inputs": [],
"name": "sauron",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "pure",
"type": "function"
},
{ {
"inputs": [ "inputs": [
{ {
......
...@@ -31,10 +31,6 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver { ...@@ -31,10 +31,6 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver {
uint64 timestamp; uint64 timestamp;
} }
/// @dev Remove this in favor of a configurable sauron role. This should probably live in the superchain config,
/// but need to confirm with security.
address internal constant SAURON = address(0xdead);
/// @notice The delay between when a withdrawal transaction is proven and when it may be finalized. /// @notice The delay between when a withdrawal transaction is proven and when it may be finalized.
uint256 internal immutable PROOF_MATURITY_DELAY_SECONDS; uint256 internal immutable PROOF_MATURITY_DELAY_SECONDS;
...@@ -183,14 +179,6 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver { ...@@ -183,14 +179,6 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver {
return superchainConfig.guardian(); return superchainConfig.guardian();
} }
/// @notice Getter function for the address of the sauron role.
/// Public getter is legacy and will be removed in the future. Use `SuperchainConfig.sauron()` instead
/// once it's added.
/// @custom:deprecated
function sauron() public pure returns (address) {
return SAURON;
}
/// @notice Getter for the current paused status. /// @notice Getter for the current paused status.
function paused() public view returns (bool) { function paused() public view returns (bool) {
return superchainConfig.paused(); return superchainConfig.paused();
...@@ -422,7 +410,7 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver { ...@@ -422,7 +410,7 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver {
/// @notice Blacklists a dispute game. Should only be used in the event that a dispute game resolves incorrectly. /// @notice Blacklists a dispute game. Should only be used in the event that a dispute game resolves incorrectly.
/// @param _disputeGame Dispute game to blacklist. /// @param _disputeGame Dispute game to blacklist.
function blacklistDisputeGame(IDisputeGame _disputeGame) external { function blacklistDisputeGame(IDisputeGame _disputeGame) external {
require(msg.sender == SAURON, "OptimismPortal: only sauron can blacklist dispute games"); require(msg.sender == guardian(), "OptimismPortal: only the guardian can blacklist dispute games");
disputeGameBlacklist[_disputeGame] = true; disputeGameBlacklist[_disputeGame] = true;
} }
...@@ -430,7 +418,7 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver { ...@@ -430,7 +418,7 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver {
/// incorrectly verified by the `MerkleTrie` verifier contract. /// incorrectly verified by the `MerkleTrie` verifier contract.
/// @param _withdrawalHash Hash of the withdrawal transaction to delete from the `pendingWithdrawals` mapping. /// @param _withdrawalHash Hash of the withdrawal transaction to delete from the `pendingWithdrawals` mapping.
function deleteProvenWithdrawal(bytes32 _withdrawalHash) external { function deleteProvenWithdrawal(bytes32 _withdrawalHash) external {
require(msg.sender == SAURON, "OptimismPortal: only sauron can delete proven withdrawals"); require(msg.sender == guardian(), "OptimismPortal: only the guardian can delete proven withdrawals");
delete provenWithdrawals[_withdrawalHash]; delete provenWithdrawals[_withdrawalHash];
} }
...@@ -438,7 +426,7 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver { ...@@ -438,7 +426,7 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver {
/// depending on the new game's behavior. /// depending on the new game's behavior.
/// @param _gameType The game type to consult for output proposals. /// @param _gameType The game type to consult for output proposals.
function setRespectedGameType(GameType _gameType) external { function setRespectedGameType(GameType _gameType) external {
require(msg.sender == SAURON, "OptimismPortal: only sauron can set the respected game type"); require(msg.sender == guardian(), "OptimismPortal: only the guardian can set the respected game type");
respectedGameType = _gameType; respectedGameType = _gameType;
} }
......
...@@ -359,16 +359,16 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest { ...@@ -359,16 +359,16 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
assertFalse(optimismPortal2.finalizedWithdrawals(Hashing.hashWithdrawal(_defaultTx))); assertFalse(optimismPortal2.finalizedWithdrawals(Hashing.hashWithdrawal(_defaultTx)));
} }
/// @dev Tests that `deleteProvenWithdrawal` reverts when called by a non-SAURON. /// @dev Tests that `deleteProvenWithdrawal` reverts when called by a non-guardian.
function testFuzz_deleteProvenWithdrawal_onlySauron_reverts(address _act, bytes32 _wdHash) external { function testFuzz_deleteProvenWithdrawal_onlyGuardian_reverts(address _act, bytes32 _wdHash) external {
vm.assume(_act != address(optimismPortal2.sauron())); vm.assume(_act != address(optimismPortal2.guardian()));
vm.expectRevert("OptimismPortal: only sauron can delete proven withdrawals"); vm.expectRevert("OptimismPortal: only the guardian can delete proven withdrawals");
optimismPortal2.deleteProvenWithdrawal(_wdHash); optimismPortal2.deleteProvenWithdrawal(_wdHash);
} }
/// @dev Tests that the SAURON role can delete any proven withdrawal. /// @dev Tests that the guardian role can delete any proven withdrawal.
function test_deleteProvenWithdrawal_sauron_succeeds() external { function test_deleteProvenWithdrawal_guardian_succeeds() external {
vm.expectEmit(true, true, true, true); vm.expectEmit(true, true, true, true);
emit WithdrawalProven(_withdrawalHash, alice, bob); emit WithdrawalProven(_withdrawalHash, alice, bob);
optimismPortal2.proveWithdrawalTransaction({ optimismPortal2.proveWithdrawalTransaction({
...@@ -383,7 +383,7 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest { ...@@ -383,7 +383,7 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
assertEq(timestamp, block.timestamp); assertEq(timestamp, block.timestamp);
// Delete the proven withdrawal. // Delete the proven withdrawal.
vm.prank(optimismPortal2.sauron()); vm.prank(optimismPortal2.guardian());
optimismPortal2.deleteProvenWithdrawal(_withdrawalHash); optimismPortal2.deleteProvenWithdrawal(_withdrawalHash);
// Ensure the withdrawal has been deleted // Ensure the withdrawal has been deleted
...@@ -391,34 +391,34 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest { ...@@ -391,34 +391,34 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
assertEq(timestamp, 0); assertEq(timestamp, 0);
} }
/// @dev Tests that `deleteProvenWithdrawal` reverts when called by a non-SAURON. /// @dev Tests that `deleteProvenWithdrawal` reverts when called by a non-guardian.
function testFuzz_blacklist_onlySauron_reverts(address _act) external { function testFuzz_blacklist_onlyGuardian_reverts(address _act) external {
vm.assume(_act != address(optimismPortal2.sauron())); vm.assume(_act != address(optimismPortal2.guardian()));
vm.expectRevert("OptimismPortal: only sauron can blacklist dispute games"); vm.expectRevert("OptimismPortal: only the guardian can blacklist dispute games");
optimismPortal2.blacklistDisputeGame(IDisputeGame(address(0xdead))); optimismPortal2.blacklistDisputeGame(IDisputeGame(address(0xdead)));
} }
/// @dev Tests that the SAURON role can blacklist any dispute game. /// @dev Tests that the guardian role can blacklist any dispute game.
function testFuzz_blacklist_sauron_succeeds(address _addr) external { function testFuzz_blacklist_guardian_succeeds(address _addr) external {
vm.prank(optimismPortal2.sauron()); vm.prank(optimismPortal2.guardian());
optimismPortal2.blacklistDisputeGame(IDisputeGame(_addr)); optimismPortal2.blacklistDisputeGame(IDisputeGame(_addr));
assertTrue(optimismPortal2.disputeGameBlacklist(IDisputeGame(_addr))); assertTrue(optimismPortal2.disputeGameBlacklist(IDisputeGame(_addr)));
} }
/// @dev Tests that `setRespectedGameType` reverts when called by a non-SAURON. /// @dev Tests that `setRespectedGameType` reverts when called by a non-guardian.
function testFuzz_setRespectedGameType_onlySauron_reverts(address _act, GameType _ty) external { function testFuzz_setRespectedGameType_onlyGuardian_reverts(address _act, GameType _ty) external {
vm.assume(_act != address(optimismPortal2.sauron())); vm.assume(_act != address(optimismPortal2.guardian()));
vm.prank(_act); vm.prank(_act);
vm.expectRevert("OptimismPortal: only sauron can set the respected game type"); vm.expectRevert("OptimismPortal: only the guardian can set the respected game type");
optimismPortal2.setRespectedGameType(_ty); optimismPortal2.setRespectedGameType(_ty);
} }
/// @dev Tests that the SAURON role can set the respected game type to anything they want. /// @dev Tests that the guardian role can set the respected game type to anything they want.
function testFuzz_setRespectedGameType_sauron_succeeds(GameType _ty) external { function testFuzz_setRespectedGameType_guardian_succeeds(GameType _ty) external {
vm.prank(optimismPortal2.sauron()); vm.prank(optimismPortal2.guardian());
optimismPortal2.setRespectedGameType(_ty); optimismPortal2.setRespectedGameType(_ty);
assertEq(optimismPortal2.respectedGameType().raw(), _ty.raw()); assertEq(optimismPortal2.respectedGameType().raw(), _ty.raw());
...@@ -528,7 +528,7 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest { ...@@ -528,7 +528,7 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
}); });
// Blacklist the dispute dispute game. // Blacklist the dispute dispute game.
vm.prank(optimismPortal2.sauron()); vm.prank(optimismPortal2.guardian());
optimismPortal2.blacklistDisputeGame(IDisputeGame(address(game))); optimismPortal2.blacklistDisputeGame(IDisputeGame(address(game)));
vm.expectEmit(true, true, true, true); vm.expectEmit(true, true, true, true);
...@@ -579,7 +579,7 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest { ...@@ -579,7 +579,7 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
}); });
// Update the respected game type to 0xbeef. // Update the respected game type to 0xbeef.
vm.prank(optimismPortal2.sauron()); vm.prank(optimismPortal2.guardian());
optimismPortal2.setRespectedGameType(GameType.wrap(0xbeef)); optimismPortal2.setRespectedGameType(GameType.wrap(0xbeef));
// Create a new game and mock the game type as 0xbeef in the factory. // Create a new game and mock the game type as 0xbeef in the factory.
...@@ -964,7 +964,7 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest { ...@@ -964,7 +964,7 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
game.resolveClaim(0); game.resolveClaim(0);
game.resolve(); game.resolve();
vm.prank(optimismPortal2.sauron()); vm.prank(optimismPortal2.guardian());
optimismPortal2.blacklistDisputeGame(IDisputeGame(address(game))); optimismPortal2.blacklistDisputeGame(IDisputeGame(address(game)));
vm.warp(block.timestamp + optimismPortal2.proofMaturityDelaySeconds() + 1); vm.warp(block.timestamp + optimismPortal2.proofMaturityDelaySeconds() + 1);
...@@ -1022,7 +1022,7 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest { ...@@ -1022,7 +1022,7 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
game.resolve(); game.resolve();
// Change the respected game type in the portal. // Change the respected game type in the portal.
vm.prank(optimismPortal2.sauron()); vm.prank(optimismPortal2.guardian());
optimismPortal2.setRespectedGameType(GameType.wrap(0xFF)); optimismPortal2.setRespectedGameType(GameType.wrap(0xFF));
vm.expectRevert("OptimismPortal: invalid game type"); vm.expectRevert("OptimismPortal: invalid game type");
......
...@@ -32,7 +32,6 @@ contract Specification_Test is CommonTest { ...@@ -32,7 +32,6 @@ contract Specification_Test is CommonTest {
CHALLENGER, CHALLENGER,
SYSTEMCONFIGOWNER, SYSTEMCONFIGOWNER,
GUARDIAN, GUARDIAN,
SAURON,
MESSENGER, MESSENGER,
L1PROXYADMINOWNER, L1PROXYADMINOWNER,
GOVERNANCETOKENOWNER, GOVERNANCETOKENOWNER,
...@@ -236,7 +235,6 @@ contract Specification_Test is CommonTest { ...@@ -236,7 +235,6 @@ 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("sauron()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("initialize(address,address,address)") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("initialize(address,address,address)") });
_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)") });
...@@ -250,9 +248,9 @@ contract Specification_Test is CommonTest { ...@@ -250,9 +248,9 @@ contract Specification_Test is CommonTest {
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("disputeGameFactory()") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("disputeGameFactory()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("disputeGameBlacklist(address)") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("disputeGameBlacklist(address)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("respectedGameType()") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("respectedGameType()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("blacklistDisputeGame(address)"), _auth: Role.SAURON }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("blacklistDisputeGame(address)"), _auth: Role.GUARDIAN });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("deleteProvenWithdrawal(bytes32)"), _auth: Role.SAURON }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("deleteProvenWithdrawal(bytes32)"), _auth: Role.GUARDIAN });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("setRespectedGameType(uint32)"), _auth: Role.SAURON }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("setRespectedGameType(uint32)"), _auth: Role.GUARDIAN });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("checkWithdrawal(bytes32)") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("checkWithdrawal(bytes32)") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("proofMaturityDelaySeconds()") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("proofMaturityDelaySeconds()") });
_addSpec({ _name: "OptimismPortal2", _sel: _getSel("disputeGameFinalityDelaySeconds()") }); _addSpec({ _name: "OptimismPortal2", _sel: _getSel("disputeGameFinalityDelaySeconds()") });
......
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