Skip to content

Commit 9efa607

Browse files
committed
Move semver to SaferSafes
1 parent 71d8626 commit 9efa607

File tree

8 files changed

+32
-61
lines changed

8 files changed

+32
-61
lines changed

packages/contracts-bedrock/interfaces/safe/ILivenessModule2.sol

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.0;
33

4-
import { ISemver } from "interfaces/universal/ISemver.sol";
5-
64
/// @title ILivenessModule2
75
/// @notice Interface for LivenessModule2, a singleton module for challenge-based ownership transfer
8-
interface ILivenessModule2 is ISemver {
6+
interface ILivenessModule2 {
97
/// @notice Configuration for a Safe's liveness module
108
struct ModuleConfig {
119
uint256 livenessResponsePeriod;

packages/contracts-bedrock/interfaces/safe/ISaferSafes.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ pragma solidity 0.8.15;
33

44
import {GnosisSafe} from "safe-contracts/GnosisSafe.sol";
55
import {Enum} from "safe-contracts/common/Enum.sol";
6+
import {ISemver} from "interfaces/universal/ISemver.sol";
67

7-
interface ISaferSafes {
8+
interface ISaferSafes is ISemver {
89
struct ModuleConfig {
910
uint256 livenessResponsePeriod;
1011
address fallbackOwner;

packages/contracts-bedrock/interfaces/safe/ITimelockGuard.sol

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ interface ITimelockGuard {
8282
bytes memory _signatures
8383
)
8484
external;
85-
function version() external view returns (string memory);
8685
function timelockConfiguration(address _safe) external view returns (uint256 timelockDelay);
8786
function maxCancellationThreshold(address _safe) external view returns (uint256);
8887
function pendingTransactions(address _safe)

packages/contracts-bedrock/snapshots/abi/SaferSafes.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@
574574
"type": "string"
575575
}
576576
],
577-
"stateMutability": "pure",
577+
"stateMutability": "view",
578578
"type": "function"
579579
},
580580
{

packages/contracts-bedrock/snapshots/semver-lock.json

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@
88
"sourceCodeHash": "0x6c9d3e2dee44c234d59ab93b6564536dfd807f1c4a02a82d5393bc53cb15b8b7"
99
},
1010
"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger": {
11-
"initCodeHash": "0x3dc659aafb03bd357f92abfc6794af89ee0ddd5212364551637422bf8d0b00f9",
11+
"initCodeHash": "0xeac9c9fa1a18d7e8b897eb6501e64a079014754cfdc20d5a225909ccafe44185",
1212
"sourceCodeHash": "0xef3d366cd22eac2dfd22a658e003700c679bd9c38758d9c21befa7335bbd82ad"
1313
},
1414
"src/L1/L1ERC721Bridge.sol:L1ERC721Bridge": {
15-
"initCodeHash": "0x6f586bf82f6e89b75c2cc707e16a71ac921a911acf00f1594659f82e5c819fcc",
15+
"initCodeHash": "0x843955ffe5f41d2714a0ea324e396e8df75f1ee7a05b839ae18fc70df883e704",
1616
"sourceCodeHash": "0x4d48a9cf80dd288d1c54c9576a1a8c12c1c5b9f1694246d0ebba60996f786b69"
1717
},
1818
"src/L1/L1StandardBridge.sol:L1StandardBridge": {
19-
"initCodeHash": "0xadd7863f0d14360be0f0c575d07aa304457b190b64a91a8976770fb7c34b28a3",
19+
"initCodeHash": "0x9f015ee23e2ed76c3c855f78ab9b27a5716818530401dd7f51785d2b6a33b928",
2020
"sourceCodeHash": "0xfca613b5d055ffc4c3cbccb0773ddb9030abedc1aa6508c9e2e7727cc0cd617b"
2121
},
2222
"src/L1/OPContractsManager.sol:OPContractsManager": {
2323
"initCodeHash": "0x9f9a3738b05cae6597ea9a5c5747f7dbd3a5328b05a319955054fbd8b1aaa791",
2424
"sourceCodeHash": "0x154c764083f353e2a56337c0dd5cbcd6f2e12c21966cd0580c7a0f96c4e147dd"
2525
},
2626
"src/L1/OPContractsManagerStandardValidator.sol:OPContractsManagerStandardValidator": {
27-
"initCodeHash": "0x57d6a6729d887ead009d518e8f17fa0d26bfc97b8efe1494ab4ef8dbb000d109",
27+
"initCodeHash": "0xf074a37724eb066169ff59e3f49dd10cc186e03f527fd791ec6055c9ca3f110e",
2828
"sourceCodeHash": "0x1d58891954cf782d2fe4f112b0c7fd25be991c2b8873f10d8545c653b517cac9"
2929
},
3030
"src/L1/OptimismPortal2.sol:OptimismPortal2": {
@@ -48,7 +48,7 @@
4848
"sourceCodeHash": "0x006e3560f8b2e17133eb10a116916798ddc4345a7b006f8504dab69e810adb1c"
4949
},
5050
"src/L2/BaseFeeVault.sol:BaseFeeVault": {
51-
"initCodeHash": "0x9b664e3d84ad510091337b4aacaa494b142512e2f6f7fbcdb6210ed62ca9b885",
51+
"initCodeHash": "0xef36f89bd6a5cc8a166ff8a59f09f4d5d28a2865d036917ef7474e8fcd6234c2",
5252
"sourceCodeHash": "0x508610081cade08f935e2a66f31cc193874bc0e2971a65db4a7842f1a428b1d0"
5353
},
5454
"src/L2/CrossL2Inbox.sol:CrossL2Inbox": {
@@ -68,7 +68,7 @@
6868
"sourceCodeHash": "0x6e5349fd781d5f0127ff29ccea4d86a80240550cfa322364183a0f629abcb43e"
6969
},
7070
"src/L2/L1FeeVault.sol:L1FeeVault": {
71-
"initCodeHash": "0x9b664e3d84ad510091337b4aacaa494b142512e2f6f7fbcdb6210ed62ca9b885",
71+
"initCodeHash": "0xef36f89bd6a5cc8a166ff8a59f09f4d5d28a2865d036917ef7474e8fcd6234c2",
7272
"sourceCodeHash": "0xfdf158752a5802c3697d6e8467046f6378680ceaa9e59ab02da0f5dcd575e5e2"
7373
},
7474
"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger": {
@@ -92,11 +92,11 @@
9292
"sourceCodeHash": "0x83396cbd12a0c5c02e09a4d99c4b62ab4e9d9eb762745e63283e2e818a78a39c"
9393
},
9494
"src/L2/L2ToL2CrossDomainMessenger.sol:L2ToL2CrossDomainMessenger": {
95-
"initCodeHash": "0x975fd33a3a386310d54dbb01b56f3a6a8350f55a3b6bd7781e5ccc2166ddf2e6",
95+
"initCodeHash": "0x6f600a1bb7b76ea32a586c565623c9aed7368630a9ffe7003a4e314f2f0d10cc",
9696
"sourceCodeHash": "0xbea4229c5c6988243dbc7cf5a086ddd412fe1f2903b8e20d56699fec8de0c2c9"
9797
},
9898
"src/L2/OperatorFeeVault.sol:OperatorFeeVault": {
99-
"initCodeHash": "0x3d8c0d7736e8767f2f797da1c20c5fe30bd7f48a4cf75f376290481ad7c0f91f",
99+
"initCodeHash": "0x729b8f0630dd1466169d13b0538c420e9158952a8d9a75e9a24500401bd92d70",
100100
"sourceCodeHash": "0x2022fdb4e32769eb9446dab4aed4b8abb5261fd866f381cccfa7869df1a2adff"
101101
},
102102
"src/L2/OptimismMintableERC721.sol:OptimismMintableERC721": {
@@ -112,7 +112,7 @@
112112
"sourceCodeHash": "0xa135241cee15274eb07045674106becf8e830ddc55412ebf5d608c5c3da6313e"
113113
},
114114
"src/L2/OptimismSuperchainERC20Beacon.sol:OptimismSuperchainERC20Beacon": {
115-
"initCodeHash": "0x5d83dcdb91620e45fb32a32ad39ada98c5741e72d4ca668bb1a0933987098e59",
115+
"initCodeHash": "0x76a6e0c942eb2c0b7766135fc25124b0f3dd34190c72957099a49a520896d4c9",
116116
"sourceCodeHash": "0x4582c8b84fbe62e5b754ebf9683ae31217af3567398f7d3da196addaf8de2045"
117117
},
118118
"src/L2/OptimismSuperchainERC20Factory.sol:OptimismSuperchainERC20Factory": {
@@ -128,19 +128,19 @@
128128
"sourceCodeHash": "0x76eb2c7617e9b0b8dcd6b88470797cc946798a9ac067e3f195fff971fcabdbf5"
129129
},
130130
"src/L2/SuperchainETHBridge.sol:SuperchainETHBridge": {
131-
"initCodeHash": "0xa43665ad0f2b4f092ff04b12e38f24aa8d2cb34ae7a06fc037970743547bdf98",
131+
"initCodeHash": "0xaa40f5233006a487b7d9bd4fe315c67d8dfd3f0eb7cc6743d31d91617f47d9e3",
132132
"sourceCodeHash": "0x862b8a2e5dd5cafcda55e35df7713b0d0b7a93d4d6ce29ea9ca53e045bf63cb4"
133133
},
134134
"src/L2/SuperchainTokenBridge.sol:SuperchainTokenBridge": {
135-
"initCodeHash": "0xb0d25dc03b9c84b07b263921c2b717e6caad3f4297fa939207e35978d7d25abe",
135+
"initCodeHash": "0x6e68d77ba635e72b45acda17edede84f707f815f863fef38919fabd79d797c47",
136136
"sourceCodeHash": "0x0ff7c1f0264d784fac5d69b792c6bc9d064d4a09701c1bafa808388685c8c4f1"
137137
},
138138
"src/L2/WETH.sol:WETH": {
139-
"initCodeHash": "0xbc2cd025153720943e51b79822c2dc374d270a78b92cf47d49548c468e218e46",
139+
"initCodeHash": "0x3e76cc196c03e62f39828f6ee139194f98c54c313702fe5b0418f691aa4204b8",
140140
"sourceCodeHash": "0x734a6b2aa6406bc145d848ad6071d3af1d40852aeb8f4b2f6f51beaad476e2d3"
141141
},
142142
"src/cannon/MIPS64.sol:MIPS64": {
143-
"initCodeHash": "0x6a649986370d18e5fddcd89df73e520063fb373f7dba2f731a2b7e79a1c132a5",
143+
"initCodeHash": "0xb1b6312ca26f8a344d00e7710c7d6db5c757b41e8d517ebb0aaadf6954dfa4e9",
144144
"sourceCodeHash": "0x657afae82e6e3627389153736e568bf99498a272ec6d9ecc22ecfd645c56c453"
145145
},
146146
"src/cannon/PreimageOracle.sol:PreimageOracle": {
@@ -164,15 +164,15 @@
164164
"sourceCodeHash": "0x63222e6926c8dd050d1adc0e65039c42382f269c3b0e113751d79e7a5167b7ac"
165165
},
166166
"src/dispute/PermissionedDisputeGame.sol:PermissionedDisputeGame": {
167-
"initCodeHash": "0xefa478f976e55eb53fcccf653b202bc2532781230f20013450ce0845b77d815c",
167+
"initCodeHash": "0x99a037292c2b68c6b56264b3bc814c69b32f97c7e6fd2bce6a9a492f2312ad79",
168168
"sourceCodeHash": "0x335a503a4cc02dd30d88d163393680f3fd89168e0faa4fa4b0ae5da399656f91"
169169
},
170170
"src/dispute/SuperFaultDisputeGame.sol:SuperFaultDisputeGame": {
171171
"initCodeHash": "0xe7591ef9c806c236d78ed4b83e81701732e0fe2237d3d455d26f054aefcc54b6",
172172
"sourceCodeHash": "0x089f457ecaa85379bcdb4b843a2b2db9616d87f957f7964de23f80e7655d3f53"
173173
},
174174
"src/dispute/SuperPermissionedDisputeGame.sol:SuperPermissionedDisputeGame": {
175-
"initCodeHash": "0x615baee73b605785025893fad655f8b7d8d546d77fbeca1f799000513ded3309",
175+
"initCodeHash": "0x3520edada71d9bbea9bc241e7fc5543bb4870412175a1ffff36dde88e33afd3b",
176176
"sourceCodeHash": "0x8fdd69d4bcd33a3d8b49a73ff5b6855f9ad5f7e2b7393e67cd755973b127b1e8"
177177
},
178178
"src/dispute/v2/FaultDisputeGameV2.sol:FaultDisputeGameV2": {
@@ -184,15 +184,15 @@
184184
"sourceCodeHash": "0x53fdae5faf97beed5f23d4f285bed06766161ab15c88e3a388f84808471a73c3"
185185
},
186186
"src/legacy/DeployerWhitelist.sol:DeployerWhitelist": {
187-
"initCodeHash": "0x2e0ef4c341367eb59cc6c25190c64eff441d3fe130189da91d4d126f6bdbc9b5",
187+
"initCodeHash": "0x394647c31b522e78355833b227ed34744de4f5ffd8cce72564d97f546f9aae67",
188188
"sourceCodeHash": "0x99fb495ee1339f399d9e14cc56e4b3b128c67778ad9ca7bad1efbb49eda2ec4c"
189189
},
190190
"src/legacy/L1BlockNumber.sol:L1BlockNumber": {
191191
"initCodeHash": "0x7549dcb63799c5f30b405c6f0c1264f55659e812ccab68bf1b36e8707f4ee198",
192192
"sourceCodeHash": "0xf4b4cae7cc81a93d192ce8c54a7b543327458d53f3aaababacea843825bf3e1c"
193193
},
194194
"src/legacy/LegacyMessagePasser.sol:LegacyMessagePasser": {
195-
"initCodeHash": "0x3a82e248129d19764bb975bb79b48a982f077f33bb508480bf8d2ec1c0c9810d",
195+
"initCodeHash": "0x86b267c47650533bb13670d5f88b06a684432b4127197623f93cd99c103fa54c",
196196
"sourceCodeHash": "0x955bd0c9b47e43219865e4e92abf28d916c96de20cbdf2f94c8ab14d02083759"
197197
},
198198
"src/safe/DeputyPauseModule.sol:DeputyPauseModule": {
@@ -207,20 +207,12 @@
207207
"initCodeHash": "0xa4a06e8778dbb6883ece8f56538ba15bc01b3031bba9a12ad9d187e7c8aaa942",
208208
"sourceCodeHash": "0x950725f8b9ad9bb3b6b5e836f67e18db824a7864bac547ee0eeba88ada3de0e9"
209209
},
210-
"src/safe/LivenessModule2.sol:LivenessModule2": {
211-
"initCodeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
212-
"sourceCodeHash": "0x150763a4230d1eac64325800977d0dd9f8c4be02ed2b03648d1fc27f7d664634"
213-
},
214210
"src/safe/SaferSafes.sol:SaferSafes": {
215-
"initCodeHash": "0xfe351a63c1c4e49b1f3365d79ca04eca5a52c2b5fe40b097b10537e18cb32025",
216-
"sourceCodeHash": "0xc1a8989140d96f702e0df4f65819c02d83b8588d7ad66405237f581628c1af4c"
217-
},
218-
"src/safe/TimelockGuard.sol:TimelockGuard": {
219-
"initCodeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
220-
"sourceCodeHash": "0xcd3aef647b115eadf43c834c753322366dd8e93185c78c2ef93d657d72368eec"
211+
"initCodeHash": "0x22730f6ebe10e0d78b23b3e0f3d58f867f420039981455b09a508755e512c127",
212+
"sourceCodeHash": "0xe3d2fd50724baf6d5e83e2c9d89fcfcbc678d966187bd38e2d9a840716bcafa3"
221213
},
222214
"src/universal/OptimismMintableERC20.sol:OptimismMintableERC20": {
223-
"initCodeHash": "0x3c85eed0d017dca8eda6396aa842ddc12492587b061e8c756a8d32c4610a9658",
215+
"initCodeHash": "0x1da1f55a09797d7babef9cc86f7a383099357cc53d84dcb2306596862f2abf72",
224216
"sourceCodeHash": "0x7023665d461f173417d932b55010b8f6c34f2bbaf56cfe4e1b15862c08cbcaac"
225217
},
226218
"src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory": {

packages/contracts-bedrock/src/safe/LivenessModule2.sol

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ import { GnosisSafe as Safe } from "safe-contracts/GnosisSafe.sol";
66
import { Enum } from "safe-contracts/common/Enum.sol";
77
import { OwnerManager } from "safe-contracts/base/OwnerManager.sol";
88

9-
// Interfaces
10-
import { ISemver } from "interfaces/universal/ISemver.sol";
11-
129
/// @title LivenessModule2
1310
/// @notice This module allows challenge-based ownership transfer to a fallback owner
1411
/// when the Safe becomes unresponsive. The fallback owner can initiate a challenge,
@@ -17,7 +14,7 @@ import { ISemver } from "interfaces/universal/ISemver.sol";
1714
/// @dev This is a singleton contract. To use it:
1815
/// 1. The Safe must first enable this module using ModuleManager.enableModule()
1916
/// 2. The Safe must then configure the module by calling configure() with params
20-
abstract contract LivenessModule2 is ISemver {
17+
abstract contract LivenessModule2 {
2118
/// @notice Configuration for a Safe's liveness module.
2219
/// @custom:field livenessResponsePeriod The duration in seconds that Safe owners have to
2320
/// respond to a challenge.
@@ -97,12 +94,6 @@ abstract contract LivenessModule2 is ISemver {
9794
/// @param fallbackOwner The address that claimed ownership if the Safe is unresponsive.
9895
event ChallengeSucceeded(address indexed safe, address fallbackOwner);
9996

100-
/// @notice Semantic version.
101-
/// @custom:semver 2.0.0
102-
function version() public pure virtual returns (string memory) {
103-
return "2.0.0";
104-
}
105-
10697
/// @notice Returns challenge_start_time + liveness_response_period if challenge exists, or
10798
/// 0 if not.
10899
/// @param _safe The Safe address to query.

packages/contracts-bedrock/src/safe/SaferSafes.sol

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { GnosisSafe as Safe } from "safe-contracts/GnosisSafe.sol";
77
// Safe Extensions
88
import { LivenessModule2 } from "./LivenessModule2.sol";
99
import { TimelockGuard } from "./TimelockGuard.sol";
10+
import { ISemver } from "interfaces/universal/ISemver.sol";
1011

1112
/// @title SaferSafes
1213
/// @notice Combined Safe extensions providing both liveness module and timelock guard functionality
@@ -19,15 +20,13 @@ import { TimelockGuard } from "./TimelockGuard.sol";
1920
/// Either component can be enabled or disabled independently of the other.
2021
/// When installing either component, it should first be enabled, and then configured. If a component's
2122
/// functionality is not desired, then there is no need to enable or configure it.
22-
contract SaferSafes is LivenessModule2, TimelockGuard {
23-
/// @notice Error for when the liveness response period is insufficient.
24-
error SaferSafes_InsufficientLivenessResponsePeriod();
25-
23+
contract SaferSafes is LivenessModule2, TimelockGuard, ISemver {
2624
/// @notice Semantic version.
2725
/// @custom:semver 1.0.0
28-
function version() public pure override(LivenessModule2, TimelockGuard) returns (string memory) {
29-
return "1.0.0";
30-
}
26+
string public constant version = "1.0.0";
27+
28+
/// @notice Error for when the liveness response period is insufficient.
29+
error SaferSafes_InsufficientLivenessResponsePeriod();
3130

3231
/// @notice Internal helper function which can be overriden in a child contract to check if the guard's
3332
/// configuration is valid in the context of other extensions that are enabled on the Safe.

packages/contracts-bedrock/src/safe/TimelockGuard.sol

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ import { Guard as IGuard } from "safe-contracts/base/GuardManager.sol";
1010
import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
1111
import { SemverComp } from "src/libraries/SemverComp.sol";
1212

13-
// Interfaces
14-
import { ISemver } from "interfaces/universal/ISemver.sol";
15-
1613
/// @title TimelockGuard
1714
/// @notice This guard provides timelock functionality for Safe transactions
1815
/// @dev This is a singleton contract, any Safe on the network can use this guard to enforce a timelock delay, and
@@ -67,7 +64,7 @@ import { ISemver } from "interfaces/universal/ISemver.sol";
6764
/// | Quorum+ | challenge + | cancelTransaction |
6865
/// | | changeOwnershipToFallback | |
6966
/// +-------------------------------------------------------------------------------------------------+
70-
abstract contract TimelockGuard is IGuard, ISemver {
67+
abstract contract TimelockGuard is IGuard {
7168
using EnumerableSet for EnumerableSet.Bytes32Set;
7269

7370
/// @notice Allowed states of a transaction
@@ -125,12 +122,6 @@ abstract contract TimelockGuard is IGuard, ISemver {
125122
/// @notice Mapping from Safe address to its timelock guard state.
126123
mapping(Safe => SafeState) internal _safeState;
127124

128-
/// @notice Semantic version.
129-
/// @custom:semver 1.0.0
130-
function version() public pure virtual returns (string memory) {
131-
return "1.0.0";
132-
}
133-
134125
/// @notice Error for when guard is not enabled for the Safe
135126
error TimelockGuard_GuardNotEnabled();
136127

0 commit comments

Comments
 (0)