diff --git a/.env.example b/.env.example index 32450e02..7e16be89 100644 --- a/.env.example +++ b/.env.example @@ -7,7 +7,7 @@ REQUIRED_STAKE_AMOUNT=1 UNSTAKE_DELAY_SEC=86400 ENTRYPOINT= -# MSCA_IMPL= +# MA_IMPL= # OWNER_FACTORY= # OWNER_TOKEN_RECEIVER_FACTORY= diff --git a/.gasestimates.md b/.gasestimates.md index a9ccae3a..23b5acb1 100644 --- a/.gasestimates.md +++ b/.gasestimates.md @@ -4,572 +4,1027 @@ Generated via `bash utils/inspect.sh`. --- `forge test --gas-report --no-match-path "test/invariant/**/*"` -| PRECOMPILES contract | | | | | | -|----------------------|-----------------|------|--------|------|---------| -| Deployment Cost | Deployment Size | | | | | -| 0 | 0 | | | | | -| Function Name | min | avg | median | max | # calls | -| ecrecover | 3000 | 3000 | 3000 | 3000 | 70 | - - + | +32 | contract Deploy is Script { + | ^ (Relevant source part starts here and spans across multiple lines). + + +Running 17 tests for test/libraries/AssociatedLinkedListSetLib.t.sol:AssociatedLinkedListSetLibTest +[PASS] test_add_contains() (gas: 47488) +[PASS] test_add_remove_add() (gas: 52127) +[PASS] test_add_remove_add_empty() (gas: 52002) +[PASS] test_clear() (gas: 35277) +[PASS] test_empty() (gas: 7286) +[PASS] test_getAll() (gas: 71312) +[PASS] test_getAll2() (gas: 94614) +[PASS] test_getAll_empty() (gas: 4793) +[PASS] test_no_address_collision() (gas: 50116) +[PASS] test_remove() (gas: 35074) +[PASS] test_remove_empty() (gas: 4983) +[PASS] test_remove_nonexistent() (gas: 50151) +[PASS] test_remove_nonexistent_empty() (gas: 5095) +[PASS] test_remove_nonexistent_empty2() (gas: 50251) +[PASS] test_tryRemoveKnown1() (gas: 35294) +[PASS] test_tryRemoveKnown2() (gas: 57256) +[PASS] test_tryRemoveKnown_invalid1() (gas: 71468) +Test result: ok. 17 passed; 0 failed; 0 skipped; finished in 4.68ms + +Running 5 tests for test/account/AccountReturnData.t.sol:AccountReturnDataTest +[PASS] test_returnData_execFromPlugin_execute() (gas: 37230) +[PASS] test_returnData_execFromPlugin_fallback() (gas: 38871) +[PASS] test_returnData_executeBatch() (gas: 38199) +[PASS] test_returnData_fallback() (gas: 20430) +[PASS] test_returnData_singular_execute() (gas: 30745) +Test result: ok. 5 passed; 0 failed; 0 skipped; finished in 4.85ms + +Running 2 tests for test/upgrade/LightAccountToModularAccount.t.sol:LightAccountToModularAccountTest +[PASS] test_upgrade() (gas: 761649) +[PASS] test_verifySetup() (gas: 30095) +Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 6.10ms + +Running 8 tests for test/account/AccountLoupe.t.sol:AccountLoupeTest +[PASS] test_pluginLoupe_getExecutionFunctionConfig_native() (gas: 54780) +[PASS] test_pluginLoupe_getExecutionFunctionConfig_plugin() (gas: 39995) +[PASS] test_pluginLoupe_getExecutionHooks() (gas: 27850) +[PASS] test_pluginLoupe_getExecutionHooks_overlapping() (gas: 2395104) +[PASS] test_pluginLoupe_getHooks_multiple() (gas: 1413255) +[PASS] test_pluginLoupe_getInstalledPlugins_initial() (gas: 21588) +[PASS] test_pluginLoupe_getPreValidationHooks() (gas: 26052) +[PASS] test_trace_comprehensivePlugin() (gas: 40594) +Test result: ok. 8 passed; 0 failed; 0 skipped; finished in 7.93ms + +Running 4 tests for test/comparison/CompareSimpleAccount.t.sol:CompareSimpleAccountTest +[PASS] test_SimpleAccount_deploy_basicSend() (gas: 272499) +[PASS] test_SimpleAccount_deploy_empty() (gas: 263172) +[PASS] test_SimpleAccount_postDeploy_basicSend() (gas: 110142) +[PASS] test_SimpleAccount_postDeploy_contractInteraction() (gas: 114643) +Test result: ok. 4 passed; 0 failed; 0 skipped; finished in 11.64ms + +Running 2 tests for test/mocks/Counter.t.sol:CounterTest +[PASS] testIncrement() (gas: 28494) +[PASS] testSetNumber(uint256) (runs: 500, μ: 27426, ~: 28382) +Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 31.57ms + +Running 3 tests for test/libraries/CountableLinkedListSetLib.t.sol:CountableLinkedListSetLibTest +[PASS] test_getCount() (gas: 45785) +[PASS] test_tryDecrement() (gas: 440530) +[PASS] test_tryIncrement() (gas: 313554) +Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.60ms + +Running 30 tests for test/account/phases/AccountStatePhasesUOValidation.t.sol:AccountStatePhasesUOValidationTest +[PASS] test_ASP_UOValidation_add_postExec_associated_firstElement() (gas: 2064659) +[PASS] test_ASP_UOValidation_add_postExec_associated_notFirstElement() (gas: 2100127) +[PASS] test_ASP_UOValidation_add_postExec_firstElement() (gas: 1951918) +[PASS] test_ASP_UOValidation_add_postExec_notFirstElement() (gas: 1988839) +[PASS] test_ASP_UOValidation_add_preExec_firstElement() (gas: 1953753) +[PASS] test_ASP_UOValidation_add_preExec_notFirstElement() (gas: 1989699) +[PASS] test_ASP_UOValidation_remove_exec() (gas: 404022) +[PASS] test_ASP_UOValidation_remove_postExec_associated_firstElement() (gas: 2009699) +[PASS] test_ASP_UOValidation_remove_postExec_associated_notFirstElement() (gas: 2045779) +[PASS] test_ASP_UOValidation_remove_postExec_firstElement() (gas: 1922130) +[PASS] test_ASP_UOValidation_remove_postExec_notFirstElement() (gas: 1958844) +[PASS] test_ASP_UOValidation_remove_preExec() (gas: 1921763) +[PASS] test_ASP_UOValidation_replace_exec() (gas: 2139133) +[PASS] test_ASP_preUOValidation_add_postExec_associated_firstElement() (gas: 2119635) +[PASS] test_ASP_preUOValidation_add_postExec_associated_notFirstElement() (gas: 2155349) +[PASS] test_ASP_preUOValidation_add_postExec_firstElement() (gas: 2007421) +[PASS] test_ASP_preUOValidation_add_postExec_notFirstElement() (gas: 2043951) +[PASS] test_ASP_preUOValidation_add_preExec_firstElement() (gas: 2008530) +[PASS] test_ASP_preUOValidation_add_preExec_notFirstElement() (gas: 2045053) +[PASS] test_ASP_preUOValidation_add_preUOValidation() (gas: 1965288) +[PASS] test_ASP_preUOValidation_remove_UOValidation() (gas: 451860) +[PASS] test_ASP_preUOValidation_remove_exec() (gas: 451191) +[PASS] test_ASP_preUOValidation_remove_postExec_associated_firstElement() (gas: 2065045) +[PASS] test_ASP_preUOValidation_remove_postExec_associated_notFirstElement() (gas: 2100756) +[PASS] test_ASP_preUOValidation_remove_postExec_firstElement() (gas: 1977652) +[PASS] test_ASP_preUOValidation_remove_postExec_notFirstElement() (gas: 2013997) +[PASS] test_ASP_preUOValidation_remove_preExec() (gas: 1977989) +[PASS] test_ASP_preUOValidation_remove_preUOValidation() (gas: 1947557) +[PASS] test_ASP_preUOValidation_replace_UOValidation() (gas: 2255381) +[PASS] test_ASP_preUOValidation_replace_exec() (gas: 2179726) +Test result: ok. 30 passed; 0 failed; 0 skipped; finished in 35.52ms + +Running 2 tests for test/helpers/FunctionReferenceLib.t.sol:FunctionReferenceLibTest +[PASS] testFuzz_functionReference_operators(bytes21,bytes21) (runs: 500, μ: 366, ~: 338) +[PASS] testFuzz_functionReference_packing(address,uint8) (runs: 500, μ: 517, ~: 517) +Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 48.29ms + +Running 24 tests for test/libraries/LinkedListSetLib.t.sol:LinkedListSetLibTest +[PASS] test_add_contains() (gas: 45221) +[PASS] test_add_remove_add() (gas: 49861) +[PASS] test_add_remove_add_empty() (gas: 49736) +[PASS] test_clear() (gas: 32940) +[PASS] test_empty() (gas: 4876) +[PASS] test_getAll() (gas: 68824) +[PASS] test_getAll2() (gas: 91910) +[PASS] test_getAll_empty() (gas: 2565) +[PASS] test_isSentinel() (gas: 305) +[PASS] test_remove() (gas: 33044) +[PASS] test_remove_empty() (gas: 2896) +[PASS] test_remove_nonexistent() (gas: 47433) +[PASS] test_remove_nonexistent_empty() (gas: 3008) +[PASS] test_remove_nonexistent_empty2() (gas: 47577) +[PASS] test_tryRemoveKnown1() (gas: 33075) +[PASS] test_tryRemoveKnown2() (gas: 53806) +[PASS] test_tryRemoveKnown_invalid1() (gas: 68300) +[PASS] test_userFlags_basic() (gas: 68468) +[PASS] test_userFlags_fail_does_not_contain() (gas: 69973) +[PASS] test_userFlags_flagsDisabled() (gas: 46468) +[PASS] test_userFlags_flagsEnabled() (gas: 46500) +[PASS] test_userFlags_getAll() (gas: 70269) +[PASS] test_userFlags_tryDisable() (gas: 45894) +[PASS] test_userFlags_tryEnable() (gas: 46277) +Test result: ok. 24 passed; 0 failed; 0 skipped; finished in 1.35ms + +Running 3 tests for test/helpers/KnownSelectors.t.sol:KnownSelectorsTest +[PASS] test_isErc4337Function() (gas: 373) +[PASS] test_isIPluginFunction() (gas: 151) +[PASS] test_isNativeFunction() (gas: 129) +Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 220.92µs + +Running 8 tests for test/account/ManifestValidity.t.sol:ManifestValidityTest +[PASS] test_ManifestValidity_invalid_HookAlwaysDeny_PostExecHook() (gas: 590671) +[PASS] test_ManifestValidity_invalid_HookAlwaysDeny_RuntimeValidationFunction() (gas: 576919) +[PASS] test_ManifestValidity_invalid_HookAlwaysDeny_UserOpValidation() (gas: 576611) +[PASS] test_ManifestValidity_invalid_ValidationAlwaysAllow_PostExecHook() (gas: 589987) +[PASS] test_ManifestValidity_invalid_ValidationAlwaysAllow_PreExecHook() (gas: 589627) +[PASS] test_ManifestValidity_invalid_ValidationAlwaysAllow_PreRuntimeValidationHook() (gas: 621290) +[PASS] test_ManifestValidity_invalid_ValidationAlwaysAllow_PreUserOpValidationHook() (gas: 621526) +[PASS] test_ManifestValidity_invalid_ValidationAlwaysAllow_UserOpValidationFunction() (gas: 576359) +Test result: ok. 8 passed; 0 failed; 0 skipped; finished in 3.43ms + +Running 4 tests for test/account/AccountStorage.t.sol:AccountStorageTest +[PASS] testFuzz_permittedCallKey(address,bytes4) (runs: 500, μ: 651, ~: 651) +[PASS] test_storageSlotErc7201Formula() (gas: 486) +[PASS] test_storageSlotImpl() (gas: 6965) +[PASS] test_storageSlotProxy() (gas: 31967) +Test result: ok. 4 passed; 0 failed; 0 skipped; finished in 19.51ms + +Running 13 tests for test/account/ExecuteFromPluginPermissions.t.sol:ExecuteFromPluginPermissionsTest +[PASS] test_executeFromPluginAllowed() (gas: 52564) +[PASS] test_executeFromPluginExternal_Allowed_AllSelectors() (gas: 84025) +[PASS] test_executeFromPluginExternal_Allowed_AnyContract() (gas: 150664) +[PASS] test_executeFromPluginExternal_Allowed_AnyContractButSelf() (gas: 103317) +[PASS] test_executeFromPluginExternal_Allowed_IndividualSelectors() (gas: 74066) +[PASS] test_executeFromPluginExternal_Allowed_NativeTokenSpending() (gas: 107416) +[PASS] test_executeFromPluginExternal_NotAllowed_AllSelectors() (gas: 89322) +[PASS] test_executeFromPluginExternal_NotAllowed_NativeTokenSpending() (gas: 63038) +[PASS] test_executeFromPluginExternal_NotAlowed_IndividualSelectors() (gas: 95810) +[PASS] test_executeFromPluginNotAllowed() (gas: 32362) +[PASS] test_executeFromPluginUnrecognizedFunction() (gas: 55133) +[PASS] test_executeFromPlugin_ExecutionHooks() (gas: 59444) +[PASS] test_getPermissionsTestAddresses() (gas: 14284) +Test result: ok. 13 passed; 0 failed; 0 skipped; finished in 87.41ms + +Running 2 tests for test/upgrade/MAToMA.t.sol:MAToMATest +[PASS] test_sameStorageSlot_reinstallUpgradeToAndCall() (gas: 192100) +[PASS] test_sameStorageSlot_upgradeToAndCall() (gas: 112217) +Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.39ms + +Running 8 tests for test/account/TokenReceiver.t.sol:TokenReceiverTest +[PASS] test_hookOnERC1155BatchTransfer() (gas: 1635564) +[PASS] test_hookOnERC1155Transfer() (gas: 1532415) +[PASS] test_hookOnERC721Transfer() (gas: 1548220) +[PASS] test_hookOnERC777Transfer() (gas: 1529684) +[PASS] test_passERC1155Transfer() (gas: 200535) +[PASS] test_passERC721Transfer() (gas: 66335) +[PASS] test_passERC777Transfer() (gas: 47850) +[PASS] test_passIntrospection() (gas: 13784) +Test result: ok. 8 passed; 0 failed; 0 skipped; finished in 4.12ms + +Running 15 tests for test/factory/MultiOwnerMAFactoryTest.t.sol:MultiOwnerModularAccountFactoryTest +[PASS] test_2StepOwnershipTransfer() (gas: 32477) +[PASS] test_addStake() (gas: 80810) +[PASS] test_addressMatch() (gas: 747775) +[PASS] test_badOwnersArray() (gas: 14300) +[PASS] test_deploy() (gas: 752699) +[PASS] test_deployCollision() (gas: 748104) +[PASS] test_deployWithDuplicateOwners() (gas: 10161) +[PASS] test_deployWithUnsortedOwners() (gas: 10403) +[PASS] test_deployedAccountHasCorrectPlugins() (gas: 744613) +[PASS] test_getAddressWithMaxOwnersAndDeploy() (gas: 3405993) +[PASS] test_getAddressWithTooManyOwners() (gas: 257147) +[PASS] test_getAddressWithUnsortedOwners() (gas: 10536) +[PASS] test_unlockStake() (gas: 87509) +[PASS] test_withdraw() (gas: 80979) +[PASS] test_withdrawStake() (gas: 78699) +Test result: ok. 15 passed; 0 failed; 0 skipped; finished in 4.93ms + +Running 20 tests for test/account/UpgradeableModularAccountPluginManager.t.sol:UpgradeableModularAccountPluginManagerTest +[PASS] test_deployAccount() (gas: 713424) +[PASS] test_forceOnUninstall() (gas: 654016) +[PASS] test_installPlugin_ExecuteFromPlugin_PermittedExecSelectorNotInstalled() (gas: 1281725) +[PASS] test_installPlugin_alreadyInstalled() (gas: 76822) +[PASS] test_installPlugin_failIfAddingIPluginInterfaceId() (gas: 1230185) +[PASS] test_installPlugin_failWithIPluginFunctionSelector() (gas: 1233166) +[PASS] test_installPlugin_failWithNativeFunctionSelector() (gas: 1230982) +[PASS] test_installPlugin_failWtihErc4337FunctionSelector() (gas: 1233969) +[PASS] test_installPlugin_interfaceNotSupported() (gas: 61483) +[PASS] test_installPlugin_invalidManifest() (gas: 102347) +[PASS] test_installPlugin_missingDependency() (gas: 2507935) +[PASS] test_installPlugin_standard() (gas: 782703) +[PASS] test_noNonSelfInstallAfterUninstall() (gas: 1019629) +[PASS] test_onUninstallGasLimit() (gas: 845194) +[PASS] test_uninstallAndInstallInBatch() (gas: 1660275) +[PASS] test_uninstallAndInstallInBatch_failwithOtherCalls() (gas: 226405) +[PASS] test_uninstallPlugin_default() (gas: 1323322) +[PASS] test_uninstallPlugin_invalidManifestFails() (gas: 1632034) +[PASS] test_uninstallPlugin_manifestHasChanged() (gas: 4109348) +[PASS] test_uninstallPlugin_manifestParameter() (gas: 1321202) +Test result: ok. 20 passed; 0 failed; 0 skipped; finished in 24.79ms + +Running 23 tests for test/plugin/session/permissions/SessionKeyERC20SpendLimits.t.sol:SessionKeyERC20SpendLimitsTest +[PASS] testFuzz_sessionKeyERC20SpendLimits_setLimits(address,uint256,uint48,uint48) (runs: 500, μ: 116427, ~: 122790) +[PASS] test_executeWithSessionKey_approveOnlyCountsIncrease() (gas: 351072) +[PASS] test_executeWithSessionKey_failWithExceedLimit_multipleSpendFunctions() (gas: 332677) +[PASS] test_executeWithSessionKey_failWithExceedLimit_multipleTokens() (gas: 418501) +[PASS] test_executeWithSessionKey_failWithExceedLimit_multipleTransfer() (gas: 327439) +[PASS] test_executeWithSessionKey_failWithExceedLimit_overflow() (gas: 308377) +[PASS] test_executeWithSessionKey_refreshInterval_failWithSomeTokenLimit() (gas: 795958) +[PASS] test_executeWithSessionKey_refreshInterval_multipleApprove() (gas: 589484) +[PASS] test_executeWithSessionKey_refreshInterval_multipleSpendFunctions() (gas: 591517) +[PASS] test_executeWithSessionKey_refreshInterval_multipleTransfer() (gas: 567542) +[PASS] test_executeWithSessionKey_refreshInterval_singleTransfer() (gas: 529853) +[PASS] test_executeWithSessionKey_success_multipleApprove() (gas: 408253) +[PASS] test_executeWithSessionKey_success_multipleSpendFunctions() (gas: 431506) +[PASS] test_executeWithSessionKey_success_multipleTokens() (gas: 560883) +[PASS] test_executeWithSessionKey_success_multipleTransfer() (gas: 408974) +[PASS] test_sessionKeyERC20Limits_refreshInterval_failWithExceedNextLimit() (gas: 446742) +[PASS] test_sessionKeyERC20SpendLimits_basic_single() (gas: 350081) +[PASS] test_sessionKeyERC20SpendLimits_enforceLimit_none_basic() (gas: 360384) +[PASS] test_sessionKeyERC20SpendLimits_enforceLimit_none_batch() (gas: 322381) +[PASS] test_sessionKeyERC20SpendLimits_exceedLimit_single() (gas: 426039) +[PASS] test_sessionKeyERC20SpendLimits_tokenAddressZeroFails() (gas: 39751) +[PASS] test_sessionKeyERC20SpendLimits_unknownSelectorFails() (gas: 237532) +[PASS] test_sessionKeyERC20SpendLimits_validateSetUp() (gas: 19195) +Test result: ok. 23 passed; 0 failed; 0 skipped; finished in 91.33ms + +Running 10 tests for test/account/ValidationIntersection.t.sol:ValidationIntersectionTest +[PASS] testFuzz_validationIntersect_single(uint256) (runs: 500, μ: 86885, ~: 87801) +[PASS] test_validationIntersect_authorizerAndTimeRange() (gas: 116298) +[PASS] test_validationIntersect_authorizer_sigfail_hook() (gas: 94361) +[PASS] test_validationIntersect_authorizer_sigfail_validationFunction() (gas: 94781) +[PASS] test_validationIntersect_multiplePreValidationHooksIntersect() (gas: 121042) +[PASS] test_validationIntersect_multiplePreValidationHooksSigFail() (gas: 100825) +[PASS] test_validationIntersect_revert_unexpectedAuthorizer() (gas: 64138) +[PASS] test_validationIntersect_timeBounds_intersect_1() (gas: 114382) +[PASS] test_validationIntersect_timeBounds_intersect_2() (gas: 114539) +[PASS] test_validationIntersect_validAuthorizer() (gas: 96475) +Test result: ok. 10 passed; 0 failed; 0 skipped; finished in 74.37ms + +Running 19 tests for test/account/UpgradeableModularAccount.t.sol:UpgradeableModularAccountTest +[PASS] testFuzz_runtime_revert(bytes) (runs: 500, μ: 34042, ~: 33900) +[PASS] test_basicUserOp() (gas: 867909) +[PASS] test_batchExecute() (gas: 162248) +[PASS] test_contractInteraction() (gas: 144743) +[PASS] test_debug_upgradeableModularAccount_storageAccesses() (gas: 166323) +[PASS] test_deployAccount() (gas: 713292) +[PASS] test_initialize_revertArrayLengthMismatch() (gas: 167706) +[PASS] test_postDeploy_ethSend() (gas: 144762) +[PASS] test_runtime_batchExecute() (gas: 59853) +[PASS] test_runtime_contractInteraction() (gas: 742248) +[PASS] test_runtime_debug_upgradeableModularAccount_storageAccesses() (gas: 43057) +[PASS] test_runtime_revertPluginCall() (gas: 752283) +[PASS] test_runtime_standardExecuteEthSend() (gas: 766480) +[PASS] test_standardExecuteEthSend() (gas: 876025) +[PASS] test_validateUserOp_revertFunctionMissing() (gas: 1303521) +[PASS] test_validateUserOp_revertNotFromEntryPoint() (gas: 30376) +[PASS] test_validateUserOp_revertUnrecognizedFunction() (gas: 29565) +[PASS] test_view_entryPoint() (gas: 719260) +[PASS] test_view_getNonce() (gas: 849182) +Test result: ok. 19 passed; 0 failed; 0 skipped; finished in 91.00ms + +Running 4 tests for test/plugin/owner/MultiOwnerPluginIntegration.t.sol:MultiOwnerPluginIntegration +[PASS] test_ownerPlugin_successInstallation() (gas: 36856) +[PASS] test_runtimeValidation_alwaysAllow_isValidSignature() (gas: 97338) +[PASS] test_runtimeValidation_ownerOrSelf_standardExecute() (gas: 80692) +[PASS] test_userOpValidation_owner_standardExecute() (gas: 229855) +Test result: ok. 4 passed; 0 failed; 0 skipped; finished in 4.72ms + +Running 14 tests for test/plugin/session/permissions/SessionKeyNativeTokenSpendLimits.t.sol:SessionKeyNativeTokenSpendLimitsTest +[PASS] testFuzz_sessionKeyNativeTokenSpendLimits_setLimits(uint256,uint48,uint48) (runs: 500, μ: 97960, ~: 101290) +[PASS] test_sessionKeyNativeTokenSpendLimits_basic_multi() (gas: 381219) +[PASS] test_sessionKeyNativeTokenSpendLimits_basic_refreshInterval_takeMaxStartTime() (gas: 386672) +[PASS] test_sessionKeyNativeTokenSpendLimits_basic_single() (gas: 305813) +[PASS] test_sessionKeyNativeTokenSpendLimits_enforceLimit_none() (gas: 363647) +[PASS] test_sessionKeyNativeTokenSpendLimits_exceedLimit_multi() (gas: 185953) +[PASS] test_sessionKeyNativeTokenSpendLimits_exceedLimit_single() (gas: 305905) +[PASS] test_sessionKeyNativeTokenSpendLimits_multiUserOpBundle_check_noInterval() (gas: 358023) +[PASS] test_sessionKeyNativeTokenSpendLimits_overflowBatch() (gas: 130815) +[PASS] test_sessionKeyNativeTokenSpendLimits_overflowState() (gas: 300179) +[PASS] test_sessionKeyNativeTokenSpendLimits_refreshInterval_exceedNewInterval() (gas: 330628) +[PASS] test_sessionKeyNativeTokenSpendLimits_refreshInterval_multi() (gas: 471454) +[PASS] test_sessionKeyNativeTokenSpendLimits_refreshInterval_single() (gas: 415237) +[PASS] test_sessionKeyNativeTokenSpendLimits_validateSetUp() (gas: 18794) +Test result: ok. 14 passed; 0 failed; 0 skipped; finished in 113.62ms + +Running 2 tests for test/libraries/PluginStorageLib.t.sol:PluginStorageLibTest +[PASS] testFuzz_storagePointer(address,uint256,bytes32,uint256[32]) (runs: 500, μ: 724456, ~: 731620) +[PASS] test_storagePointer() (gas: 52757) +Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 134.21ms + +Running 16 tests for test/account/AccountExecHooks.t.sol:UpgradeableModularAccountExecHooksTest +[PASS] testFuzz_preExecHook_revertData(bytes) (runs: 500, μ: 1751521, ~: 1745848) +[PASS] test_execHookPair_install() (gas: 1797876) +[PASS] test_execHookPair_run() (gas: 1822634) +[PASS] test_execHookPair_uninstall() (gas: 1736712) +[PASS] test_overlappingPreExecHookAlwaysDeny_install() (gas: 3101652) +[PASS] test_overlappingPreExecHookAlwaysDeny_revert() (gas: 3109875) +[PASS] test_overlappingPreExecHookAlwaysDeny_uninstallPlugin1() (gas: 3103393) +[PASS] test_overlappingPreExecHookAlwaysDeny_uninstallPlugin2() (gas: 3123001) +[PASS] test_overlappingPreExecHook_invalid() (gas: 3177659) +[PASS] test_postOnlyExecHook_install() (gas: 1692538) +[PASS] test_postOnlyExecHook_run() (gas: 1706293) +[PASS] test_postOnlyExecHook_uninstall() (gas: 1649451) +[PASS] test_preExecHook_install() (gas: 1692835) +[PASS] test_preExecHook_revertAlwaysDeny() (gas: 1680110) +[PASS] test_preExecHook_run() (gas: 1708138) +[PASS] test_preExecHook_uninstall() (gas: 1648908) +Test result: ok. 16 passed; 0 failed; 0 skipped; finished in 409.64ms + +Running 16 tests for test/plugin/session/permissions/SessionKeyGasLimits.t.sol:SessionKeyGasLimitsTest +[PASS] testFuzz_sessionKeyGasLimits_nolimit(uint256) (runs: 500, μ: 169525, ~: 169431) +[PASS] testFuzz_sessionKeyGasLimits_requireNonceAsAddress(uint192) (runs: 500, μ: 195193, ~: 195193) +[PASS] testFuzz_sessionKeyGasLimits_setLimits(uint256,uint48,uint48) (runs: 500, μ: 99877, ~: 104021) +[PASS] test_sessionKeyGasLimits_enforceLimit_basic_multipleInBundle() (gas: 313917) +[PASS] test_sessionKeyGasLimits_enforceLimit_basic_single() (gas: 274102) +[PASS] test_sessionKeyGasLimits_enforceLimit_none() (gas: 154910) +[PASS] test_sessionKeyGasLimits_exceedLimit_multipleInBundle() (gas: 243929) +[PASS] test_sessionKeyGasLimits_exceedLimit_single() (gas: 174855) +[PASS] test_sessionKeyGasLimits_refreshInterval_inspectValidationData() (gas: 303009) +[PASS] test_sessionKeyGasLimits_refreshInterval_multipleInBundle() (gas: 444977) +[PASS] test_sessionKeyGasLimits_refreshInterval_multipleInBundle_tryExceedFails() (gas: 407944) +[PASS] test_sessionKeyGasLimits_refreshInterval_resetFlagTracking() (gas: 336201) +[PASS] test_sessionKeyGasLimits_refreshInterval_resetFlag_fixWithExtraUO() (gas: 401191) +[PASS] test_sessionKeyGasLimits_refreshInterval_resetFlag_fixWithOwnerReset() (gas: 354893) +[PASS] test_sessionKeyGasLimits_refreshInterval_resetFlag_fixWithPublicReset() (gas: 342042) +[PASS] test_sessionKeyGasLimits_refreshInterval_single() (gas: 360302) +Test result: ok. 16 passed; 0 failed; 0 skipped; finished in 531.29ms + +Running 30 tests for test/account/phases/AccountStatePhasesRTValidation.t.sol:AccountStatePhasesRTValidationTest +[PASS] test_ASP_RTValidation_add_postExec_associated_firstElement() (gas: 1938796) +[PASS] test_ASP_RTValidation_add_postExec_associated_notFirstElement() (gas: 1973456) +[PASS] test_ASP_RTValidation_add_postExec_firstElement() (gas: 1825835) +[PASS] test_ASP_RTValidation_add_postExec_notFirstElement() (gas: 1862033) +[PASS] test_ASP_RTValidation_add_preExec_firstElement() (gas: 1826614) +[PASS] test_ASP_RTValidation_add_preExec_notFirstElement() (gas: 1862849) +[PASS] test_ASP_RTValidation_remove_exec() (gas: 357706) +[PASS] test_ASP_RTValidation_remove_postExec_associated_firstElement() (gas: 1882398) +[PASS] test_ASP_RTValidation_remove_postExec_associated_notFirstElement() (gas: 1918462) +[PASS] test_ASP_RTValidation_remove_postExec_firstElement() (gas: 1795621) +[PASS] test_ASP_RTValidation_remove_postExec_notFirstElement() (gas: 1832316) +[PASS] test_ASP_RTValidation_remove_preExec() (gas: 1795122) +[PASS] test_ASP_RTValidation_replace_exec() (gas: 2012382) +[PASS] test_ASP_preRTValidation_add_postExec_associated_firstElement() (gas: 1992732) +[PASS] test_ASP_preRTValidation_add_postExec_associated_notFirstElement() (gas: 2027573) +[PASS] test_ASP_preRTValidation_add_postExec_firstElement() (gas: 1880321) +[PASS] test_ASP_preRTValidation_add_postExec_notFirstElement() (gas: 1915798) +[PASS] test_ASP_preRTValidation_add_preExec_firstElement() (gas: 1880770) +[PASS] test_ASP_preRTValidation_add_preExec_notFirstElement() (gas: 1916791) +[PASS] test_ASP_preRTValidation_add_preRTValidation() (gas: 1837786) +[PASS] test_ASP_preRTValidation_remove_RTValidation() (gas: 2050364) +[PASS] test_ASP_preRTValidation_remove_exec() (gas: 416337) +[PASS] test_ASP_preRTValidation_remove_postExec_associated_firstElement() (gas: 1936994) +[PASS] test_ASP_preRTValidation_remove_postExec_associated_notFirstElement() (gas: 1972447) +[PASS] test_ASP_preRTValidation_remove_postExec_firstElement() (gas: 1850063) +[PASS] test_ASP_preRTValidation_remove_postExec_notFirstElement() (gas: 1886499) +[PASS] test_ASP_preRTValidation_remove_preExec() (gas: 1850092) +[PASS] test_ASP_preRTValidation_remove_preRTValidation() (gas: 1815289) +[PASS] test_ASP_preRTValidation_replace_RTValidation() (gas: 2233976) +[PASS] test_ASP_preRTValidation_replace_exec() (gas: 2051505) +Test result: ok. 30 passed; 0 failed; 0 skipped; finished in 779.39ms + +Running 18 tests for test/plugin/owner/MultiOwnerPlugin.t.sol:MultiOwnerPluginTest +[PASS] testFuzz_isValidSignature_ContractOwner(bytes32) (runs: 500, μ: 61941, ~: 61941) +[PASS] testFuzz_isValidSignature_ContractOwnerWithEOAOwner(bytes32) (runs: 500, μ: 77383, ~: 77383) +[PASS] testFuzz_isValidSignature_EOAOwner(string,bytes32) (runs: 500, μ: 81298, ~: 81229) +[PASS] testFuzz_userOpValidationFunction_ContractOwner((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)) (runs: 500, μ: 84697, ~: 84572) +[PASS] testFuzz_userOpValidationFunction_ContractOwnerWithEOAOwner((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)) (runs: 500, μ: 103724, ~: 103594) +[PASS] testFuzz_userOpValidationFunction_EOAOwner(string,(address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)) (runs: 500, μ: 90442, ~: 90372) +[PASS] test_eip712Domain() (gas: 24720) +[PASS] test_multiOwnerPlugin_sentinelIsNotOwner() (gas: 10805) +[PASS] test_onInstall_success() (gas: 66256) +[PASS] test_onUninstall_success() (gas: 34587) +[PASS] test_pluginInitializeGuards() (gas: 57381) +[PASS] test_pluginManifest() (gas: 35717) +[PASS] test_runtimeValidationFunction_OwnerOrSelf() (gas: 19638) +[PASS] test_updateOwners_failWithDuplicatedAddresses() (gas: 42008) +[PASS] test_updateOwners_failWithEmptyOwners() (gas: 30396) +[PASS] test_updateOwners_failWithNotExist() (gas: 17467) +[PASS] test_updateOwners_failWithZeroAddressOwner() (gas: 13723) +[PASS] test_updateOwners_success() (gas: 60909) +Test result: ok. 18 passed; 0 failed; 0 skipped; finished in 660.42ms + +Running 17 tests for test/plugin/session/SessionKeyPluginWithMultiOwner.t.sol:SessionKeyPluginWithMultiOwnerTest +[PASS] testFuzz_sessionKey_addKeysDuringInstall(uint8) (runs: 500, μ: 741518, ~: 609021) +[PASS] testFuzz_sessionKey_invalidFunctionId(uint8,(address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)) (runs: 500, μ: 22792, ~: 22728) +[PASS] testFuzz_sessionKey_userOpValidation_invalidSig(uint8,uint64) (runs: 500, μ: 852123, ~: 686236) +[PASS] testFuzz_sessionKey_userOpValidation_mismathcedSig(uint8,uint64) (runs: 500, μ: 862271, ~: 787287) +[PASS] testFuzz_sessionKey_userOpValidation_valid(uint16) (runs: 500, μ: 878013, ~: 785547) +[PASS] test_sessionKey_addAndRemoveKeys() (gas: 175810) +[PASS] test_sessionKey_addKeyFailure() (gas: 163295) +[PASS] test_sessionKey_addKeySuccess() (gas: 134287) +[PASS] test_sessionKey_doesNotContainSentinelValue() (gas: 132228) +[PASS] test_sessionKey_getPredecessor_address() (gas: 165741) +[PASS] test_sessionKey_getPredecessor_missing() (gas: 132366) +[PASS] test_sessionKey_getPredecessor_sentinel() (gas: 165753) +[PASS] test_sessionKey_rotate_existing() (gas: 199544) +[PASS] test_sessionKey_rotate_invalid() (gas: 142593) +[PASS] test_sessionKey_rotate_valid() (gas: 159477) +[PASS] test_sessionKey_useSessionKey() (gas: 318365) +[PASS] test_sessionKey_useSessionKey_failInRuntime() (gas: 139172) +Test result: ok. 17 passed; 0 failed; 0 skipped; finished in 1.15s + +Running 15 tests for test/account/AccountPreValidationHooks.t.sol:UpgradeableModularAccountPreValidationHooksTest +[PASS] testFuzz_preRuntimeValidationHooks_revert(bytes) (runs: 500, μ: 1733300, ~: 1727732) +[PASS] test_overlappingPreRuntimeValidationHookAlwaysDeny_install() (gas: 3069100) +[PASS] test_overlappingPreRuntimeValidationHookAlwaysDeny_revert() (gas: 3075495) +[PASS] test_overlappingPreRuntimeValidationHookAlwaysDeny_uninstallPlugin1() (gas: 3069588) +[PASS] test_overlappingPreRuntimeValidationHookAlwaysDeny_uninstallPlugin2() (gas: 3085644) +[PASS] test_overlappingPreRuntimeValidationHook_invalid() (gas: 3144799) +[PASS] test_overlappingPreUserOpValidationHookAlwaysDeny_install() (gas: 3389917) +[PASS] test_preRuntimeValidationHooks_install() (gas: 3130700) +[PASS] test_preRuntimeValidationHooks_revertAlwaysDeny() (gas: 1662040) +[PASS] test_preRuntimeValidationHooks_run() (gas: 3151930) +[PASS] test_preRuntimeValidationHooks_uninstall() (gas: 3089827) +[PASS] test_preUserOpValidationHooks_install() (gas: 3451193) +[PASS] test_preUserOpValidationHooks_revertAlwaysDeny() (gas: 1997410) +[PASS] test_preUserOpValidationHooks_run() (gas: 3575468) +[PASS] test_preUserOpValidationHooks_uninstall() (gas: 3431754) +Test result: ok. 15 passed; 0 failed; 0 skipped; finished in 1.23s + +Running 16 tests for test/plugin/session/permissions/SessionKeyPermissions.t.sol:SessionKeyPermissionsTest +[PASS] testFuzz_initialSessionKeysWithPermissions(uint256) (runs: 500, μ: 640562, ~: 706471) +[PASS] testFuzz_sessionKeyPermissions_checkRequiredPaymaster(address,address) (runs: 500, μ: 164088, ~: 164404) +[PASS] testFuzz_sessionKeyPermissions_setRequiredPaymaster(address) (runs: 500, μ: 87203, ~: 87648) +[PASS] testFuzz_sessionKeyTimeRange(uint48,uint48) (runs: 500, μ: 110585, ~: 110712) +[PASS] test_rotateKey_basic() (gas: 362006) +[PASS] test_rotateKey_permissionsTransfer() (gas: 136019) +[PASS] test_sessionKeyPerms_independentKeyStorage() (gas: 147427) +[PASS] test_sessionKeyPerms_reinstallResets() (gas: 340983) +[PASS] test_sessionKeyPerms_requiredPaymaster_partialAddressFails() (gas: 132731) +[PASS] test_sessionKeyPerms_updatePermissions_invalidUpdates() (gas: 66546) +[PASS] test_sessionPerms_contractAllowList() (gas: 272237) +[PASS] test_sessionPerms_contractDefaultAllowList() (gas: 323505) +[PASS] test_sessionPerms_contractDenyList() (gas: 340630) +[PASS] test_sessionPerms_selectorAllowList() (gas: 298637) +[PASS] test_sessionPerms_selectorDenyList() (gas: 361806) +[PASS] test_sessionPerms_validateSetUp() (gas: 15543) +Test result: ok. 16 passed; 0 failed; 0 skipped; finished in 1.20s + +Running 24 tests for test/account/phases/AccountStatePhasesExec.t.sol:AccountStatePhasesUOValidationTest +[PASS] test_ASP_exec_add_postExec_associated_firstElement() (gas: 1876601) +[PASS] test_ASP_exec_add_postExec_associated_notFirstElement() (gas: 1983829) +[PASS] test_ASP_exec_add_postExec_firstElement() (gas: 1771923) +[PASS] test_ASP_exec_add_postExec_notFirstElement() (gas: 1828373) +[PASS] test_ASP_exec_remove_postExec_associated_firstElement() (gas: 1846510) +[PASS] test_ASP_exec_remove_postExec_associated_notFirstElement() (gas: 1953167) +[PASS] test_ASP_exec_remove_postExec_firstElement() (gas: 1751780) +[PASS] test_ASP_exec_remove_postExec_notFirstElement() (gas: 1807158) +[PASS] test_ASP_postExec_add_postExec_associated_notFirstElement() (gas: 1983982) +[PASS] test_ASP_postExec_add_postExec_firstElement() (gas: 1900973) +[PASS] test_ASP_postExec_add_postExec_notFirstElement() (gas: 1827822) +[PASS] test_ASP_postExec_remove_postExec_associated_notFirstElement() (gas: 1953232) +[PASS] test_ASP_postExec_remove_postExec_firstElement() (gas: 1880617) +[PASS] test_ASP_postExec_remove_postExec_notFirstElement() (gas: 1807398) +[PASS] test_ASP_preExec_add_postExec_associated_notFirstElement() (gas: 1932277) +[PASS] test_ASP_preExec_add_postExec_firstElement() (gas: 1848674) +[PASS] test_ASP_preExec_add_postExec_notFirstElement() (gas: 3211690) +[PASS] test_ASP_preExec_add_preExec_notFirstElement() (gas: 1827324) +[PASS] test_ASP_preExec_remove_exec() (gas: 310386) +[PASS] test_ASP_preExec_remove_postExec_associated_notFirstElement() (gas: 1901674) +[PASS] test_ASP_preExec_remove_postExec_firstElement() (gas: 1829301) +[PASS] test_ASP_preExec_remove_postExec_notFirstElement() (gas: 3139409) +[PASS] test_ASP_preExec_remove_preExec() (gas: 1807785) +[PASS] test_ASP_preExec_replace_exec() (gas: 2044824) +Test result: ok. 24 passed; 0 failed; 0 skipped; finished in 1.31s | lib/account-abstraction/contracts/core/EntryPoint.sol:EntryPoint contract | | | | | | |---------------------------------------------------------------------------|-----------------|--------|--------|--------|---------| | Deployment Cost | Deployment Size | | | | | -| 3619955 | 17979 | | | | | +| 3839035 | 19073 | | | | | | Function Name | min | avg | median | max | # calls | -| addStake | 46058 | 46558 | 46058 | 48058 | 8 | -| balanceOf | 2644 | 2644 | 2644 | 2644 | 6 | -| depositTo | 24642 | 24642 | 24642 | 24642 | 83 | -| getDepositInfo | 1375 | 1375 | 1375 | 1375 | 10 | -| getNonce | 2729 | 2729 | 2729 | 2729 | 50 | -| getUserOpHash | 2226 | 2309 | 2298 | 2507 | 89 | -| handleOps | 7342 | 190443 | 173293 | 943657 | 65 | -| receive | 24232 | 24232 | 24232 | 24232 | 9 | -| unlockStake | 2857 | 2857 | 2857 | 2857 | 4 | -| withdrawStake | 1248 | 4762 | 4762 | 8276 | 4 | +| addStake | 45926 | 46426 | 45926 | 47926 | 4 | +| balanceOf | 2626 | 2626 | 2626 | 2626 | 3 | +| depositTo | 24588 | 24588 | 24588 | 24588 | 35 | +| getDepositInfo | 1336 | 1336 | 1336 | 1336 | 5 | +| getNonce | 738 | 2154 | 2738 | 2738 | 120 | +| getUserOpHash | 2142 | 2215 | 2214 | 2423 | 171 | +| handleOps | 7255 | 146885 | 140611 | 843630 | 141 | +| innerHandleOp | 9425 | 57090 | 44488 | 189624 | 117 | +| receive | 2278 | 18039 | 22178 | 24178 | 142 | +| unlockStake | 2851 | 2851 | 2851 | 2851 | 2 | +| withdrawStake | 1233 | 4736 | 4736 | 8240 | 2 | | lib/account-abstraction/contracts/core/SenderCreator.sol:SenderCreator contract | | | | | | |---------------------------------------------------------------------------------|-----------------|--------|--------|--------|---------| | Deployment Cost | Deployment Size | | | | | -| 75329 | 404 | | | | | +| 82935 | 442 | | | | | | Function Name | min | avg | median | max | # calls | -| createSender | 136618 | 468405 | 468405 | 800192 | 4 | +| createSender | 141050 | 422624 | 422624 | 704198 | 4 | | lib/account-abstraction/contracts/samples/SimpleAccount.sol:SimpleAccount contract | | | | | | |------------------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 1220453 | 6389 | | | | | +| 1320562 | 6889 | | | | | | Function Name | min | avg | median | max | # calls | -| initialize | 26286 | 26286 | 26286 | 26286 | 6 | -| validateUserOp | 18814 | 26364 | 26364 | 33914 | 4 | +| execute | 8969 | 9953 | 10445 | 10445 | 3 | +| initialize | 26250 | 26250 | 26250 | 26250 | 6 | +| validateUserOp | 18700 | 26250 | 26250 | 33800 | 4 | | lib/account-abstraction/contracts/samples/SimpleAccountFactory.sol:SimpleAccountFactory contract | | | | | | |--------------------------------------------------------------------------------------------------|-----------------|--------|--------|--------|---------| | Deployment Cost | Deployment Size | | | | | -| 1645948 | 8556 | | | | | +| 1754770 | 9099 | | | | | | Function Name | min | avg | median | max | # calls | -| createAccount | 133329 | 133329 | 133329 | 133329 | 6 | -| getAddress | 4678 | 4678 | 4678 | 4678 | 4 | +| createAccount | 137773 | 137773 | 137773 | 137773 | 6 | +| getAddress | 4744 | 4744 | 4744 | 4744 | 4 | | lib/light-account/src/LightAccount.sol:LightAccount contract | | | | | | |--------------------------------------------------------------|-----------------|--------|--------|--------|---------| | Deployment Cost | Deployment Size | | | | | -| 1435564 | 7455 | | | | | +| 1571110 | 8134 | | | | | | Function Name | min | avg | median | max | # calls | -| initialize | 49861 | 49861 | 49861 | 49861 | 2 | -| upgradeToAndCall | 698183 | 698183 | 698183 | 698183 | 1 | +| initialize | 49729 | 49729 | 49729 | 49729 | 2 | +| upgradeToAndCall | 597097 | 597097 | 597097 | 597097 | 1 | | lib/light-account/src/LightAccountFactory.sol:LightAccountFactory contract | | | | | | |----------------------------------------------------------------------------|-----------------|--------|--------|--------|---------| | Deployment Cost | Deployment Size | | | | | -| 1861286 | 9622 | | | | | +| 2005589 | 10344 | | | | | | Function Name | min | avg | median | max | # calls | -| createAccount | 156904 | 156904 | 156904 | 156904 | 2 | +| createAccount | 161252 | 161252 | 161252 | 161252 | 2 | | lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol:ERC1967Proxy contract | | | | | | |-------------------------------------------------------------------------------------------|-----------------|--------|--------|---------|---------| | Deployment Cost | Deployment Size | | | | | -| 66027 | 1142 | | | | | +| 70433 | 1164 | | | | | | Function Name | min | avg | median | max | # calls | -| changeManifest | 506297 | 506297 | 506297 | 506297 | 1 | -| checkResultEFPExternal | 38474 | 38474 | 38474 | 38474 | 1 | -| checkResultEFPFallback | 31424 | 31424 | 31424 | 31424 | 1 | -| entryPoint | 800 | 800 | 800 | 800 | 3 | -| execute | 6175 | 28749 | 30343 | 54188 | 11 | -| executeBatch | 10778 | 242509 | 35081 | 889097 | 4 | -| executeFromPlugin | 1153 | 20927 | 22242 | 68012 | 17 | -| executeFromPluginExternal | 3260 | 20530 | 9365 | 51297 | 24 | -| foo | 5304 | 9804 | 9804 | 14304 | 2 | -| getExecutionFunctionConfig | 6259 | 8388 | 6451 | 13457 | 7 | -| getExecutionHooks | 14851 | 18783 | 18432 | 23068 | 3 | -| getInstalledPlugins | 1599 | 3122 | 1967 | 10836 | 8 | -| getNonce | 6514 | 6514 | 6514 | 6514 | 1 | -| getNumberCounter1 | 19445 | 19445 | 19445 | 19445 | 2 | -| getNumberCounter2 | 16968 | 16968 | 16968 | 16968 | 1 | -| getNumberCounter3 | 20870 | 20870 | 20870 | 20870 | 1 | -| getPermittedCallHooks | 9949 | 14181 | 14181 | 18414 | 2 | -| getPreValidationHooks | 16167 | 16167 | 16167 | 16167 | 1 | -| getSessionKeys | 9170 | 9233 | 9233 | 9296 | 4 | -| incrementCounter1 | 12339 | 12339 | 12339 | 12339 | 1 | -| incrementCounter2 | 16350 | 16350 | 16350 | 16350 | 1 | -| incrementCounter3 | 20603 | 20603 | 20603 | 20603 | 1 | -| initialize() | 25584 | 25584 | 25584 | 25584 | 1 | -| initialize(address[],bytes) | 25926 | 688643 | 684666 | 1048560 | 271 | -| installPlugin | 2852 | 313521 | 264953 | 811261 | 438 | -| isOwner | 5605 | 11105 | 11105 | 16605 | 2 | -| isSessionKey | 16827 | 16827 | 16827 | 16827 | 2 | -| isValidSignature | 19014 | 19014 | 19014 | 19014 | 1 | -| onERC1155BatchReceived | 4257 | 5441 | 4257 | 7809 | 3 | -| onERC1155Received | 3808 | 5121 | 3808 | 7749 | 3 | -| onERC721Received | 3559 | 4953 | 3559 | 7743 | 3 | -| onInstall | 891 | 891 | 891 | 891 | 1 | -| onUninstall | 891 | 891 | 891 | 891 | 1 | -| owners | 12307 | 13307 | 13307 | 14307 | 2 | -| passthroughExecute | 12570 | 23984 | 12887 | 59932 | 7 | -| passthroughExecuteFromPlugin | 16096 | 18622 | 18622 | 21149 | 2 | -| passthroughExecuteWith1Eth | 22380 | 46691 | 46691 | 71003 | 2 | -| passthroughExecuteWithNativeTokenSpendPermission | 33433 | 33433 | 33433 | 33433 | 1 | -| performEFPCall | 81171 | 81171 | 81171 | 81171 | 1 | -| performEFPCallWithExecHooks | 44051 | 44051 | 44051 | 44051 | 1 | -| performIncrement | 64136 | 64136 | 64136 | 64136 | 1 | -| pluginManifest | 2951 | 4002 | 4528 | 4528 | 3 | -| registerKey | 51758 | 51758 | 51758 | 51758 | 59 | -| rotateKey | 31937 | 31937 | 31937 | 31937 | 2 | -| setNumberCounter1 | 60374 | 60374 | 60374 | 60374 | 2 | -| setNumberCounter2 | 57660 | 57660 | 57660 | 57660 | 1 | -| setNumberCounter3 | 20621 | 20621 | 20621 | 20621 | 1 | -| someExecutionFunction | 556 | 1729 | 1219 | 3413 | 3 | -| supportsInterface | 582 | 1605 | 887 | 7387 | 15 | -| tokensReceived | 3682 | 5041 | 3682 | 7761 | 3 | -| uninstallPlugin | 21071 | 53165 | 46960 | 172143 | 54 | -| updateKeyPermissions | 8579 | 52955 | 41338 | 165196 | 102 | -| updateSessionKeys | 5335 | 52683 | 48299 | 226352 | 72 | -| upgradeToAndCall | 28099 | 365610 | 365610 | 703122 | 2 | -| useEFPPermissionAllowed | 46629 | 46629 | 46629 | 46629 | 1 | -| useEFPPermissionNotAllowed | 18375 | 18375 | 18375 | 18375 | 1 | -| validateUserOp | 3780 | 55800 | 59511 | 84922 | 80 | +| addSessionKey | 6535 | 84316 | 95220 | 112720 | 119 | +| changeManifest | 511748 | 511748 | 511748 | 511748 | 1 | +| checkResultEFPExternal | 29637 | 29637 | 29637 | 29637 | 1 | +| checkResultEFPFallback | 33562 | 33562 | 33562 | 33562 | 1 | +| entryPoint | 757 | 757 | 757 | 757 | 2 | +| execute | 2417 | 21581 | 14890 | 51008 | 20 | +| executeBatch | 10324 | 153465 | 136001 | 719604 | 15 | +| executeFromPlugin | 1108 | 15577 | 10707 | 29948 | 7 | +| executeFromPluginExternal | 1303 | 19646 | 12888 | 44633 | 108 | +| executeWithSessionKey | 6369 | 42932 | 24680 | 163212 | 74 | +| executionFunction | 1638 | 71813 | 52911 | 204262 | 84 | +| foo | 6156 | 10656 | 10656 | 15156 | 2 | +| getExecutionFunctionConfig | 6247 | 8386 | 6415 | 13508 | 7 | +| getExecutionHooks | 14899 | 18828 | 18437 | 23149 | 3 | +| getInstalledPlugins | 1578 | 3104 | 1578 | 10806 | 7 | +| getNonce | 2028 | 4278 | 4278 | 6528 | 2 | +| getNumberCounter1 | 16573 | 16573 | 16573 | 16573 | 2 | +| getNumberCounter2 | 14286 | 14286 | 14286 | 14286 | 1 | +| getNumberCounter3 | 21764 | 21764 | 21764 | 21764 | 1 | +| getPreValidationHooks | 16218 | 16218 | 16218 | 16218 | 1 | +| incrementCounter1 | 12745 | 12745 | 12745 | 12745 | 1 | +| incrementCounter2 | 13712 | 13712 | 13712 | 13712 | 1 | +| incrementCounter3 | 21541 | 21541 | 21541 | 21541 | 1 | +| initialize() | 25566 | 25566 | 25566 | 25566 | 1 | +| initialize(address[],bytes) | 25345 | 594657 | 583729 | 2901470 | 314 | +| installPlugin | 2638 | 281244 | 185993 | 810641 | 448 | +| isValidSignature | 9725 | 16949 | 12574 | 32923 | 4 | +| onERC1155BatchReceived | 5044 | 12662 | 12662 | 20280 | 2 | +| onERC1155Received | 9154 | 13180 | 13180 | 17207 | 2 | +| onERC721Received | 8756 | 12648 | 12648 | 16541 | 2 | +| onInstall | 831 | 831 | 831 | 831 | 1 | +| onUninstall | 810 | 810 | 810 | 810 | 1 | +| passthroughExecute | 6168 | 20615 | 10482 | 51551 | 11 | +| passthroughExecuteFromPlugin | 16937 | 19970 | 19970 | 23004 | 2 | +| passthroughExecuteWith1Eth | 23207 | 42914 | 42914 | 62621 | 2 | +| passthroughExecuteWithNativeTokenSpendPermission | 27095 | 27095 | 27095 | 27095 | 1 | +| performEFPCallWithExecHooks | 43941 | 43941 | 43941 | 43941 | 1 | +| pluginManifest | 2668 | 3675 | 4179 | 4179 | 3 | +| removeSessionKey | 9990 | 9990 | 9990 | 9990 | 3 | +| rotateSessionKey | 10906 | 37456 | 46744 | 59229 | 5 | +| setNumberCounter1 | 51547 | 51547 | 51547 | 51547 | 2 | +| setNumberCounter2 | 49044 | 49044 | 49044 | 49044 | 1 | +| setNumberCounter3 | 21558 | 21558 | 21558 | 21558 | 1 | +| someExecutionFunction | 541 | 2313 | 2094 | 4305 | 3 | +| supportsInterface | 570 | 1185 | 759 | 5291 | 72 | +| tokensReceived | 8945 | 13242 | 13242 | 17539 | 2 | +| uninstallPlugin | 24303 | 50096 | 41115 | 170435 | 76 | +| updateKeyPermissions | 9136 | 48979 | 37924 | 165898 | 154 | +| updateOwners | 30687 | 30687 | 30687 | 30687 | 1 | +| upgradeToAndCall | 12605 | 213218 | 25031 | 602018 | 3 | +| useEFPPermissionAllowed | 46515 | 46515 | 46515 | 46515 | 1 | +| useEFPPermissionNotAllowed | 19157 | 19157 | 19157 | 19157 | 1 | +| validateUserOp | 3567 | 55848 | 50354 | 218696 | 168 | | lib/openzeppelin-contracts/contracts/token/ERC721/presets/ERC721PresetMinterPauserAutoId.sol:ERC721PresetMinterPauserAutoId contract | | | | | | |--------------------------------------------------------------------------------------------------------------------------------------|-----------------|--------|--------|--------|---------| | Deployment Cost | Deployment Size | | | | | -| 2170901 | 11354 | | | | | +| 2306253 | 12030 | | | | | | Function Name | min | avg | median | max | # calls | -| mint | 101769 | 101769 | 101769 | 101769 | 17 | -| ownerOf | 798 | 1798 | 1798 | 2798 | 4 | -| safeTransferFrom | 45986 | 48872 | 45986 | 54644 | 3 | +| mint | 101681 | 101681 | 101681 | 101681 | 8 | +| ownerOf | 789 | 1789 | 1789 | 2789 | 2 | +| safeTransferFrom | 53614 | 57256 | 57256 | 60899 | 2 | | src/account/UpgradeableModularAccount.sol:UpgradeableModularAccount contract | | | | | | |------------------------------------------------------------------------------|-----------------|--------|--------|---------|---------| | Deployment Cost | Deployment Size | | | | | -| 4829417 | 24327 | | | | | +| 4890098 | 24630 | | | | | | Function Name | min | avg | median | max | # calls | -| checkResultEFPExternal | 33634 | 33634 | 33634 | 33634 | 1 | -| checkResultEFPFallback | 26587 | 26587 | 26587 | 26587 | 1 | -| entryPoint | 466 | 466 | 466 | 466 | 3 | -| execute | 5804 | 26752 | 26833 | 49333 | 11 | -| executeBatch | 10404 | 238698 | 30154 | 884079 | 4 | -| executeFromPlugin | 803 | 20577 | 21893 | 67660 | 17 | -| executeFromPluginExternal | 2904 | 20164 | 9001 | 50936 | 24 | -| foo | 4970 | 7220 | 7220 | 9470 | 2 | -| getExecutionFunctionConfig | 5916 | 6760 | 6076 | 8614 | 7 | -| getExecutionHooks | 13571 | 16898 | 14478 | 22647 | 3 | -| getInstalledPlugins | 1259 | 2215 | 1624 | 5990 | 8 | -| getNonce | 6180 | 6180 | 6180 | 6180 | 1 | -| getNumberCounter1 | 19111 | 19111 | 19111 | 19111 | 2 | -| getNumberCounter2 | 16634 | 16634 | 16634 | 16634 | 1 | -| getNumberCounter3 | 16005 | 16005 | 16005 | 16005 | 1 | -| getPermittedCallHooks | 9585 | 11567 | 11567 | 13550 | 2 | -| getPreValidationHooks | 11294 | 11294 | 11294 | 11294 | 1 | -| getSessionKeys | 8830 | 8893 | 8893 | 8956 | 4 | -| incrementCounter1 | 11974 | 11974 | 11974 | 11974 | 1 | -| incrementCounter2 | 16019 | 16019 | 16019 | 16019 | 1 | -| incrementCounter3 | 15738 | 15738 | 15738 | 15738 | 1 | -| initialize | 25519 | 688213 | 684251 | 1048115 | 272 | -| installPlugin | 2472 | 311939 | 264580 | 810888 | 438 | -| isOwner | 5268 | 8518 | 8518 | 11768 | 2 | -| isSessionKey | 11990 | 11990 | 11990 | 11990 | 2 | -| isValidSignature | 14150 | 14150 | 14150 | 14150 | 1 | -| onERC1155BatchReceived | 2881 | 3515 | 3833 | 3833 | 3 | -| onERC1155Received | 2881 | 3256 | 3444 | 3444 | 3 | -| onERC721Received | 2881 | 3094 | 3201 | 3201 | 3 | -| owners | 11961 | 12961 | 12961 | 13961 | 2 | -| passthroughExecute | 12209 | 22336 | 12523 | 55065 | 7 | -| passthroughExecuteFromPlugin | 11246 | 13772 | 13772 | 16299 | 2 | -| passthroughExecuteWith1Eth | 17524 | 41836 | 41836 | 66148 | 2 | -| passthroughExecuteWithNativeTokenSpendPermission | 33078 | 33078 | 33078 | 33078 | 1 | -| performEFPCall | 76331 | 76331 | 76331 | 76331 | 1 | -| performEFPCallWithExecHooks | 39211 | 39211 | 39211 | 39211 | 1 | -| performIncrement | 59305 | 59305 | 59305 | 59305 | 1 | -| proxiableUUID | 334 | 334 | 334 | 334 | 2 | -| registerKey | 51421 | 51421 | 51421 | 51421 | 59 | -| rotateKey | 31600 | 31600 | 31600 | 31600 | 2 | -| setNumberCounter1 | 55540 | 55540 | 55540 | 55540 | 2 | -| setNumberCounter2 | 52826 | 52826 | 52826 | 52826 | 1 | -| setNumberCounter3 | 15747 | 15747 | 15747 | 15747 | 1 | -| someExecutionFunction | 881 | 1981 | 1981 | 3082 | 2 | -| supportsInterface | 322 | 1144 | 550 | 2550 | 12 | -| tokensReceived | 2881 | 3166 | 3309 | 3309 | 3 | -| uninstallPlugin | 16415 | 50859 | 46149 | 168249 | 54 | -| updateKeyPermissions | 8285 | 50243 | 36465 | 160281 | 102 | -| updateSessionKeys | 5046 | 51767 | 47944 | 221455 | 72 | -| upgradeToAndCall | 23256 | 23256 | 23256 | 23256 | 1 | -| useEFPPermissionAllowed | 41789 | 41789 | 41789 | 41789 | 1 | -| useEFPPermissionNotAllowed | 13534 | 13534 | 13534 | 13534 | 1 | -| validateUserOp | 412 | 55506 | 61509 | 84413 | 76 | - - -| src/factory/MultiOwnerMSCAFactory.sol:MultiOwnerMSCAFactory contract | | | | | | -|----------------------------------------------------------------------|-----------------|--------|--------|--------|---------| -| Deployment Cost | Deployment Size | | | | | -| 991201 | 5345 | | | | | -| Function Name | min | avg | median | max | # calls | -| addStake | 55742 | 56867 | 55742 | 60242 | 4 | -| createAccount | 5992 | 792303 | 794391 | 822792 | 264 | -| getAddress | 5400 | 5421 | 5400 | 5616 | 50 | -| unlockStake | 3653 | 3653 | 3653 | 3653 | 2 | -| withdraw | 7555 | 7555 | 7555 | 7555 | 1 | -| withdrawStake | 2141 | 5583 | 5583 | 9026 | 2 | - - -| src/factory/MultiOwnerTokenReceiverMSCAFactory.sol:MultiOwnerTokenReceiverMSCAFactory contract | | | | | | -|------------------------------------------------------------------------------------------------|-----------------|--------|---------|---------|---------| -| Deployment Cost | Deployment Size | | | | | -| 1047645 | 5760 | | | | | -| Function Name | min | avg | median | max | # calls | -| addStake | 55764 | 56889 | 55764 | 60264 | 4 | -| createAccount | 6060 | 995865 | 1162083 | 1162083 | 7 | -| getAddress | 5638 | 5638 | 5638 | 5638 | 1 | -| unlockStake | 3653 | 3653 | 3653 | 3653 | 2 | -| withdraw | 7585 | 7585 | 7585 | 7585 | 1 | -| withdrawStake | 2141 | 5583 | 5583 | 9026 | 2 | - - -| src/plugins/TokenReceiverPlugin.sol:TokenReceiverPlugin contract | | | | | | -|------------------------------------------------------------------|-----------------|------|--------|------|---------| -| Deployment Cost | Deployment Size | | | | | -| 684523 | 3447 | | | | | -| Function Name | min | avg | median | max | # calls | -| onERC1155BatchReceived | 1204 | 1204 | 1204 | 1204 | 2 | -| onERC1155Received | 876 | 876 | 876 | 876 | 2 | -| onERC721Received | 639 | 639 | 639 | 639 | 2 | -| onInstall | 529 | 529 | 529 | 529 | 12 | -| pluginManifest | 8477 | 8477 | 8477 | 8477 | 29 | -| supportsInterface | 280 | 301 | 312 | 312 | 39 | -| tokensReceived | 735 | 735 | 735 | 735 | 2 | - - -| src/plugins/owner/MultiOwnerPlugin.sol:MultiOwnerPlugin contract | | | | | | -|------------------------------------------------------------------|-----------------|-------|--------|-------|---------| -| Deployment Cost | Deployment Size | | | | | -| 1685744 | 9757 | | | | | -| Function Name | min | avg | median | max | # calls | -| eip712Domain | 1609 | 1609 | 1609 | 1609 | 1 | -| getMessageHash | 1767 | 1767 | 1767 | 1767 | 3 | -| isOwner | 730 | 1587 | 730 | 2730 | 7 | -| isOwnerOf | 1088 | 2421 | 3088 | 3088 | 6 | -| isValidSignature | 5582 | 8456 | 7582 | 12204 | 3 | -| onInstall | 1076 | 49531 | 46421 | 92365 | 287 | -| onUninstall | 7492 | 12442 | 12442 | 17392 | 4 | -| owners | 1540 | 3959 | 3475 | 7411 | 6 | -| ownersOf | 1259 | 3436 | 2709 | 10101 | 8 | -| pluginManifest | 19107 | 19107 | 19107 | 19107 | 542 | -| runtimeValidationFunction | 0 | 1854 | 1345 | 3373 | 743 | -| supportsInterface | 296 | 317 | 328 | 328 | 1611 | -| updateOwners | 1630 | 17787 | 17837 | 32518 | 6 | -| userOpValidationFunction | 5224 | 7200 | 5225 | 21756 | 15 | +| addSessionKey | 6197 | 83343 | 94889 | 107889 | 119 | +| checkResultEFPExternal | 24815 | 24815 | 24815 | 24815 | 1 | +| checkResultEFPFallback | 28743 | 28743 | 28743 | 28743 | 1 | +| entryPoint | 441 | 441 | 441 | 441 | 2 | +| execute | 2079 | 22173 | 14553 | 46171 | 17 | +| executeBatch | 9968 | 148956 | 135620 | 714628 | 15 | +| executeFromPlugin | 776 | 14601 | 10373 | 29614 | 7 | +| executeFromPluginExternal | 914 | 19298 | 12537 | 44296 | 108 | +| executeWithSessionKey | 6004 | 42533 | 24286 | 162773 | 74 | +| executionFunction | 1318 | 71302 | 52661 | 203949 | 84 | +| foo | 5840 | 8090 | 8090 | 10340 | 2 | +| getExecutionFunctionConfig | 5922 | 6775 | 6064 | 8683 | 7 | +| getExecutionHooks | 13594 | 16961 | 14544 | 22746 | 3 | +| getInstalledPlugins | 1256 | 2136 | 1256 | 5978 | 7 | +| getNonce | 1712 | 3962 | 3962 | 6212 | 2 | +| getNumberCounter1 | 16257 | 16257 | 16257 | 16257 | 2 | +| getNumberCounter2 | 13970 | 13970 | 13970 | 13970 | 1 | +| getNumberCounter3 | 16917 | 16917 | 16917 | 16917 | 1 | +| getPreValidationHooks | 11363 | 11363 | 11363 | 11363 | 1 | +| incrementCounter1 | 12398 | 12398 | 12398 | 12398 | 1 | +| incrementCounter2 | 13399 | 13399 | 13399 | 13399 | 1 | +| incrementCounter3 | 16694 | 16694 | 16694 | 16694 | 1 | +| initialize | 24956 | 594222 | 583332 | 2900454 | 315 | +| installPlugin | 2288 | 279414 | 181150 | 810298 | 448 | +| isValidSignature | 9379 | 15478 | 12228 | 28077 | 4 | +| onERC1155BatchReceived | 4638 | 12256 | 12256 | 19874 | 2 | +| onERC1155Received | 4308 | 10584 | 10584 | 16861 | 2 | +| onERC721Received | 3916 | 10058 | 10058 | 16201 | 2 | +| passthroughExecute | 5779 | 19039 | 10136 | 46702 | 11 | +| passthroughExecuteFromPlugin | 12105 | 15138 | 15138 | 18172 | 2 | +| passthroughExecuteWith1Eth | 18369 | 38076 | 38076 | 57784 | 2 | +| passthroughExecuteWithNativeTokenSpendPermission | 26758 | 26758 | 26758 | 26758 | 1 | +| performEFPCallWithExecHooks | 39119 | 39119 | 39119 | 39119 | 1 | +| proxiableUUID | 356 | 356 | 356 | 356 | 3 | +| removeSessionKey | 9735 | 9735 | 9735 | 9735 | 3 | +| rotateSessionKey | 10574 | 37142 | 46484 | 58904 | 5 | +| setNumberCounter1 | 46731 | 46731 | 46731 | 46731 | 2 | +| setNumberCounter2 | 44228 | 44228 | 44228 | 44228 | 1 | +| setNumberCounter3 | 16702 | 16702 | 16702 | 16702 | 1 | +| someExecutionFunction | 1774 | 2883 | 2883 | 3992 | 2 | +| supportsInterface | 347 | 826 | 440 | 2738 | 69 | +| tokensReceived | 4090 | 10637 | 10637 | 17184 | 2 | +| uninstallPlugin | 19034 | 48873 | 40845 | 166565 | 76 | +| updateKeyPermissions | 8856 | 46779 | 37545 | 161001 | 154 | +| updateOwners | 30350 | 30350 | 30350 | 30350 | 1 | +| upgradeToAndCall | 12280 | 16243 | 16243 | 20206 | 2 | +| useEFPPermissionAllowed | 41693 | 41693 | 41693 | 41693 | 1 | +| useEFPPermissionNotAllowed | 14334 | 14334 | 14334 | 14334 | 1 | +| validateUserOp | 413 | 55446 | 49863 | 218253 | 164 | + + +| src/factory/MultiOwnerModularAccountFactory.sol:MultiOwnerModularAccountFactory contract | | | | | | +|------------------------------------------------------------------------------------------|-----------------|--------|--------|---------|---------| +| Deployment Cost | Deployment Size | | | | | +| 1134166 | 6072 | | | | | +| Function Name | min | avg | median | max | # calls | +| acceptOwnership | 4009 | 4009 | 4009 | 4009 | 1 | +| addStake | 55648 | 56773 | 55648 | 60148 | 4 | +| createAccount | 1067 | 706738 | 698409 | 3091701 | 315 | +| getAddress | 571 | 6746 | 6012 | 65265 | 50 | +| owner | 394 | 1060 | 394 | 2394 | 3 | +| transferOwnership | 24405 | 24405 | 24405 | 24405 | 1 | +| unlockStake | 3663 | 3663 | 3663 | 3663 | 2 | +| withdraw | 7595 | 7595 | 7595 | 7595 | 1 | +| withdrawStake | 2142 | 5572 | 5572 | 9003 | 2 | + + +| src/plugins/owner/MultiOwnerPlugin.sol:MultiOwnerPlugin contract | | | | | | +|------------------------------------------------------------------|-----------------|-------|--------|---------|---------| +| Deployment Cost | Deployment Size | | | | | +| 1677439 | 8439 | | | | | +| Function Name | min | avg | median | max | # calls | +| eip712Domain | 1419 | 1419 | 1419 | 1419 | 1 | +| getMessageHash | 2055 | 2055 | 2055 | 2055 | 4 | +| isOwnerOf | 2987 | 2987 | 2987 | 2987 | 7 | +| isValidSignature | 5886 | 13802 | 11313 | 24879 | 8 | +| onInstall | 998 | 64926 | 49176 | 2356160 | 334 | +| onUninstall | 10416 | 14243 | 12872 | 21842 | 6 | +| ownersOf | 931 | 3860 | 2547 | 8855 | 10 | +| pluginManifest | 16109 | 16109 | 16109 | 16109 | 633 | +| runtimeValidationFunction | 0 | 2020 | 1244 | 3254 | 830 | +| supportsInterface | 296 | 313 | 322 | 322 | 1500 | +| updateOwners | 1435 | 22167 | 28356 | 32356 | 13 | +| userOpValidationFunction | 5108 | 10633 | 7108 | 26345 | 17 | | src/plugins/session/SessionKeyPlugin.sol:SessionKeyPlugin contract | | | | | | |--------------------------------------------------------------------|-----------------|-------|--------|--------|---------| | Deployment Cost | Deployment Size | | | | | -| 1462737 | 7334 | | | | | +| 2921406 | 14619 | | | | | | Function Name | min | avg | median | max | # calls | -| findPredecessor | 2387 | 2949 | 3087 | 3373 | 3 | -| getSessionKeys | 2286 | 2349 | 2349 | 2412 | 4 | -| isSessionKey | 2952 | 2952 | 2952 | 2952 | 2 | -| isSessionKeyOf | 721 | 2054 | 2721 | 2721 | 3 | -| onInstall | 3478 | 4091 | 3478 | 46407 | 70 | -| pluginManifest | 9625 | 9625 | 9625 | 9625 | 142 | -| supportsInterface | 296 | 317 | 328 | 328 | 213 | -| updateSessionKeys | 1688 | 46179 | 43752 | 206220 | 72 | -| userOpValidationFunction | 699 | 8755 | 8711 | 10343 | 53 | - - -| src/plugins/session/permissions/SessionKeyPermissionsPlugin.sol:SessionKeyPermissionsPlugin contract | | | | | | -|------------------------------------------------------------------------------------------------------|-----------------|-------|--------|--------|---------| -| Deployment Cost | Deployment Size | | | | | -| 2018553 | 10110 | | | | | -| Function Name | min | avg | median | max | # calls | -| getAccessControlType | 5576 | 5576 | 5576 | 5576 | 3 | -| getERC20SpendLimitInfo | 2511 | 7511 | 7511 | 12511 | 2 | -| getGasSpendLimit | 4507 | 5336 | 5336 | 6165 | 2 | -| getKeyTimeRange | 1494 | 1494 | 1494 | 1494 | 1 | -| getNativeTokenSpendLimitInfo | 2543 | 7543 | 7543 | 12543 | 2 | -| getRequiredPaymaster | 1744 | 1799 | 1799 | 1854 | 2 | -| onInstall | 517 | 517 | 517 | 517 | 59 | -| pluginManifest | 13092 | 13092 | 13092 | 13092 | 118 | -| preUserOpValidationHook | 2517 | 17996 | 14286 | 34296 | 49 | -| registerKey | 47247 | 47247 | 47247 | 47247 | 59 | -| rotateKey | 23426 | 23426 | 23426 | 23426 | 2 | -| supportsInterface | 299 | 320 | 331 | 331 | 177 | -| updateKeyPermissions | 4339 | 40400 | 28026 | 145028 | 102 | +| addSessionKey | 972 | 76792 | 89879 | 91879 | 119 | +| executeWithSessionKey | 3246 | 38854 | 21662 | 157850 | 73 | +| findPredecessor | 1553 | 2369 | 2420 | 3553 | 9 | +| getAccessControlEntry | 1727 | 3727 | 3727 | 5727 | 4 | +| getAccessControlType | 1449 | 4020 | 5449 | 5449 | 7 | +| getERC20SpendLimitInfo | 2145 | 2700 | 2145 | 12145 | 36 | +| getGasSpendLimit | 2220 | 2640 | 2220 | 5797 | 18 | +| getKeyTimeRange | 1372 | 2038 | 1372 | 3372 | 3 | +| getNativeTokenSpendLimitInfo | 2271 | 3021 | 2271 | 12271 | 16 | +| getRequiredPaymaster | 1617 | 1672 | 1672 | 1727 | 2 | +| isSelectorOnAccessControlList | 1814 | 2814 | 2814 | 3814 | 2 | +| isSessionKeyOf | 703 | 1015 | 703 | 2703 | 32 | +| onInstall | 2302 | 13967 | 4302 | 723420 | 90 | +| onUninstall | 3754 | 10904 | 13639 | 15319 | 3 | +| pluginManifest | 13991 | 13991 | 13991 | 13991 | 184 | +| removeSessionKey | 2536 | 2536 | 2536 | 2536 | 3 | +| resetSessionKeyGasLimitTimestamp | 1590 | 1590 | 1590 | 1590 | 1 | +| rotateSessionKey | 1305 | 28381 | 39280 | 49900 | 5 | +| sessionKeysOf | 1614 | 2869 | 1677 | 10703 | 8 | +| supportsInterface | 299 | 316 | 325 | 325 | 273 | +| updateKeyPermissions | 3836 | 37198 | 32486 | 144924 | 154 | +| userOpValidationFunction | 850 | 17853 | 15432 | 42865 | 113 | | test/Utils.sol:Utils contract | | | | | | |-------------------------------|-----------------|------|--------|------|---------| | Deployment Cost | Deployment Size | | | | | -| 111774 | 590 | | | | | +| 111574 | 589 | | | | | | Function Name | min | avg | median | max | # calls | -| reverseAddressArray | 1513 | 1652 | 1513 | 1930 | 3 | +| reverseAddressArray | 1415 | 1537 | 1415 | 1783 | 3 | + + +| test/account/AccountExecHooks.t.sol:UpgradeableModularAccountExecHooksTest contract | | | | | | +|-------------------------------------------------------------------------------------|-----------------|---------|---------|---------|---------| +| Deployment Cost | Deployment Size | | | | | +| 18224465 | 90790 | | | | | +| Function Name | min | avg | median | max | # calls | +| installPlugin2WithHooksNoSuccessCheck | 1502299 | 1502299 | 1502299 | 1502299 | 1 | + +| test/account/AccountPreValidationHooks.t.sol:UpgradeableModularAccountPreValidationHooksTest contract | | | | | | +|-------------------------------------------------------------------------------------------------------|-----------------|---------|---------|---------|---------| +| Deployment Cost | Deployment Size | | | | | +| 19808006 | 98687 | | | | | +| Function Name | min | avg | median | max | # calls | +| installPlugin2WithpreRuntimeValidationHookNoSuccessCheck | 1486520 | 1486520 | 1486520 | 1486520 | 1 | -| test/factory/MultiOwnerMSCAFactoryTest.t.sol:MultiOwnerMSCAFactoryTest contract | | | | | | -|---------------------------------------------------------------------------------|-----------------|-----|--------|-----|---------| -| Deployment Cost | Deployment Size | | | | | -| 14310646 | 70879 | | | | | -| Function Name | min | avg | median | max | # calls | -| receive | 67 | 67 | 67 | 67 | 2 | +| test/account/TokenReceiver.t.sol:TokenReceiverTest contract | | | | | | +|-------------------------------------------------------------|-----------------|------|--------|------|---------| +| Deployment Cost | Deployment Size | | | | | +| 20998014 | 104619 | | | | | +| Function Name | min | avg | median | max | # calls | +| onERC1155Received | 1198 | 1198 | 1198 | 1198 | 40 | -| test/factory/MultiOwnerTokenReceiverFactoryTest.t.sol:MultiOwnerTokenReceiverMSCAFactoryTest contract | | | | | | -|-------------------------------------------------------------------------------------------------------|-----------------|-----|--------|-----|---------| -| Deployment Cost | Deployment Size | | | | | -| 19522188 | 96970 | | | | | -| Function Name | min | avg | median | max | # calls | -| receive | 67 | 67 | 67 | 67 | 2 | +| test/factory/MultiOwnerMAFactoryTest.t.sol:MultiOwnerModularAccountFactoryTest contract | | | | | | +|-----------------------------------------------------------------------------------------|-----------------|-----|--------|-----|---------| +| Deployment Cost | Deployment Size | | | | | +| 15313995 | 75884 | | | | | +| Function Name | min | avg | median | max | # calls | +| receive | 67 | 67 | 67 | 67 | 2 | -| test/mocks/ContractOwner.sol:ContractOwner contract | | | | | | -|-----------------------------------------------------|-----------------|-----|--------|-----|---------| -| Deployment Cost | Deployment Size | | | | | -| 106959 | 562 | | | | | -| Function Name | min | avg | median | max | # calls | -| isValidSignature | 803 | 803 | 803 | 803 | 2 | -| sign | 635 | 635 | 635 | 635 | 2 | + +| test/mocks/ContractOwner.sol:ContractOwner contract | | | | | | +|-----------------------------------------------------|-----------------|------|--------|------|---------| +| Deployment Cost | Deployment Size | | | | | +| 209775 | 1112 | | | | | +| Function Name | min | avg | median | max | # calls | +| isValidSignature | 779 | 3571 | 3571 | 6364 | 4 | +| sign | 638 | 638 | 638 | 638 | 2 | | test/mocks/Counter.sol:Counter contract | | | | | | |-----------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 44699 | 250 | | | | | +| 49705 | 275 | | | | | | Function Name | min | avg | median | max | # calls | -| increment | 418 | 20578 | 22318 | 22318 | 81 | -| number | 280 | 530 | 280 | 2280 | 16 | -| setNumber | 2350 | 17827 | 22250 | 22250 | 9 | -| supportsInterface | 138 | 138 | 138 | 138 | 17 | +| increment | 418 | 19400 | 22318 | 22318 | 90 | +| number | 280 | 667 | 280 | 2280 | 31 | +| setNumber | 2350 | 16350 | 22250 | 22250 | 10 | +| supportsInterface | 138 | 138 | 138 | 138 | 26 | | test/mocks/MockDiamondStorageContract.sol:MockDiamondStorageContract contract | | | | | | |-------------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 76923 | 395 | | | | | +| 82129 | 421 | | | | | | Function Name | min | avg | median | max | # calls | -| initialize | 502 | 10627 | 10627 | 20753 | 2 | +| initialize | 496 | 10624 | 10624 | 20753 | 2 | | test/mocks/MockPlugin.sol:MockPlugin contract | | | | | | |-----------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 1258990 | 7651 | | | | | +| 1094762 | 7309 | | | | | | Function Name | min | avg | median | max | # calls | -| onHookApply | 3892 | 3935 | 3892 | 4154 | 6 | -| onHookUnapply | 3892 | 4023 | 4023 | 4154 | 2 | -| onInstall | 2844 | 2844 | 2844 | 2844 | 132 | -| onUninstall | 2844 | 2844 | 2844 | 2844 | 37 | -| pluginManifest | 12781 | 16763 | 17305 | 35875 | 311 | -| postExecutionHook | 3106 | 3300 | 3368 | 3368 | 31 | -| preExecutionHook | 0 | 4336 | 4407 | 5717 | 29 | -| preRuntimeValidationHook | 0 | 3243 | 3892 | 3892 | 6 | -| preUserOpValidationHook | 8083 | 8083 | 8083 | 8083 | 5 | -| supportsInterface | 238 | 238 | 238 | 238 | 501 | +| executionFunction | 2302 | 2302 | 2302 | 2302 | 6 | +| onInstall | 2826 | 2826 | 2826 | 2826 | 134 | +| onUninstall | 2826 | 2826 | 2826 | 2826 | 44 | +| pluginManifest | 11925 | 14401 | 14043 | 34358 | 243 | +| postExecutionHook | 3088 | 3219 | 3219 | 3350 | 34 | +| preExecutionHook | 0 | 4542 | 4371 | 8564 | 28 | +| preRuntimeValidationHook | 0 | 3099 | 3874 | 3874 | 5 | +| preUserOpValidationHook | 8065 | 8065 | 8065 | 8065 | 4 | +| supportsInterface | 247 | 247 | 247 | 247 | 432 | + + +| test/mocks/plugins/AccountStateMutatingPlugin.sol:AccountStateMutatingPlugin contract | | | | | | +|---------------------------------------------------------------------------------------|-----------------|--------|--------|--------|---------| +| Deployment Cost | Deployment Size | | | | | +| 1526206 | 7651 | | | | | +| Function Name | min | avg | median | max | # calls | +| configureInstall | 2967 | 21919 | 22867 | 22867 | 84 | +| executionFunction | 2467 | 12772 | 2467 | 180600 | 72 | +| onInstall | 458 | 458 | 458 | 458 | 84 | +| onUninstall | 502 | 502 | 502 | 502 | 14 | +| pluginManifest | 3559 | 5671 | 5945 | 7627 | 182 | +| postExecutionHook | 2689 | 30162 | 2689 | 158909 | 19 | +| preExecutionHook | 3065 | 33101 | 3065 | 159285 | 28 | +| preRuntimeValidationHook | 35020 | 99065 | 113542 | 180882 | 17 | +| preUserOpValidationHook | 35042 | 91784 | 111397 | 180909 | 17 | +| runtimeValidationFunction | 2949 | 42542 | 2949 | 181080 | 30 | +| setCallback | 116345 | 158996 | 138527 | 460837 | 84 | +| supportsInterface | 254 | 271 | 280 | 280 | 252 | +| userOpValidationFunction | 2824 | 42426 | 2824 | 180961 | 30 | | test/mocks/plugins/ChangingManifestPlugin.sol:CanChangeManifestPlugin contract | | | | | | |--------------------------------------------------------------------------------|-----------------|--------|--------|--------|---------| | Deployment Cost | Deployment Size | | | | | -| 1441976 | 7257 | | | | | +| 1479810 | 7446 | | | | | | Function Name | min | avg | median | max | # calls | -| changeManifest | 505966 | 505966 | 505966 | 505966 | 1 | -| onInstall | 554 | 554 | 554 | 554 | 1 | -| pluginManifest | 4025 | 4025 | 4025 | 4025 | 2 | -| supportsInterface | 245 | 266 | 277 | 277 | 3 | +| changeManifest | 511435 | 511435 | 511435 | 511435 | 1 | +| onInstall | 512 | 512 | 512 | 512 | 1 | +| pluginManifest | 3706 | 3706 | 3706 | 3706 | 2 | +| supportsInterface | 251 | 268 | 277 | 277 | 3 | | test/mocks/plugins/ChangingManifestPlugin.sol:CanChangeManifestPluginFactory contract | | | | | | |---------------------------------------------------------------------------------------|-----------------|---------|---------|---------|---------| | Deployment Cost | Deployment Size | | | | | -| 1742637 | 8732 | | | | | +| 1787487 | 8956 | | | | | | Function Name | min | avg | median | max | # calls | -| newPlugin | 1574162 | 1574162 | 1574162 | 1574162 | 1 | +| newPlugin | 1616431 | 1616431 | 1616431 | 1616431 | 1 | | test/mocks/plugins/ChangingManifestPlugin.sol:DidChangeManifestPlugin contract | | | | | | |--------------------------------------------------------------------------------|-----------------|------|--------|------|---------| | Deployment Cost | Deployment Size | | | | | -| 471312 | 2382 | | | | | +| 476919 | 2410 | | | | | | Function Name | min | avg | median | max | # calls | -| onUninstall | 554 | 554 | 554 | 554 | 1 | -| pluginManifest | 2478 | 2478 | 2478 | 2478 | 1 | -| someExecutionFunction | 225 | 225 | 225 | 225 | 1 | +| onUninstall | 491 | 491 | 491 | 491 | 1 | +| pluginManifest | 2225 | 2225 | 2225 | 2225 | 1 | +| someExecutionFunction | 228 | 228 | 228 | 228 | 1 | | test/mocks/plugins/ComprehensivePlugin.sol:ComprehensivePlugin contract | | | | | | |-------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 848491 | 4266 | | | | | +| 848891 | 4268 | | | | | | Function Name | min | avg | median | max | # calls | -| onInstall | 470 | 470 | 470 | 470 | 12 | -| onUninstall | 536 | 536 | 536 | 536 | 2 | -| pluginManifest | 20888 | 20888 | 20888 | 20888 | 26 | -| supportsInterface | 239 | 260 | 271 | 271 | 36 | +| foo | 351 | 351 | 351 | 351 | 1 | +| onInstall | 424 | 424 | 424 | 424 | 12 | +| onUninstall | 468 | 468 | 468 | 468 | 2 | +| pluginManifest | 16903 | 16903 | 16903 | 16903 | 26 | +| postExecutionHook | 446 | 446 | 446 | 446 | 2 | +| preExecutionHook | 860 | 860 | 860 | 860 | 1 | +| supportsInterface | 242 | 259 | 268 | 268 | 36 | | test/mocks/plugins/ExecFromPluginPermissionsMocks.sol:EFPCallerPlugin contract | | | | | | |--------------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 923970 | 4643 | | | | | +| 969016 | 4868 | | | | | | Function Name | min | avg | median | max | # calls | -| getNumberCounter1 | 12579 | 12579 | 12579 | 12579 | 2 | -| getNumberCounter2 | 10102 | 10102 | 10102 | 10102 | 1 | -| getNumberCounter3 | 7060 | 7060 | 7060 | 7060 | 1 | -| incrementCounter1 | 5529 | 5529 | 5529 | 5529 | 1 | -| incrementCounter2 | 9493 | 9493 | 9493 | 9493 | 1 | -| incrementCounter3 | 6793 | 6793 | 6793 | 6793 | 1 | -| onInstall | 630 | 630 | 630 | 630 | 14 | -| passthroughExecuteFromPlugin | 2313 | 4839 | 4839 | 7366 | 2 | -| pluginManifest | 21408 | 21408 | 21408 | 21408 | 28 | -| setNumberCounter1 | 46508 | 46508 | 46508 | 46508 | 2 | -| setNumberCounter2 | 43794 | 43794 | 43794 | 43794 | 1 | -| setNumberCounter3 | 6790 | 6790 | 6790 | 6790 | 1 | -| supportsInterface | 245 | 266 | 277 | 277 | 42 | -| useEFPPermissionAllowed | 32745 | 32745 | 32745 | 32745 | 1 | -| useEFPPermissionNotAllowed | 4613 | 4613 | 4613 | 4613 | 1 | +| getNumberCounter1 | 8800 | 8800 | 8800 | 8800 | 2 | +| getNumberCounter2 | 6513 | 6513 | 6513 | 6513 | 1 | +| getNumberCounter3 | 6997 | 6997 | 6997 | 6997 | 1 | +| incrementCounter1 | 4978 | 4978 | 4978 | 4978 | 1 | +| incrementCounter2 | 5948 | 5948 | 5948 | 5948 | 1 | +| incrementCounter3 | 6774 | 6774 | 6774 | 6774 | 1 | +| onInstall | 583 | 583 | 583 | 583 | 13 | +| passthroughExecuteFromPlugin | 2197 | 5230 | 5230 | 8264 | 2 | +| pluginManifest | 20367 | 20367 | 20367 | 20367 | 26 | +| setNumberCounter1 | 36774 | 36774 | 36774 | 36774 | 2 | +| setNumberCounter2 | 34271 | 34271 | 34271 | 34271 | 1 | +| setNumberCounter3 | 6769 | 6769 | 6769 | 6769 | 1 | +| supportsInterface | 245 | 262 | 271 | 271 | 39 | +| useEFPPermissionAllowed | 31724 | 31724 | 31724 | 31724 | 1 | +| useEFPPermissionNotAllowed | 4438 | 4438 | 4438 | 4438 | 1 | | test/mocks/plugins/ExecFromPluginPermissionsMocks.sol:EFPCallerPluginAnyExternal contract | | | | | | |-------------------------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 566207 | 2856 | | | | | +| 577420 | 2912 | | | | | | Function Name | min | avg | median | max | # calls | -| onInstall | 488 | 488 | 488 | 488 | 14 | -| passthroughExecute | 4319 | 17925 | 9949 | 45991 | 7 | -| passthroughExecuteWith1Eth | 11085 | 35335 | 35335 | 59586 | 2 | -| pluginManifest | 5706 | 5706 | 5706 | 5706 | 28 | -| supportsInterface | 258 | 279 | 290 | 290 | 42 | +| onInstall | 432 | 432 | 432 | 432 | 13 | +| passthroughExecute | 2291 | 13777 | 6636 | 36702 | 11 | +| passthroughExecuteWith1Eth | 10955 | 30626 | 30626 | 50297 | 2 | +| pluginManifest | 5159 | 5159 | 5159 | 5159 | 26 | +| supportsInterface | 248 | 265 | 274 | 274 | 39 | | test/mocks/plugins/ExecFromPluginPermissionsMocks.sol:EFPCallerPluginAnyExternalCanSpendNativeToken contract | | | | | | |--------------------------------------------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 526369 | 2657 | | | | | +| 526569 | 2658 | | | | | | Function Name | min | avg | median | max | # calls | -| onInstall | 485 | 485 | 485 | 485 | 14 | -| passthroughExecuteWithNativeTokenSpendPermission | 24016 | 24016 | 24016 | 24016 | 1 | -| pluginManifest | 4446 | 4446 | 4446 | 4446 | 28 | -| supportsInterface | 258 | 279 | 290 | 290 | 42 | +| onInstall | 435 | 435 | 435 | 435 | 13 | +| passthroughExecuteWithNativeTokenSpendPermission | 16771 | 16771 | 16771 | 16771 | 1 | +| pluginManifest | 3975 | 3975 | 3975 | 3975 | 26 | +| supportsInterface | 251 | 268 | 277 | 277 | 39 | | test/mocks/plugins/ExecFromPluginPermissionsMocks.sol:EFPExecutionHookPlugin contract | | | | | | |---------------------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 589633 | 2973 | | | | | +| 597639 | 3013 | | | | | | Function Name | min | avg | median | max | # calls | -| onInstall | 497 | 497 | 497 | 497 | 14 | -| performEFPCallWithExecHooks | 30167 | 30167 | 30167 | 30167 | 1 | -| pluginManifest | 7855 | 7855 | 7855 | 7855 | 28 | -| postExecutionHook | 404 | 404 | 404 | 404 | 6 | -| preExecutionHook | 962 | 962 | 962 | 962 | 3 | -| supportsInterface | 242 | 263 | 274 | 274 | 42 | - - -| test/mocks/plugins/ExecFromPluginPermissionsMocks.sol:EFPExternalPermittedCallHookPlugin contract | | | | | | -|---------------------------------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| -| Deployment Cost | Deployment Size | | | | | -| 624465 | 3147 | | | | | -| Function Name | min | avg | median | max | # calls | -| onInstall | 528 | 528 | 528 | 528 | 14 | -| performIncrement | 52779 | 52779 | 52779 | 52779 | 1 | -| pluginManifest | 6080 | 6080 | 6080 | 6080 | 28 | -| postExecHookCalled | 379 | 379 | 379 | 379 | 2 | -| postExecutionHook | 1004 | 1004 | 1004 | 1004 | 1 | -| preExecHookCalled | 611 | 1611 | 1611 | 2611 | 2 | -| preExecutionHook | 21119 | 21119 | 21119 | 21119 | 1 | -| supportsInterface | 252 | 272 | 283 | 283 | 42 | - - -| test/mocks/plugins/ExecFromPluginPermissionsMocks.sol:EFPPermittedCallHookPlugin contract | | | | | | -|-------------------------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| -| Deployment Cost | Deployment Size | | | | | -| 628471 | 3167 | | | | | -| Function Name | min | avg | median | max | # calls | -| onInstall | 528 | 528 | 528 | 528 | 14 | -| performEFPCall | 69787 | 69787 | 69787 | 69787 | 1 | -| pluginManifest | 6382 | 6382 | 6382 | 6382 | 28 | -| postExecHookCalled | 402 | 402 | 402 | 402 | 2 | -| postExecutionHook | 1004 | 1004 | 1004 | 1004 | 1 | -| preExecHookCalled | 611 | 1611 | 1611 | 2611 | 2 | -| preExecutionHook | 21136 | 21136 | 21136 | 21136 | 1 | -| supportsInterface | 252 | 272 | 283 | 283 | 42 | +| onInstall | 456 | 456 | 456 | 456 | 13 | +| performEFPCallWithExecHooks | 29150 | 29150 | 29150 | 29150 | 1 | +| pluginManifest | 7353 | 7353 | 7353 | 7353 | 26 | +| postExecutionHook | 385 | 385 | 385 | 385 | 4 | +| preExecutionHook | 919 | 919 | 919 | 919 | 2 | +| supportsInterface | 248 | 265 | 274 | 274 | 39 | | test/mocks/plugins/ManifestValidityMocks.sol:BadHookMagicValue_PostExecHook_Plugin contract | | | | | | |---------------------------------------------------------------------------------------------|-----------------|------|--------|------|---------| | Deployment Cost | Deployment Size | | | | | -| 457500 | 2313 | | | | | +| 448087 | 2266 | | | | | | Function Name | min | avg | median | max | # calls | -| pluginManifest | 4974 | 4974 | 4974 | 4974 | 2 | -| supportsInterface | 258 | 279 | 290 | 290 | 3 | +| pluginManifest | 4482 | 4482 | 4482 | 4482 | 2 | +| supportsInterface | 251 | 268 | 277 | 277 | 3 | | test/mocks/plugins/ManifestValidityMocks.sol:BadHookMagicValue_RuntimeValidationFunction_Plugin contract | | | | | | |----------------------------------------------------------------------------------------------------------|-----------------|------|--------|------|---------| | Deployment Cost | Deployment Size | | | | | -| 447687 | 2264 | | | | | +| 437081 | 2211 | | | | | | Function Name | min | avg | median | max | # calls | -| pluginManifest | 4442 | 4442 | 4442 | 4442 | 2 | -| supportsInterface | 261 | 282 | 293 | 293 | 3 | +| pluginManifest | 3976 | 3976 | 3976 | 3976 | 2 | +| supportsInterface | 251 | 268 | 277 | 277 | 3 | | test/mocks/plugins/ManifestValidityMocks.sol:BadHookMagicValue_UserOpValidationFunction_Plugin contract | | | | | | |---------------------------------------------------------------------------------------------------------|-----------------|------|--------|------|---------| | Deployment Cost | Deployment Size | | | | | -| 446087 | 2256 | | | | | +| 437081 | 2211 | | | | | | Function Name | min | avg | median | max | # calls | -| pluginManifest | 4433 | 4433 | 4433 | 4433 | 2 | -| supportsInterface | 262 | 283 | 294 | 294 | 3 | +| pluginManifest | 3983 | 3983 | 3983 | 3983 | 2 | +| supportsInterface | 251 | 268 | 277 | 277 | 3 | | test/mocks/plugins/ManifestValidityMocks.sol:BadValidationMagicValue_PostExecHook_Plugin contract | | | | | | |---------------------------------------------------------------------------------------------------|-----------------|------|--------|------|---------| | Deployment Cost | Deployment Size | | | | | -| 458500 | 2318 | | | | | +| 447887 | 2265 | | | | | | Function Name | min | avg | median | max | # calls | -| pluginManifest | 4979 | 4979 | 4979 | 4979 | 2 | -| supportsInterface | 258 | 279 | 290 | 290 | 3 | +| pluginManifest | 4482 | 4482 | 4482 | 4482 | 2 | +| supportsInterface | 248 | 265 | 274 | 274 | 3 | | test/mocks/plugins/ManifestValidityMocks.sol:BadValidationMagicValue_PreExecHook_Plugin contract | | | | | | |--------------------------------------------------------------------------------------------------|-----------------|------|--------|------|---------| | Deployment Cost | Deployment Size | | | | | -| 458500 | 2318 | | | | | +| 447887 | 2265 | | | | | | Function Name | min | avg | median | max | # calls | -| pluginManifest | 4979 | 4979 | 4979 | 4979 | 2 | -| supportsInterface | 258 | 279 | 290 | 290 | 3 | +| pluginManifest | 4482 | 4482 | 4482 | 4482 | 2 | +| supportsInterface | 248 | 265 | 274 | 274 | 3 | | test/mocks/plugins/ManifestValidityMocks.sol:BadValidationMagicValue_PreRuntimeValidationHook_Plugin contract | | | | | | |---------------------------------------------------------------------------------------------------------------|-----------------|------|--------|------|---------| | Deployment Cost | Deployment Size | | | | | -| 465106 | 2351 | | | | | +| 454493 | 2298 | | | | | | Function Name | min | avg | median | max | # calls | -| pluginManifest | 5612 | 5612 | 5612 | 5612 | 2 | -| supportsInterface | 252 | 272 | 283 | 283 | 3 | +| pluginManifest | 5140 | 5140 | 5140 | 5140 | 2 | +| supportsInterface | 248 | 265 | 274 | 274 | 3 | | test/mocks/plugins/ManifestValidityMocks.sol:BadValidationMagicValue_PreUserOpValidationHook_Plugin contract | | | | | | |--------------------------------------------------------------------------------------------------------------|-----------------|------|--------|------|---------| | Deployment Cost | Deployment Size | | | | | -| 461706 | 2334 | | | | | +| 454493 | 2298 | | | | | | Function Name | min | avg | median | max | # calls | -| pluginManifest | 5619 | 5619 | 5619 | 5619 | 2 | -| supportsInterface | 258 | 279 | 290 | 290 | 3 | +| pluginManifest | 5155 | 5155 | 5155 | 5155 | 2 | +| supportsInterface | 248 | 265 | 274 | 274 | 3 | | test/mocks/plugins/ManifestValidityMocks.sol:BadValidationMagicValue_UserOp_Plugin contract | | | | | | |---------------------------------------------------------------------------------------------|-----------------|------|--------|------|---------| | Deployment Cost | Deployment Size | | | | | -| 445487 | 2253 | | | | | +| 436681 | 2209 | | | | | | Function Name | min | avg | median | max | # calls | -| pluginManifest | 4423 | 4423 | 4423 | 4423 | 2 | -| supportsInterface | 256 | 277 | 288 | 288 | 3 | +| pluginManifest | 3980 | 3980 | 3980 | 3980 | 2 | +| supportsInterface | 248 | 265 | 274 | 274 | 3 | | test/mocks/plugins/ReturnDataPluginMocks.sol:RegularResultContract contract | | | | | | @@ -585,116 +1040,116 @@ Generated via `bash utils/inspect.sh`. | test/mocks/plugins/ReturnDataPluginMocks.sol:ResultConsumerPlugin contract | | | | | | |----------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 684033 | 3647 | | | | | +| 675827 | 3606 | | | | | | Function Name | min | avg | median | max | # calls | -| checkResultEFPExternal | 24590 | 24590 | 24590 | 24590 | 1 | -| checkResultEFPFallback | 17549 | 17549 | 17549 | 17549 | 1 | -| onInstall | 526 | 526 | 526 | 526 | 5 | -| pluginManifest | 7713 | 7713 | 7713 | 7713 | 10 | -| supportsInterface | 252 | 272 | 283 | 283 | 15 | +| checkResultEFPExternal | 14846 | 14846 | 14846 | 14846 | 1 | +| checkResultEFPFallback | 18780 | 18780 | 18780 | 18780 | 1 | +| onInstall | 476 | 476 | 476 | 476 | 5 | +| pluginManifest | 7051 | 7051 | 7051 | 7051 | 10 | +| supportsInterface | 248 | 265 | 274 | 274 | 15 | | test/mocks/plugins/ReturnDataPluginMocks.sol:ResultCreatorPlugin contract | | | | | | |---------------------------------------------------------------------------|-----------------|------|--------|------|---------| | Deployment Cost | Deployment Size | | | | | -| 471112 | 2381 | | | | | +| 465506 | 2353 | | | | | | Function Name | min | avg | median | max | # calls | -| foo | 438 | 438 | 438 | 438 | 6 | -| onInstall | 485 | 485 | 485 | 485 | 19 | -| pluginManifest | 4631 | 4631 | 4631 | 4631 | 38 | -| supportsInterface | 256 | 277 | 288 | 288 | 57 | +| foo | 383 | 383 | 383 | 383 | 5 | +| onInstall | 432 | 432 | 432 | 432 | 18 | +| pluginManifest | 4136 | 4136 | 4136 | 4136 | 36 | +| supportsInterface | 248 | 265 | 274 | 274 | 54 | | test/mocks/plugins/UninstallErrorsPlugin.sol:UninstallErrorsPlugin contract | | | | | | |-----------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 509638 | 2596 | | | | | +| 510838 | 2602 | | | | | | Function Name | min | avg | median | max | # calls | -| onHookApply | 603 | 603 | 603 | 603 | 2 | -| onHookUnapply | 746 | 12439 | 791 | 47429 | 4 | -| onInstall | 588 | 588 | 588 | 588 | 4 | -| onUninstall | 715 | 19406 | 806 | 47398 | 5 | -| pluginManifest | 2456 | 2456 | 2456 | 2456 | 13 | -| supportsInterface | 245 | 266 | 277 | 277 | 12 | +| onInstall | 542 | 542 | 542 | 542 | 2 | +| onUninstall | 615 | 27755 | 718 | 69474 | 5 | +| pluginManifest | 2198 | 2198 | 2198 | 2198 | 9 | +| supportsInterface | 248 | 265 | 274 | 274 | 6 | | test/mocks/plugins/ValidationPluginMocks.sol:MockUserOpValidation1HookPlugin contract | | | | | | |---------------------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 492131 | 2486 | | | | | +| 494738 | 2499 | | | | | | Function Name | min | avg | median | max | # calls | -| onInstall | 482 | 482 | 482 | 482 | 10 | -| pluginManifest | 5614 | 5614 | 5614 | 5614 | 20 | -| preUserOpValidationHook | 672 | 672 | 672 | 672 | 7 | -| setValidationData | 24686 | 33214 | 24686 | 44586 | 7 | -| supportsInterface | 252 | 272 | 283 | 283 | 30 | -| userOpValidationFunction | 732 | 732 | 732 | 732 | 6 | +| onInstall | 432 | 432 | 432 | 432 | 10 | +| pluginManifest | 5158 | 5158 | 5158 | 5158 | 20 | +| preUserOpValidationHook | 614 | 614 | 614 | 614 | 7 | +| setValidationData | 24630 | 33158 | 24630 | 44530 | 7 | +| supportsInterface | 248 | 265 | 274 | 274 | 30 | +| userOpValidationFunction | 675 | 675 | 675 | 675 | 6 | | test/mocks/plugins/ValidationPluginMocks.sol:MockUserOpValidation2HookPlugin contract | | | | | | |---------------------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 523363 | 2642 | | | | | +| 525163 | 2651 | | | | | | Function Name | min | avg | median | max | # calls | -| onInstall | 479 | 479 | 479 | 479 | 10 | -| pluginManifest | 6608 | 6608 | 6608 | 6608 | 20 | -| preUserOpValidationHook | 669 | 678 | 678 | 688 | 4 | -| setValidationData | 26972 | 36922 | 36922 | 46872 | 2 | -| supportsInterface | 252 | 272 | 283 | 283 | 30 | -| userOpValidationFunction | 728 | 728 | 728 | 728 | 2 | - - -| test/mocks/plugins/ValidationPluginMocks.sol:MockUserOpValidationPlugin contract | | | | | | -|----------------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| -| Deployment Cost | Deployment Size | | | | | -| 470712 | 2379 | | | | | -| Function Name | min | avg | median | max | # calls | -| onInstall | 509 | 509 | 509 | 509 | 10 | -| pluginManifest | 4445 | 4445 | 4445 | 4445 | 20 | -| setValidationData | 22349 | 22349 | 22349 | 22349 | 1 | -| supportsInterface | 256 | 277 | 288 | 288 | 30 | -| userOpValidationFunction | 738 | 738 | 738 | 738 | 1 | - - -| test/mocks/tokens/MockERC1155.sol:MockERC1155 contract | | | | | | -|--------------------------------------------------------|-----------------|-------|--------|--------|---------| -| Deployment Cost | Deployment Size | | | | | -| 901342 | 4711 | | | | | -| Function Name | min | avg | median | max | # calls | -| balanceOf | 544 | 1544 | 1544 | 2544 | 40 | -| mint | 25610 | 26566 | 25610 | 27643 | 85 | -| safeBatchTransferFrom | 90663 | 97980 | 90663 | 112616 | 3 | -| safeTransferFrom | 27352 | 30797 | 27352 | 37689 | 3 | +| onInstall | 435 | 435 | 435 | 435 | 10 | +| pluginManifest | 6034 | 6034 | 6034 | 6034 | 20 | +| preUserOpValidationHook | 617 | 626 | 626 | 636 | 4 | +| setValidationData | 26927 | 36877 | 36877 | 46827 | 2 | +| supportsInterface | 251 | 268 | 277 | 277 | 30 | +| userOpValidationFunction | 676 | 676 | 676 | 676 | 2 | + + +| test/mocks/plugins/ValidationPluginMocks.sol:MockUserOpValidationPlugin contract | | | | | | +|----------------------------------------------------------------------------------|-----------------|------|--------|------|---------| +| Deployment Cost | Deployment Size | | | | | +| 475719 | 2404 | | | | | +| Function Name | min | avg | median | max | # calls | +| onInstall | 456 | 456 | 456 | 456 | 10 | +| pluginManifest | 4002 | 4002 | 4002 | 4002 | 20 | +| setValidationData | 2433 | 2433 | 2433 | 2433 | 1 | +| supportsInterface | 248 | 265 | 274 | 274 | 30 | +| userOpValidationFunction | 675 | 675 | 675 | 675 | 1 | + + +| test/mocks/tokens/MockERC1155.sol:MockERC1155 contract | | | | | | +|--------------------------------------------------------|-----------------|--------|--------|--------|---------| +| Deployment Cost | Deployment Size | | | | | +| 974215 | 5076 | | | | | +| Function Name | min | avg | median | max | # calls | +| balanceOf | 544 | 1544 | 1544 | 2544 | 20 | +| mint | 27565 | 27565 | 27565 | 27565 | 40 | +| safeBatchTransferFrom | 91140 | 106758 | 106758 | 122376 | 2 | +| safeTransferFrom | 35123 | 39899 | 39899 | 44676 | 2 | | test/mocks/tokens/MockERC20.sol:MockERC20 contract | | | | | | |----------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 520528 | 3351 | | | | | +| 561766 | 3557 | | | | | | Function Name | min | avg | median | max | # calls | -| approve | 24387 | 24387 | 24387 | 24387 | 1 | -| balanceOf | 2585 | 2585 | 2585 | 2585 | 4 | -| mint | 46550 | 46550 | 46550 | 46550 | 24 | +| approve | 2387 | 16679 | 24387 | 24387 | 14 | +| balanceOf | 2582 | 2582 | 2582 | 2582 | 4 | +| mint | 46550 | 46550 | 46550 | 46550 | 27 | +| supportsInterface | 347 | 347 | 347 | 347 | 38 | +| transfer | 2988 | 16288 | 24888 | 24888 | 25 | | test/mocks/tokens/MockERC777.sol:MockERC777 contract | | | | | | |------------------------------------------------------|-----------------|-------|--------|-------|---------| | Deployment Cost | Deployment Size | | | | | -| 450893 | 2280 | | | | | +| 465706 | 2354 | | | | | | Function Name | min | avg | median | max | # calls | -| balanceOf | 586 | 1586 | 1586 | 2586 | 8 | -| mint | 22563 | 22563 | 22563 | 22563 | 17 | -| transfer | 11782 | 19822 | 23843 | 23843 | 3 | +| balanceOf | 586 | 1586 | 1586 | 2586 | 4 | +| mint | 22563 | 22563 | 22563 | 22563 | 8 | +| transfer | 31564 | 36611 | 36611 | 41658 | 2 | -| test/plugin/TokenReceiverPlugin.t.sol:TokenReceiverPluginTest contract | | | | | | -|------------------------------------------------------------------------|-----------------|------|--------|------|---------| -| Deployment Cost | Deployment Size | | | | | -| 19205126 | 95680 | | | | | -| Function Name | min | avg | median | max | # calls | -| onERC1155Received | 1225 | 1225 | 1225 | 1225 | 40 | +| test/plugin/session/permissions/SessionKeyGasLimits.t.sol:SessionKeyGasLimitsTest contract | | | | | | +|--------------------------------------------------------------------------------------------|-----------------|-----|--------|-----|---------| +| Deployment Cost | Deployment Size | | | | | +| 22069805 | 109963 | | | | | +| Function Name | min | avg | median | max | # calls | +| supportsInterface | 732 | 732 | 732 | 732 | 4 | -Ran 31 test suites: 344 tests passed, 0 failed, 0 skipped (344 total tests) +Ran 32 test suites: 394 tests passed, 0 failed, 0 skipped (394 total tests) diff --git a/.storagelayout.md b/.storagelayout.md index adfce1a0..b89b6f2d 100644 --- a/.storagelayout.md +++ b/.storagelayout.md @@ -15,47 +15,43 @@ Generated via `bash utils/inspect.sh`. | Name | Type | Slot | Offset | Bytes | Contract | |------|------|------|--------|-------|----------| -`forge inspect --pretty src/account/PluginManagerInternals.sol:PluginManagerInternals storage-layout` +`forge inspect --pretty src/account/AccountStorageV1.sol:AccountStorageV1 storage-layout` | Name | Type | Slot | Offset | Bytes | Contract | |------|------|------|--------|-------|----------| -`forge inspect --pretty src/account/UpgradeableModularAccount.sol:UpgradeableModularAccount storage-layout` +`forge inspect --pretty src/account/PluginManagerInternals.sol:PluginManagerInternals storage-layout` | Name | Type | Slot | Offset | Bytes | Contract | |------|------|------|--------|-------|----------| -`forge inspect --pretty src/factory/MultiOwnerMSCAFactory.sol:MultiOwnerMSCAFactory storage-layout` -| Name | Type | Slot | Offset | Bytes | Contract | -|--------|---------|------|--------|-------|-------------------------------------------------------------| -| _owner | address | 0 | 0 | 20 | src/factory/MultiOwnerMSCAFactory.sol:MultiOwnerMSCAFactory | - -`forge inspect --pretty src/factory/MultiOwnerTokenReceiverMSCAFactory.sol:MultiOwnerTokenReceiverMSCAFactory storage-layout` -| Name | Type | Slot | Offset | Bytes | Contract | -|--------|---------|------|--------|-------|---------------------------------------------------------------------------------------| -| _owner | address | 0 | 0 | 20 | src/factory/MultiOwnerTokenReceiverMSCAFactory.sol:MultiOwnerTokenReceiverMSCAFactory | - -`forge inspect --pretty src/libraries/AccountStorageV1.sol:AccountStorageV1 storage-layout` +`forge inspect --pretty src/account/UpgradeableModularAccount.sol:UpgradeableModularAccount storage-layout` | Name | Type | Slot | Offset | Bytes | Contract | |------|------|------|--------|-------|----------| -`forge inspect --pretty src/plugins/BasePlugin.sol:BasePlugin storage-layout` -| Name | Type | Slot | Offset | Bytes | Contract | -|------|------|------|--------|-------|----------| +`forge inspect --pretty src/factory/MultiOwnerModularAccountFactory.sol:MultiOwnerModularAccountFactory storage-layout` +| Name | Type | Slot | Offset | Bytes | Contract | +|---------------|---------|------|--------|-------|---------------------------------------------------------------------------------| +| _owner | address | 0 | 0 | 20 | src/factory/MultiOwnerModularAccountFactory.sol:MultiOwnerModularAccountFactory | +| _pendingOwner | address | 1 | 0 | 20 | src/factory/MultiOwnerModularAccountFactory.sol:MultiOwnerModularAccountFactory | -`forge inspect --pretty src/plugins/TokenReceiverPlugin.sol:TokenReceiverPlugin storage-layout` +`forge inspect --pretty src/plugins/BasePlugin.sol:BasePlugin storage-layout` | Name | Type | Slot | Offset | Bytes | Contract | |------|------|------|--------|-------|----------| `forge inspect --pretty src/plugins/owner/MultiOwnerPlugin.sol:MultiOwnerPlugin storage-layout` -| Name | Type | Slot | Offset | Bytes | Contract | -|------------------|--------------------------------|------|--------|-------|---------------------------------------------------------| -| _nameFallback | string | 0 | 0 | 32 | src/plugins/owner/MultiOwnerPlugin.sol:MultiOwnerPlugin | -| _versionFallback | string | 1 | 0 | 32 | src/plugins/owner/MultiOwnerPlugin.sol:MultiOwnerPlugin | -| _owners | struct AssociatedLinkedListSet | 2 | 0 | 32 | src/plugins/owner/MultiOwnerPlugin.sol:MultiOwnerPlugin | +| Name | Type | Slot | Offset | Bytes | Contract | +|---------|--------------------------------|------|--------|-------|---------------------------------------------------------| +| _owners | struct AssociatedLinkedListSet | 0 | 0 | 32 | src/plugins/owner/MultiOwnerPlugin.sol:MultiOwnerPlugin | `forge inspect --pretty src/plugins/session/SessionKeyPlugin.sol:SessionKeyPlugin storage-layout` -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------|--------------------------------|------|--------|-------|-----------------------------------------------------------| -| _sessionKeys | struct AssociatedLinkedListSet | 0 | 0 | 32 | src/plugins/session/SessionKeyPlugin.sol:SessionKeyPlugin | +| Name | Type | Slot | Offset | Bytes | Contract | +|---------------|--------------------------------|------|--------|-------|-----------------------------------------------------------| +| _keyIdCounter | mapping(address => uint256) | 0 | 0 | 32 | src/plugins/session/SessionKeyPlugin.sol:SessionKeyPlugin | +| _sessionKeys | struct AssociatedLinkedListSet | 1 | 0 | 32 | src/plugins/session/SessionKeyPlugin.sol:SessionKeyPlugin | + +`forge inspect --pretty src/plugins/session/permissions/SessionKeyPermissions.sol:SessionKeyPermissions storage-layout` +| Name | Type | Slot | Offset | Bytes | Contract | +|---------------|-----------------------------|------|--------|-------|---------------------------------------------------------------------------------| +| _keyIdCounter | mapping(address => uint256) | 0 | 0 | 32 | src/plugins/session/permissions/SessionKeyPermissions.sol:SessionKeyPermissions | `forge inspect --pretty src/plugins/session/permissions/SessionKeyPermissionsBase.sol:SessionKeyPermissionsBase storage-layout` | Name | Type | Slot | Offset | Bytes | Contract | @@ -67,8 +63,3 @@ Generated via `bash utils/inspect.sh`. |---------------|-----------------------------|------|--------|-------|-------------------------------------------------------------------------------------------| | _keyIdCounter | mapping(address => uint256) | 0 | 0 | 32 | src/plugins/session/permissions/SessionKeyPermissionsLoupe.sol:SessionKeyPermissionsLoupe | -`forge inspect --pretty src/plugins/session/permissions/SessionKeyPermissionsPlugin.sol:SessionKeyPermissionsPlugin storage-layout` -| Name | Type | Slot | Offset | Bytes | Contract | -|---------------|-----------------------------|------|--------|-------|---------------------------------------------------------------------------------------------| -| _keyIdCounter | mapping(address => uint256) | 0 | 0 | 32 | src/plugins/session/permissions/SessionKeyPermissionsPlugin.sol:SessionKeyPermissionsPlugin | - diff --git a/README.md b/README.md index b0162108..cc967859 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ forge script script/Deploy.s.sol --rpc-url $RPC_URL --broadcast ## Security and Audits -We have done 2 audits from Spearbit and Quantstamp and will upload the reports shortly. +We have done 2 audits from Spearbit and Quantstamp and will upload the reports shortly. Note that these audit reports may contain references to "MSCA". This was the name we used for Modular Account previously. ## License diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index 4a27565f..2c10a5c2 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -20,11 +20,11 @@ pragma solidity ^0.8.22; import {Script} from "forge-std/Script.sol"; import {console} from "forge-std/Test.sol"; -import {IEntryPoint} from "@eth-infinitism/account-abstraction/interfaces/IEntryPoint.sol"; +import {IEntryPoint as I4337EntryPoint} from "@eth-infinitism/account-abstraction/interfaces/IEntryPoint.sol"; import {UpgradeableModularAccount} from "../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../src/factory/MultiOwnerMSCAFactory.sol"; -import {IEntryPoint as IMSCAEntryPoint} from "../src/interfaces/erc4337/IEntryPoint.sol"; +import {MultiOwnerModularAccountFactory} from "../src/factory/MultiOwnerModularAccountFactory.sol"; +import {IEntryPoint} from "../src/interfaces/erc4337/IEntryPoint.sol"; import {BasePlugin} from "../src/plugins/BasePlugin.sol"; import {MultiOwnerPlugin} from "../src/plugins/owner/MultiOwnerPlugin.sol"; import {SessionKeyPlugin} from "../src/plugins/session/SessionKeyPlugin.sol"; @@ -32,16 +32,15 @@ import {SessionKeyPlugin} from "../src/plugins/session/SessionKeyPlugin.sol"; contract Deploy is Script { // Load entrypoint from env address public entryPointAddr = vm.envAddress("ENTRYPOINT"); - IMSCAEntryPoint public entryPoint = IMSCAEntryPoint(payable(entryPointAddr)); + IEntryPoint public entryPoint = IEntryPoint(payable(entryPointAddr)); // Load factory owner from env address public owner = vm.envAddress("OWNER"); // Load core contract, if not in env, deploy new contract - address public mscaImpl = vm.envOr("MSCA_IMPL", address(0)); + address public maImpl = vm.envOr("MA_IMPL", address(0)); address public ownerFactoryAddr = vm.envOr("OWNER_FACTORY", address(0)); - address public ownerAndTokenReceiverFactoryAddr = vm.envOr("OWNER_TOKEN_RECEIVER_FACTORY", address(0)); - MultiOwnerMSCAFactory ownerFactory; + MultiOwnerModularAccountFactory ownerFactory; // Load plugins contract, if not in env, deploy new contract address public multiOwnerPlugin = vm.envOr("OWNER_PLUGIN", address(0)); @@ -57,13 +56,13 @@ contract Deploy is Script { uint256 deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); vm.startBroadcast(deployerPrivateKey); - // Deploy msca impl - if (mscaImpl == address(0)) { - UpgradeableModularAccount msca = new UpgradeableModularAccount(entryPoint); - mscaImpl = address(msca); - console.log("New MSCA impl: ", mscaImpl); + // Deploy ma impl + if (maImpl == address(0)) { + UpgradeableModularAccount ma = new UpgradeableModularAccount(entryPoint); + maImpl = address(ma); + console.log("New MA impl: ", maImpl); } else { - console.log("Exist MSCA impl: ", mscaImpl); + console.log("Exist MA impl: ", maImpl); } // Deploy multi owner plugin, and set plugin hash @@ -76,17 +75,17 @@ contract Deploy is Script { } multiOwnerPluginManifestHash = keccak256(abi.encode(BasePlugin(multiOwnerPlugin).pluginManifest())); - // Deploy MultiOwnerMSCAFactory, and add stake with EP + // Deploy MultiOwnerModularAccountFactory, and add stake with EP if (ownerFactoryAddr == address(0)) { - ownerFactory = new MultiOwnerMSCAFactory( - owner, multiOwnerPlugin, mscaImpl, multiOwnerPluginManifestHash, entryPoint + ownerFactory = new MultiOwnerModularAccountFactory( + owner, multiOwnerPlugin, maImpl, multiOwnerPluginManifestHash, entryPoint ); ownerFactoryAddr = address(ownerFactory); - console.log("New MultiOwnerMSCAFactory: ", ownerFactoryAddr); + console.log("New MultiOwnerModularAccountFactory: ", ownerFactoryAddr); } else { - console.log("Exist MultiOwnerMSCAFactory: ", ownerFactoryAddr); + console.log("Exist MultiOwnerModularAccountFactory: ", ownerFactoryAddr); } _addStakeForFactory(ownerFactoryAddr, entryPoint); @@ -103,19 +102,21 @@ contract Deploy is Script { vm.stopBroadcast(); } - function _addStakeForFactory(address factoryAddr, IMSCAEntryPoint anEntryPoint) internal { + function _addStakeForFactory(address factoryAddr, IEntryPoint anEntryPoint) internal { uint32 unstakeDelaySec = uint32(vm.envOr("UNSTAKE_DELAY_SEC", uint32(60))); uint256 requiredStakeAmount = vm.envUint("REQUIRED_STAKE_AMOUNT") * 1 ether; - uint256 currentStakedAmount = IEntryPoint(address(anEntryPoint)).getDepositInfo(factoryAddr).stake; + uint256 currentStakedAmount = I4337EntryPoint(address(anEntryPoint)).getDepositInfo(factoryAddr).stake; uint256 stakeAmount = requiredStakeAmount - currentStakedAmount; // since all factory share the same addStake method, it does not matter which contract we use to cast the // address - MultiOwnerMSCAFactory(payable(factoryAddr)).addStake{value: stakeAmount}(unstakeDelaySec, stakeAmount); + MultiOwnerModularAccountFactory(payable(factoryAddr)).addStake{value: stakeAmount}( + unstakeDelaySec, stakeAmount + ); console.log("******** Add Stake Verify *********"); console.log("Staked factory: ", factoryAddr); - console.log("Stake amount: ", IEntryPoint(address(anEntryPoint)).getDepositInfo(factoryAddr).stake); + console.log("Stake amount: ", I4337EntryPoint(address(anEntryPoint)).getDepositInfo(factoryAddr).stake); console.log( - "Unstake delay: ", IEntryPoint(address(anEntryPoint)).getDepositInfo(factoryAddr).unstakeDelaySec + "Unstake delay: ", I4337EntryPoint(address(anEntryPoint)).getDepositInfo(factoryAddr).unstakeDelaySec ); console.log("******** Stake Verify Done *********"); } diff --git a/src/factory/MultiOwnerMSCAFactory.sol b/src/factory/MultiOwnerModularAccountFactory.sol similarity index 98% rename from src/factory/MultiOwnerMSCAFactory.sol rename to src/factory/MultiOwnerModularAccountFactory.sol index 35a451bb..00f5c65f 100644 --- a/src/factory/MultiOwnerMSCAFactory.sol +++ b/src/factory/MultiOwnerModularAccountFactory.sol @@ -27,12 +27,12 @@ import {FactoryHelpers} from "../helpers/FactoryHelpers.sol"; import {IEntryPoint} from "../interfaces/erc4337/IEntryPoint.sol"; import {IAccountInitializable} from "../interfaces/IAccountInitializable.sol"; -/// @title Multi Owner Plugin MSCA (Modular Smart Contract Account) Factory +/// @title Multi Owner Plugin Modular Account Factory /// @author Alchemy /// @notice Factory for upgradeable modular accounts with MultiOwnerPlugin installed. /// @dev There is a reliance on the assumption that the plugin manifest will remain static, following ERC-6900. If /// this assumption is broken then account deployments would be bricked. -contract MultiOwnerMSCAFactory is Ownable2Step { +contract MultiOwnerModularAccountFactory is Ownable2Step { IEntryPoint public immutable ENTRYPOINT; address public immutable MULTI_OWNER_PLUGIN; address public immutable IMPL; diff --git a/test/account/AccountExecHooks.t.sol b/test/account/AccountExecHooks.t.sol index 2226587b..6843717b 100644 --- a/test/account/AccountExecHooks.t.sol +++ b/test/account/AccountExecHooks.t.sol @@ -24,7 +24,7 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {PluginManagerInternals} from "../../src/account/PluginManagerInternals.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../src/factory/MultiOwnerModularAccountFactory.sol"; import {FunctionReferenceLib} from "../../src/helpers/FunctionReferenceLib.sol"; import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import { @@ -44,7 +44,7 @@ contract UpgradeableModularAccountExecHooksTest is Test { IEntryPoint public entryPoint; MultiOwnerPlugin public multiOwnerPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; MockPlugin public mockPlugin1; MockPlugin public mockPlugin2; bytes32 public manifestHash1; @@ -73,7 +73,7 @@ contract UpgradeableModularAccountExecHooksTest is Test { (owner1, owner1Key) = makeAddrAndKey("owner1"); address impl = address(new UpgradeableModularAccount(IEntryPoint(address(entryPoint)))); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), impl, diff --git a/test/account/AccountLoupe.t.sol b/test/account/AccountLoupe.t.sol index 18e74803..bdecc8c9 100644 --- a/test/account/AccountLoupe.t.sol +++ b/test/account/AccountLoupe.t.sol @@ -23,7 +23,7 @@ import {EntryPoint} from "@eth-infinitism/account-abstraction/core/EntryPoint.so import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../src/factory/MultiOwnerModularAccountFactory.sol"; import {FunctionReferenceLib} from "../../src/helpers/FunctionReferenceLib.sol"; import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import {IAccountLoupe} from "../../src/interfaces/IAccountLoupe.sol"; @@ -43,7 +43,7 @@ import {ComprehensivePlugin} from "../mocks/plugins/ComprehensivePlugin.sol"; contract AccountLoupeTest is Test { IEntryPoint public entryPoint; MultiOwnerPlugin public multiOwnerPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; ComprehensivePlugin public comprehensivePlugin; UpgradeableModularAccount public account1; @@ -58,7 +58,7 @@ contract AccountLoupeTest is Test { multiOwnerPlugin = new MultiOwnerPlugin(); address impl = address(new UpgradeableModularAccount(entryPoint)); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), impl, diff --git a/test/account/AccountPreValidationHooks.t.sol b/test/account/AccountPreValidationHooks.t.sol index ae645343..d6824247 100644 --- a/test/account/AccountPreValidationHooks.t.sol +++ b/test/account/AccountPreValidationHooks.t.sol @@ -24,7 +24,7 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {PluginManagerInternals} from "../../src/account/PluginManagerInternals.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../src/factory/MultiOwnerModularAccountFactory.sol"; import {FunctionReferenceLib} from "../../src/helpers/FunctionReferenceLib.sol"; import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import {UserOperation} from "../../src/interfaces/erc4337/UserOperation.sol"; @@ -46,7 +46,7 @@ contract UpgradeableModularAccountPreValidationHooksTest is Test { IEntryPoint public entryPoint; address payable public beneficiary; MultiOwnerPlugin public multiOwnerPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; MockPlugin public mockPlugin1; MockPlugin public mockPlugin2; bytes32 public manifestHash1; @@ -77,7 +77,7 @@ contract UpgradeableModularAccountPreValidationHooksTest is Test { address impl = address(new UpgradeableModularAccount(entryPoint)); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), impl, diff --git a/test/account/AccountReturnData.t.sol b/test/account/AccountReturnData.t.sol index 269331f9..d1f0c03a 100644 --- a/test/account/AccountReturnData.t.sol +++ b/test/account/AccountReturnData.t.sol @@ -22,7 +22,7 @@ import {Test} from "forge-std/Test.sol"; import {EntryPoint} from "@eth-infinitism/account-abstraction/core/EntryPoint.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../src/factory/MultiOwnerModularAccountFactory.sol"; import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import {FunctionReference} from "../../src/interfaces/IPluginManager.sol"; import {Call} from "../../src/interfaces/IStandardExecutor.sol"; @@ -37,7 +37,7 @@ import { contract AccountReturnDataTest is Test { IEntryPoint public entryPoint; // Just to be able to construct the factory MultiOwnerPlugin public multiOwnerPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; RegularResultContract public regularResultContract; ResultCreatorPlugin public resultCreatorPlugin; @@ -50,7 +50,7 @@ contract AccountReturnDataTest is Test { multiOwnerPlugin = new MultiOwnerPlugin(); address impl = address(new UpgradeableModularAccount(entryPoint)); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), impl, diff --git a/test/account/ExecuteFromPluginPermissions.t.sol b/test/account/ExecuteFromPluginPermissions.t.sol index 54a31967..5f91aede 100644 --- a/test/account/ExecuteFromPluginPermissions.t.sol +++ b/test/account/ExecuteFromPluginPermissions.t.sol @@ -22,7 +22,7 @@ import {Test, console} from "forge-std/Test.sol"; import {EntryPoint} from "@eth-infinitism/account-abstraction/core/EntryPoint.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../src/factory/MultiOwnerModularAccountFactory.sol"; import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import {IPlugin} from "../../src/interfaces/IPlugin.sol"; import {FunctionReference} from "../../src/interfaces/IPluginManager.sol"; @@ -44,7 +44,7 @@ contract ExecuteFromPluginPermissionsTest is Test { IEntryPoint public entryPoint; // Just to be able to construct the factory MultiOwnerPlugin public multiOwnerPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; UpgradeableModularAccount public account; EFPCallerPlugin public efpCallerPlugin; @@ -64,7 +64,7 @@ contract ExecuteFromPluginPermissionsTest is Test { multiOwnerPlugin = new MultiOwnerPlugin(); address impl = address(new UpgradeableModularAccount(entryPoint)); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), impl, diff --git a/test/account/ManifestValidity.t.sol b/test/account/ManifestValidity.t.sol index e08ffa64..780e215f 100644 --- a/test/account/ManifestValidity.t.sol +++ b/test/account/ManifestValidity.t.sol @@ -23,7 +23,7 @@ import {EntryPoint} from "@eth-infinitism/account-abstraction/core/EntryPoint.so import {PluginManagerInternals} from "../../src/account/PluginManagerInternals.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../src/factory/MultiOwnerModularAccountFactory.sol"; import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import {FunctionReference} from "../../src/interfaces/IPluginManager.sol"; import {MultiOwnerPlugin} from "../../src/plugins/owner/MultiOwnerPlugin.sol"; @@ -41,7 +41,7 @@ import { contract ManifestValidityTest is Test { IEntryPoint public entryPoint; // Just to be able to construct the factory MultiOwnerPlugin public multiOwnerPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; UpgradeableModularAccount public account; @@ -50,7 +50,7 @@ contract ManifestValidityTest is Test { multiOwnerPlugin = new MultiOwnerPlugin(); address impl = address(new UpgradeableModularAccount(entryPoint)); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), impl, diff --git a/test/account/TokenReceiver.t.sol b/test/account/TokenReceiver.t.sol index 1d664799..bd6b468b 100644 --- a/test/account/TokenReceiver.t.sol +++ b/test/account/TokenReceiver.t.sol @@ -27,7 +27,7 @@ import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Recei import {IERC777Recipient} from "@openzeppelin/contracts/token/ERC777/IERC777Recipient.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../src/factory/MultiOwnerModularAccountFactory.sol"; import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import { IPlugin, @@ -49,7 +49,7 @@ contract TokenReceiverTest is Test, IERC1155Receiver { MockERC777 public t1; MockERC1155 public t2; MockPlugin public mockPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; MultiOwnerPlugin public multiOwnerPlugin; IEntryPoint public entryPoint; @@ -69,7 +69,7 @@ contract TokenReceiverTest is Test, IERC1155Receiver { function setUp() public { entryPoint = IEntryPoint(address(new EntryPoint())); multiOwnerPlugin = new MultiOwnerPlugin(); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), address(new UpgradeableModularAccount(entryPoint)), diff --git a/test/account/UpgradeableModularAccount.t.sol b/test/account/UpgradeableModularAccount.t.sol index 20acf6bb..b9cee4f6 100644 --- a/test/account/UpgradeableModularAccount.t.sol +++ b/test/account/UpgradeableModularAccount.t.sol @@ -26,7 +26,7 @@ import {EntryPoint} from "@eth-infinitism/account-abstraction/core/EntryPoint.so import {AccountExecutor} from "../../src/account/AccountExecutor.sol"; import {PluginManagerInternals} from "../../src/account/PluginManagerInternals.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../src/factory/MultiOwnerModularAccountFactory.sol"; import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import {UserOperation} from "../../src/interfaces/erc4337/UserOperation.sol"; import {IAccountInitializable} from "../../src/interfaces/IAccountInitializable.sol"; @@ -46,7 +46,7 @@ contract UpgradeableModularAccountTest is Test { address payable public beneficiary; MultiOwnerPlugin public multiOwnerPlugin; SessionKeyPlugin public sessionKeyPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; address public accountImplementation; address public owner1; @@ -77,7 +77,7 @@ contract UpgradeableModularAccountTest is Test { sessionKeyPlugin = new SessionKeyPlugin(); accountImplementation = address(new UpgradeableModularAccount(entryPoint)); bytes32 manifestHash = keccak256(abi.encode(multiOwnerPlugin.pluginManifest())); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), accountImplementation, manifestHash, entryPoint ); diff --git a/test/account/UpgradeableModularAccountPluginManager.t.sol b/test/account/UpgradeableModularAccountPluginManager.t.sol index a90869fe..327e7544 100644 --- a/test/account/UpgradeableModularAccountPluginManager.t.sol +++ b/test/account/UpgradeableModularAccountPluginManager.t.sol @@ -25,7 +25,7 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {PluginManagerInternals} from "../../src/account/PluginManagerInternals.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../src/factory/MultiOwnerModularAccountFactory.sol"; import {FunctionReferenceLib} from "../../src/helpers/FunctionReferenceLib.sol"; import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import {IAccountLoupe} from "../../src/interfaces/IAccountLoupe.sol"; @@ -52,7 +52,7 @@ contract UpgradeableModularAccountPluginManagerTest is Test { address payable public beneficiary; MultiOwnerPlugin public multiOwnerPlugin; SessionKeyPlugin public sessionKeyPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; address public implementation; address public owner1; @@ -87,7 +87,7 @@ contract UpgradeableModularAccountPluginManagerTest is Test { sessionKeyPlugin = new SessionKeyPlugin(); implementation = address(new UpgradeableModularAccount(entryPoint)); bytes32 manifestHash = keccak256(abi.encode(multiOwnerPlugin.pluginManifest())); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), implementation, manifestHash, entryPoint ); diff --git a/test/account/ValidationIntersection.t.sol b/test/account/ValidationIntersection.t.sol index 3c68d7d3..ec062a10 100644 --- a/test/account/ValidationIntersection.t.sol +++ b/test/account/ValidationIntersection.t.sol @@ -22,7 +22,7 @@ import {Test} from "forge-std/Test.sol"; import {EntryPoint} from "@eth-infinitism/account-abstraction/core/EntryPoint.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../src/factory/MultiOwnerModularAccountFactory.sol"; import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import {UserOperation} from "../../src/interfaces/erc4337/UserOperation.sol"; import {FunctionReference} from "../../src/interfaces/IPluginManager.sol"; @@ -52,7 +52,7 @@ contract ValidationIntersectionTest is Test { MultiOwnerPlugin multiOwnerPlugin = new MultiOwnerPlugin(); address impl = address(new UpgradeableModularAccount(entryPoint)); - MultiOwnerMSCAFactory factory = new MultiOwnerMSCAFactory( + MultiOwnerModularAccountFactory factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), impl, diff --git a/test/account/phases/AccountStatePhases.t.sol b/test/account/phases/AccountStatePhases.t.sol index 00cbf663..16b35afb 100644 --- a/test/account/phases/AccountStatePhases.t.sol +++ b/test/account/phases/AccountStatePhases.t.sol @@ -23,7 +23,7 @@ import {EntryPoint} from "@eth-infinitism/account-abstraction/core/EntryPoint.so import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {UpgradeableModularAccount} from "../../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../../src/factory/MultiOwnerModularAccountFactory.sol"; import {FunctionReferenceLib} from "../../../src/helpers/FunctionReferenceLib.sol"; import {IEntryPoint} from "../../../src/interfaces/erc4337/IEntryPoint.sol"; import {UserOperation} from "../../../src/interfaces/erc4337/UserOperation.sol"; @@ -62,7 +62,7 @@ contract AccountStatePhasesTest is Test { IEntryPoint public entryPoint; MultiOwnerPlugin public multiOwnerPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; address payable beneficiary; address public owner1; @@ -104,7 +104,7 @@ contract AccountStatePhasesTest is Test { beneficiary = payable(makeAddr("beneficiary")); address accountImpl = address(new UpgradeableModularAccount(IEntryPoint(address(entryPoint)))); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), accountImpl, diff --git a/test/factory/MultiOwnerMSCAFactoryTest.t.sol b/test/factory/MultiOwnerMAFactoryTest.t.sol similarity index 89% rename from test/factory/MultiOwnerMSCAFactoryTest.t.sol rename to test/factory/MultiOwnerMAFactoryTest.t.sol index 6512e5ab..2f76a19c 100644 --- a/test/factory/MultiOwnerMSCAFactoryTest.t.sol +++ b/test/factory/MultiOwnerMAFactoryTest.t.sol @@ -23,15 +23,15 @@ import {EntryPoint} from "@eth-infinitism/account-abstraction/core/EntryPoint.so import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../src/factory/MultiOwnerModularAccountFactory.sol"; import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import {MultiOwnerPlugin} from "../../src/plugins/owner/MultiOwnerPlugin.sol"; -contract MultiOwnerMSCAFactoryTest is Test { +contract MultiOwnerModularAccountFactoryTest is Test { using ECDSA for bytes32; EntryPoint public entryPoint; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; MultiOwnerPlugin public multiOwnerPlugin; address public impl; @@ -54,7 +54,7 @@ contract MultiOwnerMSCAFactoryTest is Test { impl = address(new UpgradeableModularAccount(IEntryPoint(address(entryPoint)))); multiOwnerPlugin = new MultiOwnerPlugin(); bytes32 manifestHash = keccak256(abi.encode(multiOwnerPlugin.pluginManifest())); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), impl, manifestHash, IEntryPoint(address(entryPoint)) ); for (uint160 i = 0; i < _MAX_OWNERS_ON_CREATION; i++) { @@ -105,18 +105,18 @@ contract MultiOwnerMSCAFactoryTest is Test { } function test_badOwnersArray() public { - vm.expectRevert(MultiOwnerMSCAFactory.OwnersArrayEmpty.selector); + vm.expectRevert(MultiOwnerModularAccountFactory.OwnersArrayEmpty.selector); factory.getAddress(0, new address[](0)); address[] memory badOwners = new address[](2); - vm.expectRevert(MultiOwnerMSCAFactory.InvalidOwner.selector); + vm.expectRevert(MultiOwnerModularAccountFactory.InvalidOwner.selector); factory.getAddress(0, badOwners); badOwners[0] = address(1); badOwners[1] = address(1); - vm.expectRevert(MultiOwnerMSCAFactory.InvalidOwner.selector); + vm.expectRevert(MultiOwnerModularAccountFactory.InvalidOwner.selector); factory.getAddress(0, badOwners); } @@ -167,7 +167,7 @@ contract MultiOwnerMSCAFactoryTest is Test { function test_getAddressWithTooManyOwners() public { largeOwners.push(address(101)); - vm.expectRevert(MultiOwnerMSCAFactory.OwnersLimitExceeded.selector); + vm.expectRevert(MultiOwnerModularAccountFactory.OwnersLimitExceeded.selector); factory.getAddress(0, largeOwners); } @@ -175,7 +175,7 @@ contract MultiOwnerMSCAFactoryTest is Test { address[] memory tempOwners = new address[](2); tempOwners[0] = address(2); tempOwners[1] = address(1); - vm.expectRevert(MultiOwnerMSCAFactory.InvalidOwner.selector); + vm.expectRevert(MultiOwnerModularAccountFactory.InvalidOwner.selector); factory.getAddress(0, tempOwners); } @@ -183,7 +183,7 @@ contract MultiOwnerMSCAFactoryTest is Test { address[] memory tempOwners = new address[](2); tempOwners[0] = address(1); tempOwners[1] = address(1); - vm.expectRevert(MultiOwnerMSCAFactory.InvalidOwner.selector); + vm.expectRevert(MultiOwnerModularAccountFactory.InvalidOwner.selector); factory.createAccount(0, tempOwners); } @@ -191,7 +191,7 @@ contract MultiOwnerMSCAFactoryTest is Test { address[] memory tempOwners = new address[](2); tempOwners[0] = address(2); tempOwners[1] = address(1); - vm.expectRevert(MultiOwnerMSCAFactory.InvalidOwner.selector); + vm.expectRevert(MultiOwnerModularAccountFactory.InvalidOwner.selector); factory.createAccount(0, tempOwners); } diff --git a/test/plugin/owner/MultiOwnerPluginIntegration.t.sol b/test/plugin/owner/MultiOwnerPluginIntegration.t.sol index 8eecb80e..ee6894d9 100644 --- a/test/plugin/owner/MultiOwnerPluginIntegration.t.sol +++ b/test/plugin/owner/MultiOwnerPluginIntegration.t.sol @@ -24,7 +24,7 @@ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {UpgradeableModularAccount} from "../../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../../src/factory/MultiOwnerModularAccountFactory.sol"; import {IEntryPoint} from "../../../src/interfaces/erc4337/IEntryPoint.sol"; import {UserOperation} from "../../../src/interfaces/erc4337/UserOperation.sol"; import {FunctionReference} from "../../../src/interfaces/IPluginManager.sol"; @@ -43,7 +43,7 @@ contract MultiOwnerPluginIntegration is Test { IEntryPoint public entryPoint; MultiOwnerPlugin public multiOwnerPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; Counter public counter; address payable public beneficiary; @@ -70,7 +70,7 @@ contract MultiOwnerPluginIntegration is Test { // setup plugins and factory multiOwnerPlugin = new MultiOwnerPlugin(); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), address(new UpgradeableModularAccount(IEntryPoint(address(entryPoint)))), @@ -78,7 +78,7 @@ contract MultiOwnerPluginIntegration is Test { entryPoint ); - // setup account with MultiOwnerMSCAFactory + // setup account with MultiOwnerModularAccountFactory owners = new address[](2); owners[0] = owner1 > owner2 ? owner2 : owner1; owners[1] = owner2 > owner1 ? owner2 : owner1; diff --git a/test/plugin/session/SessionKeyPluginWithMultiOwner.t.sol b/test/plugin/session/SessionKeyPluginWithMultiOwner.t.sol index f08f8964..96c1ae13 100644 --- a/test/plugin/session/SessionKeyPluginWithMultiOwner.t.sol +++ b/test/plugin/session/SessionKeyPluginWithMultiOwner.t.sol @@ -25,7 +25,7 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {ISessionKeyPermissionsUpdates} from "../../../src/plugins/session/permissions/ISessionKeyPermissionsUpdates.sol"; import {UpgradeableModularAccount} from "../../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../../src/factory/MultiOwnerModularAccountFactory.sol"; import {FunctionReferenceLib} from "../../../src/helpers/FunctionReferenceLib.sol"; import {IEntryPoint} from "../../../src/interfaces/erc4337/IEntryPoint.sol"; import {UserOperation} from "../../../src/interfaces/erc4337/UserOperation.sol"; @@ -43,7 +43,7 @@ contract SessionKeyPluginWithMultiOwnerTest is Test { IEntryPoint entryPoint; address payable beneficiary; MultiOwnerPlugin multiOwnerPlugin; - MultiOwnerMSCAFactory factory; + MultiOwnerModularAccountFactory factory; SessionKeyPlugin sessionKeyPlugin; address owner1; @@ -72,7 +72,7 @@ contract SessionKeyPluginWithMultiOwnerTest is Test { multiOwnerPlugin = new MultiOwnerPlugin(); address impl = address(new UpgradeableModularAccount(entryPoint)); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), impl, diff --git a/test/plugin/session/permissions/SessionKeyERC20SpendLimits.t.sol b/test/plugin/session/permissions/SessionKeyERC20SpendLimits.t.sol index b386b199..3d42de09 100644 --- a/test/plugin/session/permissions/SessionKeyERC20SpendLimits.t.sol +++ b/test/plugin/session/permissions/SessionKeyERC20SpendLimits.t.sol @@ -25,7 +25,7 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {ISessionKeyPermissionsUpdates} from "../../../../src/plugins/session/permissions/ISessionKeyPermissionsUpdates.sol"; import {UpgradeableModularAccount} from "../../../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../../../src/factory/MultiOwnerModularAccountFactory.sol"; import {FunctionReferenceLib} from "../../../../src/helpers/FunctionReferenceLib.sol"; import {IEntryPoint} from "../../../../src/interfaces/erc4337/IEntryPoint.sol"; import {UserOperation} from "../../../../src/interfaces/erc4337/UserOperation.sol"; @@ -44,7 +44,7 @@ contract SessionKeyERC20SpendLimitsTest is Test { address payable beneficiary; MultiOwnerPlugin public multiOwnerPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; SessionKeyPlugin sessionKeyPlugin; address owner1; @@ -73,7 +73,7 @@ contract SessionKeyERC20SpendLimitsTest is Test { vm.deal(beneficiary, 1 wei); multiOwnerPlugin = new MultiOwnerPlugin(); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), address(new UpgradeableModularAccount(entryPoint)), diff --git a/test/plugin/session/permissions/SessionKeyGasLimits.t.sol b/test/plugin/session/permissions/SessionKeyGasLimits.t.sol index 795c422c..4111a1b1 100644 --- a/test/plugin/session/permissions/SessionKeyGasLimits.t.sol +++ b/test/plugin/session/permissions/SessionKeyGasLimits.t.sol @@ -25,7 +25,7 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {ISessionKeyPermissionsUpdates} from "../../../../src/plugins/session/permissions/ISessionKeyPermissionsUpdates.sol"; import {UpgradeableModularAccount} from "../../../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../../../src/factory/MultiOwnerModularAccountFactory.sol"; import {FunctionReferenceLib} from "../../../../src/helpers/FunctionReferenceLib.sol"; import {IEntryPoint} from "../../../../src/interfaces/erc4337/IEntryPoint.sol"; import {UserOperation} from "../../../../src/interfaces/erc4337/UserOperation.sol"; @@ -43,7 +43,7 @@ contract SessionKeyGasLimitsTest is Test { address payable beneficiary; MultiOwnerPlugin public multiOwnerPlugin; - MultiOwnerMSCAFactory public factory; + MultiOwnerModularAccountFactory public factory; SessionKeyPlugin sessionKeyPlugin; address owner1; @@ -64,7 +64,7 @@ contract SessionKeyGasLimitsTest is Test { vm.deal(beneficiary, 1 wei); multiOwnerPlugin = new MultiOwnerPlugin(); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), address(new UpgradeableModularAccount(entryPoint)), diff --git a/test/plugin/session/permissions/SessionKeyNativeTokenSpendLimits.t.sol b/test/plugin/session/permissions/SessionKeyNativeTokenSpendLimits.t.sol index cd863a58..8c3a006d 100644 --- a/test/plugin/session/permissions/SessionKeyNativeTokenSpendLimits.t.sol +++ b/test/plugin/session/permissions/SessionKeyNativeTokenSpendLimits.t.sol @@ -25,7 +25,7 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {ISessionKeyPermissionsUpdates} from "../../../../src/plugins/session/permissions/ISessionKeyPermissionsUpdates.sol"; import {UpgradeableModularAccount} from "../../../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../../../src/factory/MultiOwnerModularAccountFactory.sol"; import {FunctionReferenceLib} from "../../../../src/helpers/FunctionReferenceLib.sol"; import {IEntryPoint} from "../../../../src/interfaces/erc4337/IEntryPoint.sol"; import {UserOperation} from "../../../../src/interfaces/erc4337/UserOperation.sol"; @@ -43,7 +43,7 @@ contract SessionKeyNativeTokenSpendLimitsTest is Test { address payable beneficiary; MultiOwnerPlugin multiOwnerPlugin; - MultiOwnerMSCAFactory factory; + MultiOwnerModularAccountFactory factory; SessionKeyPlugin sessionKeyPlugin; address owner1; @@ -70,7 +70,7 @@ contract SessionKeyNativeTokenSpendLimitsTest is Test { multiOwnerPlugin = new MultiOwnerPlugin(); bytes32 multiOwnerPluginManifestHash = keccak256(abi.encode(multiOwnerPlugin.pluginManifest())); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), address(new UpgradeableModularAccount(entryPoint)), diff --git a/test/plugin/session/permissions/SessionKeyPermissions.t.sol b/test/plugin/session/permissions/SessionKeyPermissions.t.sol index e474f6b8..45b99504 100644 --- a/test/plugin/session/permissions/SessionKeyPermissions.t.sol +++ b/test/plugin/session/permissions/SessionKeyPermissions.t.sol @@ -25,7 +25,7 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {ISessionKeyPermissionsUpdates} from "../../../../src/plugins/session/permissions/ISessionKeyPermissionsUpdates.sol"; import {UpgradeableModularAccount} from "../../../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../../../src/factory/MultiOwnerModularAccountFactory.sol"; import {FunctionReferenceLib} from "../../../../src/helpers/FunctionReferenceLib.sol"; import {IEntryPoint} from "../../../../src/interfaces/erc4337/IEntryPoint.sol"; import {UserOperation} from "../../../../src/interfaces/erc4337/UserOperation.sol"; @@ -43,7 +43,7 @@ contract SessionKeyPermissionsTest is Test { IEntryPoint entryPoint; address payable beneficiary; MultiOwnerPlugin multiOwnerPlugin; - MultiOwnerMSCAFactory factory; + MultiOwnerModularAccountFactory factory; SessionKeyPlugin sessionKeyPlugin; FunctionReference[] dependencies; @@ -77,7 +77,7 @@ contract SessionKeyPermissionsTest is Test { multiOwnerPlugin = new MultiOwnerPlugin(); address impl = address(new UpgradeableModularAccount(entryPoint)); - factory = new MultiOwnerMSCAFactory( + factory = new MultiOwnerModularAccountFactory( address(this), address(multiOwnerPlugin), impl, diff --git a/test/upgrade/LightAccountToMSCA.t.sol b/test/upgrade/LightAccountToModularAccount.t.sol similarity index 81% rename from test/upgrade/LightAccountToMSCA.t.sol rename to test/upgrade/LightAccountToModularAccount.t.sol index 867b9fbd..8298006d 100644 --- a/test/upgrade/LightAccountToMSCA.t.sol +++ b/test/upgrade/LightAccountToModularAccount.t.sol @@ -22,16 +22,16 @@ import {Test} from "forge-std/Test.sol"; import {LightAccount} from "@alchemy/light-account/src/LightAccount.sol"; import {LightAccountFactory} from "@alchemy/light-account/src/LightAccountFactory.sol"; import {EntryPoint} from "@eth-infinitism/account-abstraction/core/EntryPoint.sol"; -import {IEntryPoint} from "@eth-infinitism/account-abstraction/interfaces/IEntryPoint.sol"; +import {IEntryPoint as I4337EntryPoint} from "@eth-infinitism/account-abstraction/interfaces/IEntryPoint.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {IEntryPoint as IMSCAEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; +import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import {MultiOwnerPlugin} from "../../src/plugins/owner/MultiOwnerPlugin.sol"; import {MockERC20} from "../mocks/tokens/MockERC20.sol"; -contract LightAccountToMSCATest is Test { - IEntryPoint public entryPoint; - IMSCAEntryPoint public mscaEntryPoint; +contract LightAccountToModularAccountTest is Test { + I4337EntryPoint public entryPoint; + IEntryPoint public maEntryPoint; MockERC20 public token1; @@ -40,13 +40,13 @@ contract LightAccountToMSCATest is Test { LightAccount public lightAccount; MultiOwnerPlugin public multiOwnerPlugin; - address public mscaImpl; + address public maImpl; - event ModularAccountInitialized(IMSCAEntryPoint indexed entryPoint); + event ModularAccountInitialized(IEntryPoint indexed entryPoint); function setUp() public { - entryPoint = IEntryPoint(address(new EntryPoint())); - mscaEntryPoint = IMSCAEntryPoint(address(entryPoint)); + entryPoint = I4337EntryPoint(address(new EntryPoint())); + maEntryPoint = IEntryPoint(address(entryPoint)); (owner,) = makeAddrAndKey("owner"); // set up light account @@ -58,9 +58,9 @@ contract LightAccountToMSCATest is Test { token1 = new MockERC20("T1"); token1.mint(address(lightAccount), 1 ether); - // setup MSCA + // setup modular account multiOwnerPlugin = new MultiOwnerPlugin(); - mscaImpl = address(new UpgradeableModularAccount(mscaEntryPoint)); + maImpl = address(new UpgradeableModularAccount(maEntryPoint)); } function test_verifySetup() public { @@ -74,7 +74,7 @@ contract LightAccountToMSCATest is Test { } function test_upgrade() public { - // setup data for msca upgrade + // setup data for modular account upgrade owners = new address[](1); owners[0] = owner; address[] memory plugins = new address[](1); @@ -84,12 +84,12 @@ contract LightAccountToMSCATest is Test { bytes[] memory pluginInitBytes = new bytes[](1); pluginInitBytes[0] = abi.encode(owners); - // upgrade to msca + // upgrade to modular account vm.startPrank(owner); vm.expectEmit(true, true, true, true); - emit ModularAccountInitialized(mscaEntryPoint); + emit ModularAccountInitialized(maEntryPoint); lightAccount.upgradeToAndCall( - mscaImpl, + maImpl, abi.encodeCall( UpgradeableModularAccount.initialize, (plugins, abi.encode(manifestHashes, pluginInitBytes)) ) diff --git a/test/upgrade/MSCAToMSCA.t.sol b/test/upgrade/MAToMA.t.sol similarity index 68% rename from test/upgrade/MSCAToMSCA.t.sol rename to test/upgrade/MAToMA.t.sol index 6405dc19..0331b674 100644 --- a/test/upgrade/MSCAToMSCA.t.sol +++ b/test/upgrade/MAToMA.t.sol @@ -22,24 +22,24 @@ import {Test} from "forge-std/Test.sol"; import {EntryPoint} from "@eth-infinitism/account-abstraction/core/EntryPoint.sol"; import {UpgradeableModularAccount} from "../../src/account/UpgradeableModularAccount.sol"; -import {MultiOwnerMSCAFactory} from "../../src/factory/MultiOwnerMSCAFactory.sol"; +import {MultiOwnerModularAccountFactory} from "../../src/factory/MultiOwnerModularAccountFactory.sol"; import {IEntryPoint} from "../../src/interfaces/erc4337/IEntryPoint.sol"; import {Call} from "../../src/interfaces/IStandardExecutor.sol"; import {MultiOwnerPlugin} from "../../src/plugins/owner/MultiOwnerPlugin.sol"; import {MockERC20} from "../mocks/tokens/MockERC20.sol"; import {Utils} from "../Utils.sol"; -contract MSCAToMSCATest is Test { +contract MAToMATest is Test { IEntryPoint public entryPoint; MockERC20 public token1; address[] public owners; - UpgradeableModularAccount public msca; + UpgradeableModularAccount public ma; MultiOwnerPlugin public multiOwnerPlugin; - address public mscaImpl1; - address public mscaImpl2; + address public maImpl1; + address public maImpl2; event Upgraded(address indexed implementation); @@ -47,40 +47,39 @@ contract MSCAToMSCATest is Test { owners.push(makeAddr("owner2")); owners.push(makeAddr("owner1")); entryPoint = IEntryPoint(address(new EntryPoint())); - mscaImpl1 = address(new UpgradeableModularAccount(entryPoint)); - mscaImpl2 = address(new UpgradeableModularAccount(entryPoint)); + maImpl1 = address(new UpgradeableModularAccount(entryPoint)); + maImpl2 = address(new UpgradeableModularAccount(entryPoint)); multiOwnerPlugin = new MultiOwnerPlugin(); bytes32 ownerManifestHash = keccak256(abi.encode(multiOwnerPlugin.pluginManifest())); - MultiOwnerMSCAFactory factory = new MultiOwnerMSCAFactory( - address(this), address(multiOwnerPlugin), mscaImpl1, ownerManifestHash, entryPoint + MultiOwnerModularAccountFactory factory = new MultiOwnerModularAccountFactory( + address(this), address(multiOwnerPlugin), maImpl1, ownerManifestHash, entryPoint ); - msca = UpgradeableModularAccount(payable(factory.createAccount(0, owners))); - vm.deal(address(msca), 2 ether); + ma = UpgradeableModularAccount(payable(factory.createAccount(0, owners))); + vm.deal(address(ma), 2 ether); // setup mock tokens token1 = new MockERC20("T1"); - token1.mint(address(msca), 1 ether); + token1.mint(address(ma), 1 ether); } function test_sameStorageSlot_upgradeToAndCall() public { vm.startPrank(owners[0]); - // upgrade to mscaImpl2 + // upgrade to maImpl2 vm.expectEmit(true, true, true, true); - emit Upgraded(mscaImpl2); - msca.upgradeToAndCall(mscaImpl2, ""); + emit Upgraded(maImpl2); + ma.upgradeToAndCall(maImpl2, ""); // verify account storage is the same - (, bytes memory returnData) = address(multiOwnerPlugin).call( - abi.encodeWithSelector(MultiOwnerPlugin.ownersOf.selector, address(msca)) - ); + (, bytes memory returnData) = + address(multiOwnerPlugin).call(abi.encodeWithSelector(MultiOwnerPlugin.ownersOf.selector, address(ma))); address[] memory returnedOwners = abi.decode(returnData, (address[])); assertEq(Utils.reverseAddressArray(returnedOwners), owners); - assertEq(token1.balanceOf(address(msca)), 1 ether); + assertEq(token1.balanceOf(address(ma)), 1 ether); // verify can do basic transaction - msca.execute(owners[0], 1 ether, ""); - assertEq(payable(msca).balance, 1 ether); + ma.execute(owners[0], 1 ether, ""); + assertEq(payable(ma).balance, 1 ether); assertEq(payable(owners[0]).balance, 1 ether); vm.stopPrank(); @@ -91,20 +90,19 @@ contract MSCAToMSCATest is Test { Call[] memory calls = new Call[](2); calls[0] = Call( - address(msca), + address(ma), 0, abi.encodeCall( UpgradeableModularAccount.uninstallPlugin, (address(multiOwnerPlugin), bytes(""), bytes("")) ) ); - calls[1] = - Call(address(msca), 0, abi.encodeCall(UpgradeableModularAccount.upgradeToAndCall, (mscaImpl2, ""))); + calls[1] = Call(address(ma), 0, abi.encodeCall(UpgradeableModularAccount.upgradeToAndCall, (maImpl2, ""))); - emit Upgraded(mscaImpl2); + emit Upgraded(maImpl2); // In practice, you would want upgradeToAndCall to call `initialize`. - // But that fails when we use the same storage slot for both MSCAs + // But that fails when we use the same storage slot for both MAs // This test is still useful in proving that `upgradeToAndCall` succeeded with no installed plugins - msca.executeBatch(calls); + ma.executeBatch(calls); } }