diff --git a/contracts/Nexus.sol b/contracts/Nexus.sol index ca20b3da..864d7e6b 100644 --- a/contracts/Nexus.sol +++ b/contracts/Nexus.sol @@ -38,6 +38,7 @@ contract Nexus is INexus, BaseAccount, ExecutionHelper, ModuleManager, UUPSUpgra using ModeLib for ExecutionMode; using ExecLib for bytes; using NonceLib for uint256; + using SentinelListLib for SentinelListLib.SentinelList; /// @dev The timelock period for emergency hook uninstallation. uint256 internal constant _EMERGENCY_TIMELOCK = 1 days; @@ -226,7 +227,12 @@ contract Nexus is INexus, BaseAccount, ExecutionHelper, ModuleManager, UUPSUpgra /// @dev Delegates the validation to a validator module specified within the signature data. function isValidSignature(bytes32 hash, bytes calldata signature) external view virtual override returns (bytes4) { // Handle potential ERC7739 support detection request - if (checkERC7739Support(hash, signature)) return SUPPORTS_ERC7739; + if (signature.length == 0) { + // Forces the compiler to optimize for smaller bytecode size. + if (uint256(hash) == (~signature.length / 0xffff) * 0x7739) { + return checkERC7739Support(hash, signature); + } + } // else proceed with normal signature verification // First 20 bytes of data will be validator address and rest of the bytes is complete signature. @@ -333,20 +339,20 @@ contract Nexus is INexus, BaseAccount, ExecutionHelper, ModuleManager, UUPSUpgra /// If no validator supports ERC-7739, this function returns false /// thus the account will proceed with normal signature verification /// and return 0xffffffff as a result. - function checkERC7739Support(bytes32 hash, bytes calldata signature) public view virtual returns (bool) { + function checkERC7739Support(bytes32 hash, bytes calldata signature) public view virtual returns (bytes4) { + bytes4 result; unchecked { - if (signature.length == uint256(0)) { - // Forces the compiler to optimize for smaller bytecode size. - if (uint256(hash) == (~signature.length / 0xffff) * 0x7739) { - SentinelListLib.SentinelList storage validators = _getAccountStorage().validators; - address next = validators.entries[SENTINEL]; - while (next != ZERO_ADDRESS && next != SENTINEL) { - if (IValidator(next).isValidSignatureWithSender(msg.sender, hash, signature) == SUPPORTS_ERC7739) return true; - } + SentinelListLib.SentinelList storage validators = _getAccountStorage().validators; + address next = validators.entries[SENTINEL]; + while (next != ZERO_ADDRESS && next != SENTINEL) { + bytes4 support = IValidator(next).isValidSignatureWithSender(msg.sender, hash, signature); + if (bytes2(support) == bytes2(SUPPORTS_ERC7739) && support > result) { + result = support; } + next = validators.getNext(next); } } - return false; + return result == bytes4(0) ? bytes4(0xffffffff) : result; } /// @dev Ensures that only authorized callers can upgrade the smart contract implementation. diff --git a/contracts/mocks/MockValidator.sol b/contracts/mocks/MockValidator.sol index 2b3b80de..5a216f4f 100644 --- a/contracts/mocks/MockValidator.sol +++ b/contracts/mocks/MockValidator.sol @@ -24,7 +24,6 @@ contract MockValidator is ERC7739Validator { bytes calldata signature ) external view virtual returns (bytes4 sigValidationResult) { // can put additional checks based on sender here - return _erc1271IsValidSignatureWithSender(sender, hash, _erc1271UnwrapSignature(signature)); } diff --git a/contracts/mocks/MockValidator_7739v2.sol b/contracts/mocks/MockValidator_7739v2.sol new file mode 100644 index 00000000..acfc86f5 --- /dev/null +++ b/contracts/mocks/MockValidator_7739v2.sol @@ -0,0 +1,95 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.27; + +import { IModule } from "../interfaces/modules/IModule.sol"; +import { IModuleManager } from "../interfaces/base/IModuleManager.sol"; +import { VALIDATION_SUCCESS, VALIDATION_FAILED, MODULE_TYPE_VALIDATOR, ERC1271_MAGICVALUE, ERC1271_INVALID } from "../types/Constants.sol"; +import { PackedUserOperation } from "account-abstraction/interfaces/PackedUserOperation.sol"; +import { ECDSA } from "solady/utils/ECDSA.sol"; +import { SignatureCheckerLib } from "solady/utils/SignatureCheckerLib.sol"; +import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; +import { ERC7739Validator } from "erc7739Validator/ERC7739Validator.sol"; + +contract MockValidator_7739v2 is ERC7739Validator { + mapping(address => address) public smartAccountOwners; + + function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash) external view returns (uint256 validation) { + address owner = smartAccountOwners[msg.sender]; + return _validateSignatureForOwner(owner, userOpHash, userOp.signature) ? VALIDATION_SUCCESS : VALIDATION_FAILED; + } + + function isValidSignatureWithSender( + address sender, + bytes32 hash, + bytes calldata signature + ) external view virtual returns (bytes4) { + return 0x77390002; + } + + // ISessionValidator interface for smart session + function validateSignatureWithData(bytes32 hash, bytes calldata sig, bytes calldata data) external view returns (bool validSig) { + address owner = address(bytes20(data[0:20])); + return _validateSignatureForOwner(owner, hash, sig); + } + + function _validateSignatureForOwner(address owner, bytes32 hash, bytes calldata signature) internal view returns (bool) { + if (SignatureCheckerLib.isValidSignatureNowCalldata(owner, hash, signature)) { + return true; + } + if (SignatureCheckerLib.isValidSignatureNowCalldata(owner, MessageHashUtils.toEthSignedMessageHash(hash), signature)) { + return true; + } + return false; + } + + /// @dev Returns whether the `hash` and `signature` are valid. + /// Obtains the authorized signer's credentials and calls some + /// module's specific internal function to validate the signature + /// against credentials. + function _erc1271IsValidSignatureNowCalldata(bytes32 hash, bytes calldata signature) internal view override returns (bool) { + // obtain credentials + address owner = smartAccountOwners[msg.sender]; + + // call custom internal function to validate the signature against credentials + return _validateSignatureForOwner(owner, hash, signature); + } + + /// @dev Returns whether the `sender` is considered safe, such + /// that we don't need to use the nested EIP-712 workflow. + /// See: https://mirror.xyz/curiousapple.eth/pFqAdW2LiJ-6S4sg_u1z08k4vK6BCJ33LcyXpnNb8yU + // The canonical `MulticallerWithSigner` at 0x000000000000D9ECebf3C23529de49815Dac1c4c + // is known to include the account in the hash to be signed. + // msg.sender = Smart Account + // sender = 1271 og request sender + function _erc1271CallerIsSafe(address sender) internal view virtual override returns (bool) { + return (sender == 0x000000000000D9ECebf3C23529de49815Dac1c4c || // MulticallerWithSigner + sender == msg.sender); + } + + function onInstall(bytes calldata data) external { + require(IModuleManager(msg.sender).isModuleInstalled(MODULE_TYPE_VALIDATOR, address(this), ""), "Validator is still installed"); + smartAccountOwners[msg.sender] = address(bytes20(data)); + } + + function onUninstall(bytes calldata data) external { + data; + require(!IModuleManager(msg.sender).isModuleInstalled(MODULE_TYPE_VALIDATOR, address(this), ""), "Validator is still installed"); + delete smartAccountOwners[msg.sender]; + } + + function isModuleType(uint256 moduleTypeId) external pure returns (bool) { + return moduleTypeId == MODULE_TYPE_VALIDATOR; + } + + function isOwner(address account, address owner) external view returns (bool) { + return smartAccountOwners[account] == owner; + } + + function isInitialized(address) external pure returns (bool) { + return false; + } + + function getOwner(address account) external view returns (address) { + return smartAccountOwners[account]; + } +} diff --git a/contracts/modules/validators/K1Validator.sol b/contracts/modules/validators/K1Validator.sol index 98b45656..ad0d2afe 100644 --- a/contracts/modules/validators/K1Validator.sol +++ b/contracts/modules/validators/K1Validator.sol @@ -158,23 +158,14 @@ contract K1Validator is IValidator, ERC7739Validator { * @return sigValidationResult the result of the signature validation, which can be: * - EIP1271_SUCCESS if the signature is valid * - EIP1271_FAILED if the signature is invalid + * - 0x7739000X if this is the ERC-7739 support detection request. + * Where X is the version of the ERC-7739 support. */ function isValidSignatureWithSender( address sender, bytes32 hash, bytes calldata signature ) external view virtual override returns (bytes4) { - // sig malleability prevention - // only needed here as 4337 flow has nonce - bytes32 s; - assembly { - // same as `s := mload(add(signature, 0x40))` but for calldata - s := calldataload(add(signature.offset, 0x20)) - } - if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { - return 0xffffffff; - } - return _erc1271IsValidSignatureWithSender(sender, hash, _erc1271UnwrapSignature(signature)); } diff --git a/contracts/types/Constants.sol b/contracts/types/Constants.sol index 6371a154..22e00ba0 100644 --- a/contracts/types/Constants.sol +++ b/contracts/types/Constants.sol @@ -46,4 +46,5 @@ bytes32 constant MODULE_ENABLE_MODE_TYPE_HASH = keccak256(bytes(MODULE_ENABLE_MO bytes1 constant MODE_VALIDATION = 0x00; bytes1 constant MODE_MODULE_ENABLE = 0x01; -bytes4 constant SUPPORTS_ERC7739 = 0x77390001; +bytes4 constant SUPPORTS_ERC7739 = 0x77390000; +bytes4 constant SUPPORTS_ERC7739_V1 = 0x77390001; \ No newline at end of file diff --git a/test/foundry/unit/concrete/erc1271/TestERC1271Account_IsValidSignature.t.sol b/test/foundry/unit/concrete/erc1271/TestERC1271Account_IsValidSignature.t.sol index 44cd83cf..e7142002 100644 --- a/test/foundry/unit/concrete/erc1271/TestERC1271Account_IsValidSignature.t.sol +++ b/test/foundry/unit/concrete/erc1271/TestERC1271Account_IsValidSignature.t.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.27; import "../../../utils/Imports.sol"; import "../../../utils/NexusTest_Base.t.sol"; +import "contracts/mocks/MockValidator_7739v2.sol"; /// @title TestERC1271Account_IsValidSignature /// @notice This contract tests the ERC1271 signature validation functionality. @@ -19,31 +20,45 @@ contract TestERC1271Account_IsValidSignature is NexusTest_Base { uint256 missingAccountFunds; } + K1Validator private validator; + bytes32 internal constant APP_DOMAIN_SEPARATOR = 0xa1a044077d7677adbbfa892ded5390979b33993e0e2a457e3f974bbcda53821b; /// @notice Initializes the testing environment. function setUp() public { init(); + validator = new K1Validator(); + bytes memory callData = + abi.encodeWithSelector(IModuleManager.installModule.selector, MODULE_TYPE_VALIDATOR, address(validator), abi.encodePacked(ALICE_ADDRESS)); + // Create an execution array with the installation call data + Execution[] memory execution = new Execution[](1); + execution[0] = Execution(address(ALICE_ACCOUNT), 0, callData); + + // Build a packed user operation for the installation + PackedUserOperation[] memory userOps = buildPackedUserOperation(ALICE, ALICE_ACCOUNT, EXECTYPE_DEFAULT, execution, address(VALIDATOR_MODULE), 0); + + // Execute the user operation to install the modules + ENTRYPOINT.handleOps(userOps, payable(BOB.addr)); } /// @notice Tests the validation of a personal signature using the mock validator. - function test_isValidSignature_PersonalSign_MockValidator_Success() public { + function test_isValidSignature_PersonalSign_K1Validator_Success() public { TestTemps memory t; t.contents = keccak256("123"); bytes32 hashToSign = toERC1271HashPersonalSign(t.contents, address(ALICE_ACCOUNT)); (t.v, t.r, t.s) = vm.sign(ALICE.privateKey, hashToSign); bytes memory signature = abi.encodePacked(t.r, t.s, t.v); - assertEq(ALICE_ACCOUNT.isValidSignature(t.contents, abi.encodePacked(address(VALIDATOR_MODULE), signature)), bytes4(0x1626ba7e)); + assertEq(ALICE_ACCOUNT.isValidSignature(t.contents, abi.encodePacked(address(validator), signature)), bytes4(0x1626ba7e)); unchecked { uint256 vs = uint256(t.s) | (uint256(t.v - 27) << 255); signature = abi.encodePacked(t.r, vs); - assertEq(ALICE_ACCOUNT.isValidSignature(t.contents, abi.encodePacked(address(VALIDATOR_MODULE), signature)), bytes4(0x1626ba7e)); + assertEq(ALICE_ACCOUNT.isValidSignature(t.contents, abi.encodePacked(address(validator), signature)), bytes4(0xffffffff)); } } /// @notice Tests the validation of an EIP-712 signature using the mock validator. - function test_isValidSignature_EIP712Sign_MockValidator_Success() public { + function test_isValidSignature_EIP712Sign_K1Validator_Success() public { TestTemps memory t; t.contents = keccak256("0x1234"); bytes32 dataToSign = toERC1271Hash(t.contents, address(ALICE_ACCOUNT)); @@ -51,27 +66,27 @@ contract TestERC1271Account_IsValidSignature is NexusTest_Base { bytes memory contentsType = "Contents(bytes32 stuff)"; bytes memory signature = abi.encodePacked(t.r, t.s, t.v, APP_DOMAIN_SEPARATOR, t.contents, contentsType, uint16(contentsType.length)); if (random() % 4 == 0) signature = erc6492Wrap(signature); - bytes4 ret = ALICE_ACCOUNT.isValidSignature(toContentsHash(t.contents), abi.encodePacked(address(VALIDATOR_MODULE), signature)); + bytes4 ret = ALICE_ACCOUNT.isValidSignature(toContentsHash(t.contents), abi.encodePacked(address(validator), signature)); assertEq(ret, bytes4(0x1626ba7e)); unchecked { uint256 vs = uint256(t.s) | (uint256(t.v - 27) << 255); signature = abi.encodePacked(t.r, vs, APP_DOMAIN_SEPARATOR, t.contents, contentsType, uint16(contentsType.length)); assertEq( - ALICE_ACCOUNT.isValidSignature(toContentsHash(t.contents), abi.encodePacked(address(VALIDATOR_MODULE), signature)), - bytes4(0x1626ba7e) + ALICE_ACCOUNT.isValidSignature(toContentsHash(t.contents), abi.encodePacked(address(validator), signature)), + bytes4(0xffffffff) ); } } /// @notice Tests the failure of an EIP-712 signature validation due to a wrong signer. - function test_isValidSignature_EIP712Sign_MockValidator_Wrong1271Signer_Fail() public view { + function test_isValidSignature_EIP712Sign_K1Validator_Wrong1271Signer_Fail() public view { TestTemps memory t; t.contents = keccak256("123"); (t.v, t.r, t.s) = vm.sign(BOB.privateKey, toERC1271Hash(t.contents, address(ALICE_ACCOUNT))); bytes memory contentsType = "Contents(bytes32 stuff)"; bytes memory signature = abi.encodePacked(t.r, t.s, t.v, APP_DOMAIN_SEPARATOR, t.contents, contentsType, uint16(contentsType.length)); - bytes4 ret = ALICE_ACCOUNT.isValidSignature(toContentsHash(t.contents), abi.encodePacked(address(VALIDATOR_MODULE), signature)); + bytes4 ret = ALICE_ACCOUNT.isValidSignature(toContentsHash(t.contents), abi.encodePacked(address(validator), signature)); assertEq(ret, bytes4(0xFFFFFFFF)); } @@ -90,7 +105,7 @@ contract TestERC1271Account_IsValidSignature is NexusTest_Base { // Wrap the original signature using the ERC6492 format bytes memory wrappedSignature = erc6492Wrap(signature); - bytes4 ret = ALICE_ACCOUNT.isValidSignature(toContentsHash(t.contents), abi.encodePacked(address(VALIDATOR_MODULE), wrappedSignature)); + bytes4 ret = ALICE_ACCOUNT.isValidSignature(toContentsHash(t.contents), abi.encodePacked(address(validator), wrappedSignature)); assertEq(ret, bytes4(0x1626ba7e)); } @@ -106,18 +121,22 @@ contract TestERC1271Account_IsValidSignature is NexusTest_Base { bytes memory contentsType = "Contents(bytes32 stuff)"; bytes memory signature = abi.encodePacked(t.r, t.s, t.v, APP_DOMAIN_SEPARATOR, t.contents, contentsType, uint16(contentsType.length)); - bytes4 ret = ALICE_ACCOUNT.isValidSignature(toContentsHash(t.contents), abi.encodePacked(address(VALIDATOR_MODULE), signature)); + bytes4 ret = ALICE_ACCOUNT.isValidSignature(toContentsHash(t.contents), abi.encodePacked(address(validator), signature)); assertEq(ret, bytes4(0x1626ba7e)); } /// @notice Tests the ERC7739 support detection request. function test_ERC7739SupportDetectionRequest() public { + MockValidator_7739v2 validator_7739v2 = new MockValidator_7739v2(); + vm.prank(address(ENTRYPOINT)); + ALICE_ACCOUNT.installModule(MODULE_TYPE_VALIDATOR, address(validator_7739v2), abi.encodePacked(ALICE_ADDRESS)); + assertTrue(ALICE_ACCOUNT.isModuleInstalled(MODULE_TYPE_VALIDATOR, address(validator_7739v2), "")); assertEq( ALICE_ACCOUNT.isValidSignature( 0x7739773977397739773977397739773977397739773977397739773977397739, "" ), - SUPPORTS_ERC7739 + bytes4(0x77390002) // SUPPORTS_ERC7739_V2 ); } diff --git a/test/foundry/unit/concrete/modules/TestK1Validator.t.sol b/test/foundry/unit/concrete/modules/TestK1Validator.t.sol index c9e3b44a..5763148d 100644 --- a/test/foundry/unit/concrete/modules/TestK1Validator.t.sol +++ b/test/foundry/unit/concrete/modules/TestK1Validator.t.sol @@ -308,8 +308,8 @@ contract TestK1Validator is NexusTest_Base { // invert signature signedMessage = abi.encodePacked(r, s1, v == 27 ? 28 : v); vm.prank(address(BOB_ACCOUNT)); - result = validator.isValidSignatureWithSender(address(this), originalHash, signedMessage); - assertEq(result, ERC1271_INVALID, "Signature with invalid 's' value should be rejected"); + vm.expectRevert(bytes4(keccak256("InvalidSignature()"))); + validator.isValidSignatureWithSender(address(this), originalHash, signedMessage); } function test_IsValidSignatureWithSender_SafeCaller_Success() public { diff --git a/test/foundry/utils/TestHelper.t.sol b/test/foundry/utils/TestHelper.t.sol index 5419eb08..e6154aa6 100644 --- a/test/foundry/utils/TestHelper.t.sol +++ b/test/foundry/utils/TestHelper.t.sol @@ -23,7 +23,7 @@ import { NexusBootstrap, BootstrapConfig } from "../../../contracts/utils/NexusB import { BiconomyMetaFactory } from "../../../contracts/factory/BiconomyMetaFactory.sol"; import { NexusAccountFactory } from "../../../contracts/factory/NexusAccountFactory.sol"; import { BootstrapLib } from "../../../contracts/lib/BootstrapLib.sol"; -import { MODE_VALIDATION } from "../../../contracts/types/Constants.sol"; +import { MODE_VALIDATION, SUPPORTS_ERC7739_V1 } from "../../../contracts/types/Constants.sol"; import { MockRegistry } from "../../../contracts/mocks/MockRegistry.sol"; import { HelperConfig } from "../../../scripts/foundry/HelperConfig.s.sol"; diff --git a/yarn.lock b/yarn.lock index a8d9917a..767a9fe9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,28 +52,19 @@ integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== "@babel/code-frame@^7.0.0": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: - "@babel/highlight" "^7.24.7" - picocolors "^1.0.0" - -"@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.7" - chalk "^2.4.2" + "@babel/helper-validator-identifier" "^7.25.9" js-tokens "^4.0.0" picocolors "^1.0.0" +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -541,53 +532,53 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/edr-darwin-arm64@0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.2.tgz#52c3da9dcdab72c0447b41faa63264de84c9b6c3" - integrity sha512-o4A9SaPlxJ1MS6u8Ozqq7Y0ri2XO0jASw+qkytQyBYowNFNReoGqVSs7SCwenYCDiN+1il8+M0VAUq7wOovnCQ== +"@nomicfoundation/edr-darwin-arm64@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.4.tgz#6eaa64a6ea5201e4c92b121f2b7fd197b26e450a" + integrity sha512-QNQErISLgssV9+qia8sIjRANqtbW8snSDvjspixT/kSQ5ZSGxxctTg7x72wPSrcu8+EBEveIe5uqENIp5GH8HQ== -"@nomicfoundation/edr-darwin-x64@0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.2.tgz#327deb548f2ae62eb456ba183970b022eb98c509" - integrity sha512-WG8BeG2eR3rFC+2/9V1hoPGW7tmNRUcuztdHUijO1h2flRsf2YWv+kEHO+EEnhGkEbgBUiwOrwlwlSMxhe2cGA== +"@nomicfoundation/edr-darwin-x64@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.4.tgz#d15ca89e9deef7d0a710cf90e79f3cc270a5a999" + integrity sha512-cjVmREiwByyc9+oGfvAh49IAw+oVJHF9WWYRD+Tm/ZlSpnEVWxrGNBak2bd/JSYjn+mZE7gmWS4SMRi4nKaLUg== -"@nomicfoundation/edr-linux-arm64-gnu@0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.2.tgz#83daecf1ced46bb4c70326e9358d0c2ae69b472a" - integrity sha512-wvHaTmOwuPjRIOqBB+paI3RBdNlG8f3e1F2zWj75EdeWwefimPzzFUs05JxOYuPO0JhDQIn2tbYUgdZbBQ+mqg== +"@nomicfoundation/edr-linux-arm64-gnu@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.4.tgz#e73c41ca015dfddb5f4cb6cd3d9b2cbe5cc28989" + integrity sha512-96o9kRIVD6W5VkgKvUOGpWyUGInVQ5BRlME2Fa36YoNsRQMaKtmYJEU0ACosYES6ZTpYC8U5sjMulvPtVoEfOA== -"@nomicfoundation/edr-linux-arm64-musl@0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.2.tgz#b0666da450d68364975562ec5f7c2b6ee718e36b" - integrity sha512-UrOAxnsywUcEngQM2ZxIuucci0VX29hYxX7jcpwZU50HICCjxNsxnuXYPxv+IM+6gbhBY1FYvYJGW4PJcP1Nyw== +"@nomicfoundation/edr-linux-arm64-musl@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.4.tgz#90906f733e4ad26657baeb22d28855d934ab7541" + integrity sha512-+JVEW9e5plHrUfQlSgkEj/UONrIU6rADTEk+Yp9pbe+mzNkJdfJYhs5JYiLQRP4OjxH4QOrXI97bKU6FcEbt5Q== -"@nomicfoundation/edr-linux-x64-gnu@0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.2.tgz#c61ae692ddf906e65078962e6d86daaa04f95d0d" - integrity sha512-gYxlPLi7fkNcmDmCwZWQa5eOfNcTDundE+TWjpyafxLAjodQuKBD4I0p4XbnuocHjoBEeNzLWdE5RShbZEXEJA== +"@nomicfoundation/edr-linux-x64-gnu@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.4.tgz#11b8bd73df145a192e5a08199e5e81995fcde502" + integrity sha512-nzYWW+fO3EZItOeP4CrdMgDXfaGBIBkKg0Y/7ySpUxLqzut40O4Mb0/+quqLAFkacUSWMlFp8nsmypJfOH5zoA== -"@nomicfoundation/edr-linux-x64-musl@0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.2.tgz#a2714ee7a62faf55c7994c7eaddeb32d0622801d" - integrity sha512-ev5hy9wmiHZi1GKQ1l6PJ2+UpsUh+DvK9AwiCZVEdaicuhmTfO6fdL4szgE4An8RU+Ou9DeiI1tZcq6iw++Wuw== +"@nomicfoundation/edr-linux-x64-musl@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.4.tgz#a34b9a2c9e34853207824dc81622668a069ca642" + integrity sha512-QFRoE9qSQ2boRrVeQ1HdzU+XN7NUgwZ1SIy5DQt4d7jCP+5qTNsq8LBNcqhRBOATgO63nsweNUhxX/Suj5r1Sw== -"@nomicfoundation/edr-win32-x64-msvc@0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.2.tgz#5507884a81d57f337363b7fbf9bf4ae93ff69c0c" - integrity sha512-2ZXVVcmdmEeX0Hb3IAurHUjgU3H1GIk9h7Okosdjgl3tl+BaNHxi84Us+DblynO1LRj8nL/ATeVtSfBuW3Z1vw== +"@nomicfoundation/edr-win32-x64-msvc@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.4.tgz#ca035c6f66ae9f88fa3ef123a1f3a2099cce7a5a" + integrity sha512-2yopjelNkkCvIjUgBGhrn153IBPLwnsDeNiq6oA0WkeM8tGmQi4td+PGi9jAriUDAkc59Yoi2q9hYA6efiY7Zw== -"@nomicfoundation/edr@^0.6.1": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.6.2.tgz#6911d9a0b36bc054747dcd1ae894ce447400be31" - integrity sha512-yPUegN3sTWiAkRatCmGRkuvMgD9HSSpivl2ebAqq0aU2xgC7qmIO+YQPxQ3Z46MUoi7MrTf4e6GpbT4S/8x0ew== +"@nomicfoundation/edr@^0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.6.4.tgz#1cd336c46a60f5af774e6cf0f1943f49f63dded6" + integrity sha512-YgrSuT3yo5ZQkbvBGqQ7hG+RDvz3YygSkddg4tb1Z0Y6pLXFzwrcEwWaJCFAVeeZxdxGfCgGMUYgRVneK+WXkw== dependencies: - "@nomicfoundation/edr-darwin-arm64" "0.6.2" - "@nomicfoundation/edr-darwin-x64" "0.6.2" - "@nomicfoundation/edr-linux-arm64-gnu" "0.6.2" - "@nomicfoundation/edr-linux-arm64-musl" "0.6.2" - "@nomicfoundation/edr-linux-x64-gnu" "0.6.2" - "@nomicfoundation/edr-linux-x64-musl" "0.6.2" - "@nomicfoundation/edr-win32-x64-msvc" "0.6.2" + "@nomicfoundation/edr-darwin-arm64" "0.6.4" + "@nomicfoundation/edr-darwin-x64" "0.6.4" + "@nomicfoundation/edr-linux-arm64-gnu" "0.6.4" + "@nomicfoundation/edr-linux-arm64-musl" "0.6.4" + "@nomicfoundation/edr-linux-x64-gnu" "0.6.4" + "@nomicfoundation/edr-linux-x64-musl" "0.6.4" + "@nomicfoundation/edr-win32-x64-msvc" "0.6.4" "@nomicfoundation/ethereumjs-common@4.0.4": version "4.0.4" @@ -748,13 +739,13 @@ integrity sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA== "@openzeppelin/contracts@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.0.2.tgz#b1d03075e49290d06570b2fd42154d76c2a5d210" - integrity sha512-ytPc6eLGcHHnapAZ9S+5qsdomhjo6QBHTDRRBFfTxXIpsicMhVPouPgmUPebZZZGX7vt9USA+Z+0M0dSVtSUEA== + version "5.1.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.1.0.tgz#4e61162f2a2bf414c4e10c45eca98ce5f1aadbd4" + integrity sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA== "@openzeppelin@https://github.com/OpenZeppelin/openzeppelin-contracts": - version "5.0.2" - resolved "https://github.com/OpenZeppelin/openzeppelin-contracts#49cd64565aafa5b8f6863bf60a30ef015861614c" + version "5.1.0" + resolved "https://github.com/OpenZeppelin/openzeppelin-contracts#448efeea6640bbbc09373f03fbc9c88e280147ba" "@pnpm/config.env-replace@^1.1.0": version "1.1.0" @@ -778,9 +769,9 @@ config-chain "^1.1.11" "@prb/math@^4.0.2": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@prb/math/-/math-4.0.3.tgz#08b4cc6f7ea98d6228ba577be4b692bd39e17c40" - integrity sha512-/RSt3VU1k2m3ox6U6kUL1MrktnAHr8vhydXu4eDtqFAms1gm3XnGpoZIPaK1lm2zdJQmKBwJ4EXALPARsuOlaA== + version "4.1.0" + resolved "https://registry.yarnpkg.com/@prb/math/-/math-4.1.0.tgz#cb65ff415d5cb1539b7d1b0bc41ecc55c0c12b5f" + integrity sha512-ef5Xrlh3BeX4xT5/Wi810dpEPq2bYPndRxgFIaKSU1F/Op/s8af03kyom+mfU7gEpvfIZ46xu8W0duiHplbBMg== "@prb/test@^0.6.4": version "0.6.4" @@ -794,7 +785,7 @@ "@rhinestone/checknsignatures@github:rhinestonewtf/checknsignatures": version "0.0.1" - resolved "https://codeload.github.com/rhinestonewtf/checknsignatures/tar.gz/7ff44ef46da1266374e6a98e6cf69d727d7c357d" + resolved "https://codeload.github.com/rhinestonewtf/checknsignatures/tar.gz/ef8e54b1df861681059b60be32ef9576030ea984" dependencies: forge-std "github:foundry-rs/forge-std" solady "github:vectorized/solady" @@ -813,23 +804,10 @@ solady "github:vectorized/solady" solhint "^4.1.1" -"@rhinestone/erc4337-validation@^0.0.1-alpha.5": - version "0.0.1-alpha.5" - resolved "https://registry.yarnpkg.com/@rhinestone/erc4337-validation/-/erc4337-validation-0.0.1-alpha.5.tgz#ddcecdb0c43c68de7f542d0b3b48797cce7ba736" - integrity sha512-yOrYyQBrT0JfHb+rjvx4pqk8uItKxEtn7n8z3k0qbZTzkXaNS9pCUBsTxy0kp6T2SNUrbQ8I4DMSiyGqjdh2ng== - dependencies: - "@openzeppelin/contracts" "5.0.1" - account-abstraction "github:kopy-kat/account-abstraction#develop" - account-abstraction-v0.6 "github:eth-infinitism/account-abstraction#v0.6.0" - ds-test "github:dapphub/ds-test" - forge-std "github:foundry-rs/forge-std" - prettier "^2.8.8" - solady "github:vectorized/solady" - -"@rhinestone/erc4337-validation@^0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@rhinestone/erc4337-validation/-/erc4337-validation-0.0.2.tgz#d80c454674be32186dafa930376d4a05fc02113d" - integrity sha512-IZi34ngoQeRuf7rPEWVBpokVLKpgd8lBZQ/sQ+bstGSlUHpf/jMcnhPIz1aJFCa9Mx7auzrAz8A/rD0GJj5z7A== +"@rhinestone/erc4337-validation@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@rhinestone/erc4337-validation/-/erc4337-validation-0.0.4.tgz#85d29a8f624c66ae5cbf9eea86c3bbaccbce649f" + integrity sha512-9GPvOvmM9j5ZZRCFeujPacUyByRnrGL22/5177hRzXh5mLq/A22EyvVIVNcsWMvNiLcHAV4dkkKpXaljxNOT9A== dependencies: "@openzeppelin/contracts" "5.0.1" account-abstraction "github:kopy-kat/account-abstraction#develop" @@ -841,7 +819,7 @@ "@rhinestone/module-bases@github:rhinestonewtf/module-bases": version "0.0.1" - resolved "https://codeload.github.com/rhinestonewtf/module-bases/tar.gz/2db71722f939ed7d76315fc94c1a85bcb09ce59b" + resolved "https://codeload.github.com/rhinestonewtf/module-bases/tar.gz/92fe10438701c35af92cda56deda1fbccde1c67d" dependencies: "@ERC4337/account-abstraction" "github:kopy-kat/account-abstraction#develop" erc7579 "github:erc7579/erc7579-implementation" @@ -856,22 +834,22 @@ forge-std "github:foundry-rs/forge-std" "@rhinestone/module-template@https://github.com/erc7579/erc7739Validator": - version "0.4.1" - resolved "https://github.com/erc7579/erc7739Validator#d0926bda40b9fe9f7030a0a5dfd4b3eca8e69376" + version "0.1.1" + resolved "https://github.com/erc7579/erc7739Validator#e7308fff3f10cd6b1eb93e9ffd7eb9587b41d9c6" dependencies: "@rhinestone/modulekit" "^0.4.8" enumerablemap "https://github.com/erc7579/enumerablemap" stringutils "github:Arachnid/solidity-stringutils" "@rhinestone/modulekit@^0.4.8": - version "0.4.14" - resolved "https://registry.yarnpkg.com/@rhinestone/modulekit/-/modulekit-0.4.14.tgz#f8bff0b06578a791f49787dadd09cf49620c98d3" - integrity sha512-VVUEAeEQIYe5tVqs0VnepB1QdZYheXlas/FHjkTol0jWmd9mlh1bVPT4yST78EQzt3ixNGEH74wtva17Pt4iDA== + version "0.4.16" + resolved "https://registry.yarnpkg.com/@rhinestone/modulekit/-/modulekit-0.4.16.tgz#a13ebf60522ff1b501a645ccaeb3cac1bcd3d492" + integrity sha512-3yDsgiwg+fft5YMNE/ZWe/ftfqdDnmEQ0F92ynTKx0B0+ikwBDBsj0BwrBADZeh92xKbiEcVEhTooaeteF3X0A== dependencies: "@ERC4337/account-abstraction" "github:kopy-kat/account-abstraction#develop" "@ERC4337/account-abstraction-v0.6" "github:eth-infinitism/account-abstraction#v0.6.0" "@prb/math" "^4.0.2" - "@rhinestone/erc4337-validation" "^0.0.2" + "@rhinestone/erc4337-validation" "^0.0.4" "@rhinestone/module-bases" "github:rhinestonewtf/module-bases#d048ec28c8ea8b4155db3ce4f027bc64cd41f9a7" "@rhinestone/registry" "github:rhinestonewtf/registry#v1.0" "@rhinestone/safe7579" "github:rhinestonewtf/safe7579#v1.0.0" @@ -912,7 +890,7 @@ "@rhinestone/sentinellist@github:rhinestonewtf/sentinellist": version "1.0.1" - resolved "https://codeload.github.com/rhinestonewtf/sentinellist/tar.gz/67e42f0eb3cf355ddba5a017892f9cc28d924875" + resolved "https://codeload.github.com/rhinestonewtf/sentinellist/tar.gz/e722c5cc68c570d535bc3c9f85b3ce90cdc38807" dependencies: forge-std "github:foundry-rs/forge-std" @@ -1146,9 +1124,11 @@ "@types/chai" "*" "@types/chai@*": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.0.0.tgz#7f981e71e69c9b2d422f58f78de1c59179782133" - integrity sha512-+DwhEHAaFPPdJ2ral3kNHFQXnTfscEEFsUxzD+d7nlcLrFK23JtNjH71RGasTcHb88b4vVi4mTyfpf8u2L8bdA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.0.1.tgz#2c3705555cf11f5f59c836a84c44afcfe4e5689d" + integrity sha512-5T8ajsg3M/FOncpLYW7sdOcD6yf4+722sze/tc4KQV0P8Z2rAr3SAuHCIkYmYpt8VbcQlnz8SxlOlPQYefe4cA== + dependencies: + "@types/deep-eql" "*" "@types/chai@^4.3.16": version "4.3.20" @@ -1169,6 +1149,11 @@ dependencies: "@types/ms" "*" +"@types/deep-eql@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" + integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== + "@types/form-data@0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" @@ -1200,9 +1185,9 @@ integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/mocha@>=10.0.6": - version "10.0.8" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.8.tgz#a7eff5816e070c3b4d803f1d3cd780c4e42934a1" - integrity sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw== + version "10.0.9" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.9.tgz#101e9da88d2c02e5ac8952982c23b224524d662a" + integrity sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q== "@types/mocha@^9.0.0": version "9.1.1" @@ -1215,16 +1200,18 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@>=20.12.12": - version "22.7.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.4.tgz#e35d6f48dca3255ce44256ddc05dee1c23353fcc" - integrity sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg== + version "22.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.9.0.tgz#b7f16e5c3384788542c72dc3d561a7ceae2c0365" + integrity sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ== dependencies: - undici-types "~6.19.2" + undici-types "~6.19.8" -"@types/node@18.15.13": - version "18.15.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" - integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" "@types/node@^10.0.3": version "10.17.60" @@ -1232,9 +1219,9 @@ integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== "@types/node@^20.2.5": - version "20.16.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.16.10.tgz#0cc3fdd3daf114a4776f54ba19726a01c907ef71" - integrity sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA== + version "20.17.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.6.tgz#6e4073230c180d3579e8c60141f99efdf5df0081" + integrity sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ== dependencies: undici-types "~6.19.2" @@ -1256,9 +1243,9 @@ integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/qs@^6.2.31", "@types/qs@^6.9.7": - version "6.9.16" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.16.tgz#52bba125a07c0482d26747d5d4947a64daf8f794" - integrity sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A== + version "6.9.17" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.17.tgz#fc560f60946d0aeff2f914eb41679659d3310e1a" + integrity sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ== "@types/secp256k1@^4.0.1": version "4.0.6" @@ -1353,9 +1340,9 @@ acorn-walk@^8.1.1: acorn "^8.11.0" acorn@^8.11.0, acorn@^8.4.1: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== adm-zip@^0.4.16: version "0.4.16" @@ -2155,10 +2142,10 @@ elliptic@6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -elliptic@^6.5.2, elliptic@^6.5.4: - version "6.5.7" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.7.tgz#8ec4da2cb2939926a1b9a73619d768207e647c8b" - integrity sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q== +elliptic@^6.5.2, elliptic@^6.5.7: + version "6.6.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.0.tgz#5919ec723286c1edf28685aa89261d4761afa210" + integrity sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA== dependencies: bn.js "^4.11.9" brorand "^1.1.0" @@ -2197,7 +2184,7 @@ env-paths@^2.2.0: "erc7579@github:erc7579/erc7579-implementation": version "0.3.1" - resolved "https://codeload.github.com/erc7579/erc7579-implementation/tar.gz/b3f8bcb2df3aae3217213ffa8b7a87c1eb42ec56" + resolved "https://codeload.github.com/erc7579/erc7579-implementation/tar.gz/2081c0f9dc31b2e054a91956968180ea3fccf307" dependencies: "@rhinestone/sentinellist" "github:rhinestonewtf/sentinellist" account-abstraction "github:eth-infinitism/account-abstraction#develop" @@ -2207,7 +2194,7 @@ env-paths@^2.2.0: "erc7739-validator-base@https://github.com/erc7579/erc7739Validator": version "0.1.1" - resolved "https://github.com/erc7579/erc7739Validator#dfc03c320672c1851890260cc996f4b8e555fa60" + resolved "https://github.com/erc7579/erc7739Validator#e7308fff3f10cd6b1eb93e9ffd7eb9587b41d9c6" dependencies: "@rhinestone/modulekit" "^0.4.8" enumerablemap "https://github.com/erc7579/enumerablemap" @@ -2429,16 +2416,16 @@ ethers@^5.5.3, ethers@^5.7.0, ethers@^5.7.2, ethers@~5.7.0: "@ethersproject/wordlists" "5.7.0" ethers@^6.12.1: - version "6.13.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.2.tgz#4b67d4b49e69b59893931a032560999e5e4419fe" - integrity sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg== + version "6.13.4" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.4.tgz#bd3e1c3dc1e7dc8ce10f9ffb4ee40967a651b53c" + integrity sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA== dependencies: "@adraffy/ens-normalize" "1.10.1" "@noble/curves" "1.2.0" "@noble/hashes" "1.3.2" - "@types/node" "18.15.13" + "@types/node" "22.7.5" aes-js "4.0.0-beta.5" - tslib "2.4.0" + tslib "2.7.0" ws "8.17.1" ethjs-unit@0.1.6: @@ -2501,9 +2488,9 @@ fast-levenshtein@~2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-uri@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.2.tgz#d78b298cf70fd3b752fd951175a3da6a7b48f024" - integrity sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row== + version "3.0.3" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" + integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== fast-url-parser@^1.1.3: version "1.1.3" @@ -2566,8 +2553,8 @@ follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.6: integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== "forge-std@github:foundry-rs/forge-std": - version "1.9.3" - resolved "https://codeload.github.com/foundry-rs/forge-std/tar.gz/8f24d6b04c92975e0795b5868aa0d783251cdeaa" + version "1.9.4" + resolved "https://codeload.github.com/foundry-rs/forge-std/tar.gz/0e7097750918380d84dd3cfdef595bee74dabb70" "forge-std@github:foundry-rs/forge-std#8a225d81aa8e2e013580564588c79abb65eacc9e": version "1.9.3" @@ -2587,18 +2574,19 @@ form-data-encoder@^2.1.2: integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== form-data@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + version "2.5.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.2.tgz#dc653743d1de2fcc340ceea38079daf6e9069fd2" + integrity sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q== dependencies: asynckit "^0.4.0" combined-stream "^1.0.6" mime-types "^2.1.12" + safe-buffer "^5.2.1" form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + version "4.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -2938,13 +2926,13 @@ hardhat-storage-layout@^0.1.7: console-table-printer "^2.9.0" hardhat@^2.22.4: - version "2.22.12" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.12.tgz#a6d0be011fc009c50c454da367ad28c29f58d446" - integrity sha512-yok65M+LsOeTBHQsjg//QreGCyrsaNmeLVzhTFqlOvZ4ZE5y69N0wRxH1b2BC9dGK8S8OPUJMNiL9X0RAvbm8w== + version "2.22.15" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.15.tgz#319b4948f875968fde3f0d09a7edfe74e16b1365" + integrity sha512-BpTGa9PE/sKAaHi4s/S1e9WGv63DR1m7Lzfd60C8gSEchDPfAJssVRSq0MZ2v2k76ig9m0kHAwVLf5teYwu/Mw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/edr" "^0.6.1" + "@nomicfoundation/edr" "^0.6.4" "@nomicfoundation/ethereumjs-common" "4.0.4" "@nomicfoundation/ethereumjs-tx" "5.0.4" "@nomicfoundation/ethereumjs-util" "9.0.4" @@ -3319,9 +3307,9 @@ json-schema-traverse@^1.0.0: integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stream-stringify@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-3.1.5.tgz#7184383b397a83ac5da33b62371217522e6ac2f6" - integrity sha512-wurRuTiw27mck9MWaUIGAunfwqhPDxnXQVN/+Rzi+IEQUUALU10AZs1nWkSdtjH7PAVuAUcqQjH11S/JHOWeaA== + version "3.1.6" + resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz#ebe32193876fb99d4ec9f612389a8d8e2b5d54d4" + integrity sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog== jsonfile@^4.0.0: version "4.0.0" @@ -3575,9 +3563,9 @@ mnemonist@^0.38.0: obliterator "^2.0.0" mocha@^10.0.0, mocha@^10.2.0: - version "10.7.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.3.tgz#ae32003cabbd52b59aece17846056a68eb4b0752" - integrity sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A== + version "10.8.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" + integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== dependencies: ansi-colors "^4.1.3" browser-stdout "^1.3.1" @@ -3601,14 +3589,14 @@ mocha@^10.0.0, mocha@^10.2.0: yargs-unparser "^2.0.0" "modulekit@github:rhinestonewtf/modulekit": - version "0.4.13" - resolved "https://codeload.github.com/rhinestonewtf/modulekit/tar.gz/ff6bd8a8918a02d9dd76658323e6b50c6be953a5" + version "0.4.16" + resolved "https://codeload.github.com/rhinestonewtf/modulekit/tar.gz/695286d95c14e38e9f0f287c69918d94870eec5a" dependencies: "@ERC4337/account-abstraction" "github:kopy-kat/account-abstraction#develop" "@ERC4337/account-abstraction-v0.6" "github:eth-infinitism/account-abstraction#v0.6.0" "@prb/math" "^4.0.2" - "@rhinestone/erc4337-validation" "^0.0.1-alpha.5" - "@rhinestone/module-bases" "github:rhinestonewtf/module-bases" + "@rhinestone/erc4337-validation" "^0.0.4" + "@rhinestone/module-bases" "github:rhinestonewtf/module-bases#d048ec28c8ea8b4155db3ce4f027bc64cd41f9a7" "@rhinestone/registry" "github:rhinestonewtf/registry#v1.0" "@rhinestone/safe7579" "github:rhinestonewtf/safe7579#v1.0.0" "@rhinestone/sentinellist" "github:rhinestonewtf/sentinellist" @@ -3645,6 +3633,11 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + node-emoji@^1.10.0: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -3862,9 +3855,9 @@ pbkdf2@^3.0.17: sha.js "^2.4.8" picocolors@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" - integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" @@ -4010,9 +4003,9 @@ readable-stream@^3.6.0: util-deprecate "^1.0.1" readdirp@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.1.tgz#b2fe35f8dca63183cd3b86883ecc8f720ea96ae6" - integrity sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== readdirp@~3.6.0: version "3.6.0" @@ -4148,7 +4141,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -4189,12 +4182,12 @@ scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + version "4.0.4" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.4.tgz#58f0bfe1830fe777d9ca1ffc7574962a8189f8ab" + integrity sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw== dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" + elliptic "^6.5.7" + node-addon-api "^5.0.0" node-gyp-build "^4.2.0" semver@^5.5.0: @@ -4214,7 +4207,7 @@ semver@^7.3.4, semver@^7.3.7, semver@^7.5.2, semver@^7.5.4: "sentinellist@github:zeroknots/sentinellist": version "1.0.1" - resolved "https://codeload.github.com/zeroknots/sentinellist/tar.gz/67e42f0eb3cf355ddba5a017892f9cc28d924875" + resolved "https://codeload.github.com/zeroknots/sentinellist/tar.gz/e722c5cc68c570d535bc3c9f85b3ce90cdc38807" dependencies: forge-std "github:foundry-rs/forge-std" @@ -4302,8 +4295,8 @@ slice-ansi@^4.0.0: is-fullwidth-code-point "^3.0.0" "solady@github:vectorized/solady": - version "0.0.246" - resolved "https://codeload.github.com/vectorized/solady/tar.gz/d4173342599d84db83f6b6e6a70c3fd5428eb284" + version "0.0.265" + resolved "https://codeload.github.com/vectorized/solady/tar.gz/1c9927e9eb0c280c44c81c943976fe8995b382ed" "solady@github:vectorized/solady#9deb9ed36a27261a8745db5b7cd7f4cdc3b1cd4e": version "0.0.168" @@ -4692,10 +4685,10 @@ ts-node@>=10.9.2: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== tslib@^1.9.3: version "1.14.1" @@ -4766,9 +4759,9 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@>=5.4.5: - version "5.6.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" - integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== + version "5.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" + integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== typescript@^4.3.5: version "4.9.5" @@ -4790,7 +4783,7 @@ uglify-js@^3.1.4: resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== -undici-types@~6.19.2: +undici-types@~6.19.2, undici-types@~6.19.8: version "6.19.8" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== @@ -5007,9 +5000,9 @@ yocto-queue@^0.1.0: integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== zksync-ethers@^5.0.0: - version "5.9.2" - resolved "https://registry.yarnpkg.com/zksync-ethers/-/zksync-ethers-5.9.2.tgz#1c5f34cb25ac0b040fd1a6118f2ba1c2c3bda090" - integrity sha512-Y2Mx6ovvxO6UdC2dePLguVzvNToOY8iLWeq5ne+jgGSJxAi/f4He/NF6FNsf6x1aWX0o8dy4Df8RcOQXAkj5qw== + version "5.10.0" + resolved "https://registry.yarnpkg.com/zksync-ethers/-/zksync-ethers-5.10.0.tgz#3caf25478539a3fd6e170c13555cec6a1dae32e2" + integrity sha512-OAjTGAHF9wbdkRGkj7XZuF/a1Sk/FVbwH4pmLjAKlR7mJ7sQtQhBhrPU2dCc67xLaNvEESPfwil19ES5wooYFg== dependencies: ethers "~5.7.0"