@@ -14,6 +14,8 @@ import {MODULE_TYPE_VALIDATOR, MODULE_TYPE_EXECUTOR} from "nexus-1.2/types/Const
1414import "nexus-1.2/lib/ModeLib.sol " ;
1515import "nexus-1.2/base/ExecutionHelper.sol " ;
1616import "nexus-1.2/interfaces/base/IModuleManager.sol " ;
17+ import "nexus-1.2/interfaces/modules/IValidator.sol " ;
18+ import "nexus-1.2/interfaces/modules/IExecutor.sol " ;
1719
1820interface ISimpleModular7702Account {
1921 struct MainStorage {
@@ -129,21 +131,35 @@ contract SimpleModular7702Account is
129131 override
130132 onlyEntryPointOrSelf
131133 {
132- // TODO: implement module install
134+ if (module == address (0 )) revert ModuleAddressCanNotBeZero ();
135+
136+ if (moduleTypeId == MODULE_TYPE_VALIDATOR) {
137+ require (_getMainStorage ().validators[module], ModuleAlreadyInstalled (moduleTypeId, module));
138+ require (IValidator (module).isModuleType (MODULE_TYPE_VALIDATOR), MismatchModuleTypeId ());
139+ _getMainStorage ().validators[module] = true ;
140+ IValidator (module).onInstall (initData);
141+ } else if (moduleTypeId == MODULE_TYPE_EXECUTOR) {
142+ require (_getMainStorage ().executors[module], ModuleAlreadyInstalled (moduleTypeId, module));
143+ require (IExecutor (module).isModuleType (MODULE_TYPE_EXECUTOR), MismatchModuleTypeId ());
144+ _getMainStorage ().executors[module] = true ;
145+ IExecutor (module).onInstall (initData);
146+ }
133147 emit ModuleInstalled (moduleTypeId, module);
134148 }
135149
136- function uninstallModule (uint256 moduleTypeId , address module , bytes calldata deInitData )
150+ function uninstallModule (uint256 moduleTypeId , address module , bytes calldata )
137151 external
138152 payable
139153 onlyEntryPointOrSelf
140154 {
141155 require (_isModuleInstalled (moduleTypeId, module), ModuleNotInstalled (moduleTypeId, module));
142156
143157 if (moduleTypeId == MODULE_TYPE_VALIDATOR) {
144- // TODO: implement validator uninstall
158+ require (_getMainStorage ().validators[module], ModuleNotInstalled (moduleTypeId, module));
159+ _getMainStorage ().validators[module] = false ;
145160 } else if (moduleTypeId == MODULE_TYPE_EXECUTOR) {
146- // TODO: implement executor uninstall
161+ require (_getMainStorage ().executors[module], ModuleNotInstalled (moduleTypeId, module));
162+ _getMainStorage ().executors[module] = false ;
147163 }
148164 emit ModuleUninstalled (moduleTypeId, module);
149165 }
@@ -161,10 +177,6 @@ contract SimpleModular7702Account is
161177 return _isModuleInstalled (moduleTypeId, module);
162178 }
163179
164- /**
165- * Make this account callable through ERC-4337 EntryPoint.
166- * The UserOperation should be signed by this account's private key.
167- */
168180 function _validateSignature (PackedUserOperation calldata userOp , bytes32 userOpHash )
169181 internal
170182 virtual
0 commit comments