From b104b747f48edc662bb59d893114fb0c5bbdb346 Mon Sep 17 00:00:00 2001 From: doublespending Date: Mon, 29 Apr 2024 19:00:13 +0800 Subject: [PATCH 1/4] Add moduleTypeId check to installModule/uninstallModule. --- src/MSAAdvanced.sol | 4 ++++ src/MSABasic.sol | 5 +++++ src/interfaces/IMSA.sol | 2 ++ test/mocks/MockFallback.sol | 6 ++++-- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/MSAAdvanced.sol b/src/MSAAdvanced.sol index c0d6593..9c908a9 100644 --- a/src/MSAAdvanced.sol +++ b/src/MSAAdvanced.sol @@ -170,6 +170,8 @@ contract MSAAdvanced is IMSA, ExecutionHelper, ModuleManager, HookManager { { (address hook, bytes memory hookData) = _preCheck(); + if (!IModule(module).isModuleType(moduleTypeId)) revert MismatchModuleTypeId(moduleTypeId); + if (moduleTypeId == MODULE_TYPE_VALIDATOR) _installValidator(module, initData); else if (moduleTypeId == MODULE_TYPE_EXECUTOR) _installExecutor(module, initData); else if (moduleTypeId == MODULE_TYPE_FALLBACK) _installFallbackHandler(module, initData); @@ -195,6 +197,8 @@ contract MSAAdvanced is IMSA, ExecutionHelper, ModuleManager, HookManager { { (address hook, bytes memory hookData) = _preCheck(); + if (!IModule(module).isModuleType(moduleTypeId)) revert MismatchModuleTypeId(moduleTypeId); + if (moduleTypeId == MODULE_TYPE_VALIDATOR) { _uninstallValidator(module, deInitData); } else if (moduleTypeId == MODULE_TYPE_EXECUTOR) { diff --git a/src/MSABasic.sol b/src/MSABasic.sol index 5896045..7f495ad 100644 --- a/src/MSABasic.sol +++ b/src/MSABasic.sol @@ -108,6 +108,8 @@ contract MSABasic is IMSA, ExecutionHelper, ModuleManager { payable onlyEntryPointOrSelf { + if (!IModule(module).isModuleType(moduleTypeId)) revert MismatchModuleTypeId(moduleTypeId); + if (moduleTypeId == MODULE_TYPE_VALIDATOR) _installValidator(module, initData); else if (moduleTypeId == MODULE_TYPE_EXECUTOR) _installExecutor(module, initData); else if (moduleTypeId == MODULE_TYPE_FALLBACK) _installFallbackHandler(module, initData); @@ -127,6 +129,9 @@ contract MSABasic is IMSA, ExecutionHelper, ModuleManager { payable onlyEntryPointOrSelf { + + if (!IModule(module).isModuleType(moduleTypeId)) revert MismatchModuleTypeId(moduleTypeId); + if (moduleTypeId == MODULE_TYPE_VALIDATOR) { _uninstallValidator(module, deInitData); } else if (moduleTypeId == MODULE_TYPE_EXECUTOR) { diff --git a/src/interfaces/IMSA.sol b/src/interfaces/IMSA.sol index efc9b75..5766cbd 100644 --- a/src/interfaces/IMSA.sol +++ b/src/interfaces/IMSA.sol @@ -15,6 +15,8 @@ interface IMSA is IERC7579Account, IERC4337Account { error UnsupportedExecType(ExecType execType); // Error thrown when account initialization fails error AccountInitializationFailed(); + // Error thrown when account installs/unistalls module with mismatched input `moduleTypeId` + error MismatchModuleTypeId(uint256 moduleTypeId); /** * @dev Initializes the account. Function might be called directly, or by a Factory diff --git a/test/mocks/MockFallback.sol b/test/mocks/MockFallback.sol index 8ddefa5..b1a2f08 100644 --- a/test/mocks/MockFallback.sol +++ b/test/mocks/MockFallback.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.23; -import { IFallback } from "src/interfaces/IERC7579Module.sol"; +import { IFallback, MODULE_TYPE_FALLBACK } from "src/interfaces/IERC7579Module.sol"; import { IERC7579Account, Execution } from "src/interfaces/IERC7579Account.sol"; import { ExecutionLib } from "src/lib/ExecutionLib.sol"; import { ModeLib } from "src/lib/ModeLib.sol"; @@ -65,7 +65,9 @@ contract MockFallback is IFallback { function onUninstall(bytes calldata data) external override { } - function isModuleType(uint256 typeID) external view override returns (bool) { } + function isModuleType(uint256 typeID) external view override returns (bool) { + return typeID == MODULE_TYPE_FALLBACK; + } function isInitialized(address smartAccount) external view override returns (bool) { } } From ff69ecf7aef09e3706b2799453b897216b01fbc9 Mon Sep 17 00:00:00 2001 From: doublespending Date: Fri, 3 May 2024 04:37:54 +0800 Subject: [PATCH 2/4] Remove useless moduleTypeId checks for `uninstallModule`. --- src/MSAAdvanced.sol | 3 --- src/MSABasic.sol | 5 +---- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/MSAAdvanced.sol b/src/MSAAdvanced.sol index 9ed6733..8e78038 100644 --- a/src/MSAAdvanced.sol +++ b/src/MSAAdvanced.sol @@ -187,9 +187,6 @@ contract MSAAdvanced is IMSA, ExecutionHelper, ModuleManager, HookManager { onlyEntryPointOrSelf withHook { - - if (!IModule(module).isModuleType(moduleTypeId)) revert MismatchModuleTypeId(moduleTypeId); - if (moduleTypeId == MODULE_TYPE_VALIDATOR) { _uninstallValidator(module, deInitData); } else if (moduleTypeId == MODULE_TYPE_EXECUTOR) { diff --git a/src/MSABasic.sol b/src/MSABasic.sol index 7f495ad..148ec30 100644 --- a/src/MSABasic.sol +++ b/src/MSABasic.sol @@ -128,10 +128,7 @@ contract MSABasic is IMSA, ExecutionHelper, ModuleManager { external payable onlyEntryPointOrSelf - { - - if (!IModule(module).isModuleType(moduleTypeId)) revert MismatchModuleTypeId(moduleTypeId); - + { if (moduleTypeId == MODULE_TYPE_VALIDATOR) { _uninstallValidator(module, deInitData); } else if (moduleTypeId == MODULE_TYPE_EXECUTOR) { From 186e7af2c2506d630b4d6bb07d58b7c7ad66f7b5 Mon Sep 17 00:00:00 2001 From: doublespending Date: Fri, 3 May 2024 04:40:36 +0800 Subject: [PATCH 3/4] Clean codes. --- src/MSAAdvanced.sol | 1 - src/MSABasic.sol | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/MSAAdvanced.sol b/src/MSAAdvanced.sol index 8e78038..7970c17 100644 --- a/src/MSAAdvanced.sol +++ b/src/MSAAdvanced.sol @@ -163,7 +163,6 @@ contract MSAAdvanced is IMSA, ExecutionHelper, ModuleManager, HookManager { onlyEntryPointOrSelf withHook { - if (!IModule(module).isModuleType(moduleTypeId)) revert MismatchModuleTypeId(moduleTypeId); if (moduleTypeId == MODULE_TYPE_VALIDATOR) _installValidator(module, initData); diff --git a/src/MSABasic.sol b/src/MSABasic.sol index 148ec30..d3b7409 100644 --- a/src/MSABasic.sol +++ b/src/MSABasic.sol @@ -128,7 +128,7 @@ contract MSABasic is IMSA, ExecutionHelper, ModuleManager { external payable onlyEntryPointOrSelf - { + { if (moduleTypeId == MODULE_TYPE_VALIDATOR) { _uninstallValidator(module, deInitData); } else if (moduleTypeId == MODULE_TYPE_EXECUTOR) { From edf7d5bd13a4a24fd75ebddc2c57fdf00e4121df Mon Sep 17 00:00:00 2001 From: doublespending Date: Fri, 3 May 2024 04:44:25 +0800 Subject: [PATCH 4/4] Clean blank spaces --- src/MSABasic.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MSABasic.sol b/src/MSABasic.sol index d3b7409..367f6bb 100644 --- a/src/MSABasic.sol +++ b/src/MSABasic.sol @@ -128,7 +128,7 @@ contract MSABasic is IMSA, ExecutionHelper, ModuleManager { external payable onlyEntryPointOrSelf - { + { if (moduleTypeId == MODULE_TYPE_VALIDATOR) { _uninstallValidator(module, deInitData); } else if (moduleTypeId == MODULE_TYPE_EXECUTOR) {