Skip to content

Commit c8faf10

Browse files
committed
dev: impl install and uninstall module
1 parent 664d49c commit c8faf10

1 file changed

Lines changed: 20 additions & 8 deletions

File tree

src/SimpleModular7702Account.sol

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import {MODULE_TYPE_VALIDATOR, MODULE_TYPE_EXECUTOR} from "nexus-1.2/types/Const
1414
import "nexus-1.2/lib/ModeLib.sol";
1515
import "nexus-1.2/base/ExecutionHelper.sol";
1616
import "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

1820
interface 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

Comments
 (0)