diff --git a/.gasestimates.md b/.gasestimates.md deleted file mode 100644 index 23b5acb1..00000000 --- a/.gasestimates.md +++ /dev/null @@ -1,1155 +0,0 @@ -# Gas Estimates -Generated via `bash utils/inspect.sh`. - ---- - -`forge test --gas-report --no-match-path "test/invariant/**/*"` - | -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 | | | | | -| 3839035 | 19073 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 82935 | 442 | | | | | -| Function Name | min | avg | median | max | # calls | -| createSender | 141050 | 422624 | 422624 | 704198 | 4 | - - -| lib/account-abstraction/contracts/samples/SimpleAccount.sol:SimpleAccount contract | | | | | | -|------------------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| -| Deployment Cost | Deployment Size | | | | | -| 1320562 | 6889 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 1754770 | 9099 | | | | | -| Function Name | min | avg | median | max | # calls | -| createAccount | 137773 | 137773 | 137773 | 137773 | 6 | -| getAddress | 4744 | 4744 | 4744 | 4744 | 4 | - - -| lib/light-account/src/LightAccount.sol:LightAccount contract | | | | | | -|--------------------------------------------------------------|-----------------|--------|--------|--------|---------| -| Deployment Cost | Deployment Size | | | | | -| 1571110 | 8134 | | | | | -| Function Name | min | avg | median | max | # calls | -| initialize | 49729 | 49729 | 49729 | 49729 | 2 | -| upgradeToAndCall | 597097 | 597097 | 597097 | 597097 | 1 | - - -| lib/light-account/src/LightAccountFactory.sol:LightAccountFactory contract | | | | | | -|----------------------------------------------------------------------------|-----------------|--------|--------|--------|---------| -| Deployment Cost | Deployment Size | | | | | -| 2005589 | 10344 | | | | | -| Function Name | min | avg | median | max | # calls | -| createAccount | 161252 | 161252 | 161252 | 161252 | 2 | - - -| lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol:ERC1967Proxy contract | | | | | | -|-------------------------------------------------------------------------------------------|-----------------|--------|--------|---------|---------| -| Deployment Cost | Deployment Size | | | | | -| 70433 | 1164 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 2306253 | 12030 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 4890098 | 24630 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 2921406 | 14619 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 111574 | 589 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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/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/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 | | | | | -| 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 | | | | | -| 49705 | 275 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 82129 | 421 | | | | | -| Function Name | min | avg | median | max | # calls | -| initialize | 496 | 10624 | 10624 | 20753 | 2 | - - -| test/mocks/MockPlugin.sol:MockPlugin contract | | | | | | -|-----------------------------------------------|-----------------|-------|--------|-------|---------| -| Deployment Cost | Deployment Size | | | | | -| 1094762 | 7309 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 1479810 | 7446 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 1787487 | 8956 | | | | | -| Function Name | min | avg | median | max | # calls | -| newPlugin | 1616431 | 1616431 | 1616431 | 1616431 | 1 | - - -| test/mocks/plugins/ChangingManifestPlugin.sol:DidChangeManifestPlugin contract | | | | | | -|--------------------------------------------------------------------------------|-----------------|------|--------|------|---------| -| Deployment Cost | Deployment Size | | | | | -| 476919 | 2410 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 848891 | 4268 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 969016 | 4868 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 577420 | 2912 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 526569 | 2658 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 597639 | 3013 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 448087 | 2266 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 437081 | 2211 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 437081 | 2211 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 447887 | 2265 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 447887 | 2265 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 454493 | 2298 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 454493 | 2298 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 436681 | 2209 | | | | | -| Function Name | min | avg | median | max | # calls | -| pluginManifest | 3980 | 3980 | 3980 | 3980 | 2 | -| supportsInterface | 248 | 265 | 274 | 274 | 3 | - - -| test/mocks/plugins/ReturnDataPluginMocks.sol:RegularResultContract contract | | | | | | -|-----------------------------------------------------------------------------|-----------------|-----|--------|-----|---------| -| Deployment Cost | Deployment Size | | | | | -| 45105 | 252 | | | | | -| Function Name | min | avg | median | max | # calls | -| bar | 180 | 180 | 180 | 180 | 1 | -| foo | 161 | 161 | 161 | 161 | 3 | -| supportsInterface | 116 | 116 | 116 | 116 | 4 | - - -| test/mocks/plugins/ReturnDataPluginMocks.sol:ResultConsumerPlugin contract | | | | | | -|----------------------------------------------------------------------------|-----------------|-------|--------|-------|---------| -| Deployment Cost | Deployment Size | | | | | -| 675827 | 3606 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 465506 | 2353 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 510838 | 2602 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 494738 | 2499 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 525163 | 2651 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 561766 | 3557 | | | | | -| Function Name | min | avg | median | max | # calls | -| 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 | | | | | -| 465706 | 2354 | | | | | -| Function Name | min | avg | median | max | # calls | -| balanceOf | 586 | 1586 | 1586 | 2586 | 4 | -| mint | 22563 | 22563 | 22563 | 22563 | 8 | -| transfer | 31564 | 36611 | 36611 | 41658 | 2 | - - -| 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 32 test suites: 394 tests passed, 0 failed, 0 skipped (394 total tests) diff --git a/.github/workflows/setup-ci/action.yml b/.github/workflows/setup-ci/action.yml new file mode 100644 index 00000000..69543cf9 --- /dev/null +++ b/.github/workflows/setup-ci/action.yml @@ -0,0 +1,29 @@ +name: "Setup CI" +description: "Reusable setup for multiple CI checks" + +runs: + using: "composite" + steps: + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - name: "Install Pnpm" + uses: "pnpm/action-setup@v2" + with: + version: "8" + + - name: "Install Node.js" + uses: "actions/setup-node@v3" + with: + cache: "pnpm" + node-version: "lts/*" + + - name: Install Foundry dependencies + shell: bash + run: forge install + + - name: "Install the Node.js dependencies" + shell: bash + run: "pnpm install" \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 489e4df1..fcf01711 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,4 @@ -name: test +name: Modular Account Test CI on: [pull_request, workflow_dispatch] @@ -12,106 +12,46 @@ jobs: name: Run Linters runs-on: ubuntu-latest steps: - - name: "Check out the repo" - uses: "actions/checkout@v3" + - uses: actions/checkout@v3 with: - submodules: "recursive" - - - name: Install Foundry - uses: foundry-rs/foundry-toolchain@v1 - - - name: "Install Pnpm" - uses: "pnpm/action-setup@v2" - with: - version: "8" - - - name: "Install Node.js" - uses: "actions/setup-node@v3" - with: - cache: "pnpm" - node-version: "lts/*" + submodules: recursive - - name: "Install Node.js dependencies" - run: "pnpm install" + - uses: ./.github/workflows/setup-ci - - run: forge fmt --check + - name: "Check formatting" + run: forge fmt --check - name: "Lint the contracts" run: "pnpm lint" - # check-inspect: - # name: Verify Inspections - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v3 - # - name: Install Foundry - # uses: foundry-rs/foundry-toolchain@v1 - # with: - # version: nightly - - # - run: forge install - # - run: bash ./utils/inspect.sh - - # - run: git status --untracked-files=no --porcelain - # - run: git --no-pager diff - - # - name: Check Inspections - # run: if [[ -n "$(git status --untracked-files=no --porcelain)" ]]; then echo "Inspection difference detected, verify tests are passing and run \`bash ./utils/inspect.sh\` to fix." && exit 1; fi - - test: - name: Run Forge Tests + test-optimized-test-deep: + name: Run Forge Tests (optimized-test-deep) runs-on: ubuntu-latest steps: - - name: "Check out the repo" - uses: actions/checkout@v3 + - uses: actions/checkout@v3 with: submodules: recursive - - name: Install Foundry - uses: foundry-rs/foundry-toolchain@v1 - - - name: Install forge dependencies - run: forge install - - - name: "Install Pnpm" - uses: "pnpm/action-setup@v2" - with: - version: "8" - - - name: "Install Node.js dependencies" - run: "pnpm install" + - uses: ./.github/workflows/setup-ci - name: Build project - run: forge build --sizes + run: FOUNDRY_PROFILE=optimized-build forge build - name: Run tests - run: FOUNDRY_PROFILE=deep forge test -vvv + run: FOUNDRY_PROFILE=optimized-test-deep forge test -vvv - test-lite: - name: Run Forge Tests [lite build] + test-default: + name: Run Forge Tests (default) runs-on: ubuntu-latest steps: - - name: "Check out the repo" - uses: actions/checkout@v3 + - uses: actions/checkout@v3 with: submodules: recursive - - name: Install Foundry - uses: foundry-rs/foundry-toolchain@v1 - - - name: Install forge dependencies - run: forge install - - - name: "Install Pnpm" - uses: "pnpm/action-setup@v2" - with: - version: "8" - - - name: "Install Node.js dependencies" - run: "pnpm install" + - uses: ./.github/workflows/setup-ci - name: Build project - run: FOUNDRY_PROFILE=lite forge build + run: forge build - name: Run tests - run: FOUNDRY_PROFILE=lite forge test -vvv + run: forge test -vvv \ No newline at end of file diff --git a/.gitignore b/.gitignore index e9b2895b..386aebb6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,11 +4,11 @@ out-optimized/ cache/ node_modules/ -# coverage +# Coverage report/ lcov.info -# secret +# env vars .env # deployments @@ -17,4 +17,4 @@ broadcast/**/dry-run/**/* # misc .DS_Store -**/.DS_Store \ No newline at end of file +**/.DS_Store diff --git a/.solhint-script.json b/.solhint-script.json new file mode 100644 index 00000000..307eb64c --- /dev/null +++ b/.solhint-script.json @@ -0,0 +1,21 @@ +{ + "extends": "solhint:recommended", + "rules": { + "func-name-mixedcase": "off", + "immutable-vars-naming": ["error"], + "no-unused-import": ["error"], + "compiler-version": ["error", ">=0.8.19"], + "custom-errors": "off", + "no-console": "off", + "func-visibility": ["error", { "ignoreConstructors": true }], + "max-line-length": ["error", 120], + "max-states-count": ["warn", 30], + "modifier-name-mixedcase": ["error"], + "private-vars-leading-underscore": ["error"], + "no-inline-assembly": "warn", + "avoid-low-level-calls": "off", + "one-contract-per-file": "off", + "no-empty-blocks": "off", + "reason-string": "off" + } +} diff --git a/.solhint-src.json b/.solhint-src.json index 2e61e549..028531e1 100644 --- a/.solhint-src.json +++ b/.solhint-src.json @@ -3,7 +3,7 @@ "rules": { "immutable-vars-naming": ["error"], "no-unused-import": ["error"], - "compiler-version": ["error", ">=0.8.22"], + "compiler-version": ["error", ">=0.8.26"], "func-visibility": ["error", { "ignoreConstructors": true }], "max-line-length": ["error", 120], "func-param-name-mixedcase": ["error"], diff --git a/.solhint-test.json b/.solhint-test.json index 8fbdf703..f5c013c8 100644 --- a/.solhint-test.json +++ b/.solhint-test.json @@ -4,13 +4,17 @@ "func-name-mixedcase": "off", "immutable-vars-naming": ["error"], "no-unused-import": ["error"], - "compiler-version": ["error", ">=0.8.22"], + "compiler-version": ["error", ">=0.8.26"], + "custom-errors": "off", "func-visibility": ["error", { "ignoreConstructors": true }], "max-line-length": ["error", 120], "max-states-count": ["warn", 30], "modifier-name-mixedcase": ["error"], "private-vars-leading-underscore": ["error"], "no-inline-assembly": "off", - "avoid-low-level-calls": "off" + "avoid-low-level-calls": "off", + "one-contract-per-file": "off", + "no-empty-blocks": "off", + "reason-string": ["warn", { "maxLength": 64 }] } } diff --git a/.storagelayout.md b/.storagelayout.md deleted file mode 100644 index b89b6f2d..00000000 --- a/.storagelayout.md +++ /dev/null @@ -1,65 +0,0 @@ -# Storage Layouts -Generated via `bash utils/inspect.sh`. - ---- - -`forge inspect --pretty src/account/AccountExecutor.sol:AccountExecutor storage-layout` -| Name | Type | Slot | Offset | Bytes | Contract | -|------|------|------|--------|-------|----------| - -`forge inspect --pretty src/account/AccountLoupe.sol:AccountLoupe storage-layout` -| Name | Type | Slot | Offset | Bytes | Contract | -|------|------|------|--------|-------|----------| - -`forge inspect --pretty src/account/AccountStorageInitializable.sol:AccountStorageInitializable storage-layout` -| Name | Type | Slot | Offset | Bytes | Contract | -|------|------|------|--------|-------|----------| - -`forge inspect --pretty src/account/AccountStorageV1.sol:AccountStorageV1 storage-layout` -| Name | Type | Slot | Offset | Bytes | Contract | -|------|------|------|--------|-------|----------| - -`forge inspect --pretty src/account/PluginManagerInternals.sol:PluginManagerInternals storage-layout` -| Name | Type | Slot | Offset | Bytes | Contract | -|------|------|------|--------|-------|----------| - -`forge inspect --pretty src/account/UpgradeableModularAccount.sol:UpgradeableModularAccount 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/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 | -|---------|--------------------------------|------|--------|-------|---------------------------------------------------------| -| _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 | -|---------------|--------------------------------|------|--------|-------|-----------------------------------------------------------| -| _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 | -|---------------|-----------------------------|------|--------|-------|-----------------------------------------------------------------------------------------| -| _keyIdCounter | mapping(address => uint256) | 0 | 0 | 32 | src/plugins/session/permissions/SessionKeyPermissionsBase.sol:SessionKeyPermissionsBase | - -`forge inspect --pretty src/plugins/session/permissions/SessionKeyPermissionsLoupe.sol:SessionKeyPermissionsLoupe storage-layout` -| Name | Type | Slot | Offset | Bytes | Contract | -|---------------|-----------------------------|------|--------|-------|-------------------------------------------------------------------------------------------| -| _keyIdCounter | mapping(address => uint256) | 0 | 0 | 32 | src/plugins/session/permissions/SessionKeyPermissionsLoupe.sol:SessionKeyPermissionsLoupe | - diff --git a/.vscode/settings.json b/.vscode/settings.json index 7ac44da1..d597a127 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,7 @@ { "solidity.packageDefaultDependenciesContractsDirectory": "src", "solidity.packageDefaultDependenciesDirectory": "lib", - "solidity.compileUsingRemoteVersion": "v0.8.22", + "solidity.compileUsingRemoteVersion": "v0.8.26+commit.8a97fa7a", "editor.formatOnSave": true, "[solidity]": { "editor.defaultFormatter": "JuanBlanco.solidity" diff --git a/README.md b/README.md index 89413e57..f1a69522 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ Alchemy's Modular Account is a maximally modular, upgradeable smart contract account that is compatible with [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) and [ERC-6900](https://eips.ethereum.org/EIPS/eip-6900). +> :warning: **This branch contains changes that are under development.** To use the latest audited version make sure to use the correct commit. The tagged versions can be found in the [releases](https://github.com/alchemyplatform/modular-account/releases). + ## Overview This repository contains: diff --git a/foundry.toml b/foundry.toml index 92af0449..2656853e 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,14 +1,18 @@ [profile.default] -solc = '0.8.22' -evm_version='paris' -via_ir = true +solc = '0.8.26' +via_ir = false src = 'src' -out = 'out' test = 'test' libs = ['lib'] +out = 'out' optimizer = true -optimizer_runs = 900 -ignored_error_codes = [] +optimizer_runs = 200 +auto_detect_solc = false +bytecode_hash = "none" +auto_detect_remappings = false +fs_permissions = [ + { access = "read", path = "./out-optimized" } +] [fuzz] runs = 500 @@ -19,19 +23,27 @@ fail_on_revert = true depth = 10 [profile.optimized-build] -script = 'src' +via_ir = true test = 'src' +optimizer_runs = 10000 out = 'out-optimized' -[profile.lite] -via_ir = false -optimizer = true -optimizer_runs = 10_000 -ignored_error_codes = [] +[profile.optimized-test] +src = 'test' -[profile.deep.fuzz] +[profile.optimized-test-deep] +src = 'test' + +[profile.optimized-test-deep.fuzz] runs = 10000 +[profile.optimized-test-deep.invariant] +runs = 5000 +depth = 32 + +[profile.deep.fuzz] +runs = 100000 + [profile.deep.invariant] runs = 5000 depth = 32 @@ -39,14 +51,8 @@ depth = 32 [fmt] line_length = 115 wrap_comments = true - -[rpc_endpoints] -mainnet = "${MAINNET_RPC_URL}" -sepolia = "${SEPOLIA_RPC_URL}" -goerli = "${GOERLI_RPC_URL}" - -[etherscan] -mainnet = { key = "${ETHERSCAN_API_KEY}" } -goerli = { key = "${ETHERSCAN_API_KEY}" } +sort_imports = true +number_underscore = "thousands" +int_types = "long" # See more config options https://github.com/foundry-rs/foundry/tree/master/config diff --git a/lib/forge-std b/lib/forge-std index bdea49f9..1714bee7 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit bdea49f9bb3c58c8c35850c3bdc17eaeea756e9a +Subproject commit 1714bee72e286e73f76e320d110e0eaf5c4e649d diff --git a/package.json b/package.json index 2c7a82b9..38c01151 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,17 @@ { "name": "modular-account", "version": "v1.0.1", + "dependencies": { + "modular-account-libs": "github:erc6900/modular-account-libs#v0.7.0" + }, "devDependencies": { "pnpm": "^8.7.5", "solhint": "^3.6.2" }, "scripts": { - "lint": "pnpm lint:src && pnpm lint:test", - "lint:src": "solhint -c .solhint-src.json ./src/**/*.sol", - "lint:test": "solhint -c .solhint-test.json ./test/**/*.sol" - }, - "dependencies": { - "modular-account-libs": "github:erc6900/modular-account-libs#v0.7.0" + "lint": "pnpm lint:src && pnpm lint:test && pnpm lint:script", + "lint:src": "solhint --max-warnings 0 -c .solhint-src.json './src/**/*.sol'", + "lint:test": "solhint --max-warnings 0 -c .solhint-test.json './test/**/*.sol'", + "lint:script": "solhint --max-warnings 0 -c .solhint-script.json './script/**/*.sol'" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 333f7aa8..0509a5ef 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,33 +14,33 @@ importers: devDependencies: pnpm: specifier: ^8.7.5 - version: 8.7.5 + version: 8.15.9 solhint: specifier: ^3.6.2 version: 3.6.2 packages: - '@babel/code-frame@7.22.13': - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.15': - resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.22.13': - resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@solidity-parser/parser@0.16.1': - resolution: {integrity: sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw==} + '@solidity-parser/parser@0.16.2': + resolution: {integrity: sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==} ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -54,8 +54,8 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - antlr4@4.13.1: - resolution: {integrity: sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA==} + antlr4@4.13.2: + resolution: {integrity: sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==} engines: {node: '>=16'} antlr4ts@0.5.0-alpha.4: @@ -134,12 +134,16 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -149,8 +153,8 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} import-fresh@3.3.0: @@ -159,6 +163,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -195,10 +200,6 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} @@ -222,17 +223,25 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - pnpm@8.7.5: - resolution: {integrity: sha512-WI8WZb89Uiq5x2jdz4PcQMG9ovTnXcDCEpoEckPYIT2zD8/+dEhVozPlT7bu3WkBgE0uTARtgyIKAFt+IpW2cQ==} + pnpm@8.15.9: + resolution: {integrity: sha512-SZQ0ydj90aJ5Tr9FUrOyXApjOrzuW7Fee13pDzL0e1E6ypjNXP0AHDHw20VLw4BO3M1XhQHkyik6aBYWa72fgQ==} engines: {node: '>=16.14'} hasBin: true - punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} require-from-string@2.0.2: @@ -243,8 +252,8 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -272,8 +281,8 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - table@6.8.1: - resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + table@6.8.2: + resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} engines: {node: '>=10.0.0'} text-table@0.2.0: @@ -285,25 +294,23 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - snapshots: - '@babel/code-frame@7.22.13': + '@babel/code-frame@7.24.7': dependencies: - '@babel/highlight': 7.22.13 - chalk: 2.4.2 + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 - '@babel/helper-validator-identifier@7.22.15': {} + '@babel/helper-validator-identifier@7.24.7': {} - '@babel/highlight@7.22.13': + '@babel/highlight@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.22.15 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.1.0 - '@solidity-parser/parser@0.16.1': + '@solidity-parser/parser@0.16.2': dependencies: antlr4ts: 0.5.0-alpha.4 @@ -314,12 +321,12 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.12.0: + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 ansi-regex@5.0.1: {} @@ -331,7 +338,7 @@ snapshots: dependencies: color-convert: 2.0.1 - antlr4@4.13.1: {} + antlr4@4.13.2: {} antlr4ts@0.5.0-alpha.4: {} @@ -395,6 +402,8 @@ snapshots: fast-json-stable-stringify@2.1.0: {} + fast-uri@3.0.1: {} + fs.realpath@1.0.0: {} glob@8.1.0: @@ -409,7 +418,7 @@ snapshots: has-flag@4.0.0: {} - ignore@5.2.4: {} + ignore@5.3.2: {} import-fresh@3.3.0: dependencies: @@ -445,10 +454,6 @@ snapshots: lodash@4.17.21: {} - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 @@ -465,26 +470,29 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 path-type@4.0.0: {} + picocolors@1.1.0: {} + pluralize@8.0.0: {} - pnpm@8.7.5: {} + pnpm@8.15.9: {} + + prettier@2.8.8: + optional: true - punycode@2.3.0: {} + punycode@2.3.1: {} require-from-string@2.0.2: {} resolve-from@4.0.0: {} - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 + semver@7.6.3: {} slice-ansi@4.0.0: dependencies: @@ -494,23 +502,25 @@ snapshots: solhint@3.6.2: dependencies: - '@solidity-parser/parser': 0.16.1 + '@solidity-parser/parser': 0.16.2 ajv: 6.12.6 - antlr4: 4.13.1 + antlr4: 4.13.2 ast-parents: 0.0.1 chalk: 4.1.2 commander: 10.0.1 cosmiconfig: 8.3.6 fast-diff: 1.3.0 glob: 8.1.0 - ignore: 5.2.4 + ignore: 5.3.2 js-yaml: 4.1.0 lodash: 4.17.21 pluralize: 8.0.0 - semver: 7.5.4 + semver: 7.6.3 strip-ansi: 6.0.1 - table: 6.8.1 + table: 6.8.2 text-table: 0.2.0 + optionalDependencies: + prettier: 2.8.8 transitivePeerDependencies: - typescript @@ -532,9 +542,9 @@ snapshots: dependencies: has-flag: 4.0.0 - table@6.8.1: + table@6.8.2: dependencies: - ajv: 8.12.0 + ajv: 8.17.1 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -544,8 +554,6 @@ snapshots: uri-js@4.4.1: dependencies: - punycode: 2.3.0 + punycode: 2.3.1 wrappy@1.0.2: {} - - yallist@4.0.0: {} diff --git a/remappings.txt b/remappings.txt index b82d3304..c7a519ad 100644 --- a/remappings.txt +++ b/remappings.txt @@ -2,5 +2,6 @@ ds-test/=lib/forge-std/lib/ds-test/src/ forge-std/=lib/forge-std/src/ modular-account-libs/=node_modules/modular-account-libs/src/ @eth-infinitism/account-abstraction/=lib/account-abstraction/contracts/ +account-abstraction/=lib/account-abstraction/contracts/ @openzeppelin/=lib/openzeppelin-contracts/ @alchemy/light-account/=lib/light-account/ diff --git a/utils/inspect.sh b/utils/inspect.sh deleted file mode 100644 index 5f3e862c..00000000 --- a/utils/inspect.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - -# Generate inspection files in MD format for all primary contracts in src. - -CONTRACT_FILES=($(find src -iname '*.sol' | sort)) - -rm .storagelayout.md -rm .gasestimates.md - -echo "# Storage Layouts" >> .storagelayout.md -echo "Generated via \`bash utils/inspect.sh\`." >> .storagelayout.md -echo "" >> .storagelayout.md -echo "---" >> .storagelayout.md -echo "" >> .storagelayout.md - -echo "# Gas Estimates" >> .gasestimates.md -echo "Generated via \`bash utils/inspect.sh\`." >> .gasestimates.md -echo "" >> .gasestimates.md -echo "---" >> .gasestimates.md -echo "" >> .gasestimates.md -echo "\`forge test --gas-report --no-match-path \"test/invariant/**/*\"\`" >> .gasestimates.md -# Sed strings to strip color data and only start printing after the first '|' character, to exclude previous contents (compilation, test results, etc) -forge test --gas-report --no-match-path "test/invariant/**/*" | sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2};?)?)?[mGK]//g" | sed -nr '/\|/,$p' >> .gasestimates.md - -for index in ${!CONTRACT_FILES[*]}; do - # echo "${CONTRACT_NAMES[$index]} is in ${CONTRACT_FILES[$index]}" - CONTRACT_NAME=$(basename -s ".sol" ${CONTRACT_FILES[${index}]}) - # echo ${CONTRACT_NAME} - # If file does not contain a contract named the same as the filename, discard from inspection (e.g. libraries). - if ! grep -q "contract ${CONTRACT_NAME}" ${CONTRACT_FILES[$index]}; then - # echo "Skipping ${CONTRACT_NAME}" - continue - fi - - # Show command names in files - echo "\`forge inspect --pretty ${CONTRACT_FILES[$index]}:${CONTRACT_NAME} storage-layout\`" >> .storagelayout.md - forge inspect --pretty ${CONTRACT_FILES[$index]}:${CONTRACT_NAME} storage-layout >> .storagelayout.md - echo "" >> .storagelayout.md - - # echo "\`forge inspect ${CONTRACT_FILES[$index]}:${CONTRACT_NAME} gasestimates\`" >> .gasestimates.md - # echo "\`\`\`json" >> .gasestimates.md - # forge inspect ${CONTRACT_FILES[$index]}:${CONTRACT_NAME} gasestimates >> .gasestimates.md - # echo "\`\`\`" >> .gasestimates.md - # echo "" >> .gasestimates.md - -done