Commit 313596d9 authored by Inphi's avatar Inphi Committed by GitHub

ctb: Specify auth roles for L1 contracts (#8659)

* ctb: Specify auth roles for L1 contracts

* add governance and ProxyAdmin to specs

* specs: replace BRIDGE role with MESSENGER

* contracts-bedrock: Add overloads to _addSpec (#8722)

Allows for default values of no pausability and no auth.

---------
Co-authored-by: default avatarMaurelian <maurelian@protonmail.ch>
parent a0032a9d
...@@ -25,6 +25,18 @@ contract Specification_Test is CommonTest { ...@@ -25,6 +25,18 @@ contract Specification_Test is CommonTest {
AbiEntry[] entries; AbiEntry[] entries;
} }
enum Role {
NOAUTH,
PROPOSER,
CHALLENGER,
SYSTEMCONFIGOWNER,
GUARDIAN,
MESSENGER,
L1PROXYADMINOWNER,
GOVERNANCETOKENOWNER,
MINTMANAGEROWNER
}
/// @notice Represents the specification of a function. /// @notice Represents the specification of a function.
/// @custom:field name Contract name /// @custom:field name Contract name
/// @custom:field sel Function selector /// @custom:field sel Function selector
...@@ -33,7 +45,7 @@ contract Specification_Test is CommonTest { ...@@ -33,7 +45,7 @@ contract Specification_Test is CommonTest {
struct Spec { struct Spec {
string name; string name;
bytes4 sel; bytes4 sel;
bool auth; Role auth;
bool pausable; bool pausable;
} }
...@@ -44,392 +56,306 @@ contract Specification_Test is CommonTest { ...@@ -44,392 +56,306 @@ contract Specification_Test is CommonTest {
super.setUp(); super.setUp();
// DelayedVetoable // DelayedVetoable
_addSpec({ _name: "DelayedVetoable", _sel: _getSel("delay()"), _auth: false, _pausable: false }); _addSpec({ _name: "DelayedVetoable", _sel: _getSel("delay()") });
_addSpec({ _name: "DelayedVetoable", _sel: _getSel("initiator()"), _auth: false, _pausable: false }); _addSpec({ _name: "DelayedVetoable", _sel: _getSel("initiator()") });
_addSpec({ _name: "DelayedVetoable", _sel: _getSel("queuedAt(bytes32)"), _auth: false, _pausable: false }); _addSpec({ _name: "DelayedVetoable", _sel: _getSel("queuedAt(bytes32)") });
_addSpec({ _name: "DelayedVetoable", _sel: _getSel("target()"), _auth: false, _pausable: false }); _addSpec({ _name: "DelayedVetoable", _sel: _getSel("target()") });
_addSpec({ _name: "DelayedVetoable", _sel: _getSel("version()"), _auth: false, _pausable: false }); _addSpec({ _name: "DelayedVetoable", _sel: _getSel("version()") });
_addSpec({ _name: "DelayedVetoable", _sel: _getSel("vetoer()"), _auth: false, _pausable: false }); _addSpec({ _name: "DelayedVetoable", _sel: _getSel("vetoer()") });
// L1CrossDomainMessenger // L1CrossDomainMessenger
_addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("MESSAGE_VERSION()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("MESSAGE_VERSION()") });
_addSpec({ _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("MIN_GAS_CALLDATA_OVERHEAD()") });
_name: "L1CrossDomainMessenger", _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR()") });
_sel: _getSel("MIN_GAS_CALLDATA_OVERHEAD()"), _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR()") });
_auth: false, _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("OTHER_MESSENGER()") });
_pausable: false _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("PORTAL()") });
}); _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("RELAY_CALL_OVERHEAD()") });
_addSpec({ _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("RELAY_CONSTANT_OVERHEAD()") });
_name: "L1CrossDomainMessenger", _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("RELAY_GAS_CHECK_BUFFER()") });
_sel: _getSel("MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR()"), _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("RELAY_RESERVED_GAS()") });
_auth: false, _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("baseGas(bytes,uint32)") });
_pausable: false _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("failedMessages(bytes32)") });
}); _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("initialize(address)") });
_addSpec({ _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("messageNonce()") });
_name: "L1CrossDomainMessenger", _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("paused()") });
_sel: _getSel("MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR()"), _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("portal()") });
_auth: false,
_pausable: false
});
_addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("OTHER_MESSENGER()"), _auth: false, _pausable: false });
_addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("PORTAL()"), _auth: false, _pausable: false });
_addSpec({
_name: "L1CrossDomainMessenger",
_sel: _getSel("RELAY_CALL_OVERHEAD()"),
_auth: false,
_pausable: false
});
_addSpec({
_name: "L1CrossDomainMessenger",
_sel: _getSel("RELAY_CONSTANT_OVERHEAD()"),
_auth: false,
_pausable: false
});
_addSpec({
_name: "L1CrossDomainMessenger",
_sel: _getSel("RELAY_GAS_CHECK_BUFFER()"),
_auth: false,
_pausable: false
});
_addSpec({
_name: "L1CrossDomainMessenger",
_sel: _getSel("RELAY_RESERVED_GAS()"),
_auth: false,
_pausable: false
});
_addSpec({
_name: "L1CrossDomainMessenger",
_sel: _getSel("baseGas(bytes,uint32)"),
_auth: false,
_pausable: false
});
_addSpec({
_name: "L1CrossDomainMessenger",
_sel: _getSel("failedMessages(bytes32)"),
_auth: false,
_pausable: false
});
_addSpec({
_name: "L1CrossDomainMessenger",
_sel: _getSel("initialize(address)"),
_auth: false,
_pausable: false
});
_addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("messageNonce()"), _auth: false, _pausable: false });
_addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("paused()"), _auth: false, _pausable: false });
_addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("portal()"), _auth: false, _pausable: false });
_addSpec({ _addSpec({
_name: "L1CrossDomainMessenger", _name: "L1CrossDomainMessenger",
_sel: _getSel("relayMessage(uint256,address,address,uint256,uint256,bytes)"), _sel: _getSel("relayMessage(uint256,address,address,uint256,uint256,bytes)"),
_auth: false,
_pausable: true _pausable: true
}); });
_addSpec({ _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("sendMessage(address,bytes,uint32)") });
_name: "L1CrossDomainMessenger", _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("successfulMessages(bytes32)") });
_sel: _getSel("sendMessage(address,bytes,uint32)"), _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("superchainConfig()") });
_auth: false, _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("version()") });
_pausable: false _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("xDomainMessageSender()") });
});
_addSpec({
_name: "L1CrossDomainMessenger",
_sel: _getSel("successfulMessages(bytes32)"),
_auth: false,
_pausable: false
});
_addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("superchainConfig()"), _auth: false, _pausable: false });
_addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("version()"), _auth: false, _pausable: false });
_addSpec({
_name: "L1CrossDomainMessenger",
_sel: _getSel("xDomainMessageSender()"),
_auth: false,
_pausable: false
});
// L1ERC721Bridge // L1ERC721Bridge
_addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("MESSENGER()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("MESSENGER()") });
_addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("OTHER_BRIDGE()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("OTHER_BRIDGE()") });
_addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("bridgeERC721(address,address,uint256,uint32,bytes)") });
_addSpec({ _addSpec({
_name: "L1ERC721Bridge", _name: "L1ERC721Bridge",
_sel: _getSel("bridgeERC721(address,address,uint256,uint32,bytes)"), _sel: _getSel("bridgeERC721To(address,address,address,uint256,uint32,bytes)")
_auth: false,
_pausable: false
});
_addSpec({
_name: "L1ERC721Bridge",
_sel: _getSel("bridgeERC721To(address,address,address,uint256,uint32,bytes)"),
_auth: false,
_pausable: false
});
_addSpec({
_name: "L1ERC721Bridge",
_sel: _getSel("deposits(address,address,uint256)"),
_auth: false,
_pausable: false
}); });
_addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("deposits(address,address,uint256)") });
_addSpec({ _addSpec({
_name: "L1ERC721Bridge", _name: "L1ERC721Bridge",
_sel: _getSel("finalizeBridgeERC721(address,address,address,address,uint256,bytes)"), _sel: _getSel("finalizeBridgeERC721(address,address,address,address,uint256,bytes)"),
_auth: false,
_pausable: true _pausable: true
}); });
_addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("messenger()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("messenger()") });
_addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("otherBridge()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("otherBridge()") });
_addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("version()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("version()") });
_addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("superchainConfig()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("superchainConfig()") });
_addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("paused()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("paused()") });
_addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("initialize(address)"), _auth: false, _pausable: false }); _addSpec({ _name: "L1ERC721Bridge", _sel: _getSel("initialize(address)") });
// L1StandardBridge // L1StandardBridge
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("MESSENGER()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("MESSENGER()") });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("OTHER_BRIDGE()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("OTHER_BRIDGE()") });
_addSpec({ _addSpec({ _name: "L1StandardBridge", _sel: _getSel("bridgeERC20(address,address,uint256,uint32,bytes)") });
_name: "L1StandardBridge",
_sel: _getSel("bridgeERC20(address,address,uint256,uint32,bytes)"),
_auth: false,
_pausable: false
});
_addSpec(
"L1StandardBridge", _getSel("bridgeERC20To(address,address,address,uint256,uint32,bytes)"), false, false
);
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("bridgeETH(uint32,bytes)"), _auth: false, _pausable: false });
_addSpec({
_name: "L1StandardBridge",
_sel: _getSel("bridgeETHTo(address,uint32,bytes)"),
_auth: false,
_pausable: false
});
_addSpec({ _addSpec({
_name: "L1StandardBridge", _name: "L1StandardBridge",
_sel: _getSel("depositERC20(address,address,uint256,uint32,bytes)"), _sel: _getSel("bridgeERC20To(address,address,address,uint256,uint32,bytes)")
_auth: false,
_pausable: false
}); });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("bridgeETH(uint32,bytes)") });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("bridgeETHTo(address,uint32,bytes)") });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("depositERC20(address,address,uint256,uint32,bytes)") });
_addSpec({ _addSpec({
_name: "L1StandardBridge", _name: "L1StandardBridge",
_sel: _getSel("depositERC20To(address,address,address,uint256,uint32,bytes)"), _sel: _getSel("depositERC20To(address,address,address,uint256,uint32,bytes)")
_auth: false,
_pausable: false
});
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("depositETH(uint32,bytes)"), _auth: false, _pausable: false });
_addSpec({
_name: "L1StandardBridge",
_sel: _getSel("depositETHTo(address,uint32,bytes)"),
_auth: false,
_pausable: false
});
_addSpec({
_name: "L1StandardBridge",
_sel: _getSel("deposits(address,address)"),
_auth: false,
_pausable: false
}); });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("depositETH(uint32,bytes)") });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("depositETHTo(address,uint32,bytes)") });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("deposits(address,address)") });
_addSpec({ _addSpec({
_name: "L1StandardBridge", _name: "L1StandardBridge",
_sel: _getSel("finalizeBridgeERC20(address,address,address,address,uint256,bytes)"), _sel: _getSel("finalizeBridgeERC20(address,address,address,address,uint256,bytes)"),
_auth: true, _auth: Role.MESSENGER,
_pausable: true _pausable: true
}); });
_addSpec({ _addSpec({
_name: "L1StandardBridge", _name: "L1StandardBridge",
_sel: _getSel("finalizeBridgeETH(address,address,uint256,bytes)"), _sel: _getSel("finalizeBridgeETH(address,address,uint256,bytes)"),
_auth: true, _auth: Role.MESSENGER,
_pausable: true _pausable: true
}); });
_addSpec({ _addSpec({
_name: "L1StandardBridge", _name: "L1StandardBridge",
_sel: _getSel("finalizeERC20Withdrawal(address,address,address,address,uint256,bytes)"), _sel: _getSel("finalizeERC20Withdrawal(address,address,address,address,uint256,bytes)"),
_auth: true, _auth: Role.MESSENGER,
_pausable: true _pausable: true
}); });
_addSpec({ _addSpec({
_name: "L1StandardBridge", _name: "L1StandardBridge",
_sel: _getSel("finalizeETHWithdrawal(address,address,uint256,bytes)"), _sel: _getSel("finalizeETHWithdrawal(address,address,uint256,bytes)"),
_auth: true, _auth: Role.MESSENGER,
_pausable: true _pausable: true
}); });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("initialize(address)"), _auth: false, _pausable: false }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("initialize(address)") });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("l2TokenBridge()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("l2TokenBridge()") });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("messenger()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("messenger()") });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("otherBridge()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("otherBridge()") });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("paused()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("paused()") });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("superchainConfig()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("superchainConfig()") });
_addSpec({ _name: "L1StandardBridge", _sel: _getSel("version()"), _auth: false, _pausable: false }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("version()") });
// L2OutputOracle // L2OutputOracle
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("CHALLENGER()"), _auth: false, _pausable: false }); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("CHALLENGER()") });
_addSpec({ _addSpec({ _name: "L2OutputOracle", _sel: _getSel("FINALIZATION_PERIOD_SECONDS()") });
_name: "L2OutputOracle", _addSpec({ _name: "L2OutputOracle", _sel: _getSel("L2_BLOCK_TIME()") });
_sel: _getSel("FINALIZATION_PERIOD_SECONDS()"), _addSpec({ _name: "L2OutputOracle", _sel: _getSel("PROPOSER()") });
_auth: false, _addSpec({ _name: "L2OutputOracle", _sel: _getSel("SUBMISSION_INTERVAL()") });
_pausable: false _addSpec({ _name: "L2OutputOracle", _sel: _getSel("challenger()") });
}); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("computeL2Timestamp(uint256)") });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("L2_BLOCK_TIME()"), _auth: false, _pausable: false }); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("deleteL2Outputs(uint256)"), _auth: Role.CHALLENGER });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("PROPOSER()"), _auth: false, _pausable: false }); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("finalizationPeriodSeconds()") });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("SUBMISSION_INTERVAL()"), _auth: false, _pausable: false }); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("getL2Output(uint256)") });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("challenger()"), _auth: false, _pausable: false }); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("getL2OutputAfter(uint256)") });
_addSpec({ _addSpec({ _name: "L2OutputOracle", _sel: _getSel("getL2OutputIndexAfter(uint256)") });
_name: "L2OutputOracle", _addSpec({ _name: "L2OutputOracle", _sel: _getSel("initialize(uint256,uint256)") });
_sel: _getSel("computeL2Timestamp(uint256)"), _addSpec({ _name: "L2OutputOracle", _sel: _getSel("l2BlockTime()") });
_auth: false, _addSpec({ _name: "L2OutputOracle", _sel: _getSel("latestBlockNumber()") });
_pausable: false _addSpec({ _name: "L2OutputOracle", _sel: _getSel("latestOutputIndex()") });
}); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("nextBlockNumber()") });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("deleteL2Outputs(uint256)"), _auth: true, _pausable: false }); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("nextOutputIndex()") });
_addSpec({
_name: "L2OutputOracle",
_sel: _getSel("finalizationPeriodSeconds()"),
_auth: false,
_pausable: false
});
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("getL2Output(uint256)"), _auth: false, _pausable: false });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("getL2OutputAfter(uint256)"), _auth: false, _pausable: false });
_addSpec({
_name: "L2OutputOracle",
_sel: _getSel("getL2OutputIndexAfter(uint256)"),
_auth: false,
_pausable: false
});
_addSpec({
_name: "L2OutputOracle",
_sel: _getSel("initialize(uint256,uint256)"),
_auth: false,
_pausable: false
});
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("l2BlockTime()"), _auth: false, _pausable: false });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("latestBlockNumber()"), _auth: false, _pausable: false });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("latestOutputIndex()"), _auth: false, _pausable: false });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("nextBlockNumber()"), _auth: false, _pausable: false });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("nextOutputIndex()"), _auth: false, _pausable: false });
_addSpec({ _addSpec({
_name: "L2OutputOracle", _name: "L2OutputOracle",
_sel: _getSel("proposeL2Output(bytes32,uint256,bytes32,uint256)"), _sel: _getSel("proposeL2Output(bytes32,uint256,bytes32,uint256)"),
_auth: true, _auth: Role.PROPOSER
_pausable: false
}); });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("proposer()"), _auth: false, _pausable: false }); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("proposer()") });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("startingBlockNumber()"), _auth: false, _pausable: false }); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("startingBlockNumber()") });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("startingTimestamp()"), _auth: false, _pausable: false }); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("startingTimestamp()") });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("submissionInterval()"), _auth: false, _pausable: false }); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("submissionInterval()") });
_addSpec({ _name: "L2OutputOracle", _sel: _getSel("version()"), _auth: false, _pausable: false }); _addSpec({ _name: "L2OutputOracle", _sel: _getSel("version()") });
// OptimismPortal // OptimismPortal
_addSpec({ _name: "OptimismPortal", _sel: _getSel("GUARDIAN()"), _auth: false, _pausable: false }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("GUARDIAN()") });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("L2_ORACLE()"), _auth: false, _pausable: false }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("L2_ORACLE()") });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("SYSTEM_CONFIG()"), _auth: false, _pausable: false }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("SYSTEM_CONFIG()") });
_addSpec({ _addSpec({ _name: "OptimismPortal", _sel: _getSel("depositTransaction(address,uint256,uint64,bool,bytes)") });
_name: "OptimismPortal", _addSpec({ _name: "OptimismPortal", _sel: _getSel("donateETH()") });
_sel: _getSel("depositTransaction(address,uint256,uint64,bool,bytes)"),
_auth: false,
_pausable: false
});
_addSpec({ _name: "OptimismPortal", _sel: _getSel("donateETH()"), _auth: false, _pausable: false });
_addSpec({ _addSpec({
_name: "OptimismPortal", _name: "OptimismPortal",
_sel: OptimismPortal.finalizeWithdrawalTransaction.selector, _sel: OptimismPortal.finalizeWithdrawalTransaction.selector,
_auth: false,
_pausable: true _pausable: true
}); });
_addSpec({ _addSpec({ _name: "OptimismPortal", _sel: _getSel("finalizedWithdrawals(bytes32)") });
_name: "OptimismPortal", _addSpec({ _name: "OptimismPortal", _sel: _getSel("guardian()") });
_sel: _getSel("finalizedWithdrawals(bytes32)"), _addSpec({ _name: "OptimismPortal", _sel: _getSel("initialize(address)") });
_auth: false, _addSpec({ _name: "OptimismPortal", _sel: _getSel("isOutputFinalized(uint256)") });
_pausable: false _addSpec({ _name: "OptimismPortal", _sel: _getSel("l2Oracle()") });
}); _addSpec({ _name: "OptimismPortal", _sel: _getSel("l2Sender()") });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("guardian()"), _auth: false, _pausable: false }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("minimumGasLimit(uint64)") });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("initialize(address)"), _auth: false, _pausable: false }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("params()") });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("isOutputFinalized(uint256)"), _auth: false, _pausable: false }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("paused()") });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("l2Oracle()"), _auth: false, _pausable: false }); _addSpec({ _name: "OptimismPortal", _sel: OptimismPortal.proveWithdrawalTransaction.selector, _pausable: true });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("l2Sender()"), _auth: false, _pausable: false }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("provenWithdrawals(bytes32)") });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("minimumGasLimit(uint64)"), _auth: false, _pausable: false }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("superchainConfig()") });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("params()"), _auth: false, _pausable: false }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("systemConfig()") });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("paused()"), _auth: false, _pausable: false }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("version()") });
_addSpec({
_name: "OptimismPortal",
_sel: OptimismPortal.proveWithdrawalTransaction.selector,
_auth: false,
_pausable: true
});
_addSpec({ _name: "OptimismPortal", _sel: _getSel("provenWithdrawals(bytes32)"), _auth: false, _pausable: false });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("superchainConfig()"), _auth: false, _pausable: false });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("systemConfig()"), _auth: false, _pausable: false });
_addSpec({ _name: "OptimismPortal", _sel: _getSel("version()"), _auth: false, _pausable: false });
// ProtocolVersions // ProtocolVersions
_addSpec({ _name: "ProtocolVersions", _sel: _getSel("RECOMMENDED_SLOT()"), _auth: false, _pausable: false }); _addSpec({ _name: "ProtocolVersions", _sel: _getSel("RECOMMENDED_SLOT()") });
_addSpec({ _name: "ProtocolVersions", _sel: _getSel("REQUIRED_SLOT()"), _auth: false, _pausable: false }); _addSpec({ _name: "ProtocolVersions", _sel: _getSel("REQUIRED_SLOT()") });
_addSpec({ _name: "ProtocolVersions", _sel: _getSel("VERSION()"), _auth: false, _pausable: false }); _addSpec({ _name: "ProtocolVersions", _sel: _getSel("VERSION()") });
_addSpec({ _addSpec({ _name: "ProtocolVersions", _sel: ProtocolVersions.initialize.selector });
_name: "ProtocolVersions", _addSpec({ _name: "ProtocolVersions", _sel: _getSel("owner()") });
_sel: ProtocolVersions.initialize.selector, _addSpec({ _name: "ProtocolVersions", _sel: ProtocolVersions.recommended.selector });
_auth: false, _addSpec({ _name: "ProtocolVersions", _sel: _getSel("renounceOwnership()"), _auth: Role.SYSTEMCONFIGOWNER });
_pausable: false _addSpec({ _name: "ProtocolVersions", _sel: ProtocolVersions.required.selector });
});
_addSpec({ _name: "ProtocolVersions", _sel: _getSel("owner()"), _auth: false, _pausable: false });
_addSpec({
_name: "ProtocolVersions",
_sel: ProtocolVersions.recommended.selector,
_auth: false,
_pausable: false
});
_addSpec({ _name: "ProtocolVersions", _sel: _getSel("renounceOwnership()"), _auth: true, _pausable: false });
_addSpec({ _name: "ProtocolVersions", _sel: ProtocolVersions.required.selector, _auth: false, _pausable: false });
_addSpec({ _addSpec({
_name: "ProtocolVersions", _name: "ProtocolVersions",
_sel: ProtocolVersions.setRequired.selector, _sel: ProtocolVersions.setRequired.selector,
_auth: true, _auth: Role.SYSTEMCONFIGOWNER
_pausable: false
}); });
_addSpec({ _addSpec({
_name: "ProtocolVersions", _name: "ProtocolVersions",
_sel: ProtocolVersions.setRecommended.selector, _sel: ProtocolVersions.setRecommended.selector,
_auth: true, _auth: Role.SYSTEMCONFIGOWNER
_pausable: false
}); });
_addSpec({ _addSpec({ _name: "ProtocolVersions", _sel: _getSel("transferOwnership(address)") });
_name: "ProtocolVersions", _addSpec({ _name: "ProtocolVersions", _sel: _getSel("version()") });
_sel: _getSel("transferOwnership(address)"),
_auth: false,
_pausable: false
});
_addSpec({ _name: "ProtocolVersions", _sel: _getSel("version()"), _auth: false, _pausable: false });
// ResourceMetering // ResourceMetering
_addSpec({ _name: "ResourceMetering", _sel: _getSel("params()"), _auth: false, _pausable: false }); _addSpec({ _name: "ResourceMetering", _sel: _getSel("params()") });
// SuperchainConfig // SuperchainConfig
_addSpec({ _name: "SuperchainConfig", _sel: _getSel("GUARDIAN_SLOT()"), _auth: false, _pausable: false }); _addSpec({ _name: "SuperchainConfig", _sel: _getSel("GUARDIAN_SLOT()") });
_addSpec({ _name: "SuperchainConfig", _sel: _getSel("PAUSED_SLOT()"), _auth: false, _pausable: false }); _addSpec({ _name: "SuperchainConfig", _sel: _getSel("PAUSED_SLOT()") });
_addSpec({ _name: "SuperchainConfig", _sel: _getSel("guardian()"), _auth: false, _pausable: false }); _addSpec({ _name: "SuperchainConfig", _sel: _getSel("guardian()") });
_addSpec({ _name: "SuperchainConfig", _sel: _getSel("initialize(address,bool)"), _auth: false, _pausable: false }); _addSpec({ _name: "SuperchainConfig", _sel: _getSel("initialize(address,bool)") });
_addSpec({ _name: "SuperchainConfig", _sel: _getSel("pause(string)"), _auth: true, _pausable: false }); _addSpec({ _name: "SuperchainConfig", _sel: _getSel("pause(string)"), _auth: Role.GUARDIAN });
_addSpec({ _name: "SuperchainConfig", _sel: _getSel("paused()"), _auth: false, _pausable: false }); _addSpec({ _name: "SuperchainConfig", _sel: _getSel("paused()") });
_addSpec({ _name: "SuperchainConfig", _sel: _getSel("unpause()"), _auth: true, _pausable: false }); _addSpec({ _name: "SuperchainConfig", _sel: _getSel("unpause()"), _auth: Role.GUARDIAN });
_addSpec({ _name: "SuperchainConfig", _sel: _getSel("version()"), _auth: false, _pausable: false }); _addSpec({ _name: "SuperchainConfig", _sel: _getSel("version()") });
// SystemConfig // SystemConfig
_addSpec({ _name: "SystemConfig", _sel: _getSel("UNSAFE_BLOCK_SIGNER_SLOT()"), _auth: false, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: _getSel("UNSAFE_BLOCK_SIGNER_SLOT()") });
_addSpec({ _name: "SystemConfig", _sel: _getSel("VERSION()"), _auth: false, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: _getSel("VERSION()") });
_addSpec({ _name: "SystemConfig", _sel: _getSel("batcherHash()"), _auth: false, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: _getSel("batcherHash()") });
_addSpec({ _name: "SystemConfig", _sel: _getSel("gasLimit()"), _auth: false, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: _getSel("gasLimit()") });
_addSpec({ _name: "SystemConfig", _sel: SystemConfig.initialize.selector, _auth: false, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: SystemConfig.initialize.selector });
_addSpec({ _name: "SystemConfig", _sel: SystemConfig.minimumGasLimit.selector, _auth: false, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: SystemConfig.minimumGasLimit.selector });
_addSpec({ _name: "SystemConfig", _sel: _getSel("overhead()"), _auth: false, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: _getSel("overhead()") });
_addSpec({ _name: "SystemConfig", _sel: _getSel("owner()"), _auth: false, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: _getSel("owner()") });
_addSpec({ _name: "SystemConfig", _sel: _getSel("renounceOwnership()"), _auth: true, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: _getSel("renounceOwnership()"), _auth: Role.SYSTEMCONFIGOWNER });
_addSpec({ _name: "SystemConfig", _sel: SystemConfig.resourceConfig.selector, _auth: false, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: SystemConfig.resourceConfig.selector });
_addSpec({ _name: "SystemConfig", _sel: _getSel("scalar()"), _auth: false, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: _getSel("scalar()") });
_addSpec({ _name: "SystemConfig", _sel: SystemConfig.setBatcherHash.selector, _auth: true, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: SystemConfig.setBatcherHash.selector, _auth: Role.SYSTEMCONFIGOWNER });
_addSpec({ _name: "SystemConfig", _sel: SystemConfig.setGasConfig.selector, _auth: true, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: SystemConfig.setGasConfig.selector, _auth: Role.SYSTEMCONFIGOWNER });
_addSpec({ _name: "SystemConfig", _sel: SystemConfig.setGasLimit.selector, _auth: true, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: SystemConfig.setGasLimit.selector, _auth: Role.SYSTEMCONFIGOWNER });
_addSpec({ _name: "SystemConfig", _sel: SystemConfig.setResourceConfig.selector, _auth: true, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: SystemConfig.setResourceConfig.selector, _auth: Role.SYSTEMCONFIGOWNER });
_addSpec({ _addSpec({
_name: "SystemConfig", _name: "SystemConfig",
_sel: SystemConfig.setUnsafeBlockSigner.selector, _sel: SystemConfig.setUnsafeBlockSigner.selector,
_auth: true, _auth: Role.SYSTEMCONFIGOWNER
_pausable: false
}); });
_addSpec({ _name: "SystemConfig", _sel: _getSel("transferOwnership(address)"), _auth: true, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: _getSel("transferOwnership(address)"), _auth: Role.SYSTEMCONFIGOWNER });
_addSpec({ _name: "SystemConfig", _sel: SystemConfig.unsafeBlockSigner.selector, _auth: false, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: SystemConfig.unsafeBlockSigner.selector });
_addSpec({ _name: "SystemConfig", _sel: _getSel("version()"), _auth: false, _pausable: false }); _addSpec({ _name: "SystemConfig", _sel: _getSel("version()") });
// ProxyAdmin
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("addressManager()") });
_addSpec({
_name: "ProxyAdmin",
_sel: _getSel("changeProxyAdmin(address,address)"),
_auth: Role.L1PROXYADMINOWNER
});
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("getProxyAdmin(address)") });
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("getProxyImplementation(address)") });
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("implementationName(address)") });
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("isUpgrading()") });
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("owner()") });
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("proxyType(address)") });
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("renounceOwnership()"), _auth: Role.L1PROXYADMINOWNER });
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("setAddress(string,address)"), _auth: Role.L1PROXYADMINOWNER });
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("setAddressManager(address)"), _auth: Role.L1PROXYADMINOWNER });
_addSpec({
_name: "ProxyAdmin",
_sel: _getSel("setImplementationName(address,string)"),
_auth: Role.L1PROXYADMINOWNER
});
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("setProxyType(address,uint8)"), _auth: Role.L1PROXYADMINOWNER });
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("setUpgrading(bool)") });
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("transferOwnership(address)"), _auth: Role.L1PROXYADMINOWNER });
_addSpec({ _name: "ProxyAdmin", _sel: _getSel("upgrade(address,address)") });
_addSpec({
_name: "ProxyAdmin",
_sel: _getSel("upgradeAndCall(address,address,bytes)"),
_auth: Role.L1PROXYADMINOWNER
});
// GovernanceToken
_addSpec({ _name: "GovernanceToken", _sel: _getSel("DOMAIN_SEPARATOR()") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("allowance(address,address)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("approve(address,uint256)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("balanceOf(address)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("burn(uint256)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("burnFrom(address,uint256)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("checkpoints(address,uint32)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("decimals()") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("decreaseAllowance(address,uint256)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("delegate(address)") });
_addSpec({
_name: "GovernanceToken",
_sel: _getSel("delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)")
});
_addSpec({ _name: "GovernanceToken", _sel: _getSel("delegates(address)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("getPastTotalSupply(uint256)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("getPastVotes(address,uint256)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("getVotes(address)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("increaseAllowance(address,uint256)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("mint(address,uint256)"), _auth: Role.GOVERNANCETOKENOWNER });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("name()") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("nonces(address)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("numCheckpoints(address)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("owner()") });
_addSpec({
_name: "GovernanceToken",
_sel: _getSel("permit(address,address,uint256,uint256,uint8,bytes32,bytes32)")
});
_addSpec({ _name: "GovernanceToken", _sel: _getSel("renounceOwnership()") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("symbol()") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("totalSupply()") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("transfer(address,uint256)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("transferFrom(address,address,uint256)") });
_addSpec({ _name: "GovernanceToken", _sel: _getSel("transferOwnership(address)") });
// MintManager
_addSpec({ _name: "MintManager", _sel: _getSel("DENOMINATOR()") });
_addSpec({ _name: "MintManager", _sel: _getSel("MINT_CAP()") });
_addSpec({ _name: "MintManager", _sel: _getSel("MINT_PERIOD()") });
_addSpec({ _name: "MintManager", _sel: _getSel("governanceToken()") });
_addSpec({ _name: "MintManager", _sel: _getSel("mint(address,uint256)"), _auth: Role.MINTMANAGEROWNER });
_addSpec({ _name: "MintManager", _sel: _getSel("mintPermittedAfter()") });
_addSpec({ _name: "MintManager", _sel: _getSel("owner()") });
_addSpec({ _name: "MintManager", _sel: _getSel("renounceOwnership()"), _auth: Role.MINTMANAGEROWNER });
_addSpec({ _name: "MintManager", _sel: _getSel("transferOwnership(address)"), _auth: Role.MINTMANAGEROWNER });
_addSpec({ _name: "MintManager", _sel: _getSel("upgrade(address)"), _auth: Role.MINTMANAGEROWNER });
} }
/// @dev Computes the selector from a function signature. /// @dev Computes the selector from a function signature.
...@@ -438,11 +364,26 @@ contract Specification_Test is CommonTest { ...@@ -438,11 +364,26 @@ contract Specification_Test is CommonTest {
} }
/// @dev Adds a spec for a function. /// @dev Adds a spec for a function.
function _addSpec(string memory _name, bytes4 _sel, bool _auth, bool _pausable) internal { function _addSpec(string memory _name, bytes4 _sel, Role _auth, bool _pausable) internal {
specs[_name][_sel] = Spec({ name: _name, sel: _sel, auth: _auth, pausable: _pausable }); specs[_name][_sel] = Spec({ name: _name, sel: _sel, auth: _auth, pausable: _pausable });
numEntries[_name]++; numEntries[_name]++;
} }
/// @dev Adds a spec for a function with no auth.
function _addSpec(string memory _name, bytes4 _sel, bool _pausable) internal {
_addSpec({ _name: _name, _sel: _sel, _auth: Role.NOAUTH, _pausable: _pausable });
}
/// @dev Adds a spec for a function with no pausability.
function _addSpec(string memory _name, bytes4 _sel, Role _auth) internal {
_addSpec({ _name: _name, _sel: _sel, _auth: _auth, _pausable: false });
}
/// @dev Adds a spec for a function with no auth and no pausability.
function _addSpec(string memory _name, bytes4 _sel) internal {
_addSpec({ _name: _name, _sel: _sel, _auth: Role.NOAUTH, _pausable: false });
}
/// @notice Ensures that there's an auth spec for every L1 contract function. /// @notice Ensures that there's an auth spec for every L1 contract function.
function testContractAuth() public { function testContractAuth() public {
Abi[] memory abis = _getL1ContractFunctionAbis(); Abi[] memory abis = _getL1ContractFunctionAbis();
...@@ -472,7 +413,7 @@ contract Specification_Test is CommonTest { ...@@ -472,7 +413,7 @@ contract Specification_Test is CommonTest {
command[1] = "-c"; command[1] = "-c";
command[2] = string.concat( command[2] = string.concat(
Executables.find, Executables.find,
" src/L1 -type f -exec basename {} \\;", " src/{L1,governance,universal/ProxyAdmin.sol} -type f -exec basename {} \\;",
" | ", " | ",
Executables.sed, Executables.sed,
" 's/\\.[^.]*$//'", " 's/\\.[^.]*$//'",
......
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