diff --git a/script/DeployModule.s.sol b/script/DeployModule.s.sol index 73c4bba..19828cd 100644 --- a/script/DeployModule.s.sol +++ b/script/DeployModule.s.sol @@ -13,18 +13,18 @@ contract DeployModuleScript is Script, RegistryDeployer { function run() public { // Setup module bytecode, deploy params, and data bytes memory bytecode = type(MultiOwnerValidator).creationCode; - bytes memory deployParams = ""; - bytes memory data = ""; + bytes memory resolverContext = ""; + bytes memory metadata = ""; // Get private key for deployment vm.startBroadcast(vm.envUint("PK")); // Deploy module address module = deployModule({ - code: bytecode, - deployParams: deployParams, + initCode: bytecode, + resolverContext: resolverContext, salt: bytes32(0), - data: data + metadata: metadata }); // Stop broadcast and log module address diff --git a/src/MultiOwnerValidator.sol b/src/MultiOwnerValidator.sol index 3aee1e8..012737d 100644 --- a/src/MultiOwnerValidator.sol +++ b/src/MultiOwnerValidator.sol @@ -115,6 +115,20 @@ contract MultiOwnerValidator is ERC7579ValidatorBase { : EIP1271_FAILED; } + function validateSignatureWithData( + bytes32, + bytes calldata, + bytes calldata + ) + external + view + virtual + override + returns (bool validSig) + { + return true; + } + function addOwner(uint256 ownerId, address owner) external { require(owners[ownerId][msg.sender] == address(0), "Owner already exists"); owners[ownerId][msg.sender] = owner; diff --git a/src/SemaphoreMemberValidator.sol b/src/SemaphoreMemberValidator.sol index 3dd18ee..c6b01c9 100644 --- a/src/SemaphoreMemberValidator.sol +++ b/src/SemaphoreMemberValidator.sol @@ -71,7 +71,7 @@ contract SemaphoreMemberValidator is ERC7579ValidatorBase { bytes32 userOpHash ) external view override returns (ValidationData) { - return _packValidationData(0, type(uint48).max, 0); + return _packValidationData(true, type(uint48).max, 0); } function isValidSignatureWithSender( @@ -82,8 +82,21 @@ contract SemaphoreMemberValidator is ERC7579ValidatorBase { return EIP1271_SUCCESS; } + function validateSignatureWithData( + bytes32, + bytes calldata, + bytes calldata + ) + external + view + virtual + override + returns (bool validSig) + { + return true; + } - function addMembers(uint256 user, uint256 gId, address[] calldata members) external { + function addMembers(address user, uint256 gId, uint256[] calldata memberCommitments) external { if (!inUse[msg.sender]) { revert ModuleNotInstalled(msg.sender); } @@ -93,7 +106,7 @@ contract SemaphoreMemberValidator is ERC7579ValidatorBase { revert UserNotAdmin(gId, user); } - semaphore.addMembers(gId, members); + semaphore.addMembers(gId, memberCommitments); } /*////////////////////////////////////////////////////////////////////////// diff --git a/src/ValidatorTemplate.sol b/src/ValidatorTemplate.sol index c1dbb5c..6288a6c 100644 --- a/src/ValidatorTemplate.sol +++ b/src/ValidatorTemplate.sol @@ -88,6 +88,21 @@ contract ValidatorTemplate is ERC7579ValidatorBase { return EIP1271_FAILED; } + function validateSignatureWithData( + bytes32, + bytes calldata, + bytes calldata + ) + external + view + virtual + override + returns (bool validSig) + { + return false; + } + + /*////////////////////////////////////////////////////////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////////*/ diff --git a/test/SemaphoreMemberValidator.t.sol b/test/SemaphoreMemberValidator.t.sol new file mode 100644 index 0000000..d5c22ec --- /dev/null +++ b/test/SemaphoreMemberValidator.t.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import { Test } from "forge-std/Test.sol"; +import { + RhinestoneModuleKit, + ModuleKitHelpers, + ModuleKitUserOp, + AccountInstance, + UserOpData +} from "modulekit/ModuleKit.sol"; +import { MODULE_TYPE_VALIDATOR } from "modulekit/external/ERC7579.sol"; + +import { Semaphore } from "@semaphore-protocol/Semaphore.sol"; +import { SemaphoreVerifier } from "@semaphore-protocol/base/SemaphoreVerifier.sol"; +import { ISemaphoreVerifier } from "@semaphore-protocol/interfaces/ISemaphoreVerifier.sol"; + +import { SemaphoreMemberValidator } from "src/SemaphoreMemberValidator.sol"; + +contract SemaphoreMemberValidatorTest is RhinestoneModuleKit, Test { + using ModuleKitHelpers for *; + using ModuleKitUserOp for *; + + AccountInstance internal smartAcct; + + Semaphore internal semaphore; + SemaphoreVerifier internal semaphoreVerifier; + SemaphoreMemberValidator internal validator; + + Account user1; + Account user2; + Account admin; + + function setUp() public { + init(); + + // Deploy Semaphore + semaphoreVerifier = new SemaphoreVerifier(); + ISemaphoreVerifier isv = ISemaphoreVerifier(address(semaphoreVerifier)); + semaphore = new Semaphore(isv); + + // Create the validator + validator = new SemaphoreMemberValidator(address(semaphore)); + vm.label(address(validator), "SemaphoreMemberValidator"); + + // Create some users + } + + function test() public { + + } +}