diff --git a/specs/protocol/safe-liveness-checking.md b/specs/experimental/security-council-safe.md similarity index 74% rename from specs/protocol/safe-liveness-checking.md rename to specs/experimental/security-council-safe.md index 0167bfb10..b13bcf27e 100644 --- a/specs/protocol/safe-liveness-checking.md +++ b/specs/experimental/security-council-safe.md @@ -1,10 +1,11 @@ -# Safe Liveness Checking +# Security Council Safe **Table of Contents** -- [Liveness checking Mechanism](#liveness-checking-mechanism) +- [Deputy guardian module](#deputy-guardian-module) +- [Liveness checking mechanism](#liveness-checking-mechanism) - [Liveness checking methodology](#liveness-checking-methodology) - [The liveness guard](#the-liveness-guard) - [The liveness module](#the-liveness-module) @@ -23,11 +24,63 @@ -## Liveness checking Mechanism +The Security Council uses a specially extended Safe multisig contract to provide additional security +guarantees on top of those provided by the Safe contract. + +## Deputy guardian module + +The Security Council acts as the Guardian, which is authorized to activate the [Superchain +Pause](../protocol/superchain-configuration.md#pausability) functionality and for +[blacklisting](../experimental/fault-proof/stage-one/bond-incentives.md#authenticated-roles) dispute +game contracts. + +However the Security Council cannot be expected to react quickly in an emergency situation. +Therefore the Deputy Guardian module enables the Security Council to share this +authorization with another account. + +The module has the following minimal interface: + +```solidity +interface DeputyGuardianModule { + /// @dev The address of the Security Council Safe + function safe() external view returns(address); + + /// @dev The address of the account which can pause superchain withdrawals by calling this module + function deputyGuardian() external view returns(address); + + /// @dev Calls the Security Council Safe's `execTransactionFromModule()`, with the arguments + /// necessary to call `pause()` on the `SuperchainConfig` contract. + /// Only the deputy guardian can call this function. + function pause() external; + + /// @dev Calls the Security Council Safe's `execTransactionFromModule()`, with the arguments + /// necessary to call `unpause()` on the `SuperchainConfig` contract. + /// Only the deputy guardian can call this function. + function unpause() external; + + /// @dev Calls the Security Council Safe's `execTransactionFromModule()`, with the arguments + /// with the arguments necessary to call `blacklistDisputeGame()` on the `DisputeGameFactory` contract. + /// Only the deputy guardian can call this function. + /// @param _portal The `OptimismPortal2` contract instance. + /// @param _game The `IDisputeGame` contract instance. + function blacklistDisputeGame(address _portal, address _game) external; + + /// @dev When called, this function will call to the Security Council's `execTransactionFromModule()` + /// with the arguments necessary to call `setRespectedGameType()` on the `OptimismPortal2` contract. + /// Only the deputy guardian can call this function. + /// @param _portal The `OptimismPortal2` contract instance. + /// @param _gameType The `GameType` to set as the respected game type + function setRespectedGameType(address _portal, uint32 _gameType) external; +} +``` + +For simplicity, the `DeputyGuardianModule` module does not have functions for updating the `safe` and +`deputyGuardian` addresses. If necessary these can be modified by swapping out with a new module. + +## Liveness checking mechanism -The Security Council uses a specially extended Safe multisig contract to ensure that -any loss of access to a signer's keys is identified and addressed within a predictable period of -time. +The Security Council's liveness checking mechanism is intended to ensure that any loss of access to +a signer's keys is identified and addressed within a predictable period of time. This mechanism is intended only to be used to remove signers who have lost access to their keys, or are otherwise inactive. It is not intended to be used to remove signers who are acting in bad faith, diff --git a/specs/root.md b/specs/root.md index 1530b078c..6ff9d1f46 100644 --- a/specs/root.md +++ b/specs/root.md @@ -46,6 +46,7 @@ Specifications of new features in active development. - [Cannon VM](./experimental/fault-proof/cannon-fault-proof-vm.md) - [Plasma](./experimental/plasma.md) - [Interoperability](./interop/overview.md) +- [Security Council Safe](./experimental/security-council-safe.md) ## Design Goals