Skip to content

Commit 6a34be3

Browse files
committed
feat: merge istandardexecutor and imodulemanager
1 parent 236a601 commit 6a34be3

32 files changed

+168
-190
lines changed

src/account/AccountLoupe.sol

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@
22
pragma solidity ^0.8.25;
33

44
import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
5-
65
import {EnumerableMap} from "@openzeppelin/contracts/utils/structs/EnumerableMap.sol";
76
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
87

98
import {HookConfigLib} from "../helpers/HookConfigLib.sol";
9+
1010
import {ExecutionDataView, IAccountLoupe, ValidationDataView} from "../interfaces/IAccountLoupe.sol";
11-
import {HookConfig, IModuleManager, ModuleEntity} from "../interfaces/IModuleManager.sol";
12-
import {IStandardExecutor} from "../interfaces/IStandardExecutor.sol";
11+
import {HookConfig, IModularAccount, ModuleEntity} from "../interfaces/IModularAccount.sol";
1312
import {ExecutionData, ValidationData, getAccountStorage} from "./AccountStorage.sol";
1413

1514
abstract contract AccountLoupe is IAccountLoupe {
@@ -20,10 +19,10 @@ abstract contract AccountLoupe is IAccountLoupe {
2019
/// @inheritdoc IAccountLoupe
2120
function getExecutionData(bytes4 selector) external view override returns (ExecutionDataView memory data) {
2221
if (
23-
selector == IStandardExecutor.execute.selector || selector == IStandardExecutor.executeBatch.selector
22+
selector == IModularAccount.execute.selector || selector == IModularAccount.executeBatch.selector
2423
|| selector == UUPSUpgradeable.upgradeToAndCall.selector
25-
|| selector == IModuleManager.installExecution.selector
26-
|| selector == IModuleManager.uninstallExecution.selector
24+
|| selector == IModularAccount.installExecution.selector
25+
|| selector == IModularAccount.uninstallExecution.selector
2726
) {
2827
data.module = address(this);
2928
data.allowGlobalValidation = true;

src/account/AccountStorage.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ pragma solidity ^0.8.25;
33

44
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
55

6-
import {HookConfig, ModuleEntity} from "../interfaces/IModuleManager.sol";
6+
import {HookConfig, ModuleEntity} from "../interfaces/IModularAccount.sol";
77

88
// bytes = keccak256("ERC6900.UpgradeableModularAccount.Storage")
99
bytes32 constant _ACCOUNT_STORAGE_SLOT = 0x9f09680beaa4e5c9f38841db2460c401499164f368baef687948c315d9073e40;

src/account/ModuleManagerInternals.sol

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
pragma solidity ^0.8.25;
33

44
import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
5-
65
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
76

87
import {MAX_PRE_VALIDATION_HOOKS} from "../helpers/Constants.sol";
@@ -11,8 +10,9 @@ import {KnownSelectors} from "../helpers/KnownSelectors.sol";
1110
import {ModuleEntityLib} from "../helpers/ModuleEntityLib.sol";
1211
import {ValidationConfigLib} from "../helpers/ValidationConfigLib.sol";
1312
import {ExecutionManifest, ManifestExecutionHook} from "../interfaces/IExecutionModule.sol";
13+
import {HookConfig, IModularAccount, ModuleEntity, ValidationConfig} from "../interfaces/IModularAccount.sol";
1414
import {IModule} from "../interfaces/IModule.sol";
15-
import {HookConfig, IModuleManager, ModuleEntity, ValidationConfig} from "../interfaces/IModuleManager.sol";
15+
1616
import {
1717
AccountStorage,
1818
ExecutionData,
@@ -22,7 +22,7 @@ import {
2222
toSetValue
2323
} from "./AccountStorage.sol";
2424

25-
abstract contract ModuleManagerInternals is IModuleManager {
25+
abstract contract ModuleManagerInternals is IModularAccount {
2626
using EnumerableSet for EnumerableSet.Bytes32Set;
2727
using ModuleEntityLib for ModuleEntity;
2828
using ValidationConfigLib for ValidationConfig;

src/account/SemiModularAccount.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {PackedUserOperation} from "@eth-infinitism/account-abstraction/interface
77

88
import {ModuleEntityLib} from "../helpers/ModuleEntityLib.sol";
99

10-
import {ModuleEntity, ValidationConfig} from "../interfaces/IModuleManager.sol";
10+
import {ModuleEntity, ValidationConfig} from "../interfaces/IModularAccount.sol";
1111

1212
import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol";
1313
import {SignatureChecker} from "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol";

src/account/UpgradeableModularAccount.sol

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
pragma solidity ^0.8.25;
33

44
import {BaseAccount} from "@eth-infinitism/account-abstraction/core/BaseAccount.sol";
5-
65
import {IAccountExecute} from "@eth-infinitism/account-abstraction/interfaces/IAccountExecute.sol";
76
import {IEntryPoint} from "@eth-infinitism/account-abstraction/interfaces/IEntryPoint.sol";
87
import {PackedUserOperation} from "@eth-infinitism/account-abstraction/interfaces/PackedUserOperation.sol";
@@ -12,20 +11,15 @@ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeab
1211
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
1312
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
1413

14+
import {DIRECT_CALL_VALIDATION_ENTITYID} from "../helpers/Constants.sol";
1515
import {HookConfig, HookConfigLib} from "../helpers/HookConfigLib.sol";
1616
import {ModuleEntityLib} from "../helpers/ModuleEntityLib.sol";
17-
1817
import {SparseCalldataSegmentLib} from "../helpers/SparseCalldataSegmentLib.sol";
1918
import {ValidationConfigLib} from "../helpers/ValidationConfigLib.sol";
2019
import {_coalescePreValidation, _coalesceValidation} from "../helpers/ValidationResHelpers.sol";
21-
22-
import {DIRECT_CALL_VALIDATION_ENTITYID} from "../helpers/Constants.sol";
23-
2420
import {IExecutionHookModule} from "../interfaces/IExecutionHookModule.sol";
2521
import {ExecutionManifest} from "../interfaces/IExecutionModule.sol";
26-
import {IModuleManager, ModuleEntity, ValidationConfig} from "../interfaces/IModuleManager.sol";
27-
import {Call, IStandardExecutor} from "../interfaces/IStandardExecutor.sol";
28-
22+
import {Call, IModularAccount, ModuleEntity, ValidationConfig} from "../interfaces/IModularAccount.sol";
2923
import {IValidationHookModule} from "../interfaces/IValidationHookModule.sol";
3024
import {IValidationModule} from "../interfaces/IValidationModule.sol";
3125
import {AccountExecutor} from "./AccountExecutor.sol";
@@ -35,13 +29,13 @@ import {AccountStorageInitializable} from "./AccountStorageInitializable.sol";
3529
import {ModuleManagerInternals} from "./ModuleManagerInternals.sol";
3630

3731
contract UpgradeableModularAccount is
32+
IModularAccount,
3833
AccountExecutor,
3934
AccountLoupe,
4035
AccountStorageInitializable,
4136
BaseAccount,
4237
IERC165,
4338
IERC1271,
44-
IStandardExecutor,
4539
IAccountExecute,
4640
ModuleManagerInternals,
4741
UUPSUpgradeable
@@ -152,7 +146,7 @@ contract UpgradeableModularAccount is
152146
_doCachedPostExecHooks(postPermissionHooks);
153147
}
154148

155-
/// @inheritdoc IStandardExecutor
149+
/// @inheritdoc IModularAccount
156150
/// @notice May be validated by a global validation.
157151
function execute(address target, uint256 value, bytes calldata data)
158152
external
@@ -164,7 +158,7 @@ contract UpgradeableModularAccount is
164158
result = _exec(target, value, data);
165159
}
166160

167-
/// @inheritdoc IStandardExecutor
161+
/// @inheritdoc IModularAccount
168162
/// @notice May be validated by a global validation function.
169163
function executeBatch(Call[] calldata calls)
170164
external
@@ -181,7 +175,7 @@ contract UpgradeableModularAccount is
181175
}
182176
}
183177

184-
/// @inheritdoc IStandardExecutor
178+
/// @inheritdoc IModularAccount
185179
function executeWithAuthorization(bytes calldata data, bytes calldata authorization)
186180
external
187181
payable
@@ -214,7 +208,7 @@ contract UpgradeableModularAccount is
214208
return returnData;
215209
}
216210

217-
/// @inheritdoc IModuleManager
211+
/// @inheritdoc IModularAccount
218212
/// @notice May be validated by a global validation.
219213
function installExecution(
220214
address module,
@@ -224,7 +218,7 @@ contract UpgradeableModularAccount is
224218
_installExecution(module, manifest, moduleInstallData);
225219
}
226220

227-
/// @inheritdoc IModuleManager
221+
/// @inheritdoc IModularAccount
228222
/// @notice May be validated by a global validation.
229223
function uninstallExecution(
230224
address module,
@@ -245,7 +239,7 @@ contract UpgradeableModularAccount is
245239
_installValidation(validationConfig, selectors, installData, hooks);
246240
}
247241

248-
/// @inheritdoc IModuleManager
242+
/// @inheritdoc IModularAccount
249243
/// @notice May be validated by a global validation.
250244
function installValidation(
251245
ValidationConfig validationConfig,
@@ -256,7 +250,7 @@ contract UpgradeableModularAccount is
256250
_installValidation(validationConfig, selectors, installData, hooks);
257251
}
258252

259-
/// @inheritdoc IModuleManager
253+
/// @inheritdoc IModularAccount
260254
/// @notice May be validated by a global validation.
261255
function uninstallValidation(
262256
ModuleEntity validationFunction,
@@ -651,15 +645,15 @@ contract UpgradeableModularAccount is
651645

652646
_checkIfValidationAppliesSelector(outerSelector, validationFunction, isGlobal);
653647

654-
if (outerSelector == IStandardExecutor.execute.selector) {
648+
if (outerSelector == IModularAccount.execute.selector) {
655649
(address target,,) = abi.decode(callData[4:], (address, uint256, bytes));
656650

657651
if (target == address(this)) {
658652
// There is no point to call `execute` to recurse exactly once - this is equivalent to just having
659653
// the calldata as a top-level call.
660654
revert SelfCallRecursionDepthExceeded();
661655
}
662-
} else if (outerSelector == IStandardExecutor.executeBatch.selector) {
656+
} else if (outerSelector == IModularAccount.executeBatch.selector) {
663657
// executeBatch may be used to batch account actions together, by targetting the account itself.
664658
// If this is done, we must ensure all of the inner calls are allowed by the provided validation
665659
// function.
@@ -671,8 +665,8 @@ contract UpgradeableModularAccount is
671665
bytes4 nestedSelector = bytes4(calls[i].data);
672666

673667
if (
674-
nestedSelector == IStandardExecutor.execute.selector
675-
|| nestedSelector == IStandardExecutor.executeBatch.selector
668+
nestedSelector == IModularAccount.execute.selector
669+
|| nestedSelector == IModularAccount.executeBatch.selector
676670
) {
677671
// To prevent arbitrarily-deep recursive checking, we limit the depth of self-calls to one
678672
// for the purposes of batching.

src/helpers/HookConfigLib.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: UNLICENSED
22
pragma solidity ^0.8.25;
33

4-
import {HookConfig, ModuleEntity} from "../interfaces/IModuleManager.sol";
4+
import {HookConfig, ModuleEntity} from "../interfaces/IModularAccount.sol";
55

66
// Hook types:
77
// Exec hook: bools for hasPre, hasPost

src/helpers/KnownSelectors.sol

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,10 @@ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeab
88
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
99

1010
import {IAccountLoupe} from "../interfaces/IAccountLoupe.sol";
11-
1211
import {IExecutionHookModule} from "../interfaces/IExecutionHookModule.sol";
1312
import {IExecutionModule} from "../interfaces/IExecutionModule.sol";
13+
import {IModularAccount} from "../interfaces/IModularAccount.sol";
1414
import {IModule} from "../interfaces/IModule.sol";
15-
import {IModuleManager} from "../interfaces/IModuleManager.sol";
16-
import {IStandardExecutor} from "../interfaces/IStandardExecutor.sol";
17-
1815
import {IValidationHookModule} from "../interfaces/IValidationHookModule.sol";
1916
import {IValidationModule} from "../interfaces/IValidationModule.sol";
2017

@@ -25,18 +22,18 @@ library KnownSelectors {
2522
return
2623
// check against IAccount methods
2724
selector == IAccount.validateUserOp.selector
28-
// check against IModuleManager methods
29-
|| selector == IModuleManager.installExecution.selector
30-
|| selector == IModuleManager.uninstallExecution.selector
25+
// check against module manager methods
26+
|| selector == IModularAccount.installExecution.selector
27+
|| selector == IModularAccount.uninstallExecution.selector
3128
// check against IERC165 methods
3229
|| selector == IERC165.supportsInterface.selector
3330
// check against UUPSUpgradeable methods
3431
|| selector == UUPSUpgradeable.proxiableUUID.selector
3532
|| selector == UUPSUpgradeable.upgradeToAndCall.selector
36-
// check against IStandardExecutor methods
37-
|| selector == IStandardExecutor.execute.selector || selector == IStandardExecutor.executeBatch.selector
38-
|| selector == IStandardExecutor.executeWithAuthorization.selector
39-
// check against IAccountLoupe methods
33+
// check against IModularAccount methods
34+
|| selector == IModularAccount.execute.selector || selector == IModularAccount.executeBatch.selector
35+
|| selector == IModularAccount.executeWithAuthorization.selector
36+
// check against account loupe methods
4037
|| selector == IAccountLoupe.getExecutionData.selector
4138
|| selector == IAccountLoupe.getValidationData.selector;
4239
}

src/helpers/ModuleEntityLib.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: GPL-3.0
22
pragma solidity ^0.8.25;
33

4-
import {ModuleEntity} from "../interfaces/IModuleManager.sol";
4+
import {ModuleEntity} from "../interfaces/IModularAccount.sol";
55

66
library ModuleEntityLib {
77
// Magic value for hooks that should always revert.

src/helpers/ValidationConfigLib.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: UNLICENSED
22
pragma solidity ^0.8.25;
33

4-
import {ModuleEntity, ValidationConfig} from "../interfaces/IModuleManager.sol";
4+
import {ModuleEntity, ValidationConfig} from "../interfaces/IModularAccount.sol";
55

66
// Validation config is a packed representation of a validation function and flags for its configuration.
77
// Layout:

src/interfaces/IAccountLoupe.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: CC0-1.0
22
pragma solidity ^0.8.25;
33

4-
import {HookConfig, ModuleEntity} from "../interfaces/IModuleManager.sol";
4+
import {HookConfig, ModuleEntity} from "../interfaces/IModularAccount.sol";
55

66
// Represents data associated with a specifc function selector.
77
struct ExecutionDataView {

0 commit comments

Comments
 (0)