diff --git a/.gas-snapshot b/.gas-snapshot index 5ac6b2e3..d69b53c9 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,36 +1,53 @@ -ERC7484SecurityPolicyPluginTest:testShouldAllowModuleInstallationIfEnoughAttestationsExists() (gas: 784704) -ERC7484SecurityPolicyPluginTest:testShouldNotAllowModuleInstallationIfAttestationsAreRevoked() (gas: 822102) -ERC7484SecurityPolicyPluginTest:testShouldNotAllowModuleInstallationIfInsufficientAttestationsExists() (gas: 622252) -ERC7484SecurityPolicyPluginTest:testShouldNotAllowModuleInstallationIfNotConfigured() (gas: 777891) +ERC7484SecurityPolicyPluginTest:testShouldAllowModuleInstallationIfEnoughAttestationsExists() (gas: 784827) +ERC7484SecurityPolicyPluginTest:testShouldNotAllowModuleInstallationIfAttestationsAreRevoked() (gas: 822272) +ERC7484SecurityPolicyPluginTest:testShouldNotAllowModuleInstallationIfInsufficientAttestationsExists() (gas: 622413) +ERC7484SecurityPolicyPluginTest:testShouldNotAllowModuleInstallationIfNotConfigured() (gas: 778052) ERC7484SecurityPolicyPluginTest:testShouldSetConfiguration() (gas: 233126) -SABasicsTest:testDeploySAWithDefaultModule() (gas: 306337) -SecurityPolicyManagerPluginModuleInstallationTest:testModuleInstallation() (gas: 277278) -SecurityPolicyManagerPluginModuleInstallationTest:testModuleInstallationWithSetup() (gas: 304839) -SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationIfExecTxFromModuleFailsWithSetup() (gas: 117782) -SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationIfExecTxFromModuleInstallationFails() (gas: 241349) -SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationIfModuleInstallationFails() (gas: 252651) -SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationIfModuleInstallationFailsWithSetup() (gas: 129718) -SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationIfModuleIsNotAContract() (gas: 116980) -SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationIfSecurityPolicyIsNotSatisifedOnInstalledPlugin() (gas: 145722) -SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationWithSetupIfModuleIsNotAContract() (gas: 130819) -SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationWithSetupIfSecurityPolicyIsNotSatisifedOnInstalledPlugin() (gas: 223574) -SecurityPolicyManagerPluginPluginManagementTest:testAddAndRemoveAllPolicies() (gas: 417180) -SecurityPolicyManagerPluginPluginManagementTest:testDisableSingleSecurityPolicyPlugin() (gas: 280216) -SecurityPolicyManagerPluginPluginManagementTest:testDisableSingleSecurityPolicyPluginsRange() (gas: 293036) -SecurityPolicyManagerPluginPluginManagementTest:testEnableMultipleSecurityPolicyPlugins() (gas: 310496) -SecurityPolicyManagerPluginPluginManagementTest:testEnableSingleSecurityPolicyPlugin() (gas: 165563) -SecurityPolicyManagerPluginPluginManagementTest:testSecurityPoliciesQueryPaginated() (gas: 290097) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingAlreadyDisabledPolicySingleDisable() (gas: 285991) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingAlreadyEnabledPolicySingleDisable() (gas: 131053) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingRangeWithInvalidPointer() (gas: 310156) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingRangeWithInvalidRange() (gas: 319688) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingSentinelAddressPolicySingleDisable() (gas: 309014) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingWithInvalidPointerSingleDisable() (gas: 310291) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingZeroAddressPolicySingleDisable() (gas: 309101) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowEmptyEnableList() (gas: 131359) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowEnablingAlreadyEnabledPolicySMultiEnable() (gas: 220629) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowEnablingAlreadyEnabledPolicySingleEnable() (gas: 217968) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowPolicyAdditionWithSentinelAddressMulti() (gas: 135358) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowPolicyAdditionWithSentinelAddressSingle() (gas: 131458) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowPolicyAdditionWithZeroAddressMulti() (gas: 135313) -SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowPolicyAdditionWithZeroAddressSingle() (gas: 131545) \ No newline at end of file +SABasicsTest:testByteString() (gas: 6862) +SABasicsTest:testDeploySAWithDefaultModule() (gas: 306363) +SecurityPolicyManagerPluginModuleInstallationTest:testModuleInstallation() (gas: 277397) +SecurityPolicyManagerPluginModuleInstallationTest:testModuleInstallationWithSetup() (gas: 305006) +SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationIfExecTxFromModuleFailsWithSetup() (gas: 117953) +SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationIfExecTxFromModuleInstallationFails() (gas: 241402) +SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationIfModuleInstallationFails() (gas: 252706) +SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationIfModuleInstallationFailsWithSetup() (gas: 129764) +SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationIfModuleIsNotAContract() (gas: 117035) +SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationIfSecurityPolicyIsNotSatisifedOnInstalledPlugin() (gas: 145777) +SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationWithSetupIfModuleIsNotAContract() (gas: 130865) +SecurityPolicyManagerPluginModuleInstallationTest:testShouldRevertModuleInstallationWithSetupIfSecurityPolicyIsNotSatisifedOnInstalledPlugin() (gas: 223741) +SecurityPolicyManagerPluginPluginManagementTest:testAddAndRemoveAllPolicies() (gas: 417331) +SecurityPolicyManagerPluginPluginManagementTest:testDisableSingleSecurityPolicyPlugin() (gas: 280310) +SecurityPolicyManagerPluginPluginManagementTest:testDisableSingleSecurityPolicyPluginsRange() (gas: 293148) +SecurityPolicyManagerPluginPluginManagementTest:testEnableMultipleSecurityPolicyPlugins() (gas: 310590) +SecurityPolicyManagerPluginPluginManagementTest:testEnableSingleSecurityPolicyPlugin() (gas: 165610) +SecurityPolicyManagerPluginPluginManagementTest:testSecurityPoliciesQueryPaginated() (gas: 290144) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingAlreadyDisabledPolicySingleDisable() (gas: 286085) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingAlreadyEnabledPolicySingleDisable() (gas: 131100) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingRangeWithInvalidPointer() (gas: 310250) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingRangeWithInvalidRange() (gas: 319782) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingSentinelAddressPolicySingleDisable() (gas: 309108) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingWithInvalidPointerSingleDisable() (gas: 310385) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowDisablingZeroAddressPolicySingleDisable() (gas: 309195) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowEmptyEnableList() (gas: 131406) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowEnablingAlreadyEnabledPolicySMultiEnable() (gas: 220723) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowEnablingAlreadyEnabledPolicySingleEnable() (gas: 218062) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowPolicyAdditionWithSentinelAddressMulti() (gas: 135405) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowPolicyAdditionWithSentinelAddressSingle() (gas: 131505) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowPolicyAdditionWithZeroAddressMulti() (gas: 135360) +SecurityPolicyManagerPluginPluginManagementTest:testShouldNotAllowPolicyAdditionWithZeroAddressSingle() (gas: 131592) +SessionKeyManagerHybridTest:testDisableSession() (gas: 212267) +SessionKeyManagerHybridTest:testEnableAndUseSession() (gas: 210218) +SessionKeyManagerHybridTest:testEnableAndUseSessionMultiSessionEnable() (gas: 270949) +SessionKeyManagerHybridTest:testEnableAndUseSessionPostCaching() (gas: 248116) +SessionKeyManagerHybridTest:testShouldNotSupportERC1271SignatureValidation(uint256) (runs: 256, μ: 12209, ~: 12209) +SessionKeyManagerHybridTest:testShouldNotSupportERC1271SignatureValidationUnsafe(uint256) (runs: 256, μ: 12168, ~: 12168) +SessionKeyManagerHybridTest:testShouldNotValidateTransactionFromNonEnabledSession() (gas: 128277) +SessionKeyManagerHybridTest:testShouldNotValidateTransactionSignedFromInvalidSessionSigner() (gas: 220635) +SessionKeyManagerHybridTest:testShouldNotValidateTransactionSignedFromInvalidSessionSignerPostCaching() (gas: 282171) +SessionKeyManagerStatefulTest:testDisableSession() (gas: 166433) +SessionKeyManagerStatefulTest:testEnableSession() (gas: 166209) +SessionKeyManagerStatefulTest:testShouldNotSupportERC1271SignatureValidation(uint256) (runs: 256, μ: 12179, ~: 12179) +SessionKeyManagerStatefulTest:testShouldNotSupportERC1271SignatureValidationUnsafe(uint256) (runs: 256, μ: 12090, ~: 12090) +SessionKeyManagerStatefulTest:testShouldNotValidateTransactionFromNonEnabledSession() (gas: 127982) +SessionKeyManagerStatefulTest:testShouldNotValidateTransactionSignedFromInvalidSessionSigner() (gas: 241782) +SessionKeyManagerStatefulTest:testShouldProcessTransactionFromSessionKey() (gas: 216092) \ No newline at end of file diff --git a/lcov.info b/lcov.info index 93da39ec..250bb561 100644 --- a/lcov.info +++ b/lcov.info @@ -4,8 +4,8 @@ FN:36,BaseSmartAccount.nonce FNDA:0,BaseSmartAccount.nonce DA:39,0 FN:53,BaseSmartAccount._payPrefund -FNDA:56,BaseSmartAccount._payPrefund -DA:54,56 +FNDA:119,BaseSmartAccount._payPrefund +DA:54,119 BRDA:54,0,0,- BRDA:54,0,1,- DA:55,0 @@ -19,9 +19,9 @@ end_of_record TN: SF:contracts/smart-account/Proxy.sol FN:20,Proxy. -FNDA:147,Proxy. -DA:21,147 -DA:23,147 +FNDA:372,Proxy. +DA:21,372 +DA:23,372 FNF:1 FNH:1 LF:2 @@ -32,37 +32,37 @@ end_of_record TN: SF:contracts/smart-account/SmartAccount.sol FN:79,SmartAccount.init -FNDA:1,SmartAccount.init -DA:90,1 -DA:91,1 +FNDA:55,SmartAccount.init +DA:90,55 +DA:91,55 BRDA:89,0,0,- -BRDA:89,0,1,1 +BRDA:89,0,1,55 DA:92,0 -DA:93,1 -DA:94,1 +DA:93,55 +DA:94,55 FN:98,SmartAccount.execute -FNDA:55,SmartAccount.execute -DA:103,55 +FNDA:116,SmartAccount.execute +DA:103,116 FN:107,SmartAccount.executeBatch FNDA:0,SmartAccount.executeBatch DA:112,0 FN:116,SmartAccount.validateUserOp -FNDA:57,SmartAccount.validateUserOp -DA:126,57 +FNDA:124,SmartAccount.validateUserOp +DA:126,124 BRDA:126,1,0,- -BRDA:126,1,1,57 +BRDA:126,1,1,124 DA:127,0 -DA:130,57 -DA:134,57 -BRDA:134,2,0,1 -BRDA:134,2,1,56 -DA:135,57 +DA:130,124 +DA:134,124 +BRDA:134,2,0,5 +BRDA:134,2,1,119 +DA:135,124 DA:138,0 -DA:141,56 +DA:141,119 FN:145,SmartAccount.enableModule -FNDA:1,SmartAccount.enableModule -DA:148,1 -DA:149,1 +FNDA:35,SmartAccount.enableModule +DA:148,35 +DA:149,35 FN:153,SmartAccount.setupAndEnableModule FNDA:7,SmartAccount.setupAndEnableModule DA:162,7 @@ -92,8 +92,8 @@ DA:203,0 DA:206,0 FN:212,SmartAccount.execute_ncC FNDA:0,SmartAccount.execute_ncC -DA:217,55 -DA:218,55 +DA:217,116 +DA:218,116 FN:222,SmartAccount.executeBatch_y6U FNDA:0,SmartAccount.executeBatch_y6U DA:227,0 @@ -119,18 +119,18 @@ DA:269,0 DA:270,0 FN:274,SmartAccount.entryPoint FNDA:0,SmartAccount.entryPoint -DA:281,120 +DA:281,282 FN:285,SmartAccount.getDeposit FNDA:0,SmartAccount.getDeposit DA:286,0 FN:290,SmartAccount.isValidSignature -FNDA:0,SmartAccount.isValidSignature -DA:294,0 -DA:298,0 +FNDA:9,SmartAccount.isValidSignature +DA:294,9 +DA:298,9 BRDA:298,6,0,- -BRDA:298,6,1,- -DA:299,0 -DA:300,0 +BRDA:298,6,1,9 +DA:299,9 +DA:300,9 DA:305,0 FN:310,SmartAccount.isValidSignatureUnsafe FNDA:0,SmartAccount.isValidSignatureUnsafe @@ -142,27 +142,27 @@ DA:319,0 DA:320,0 DA:325,0 FN:336,SmartAccount._call -FNDA:55,SmartAccount._call -DA:349,55 +FNDA:116,SmartAccount._call +DA:349,116 BRDA:349,8,0,25 FN:361,SmartAccount._requireFromEntryPointOrSelf -FNDA:8,SmartAccount._requireFromEntryPointOrSelf -DA:363,8 +FNDA:42,SmartAccount._requireFromEntryPointOrSelf +DA:363,42 BRDA:362,9,0,- -BRDA:362,9,1,8 +BRDA:362,9,1,42 DA:365,0 FN:375,SmartAccount._requireFromEntryPoint -FNDA:55,SmartAccount._requireFromEntryPoint -DA:376,55 +FNDA:116,SmartAccount._requireFromEntryPoint +DA:376,116 BRDA:376,10,0,- -BRDA:376,10,1,55 +BRDA:376,10,1,116 DA:377,0 FNF:22 -FNH:8 +FNH:9 LF:61 -LH:20 +LH:24 BRF:21 -BRH:7 +BRH:8 end_of_record TN: SF:contracts/smart-account/base/Executor.sol @@ -195,15 +195,15 @@ DA:42,0 BRDA:42,1,0,- FN:53,FallbackManager.getFallbackHandler FNDA:0,FallbackManager.getFallbackHandler -DA:60,1 +DA:60,55 FN:69,FallbackManager._setFallbackHandler -FNDA:1,FallbackManager._setFallbackHandler -DA:70,1 +FNDA:55,FallbackManager._setFallbackHandler +DA:70,55 BRDA:70,2,0,- -BRDA:70,2,1,1 -DA:71,1 -DA:74,1 -DA:77,1 +BRDA:70,2,1,55 +DA:71,55 +DA:74,55 +DA:77,55 FNF:3 FNH:1 LF:8 @@ -264,17 +264,17 @@ FN:166,ModuleManager.isModuleEnabled FNDA:15,ModuleManager.isModuleEnabled DA:169,15 FN:178,ModuleManager._enableModule -FNDA:8,ModuleManager._enableModule -DA:180,8 +FNDA:42,ModuleManager._enableModule +DA:180,42 BRDA:180,3,0,1 -BRDA:180,3,1,7 +BRDA:180,3,1,41 DA:181,1 -DA:184,7 +DA:184,41 BRDA:184,4,0,- -BRDA:184,4,1,7 -DA:186,7 -DA:187,7 -DA:189,7 +BRDA:184,4,1,41 +DA:186,41 +DA:187,41 +DA:189,41 FN:196,ModuleManager._setupAndEnableModule FNDA:7,ModuleManager._setupAndEnableModule DA:200,7 @@ -308,24 +308,24 @@ DA:258,7 DA:259,7 DA:261,3 FN:270,ModuleManager._initialSetupModules -FNDA:1,ModuleManager._initialSetupModules -DA:274,1 -DA:281,1 -DA:282,1 +FNDA:55,ModuleManager._initialSetupModules +DA:274,55 +DA:281,55 +DA:282,55 BRDA:280,9,0,- -BRDA:280,9,1,1 +BRDA:280,9,1,55 DA:284,0 -DA:287,1 -DA:288,1 -DA:289,1 +DA:287,55 +DA:288,55 +DA:289,55 FN:300,ModuleManager._setupModule -FNDA:8,ModuleManager._setupModule -DA:304,8 +FNDA:62,ModuleManager._setupModule +DA:304,62 BRDA:304,10,0,- -BRDA:304,10,1,8 -DA:317,8 +BRDA:304,10,1,62 +DA:317,62 BRDA:317,11,0,- -DA:320,8 +DA:320,62 FNF:13 FNH:8 LF:64 @@ -384,19 +384,19 @@ DA:47,0 DA:50,0 DA:53,0 FN:57,SmartAccountFactory.deployCounterFactualAccount -FNDA:1,SmartAccountFactory.deployCounterFactualAccount -DA:63,1 -DA:67,1 -DA:71,1 -DA:77,1 -DA:84,1 +FNDA:55,SmartAccountFactory.deployCounterFactualAccount +DA:63,55 +DA:67,55 +DA:71,55 +DA:77,55 +DA:84,55 BRDA:84,0,0,- -BRDA:84,0,1,1 -DA:86,1 -DA:100,1 +BRDA:84,0,1,55 +DA:86,55 +DA:100,55 BRDA:100,1,0,- -DA:103,1 -DA:105,1 +DA:103,55 +DA:105,55 FN:109,SmartAccountFactory.deployAccount FNDA:0,SmartAccountFactory.deployAccount DA:113,0 @@ -414,9 +414,9 @@ FN:154,SmartAccountFactory.accountCreationCode FNDA:0,SmartAccountFactory.accountCreationCode DA:155,0 FN:164,SmartAccountFactory._getInitializer -FNDA:1,SmartAccountFactory._getInitializer -DA:168,1 -DA:169,1 +FNDA:55,SmartAccountFactory._getInitializer +DA:168,55 +DA:169,55 FNF:5 FNH:2 LF:25 @@ -471,16 +471,16 @@ end_of_record TN: SF:contracts/smart-account/modules/EcdsaOwnershipRegistryModule.sol FN:38,EcdsaOwnershipRegistryModule.initForSmartAccount -FNDA:7,EcdsaOwnershipRegistryModule.initForSmartAccount -DA:41,7 +FNDA:61,EcdsaOwnershipRegistryModule.initForSmartAccount +DA:41,61 BRDA:41,0,0,- -BRDA:41,0,1,7 +BRDA:41,0,1,61 DA:42,0 -DA:44,7 +DA:44,61 BRDA:44,1,0,- -BRDA:44,1,1,7 -DA:45,7 -DA:46,7 +BRDA:44,1,1,61 +DA:45,61 +DA:46,61 FN:50,EcdsaOwnershipRegistryModule.transferOwnership FNDA:0,EcdsaOwnershipRegistryModule.transferOwnership DA:51,0 @@ -494,31 +494,31 @@ FN:57,EcdsaOwnershipRegistryModule.renounceOwnership FNDA:0,EcdsaOwnershipRegistryModule.renounceOwnership DA:58,0 FN:62,EcdsaOwnershipRegistryModule.getOwner -FNDA:1,EcdsaOwnershipRegistryModule.getOwner -DA:65,1 -DA:66,1 +FNDA:10,EcdsaOwnershipRegistryModule.getOwner +DA:65,10 +DA:66,10 BRDA:66,4,0,- -BRDA:66,4,1,1 +BRDA:66,4,1,10 DA:67,0 -DA:69,1 +DA:69,10 FN:73,EcdsaOwnershipRegistryModule.validateUserOp -FNDA:54,EcdsaOwnershipRegistryModule.validateUserOp -DA:77,54 -DA:81,54 -BRDA:81,5,0,54 +FNDA:109,EcdsaOwnershipRegistryModule.validateUserOp +DA:77,109 +DA:81,109 +BRDA:81,5,0,109 BRDA:81,5,1,- -DA:82,54 +DA:82,109 DA:84,0 FN:96,EcdsaOwnershipRegistryModule.isValidSignature -FNDA:0,EcdsaOwnershipRegistryModule.isValidSignature -DA:100,0 -DA:101,0 +FNDA:9,EcdsaOwnershipRegistryModule.isValidSignature +DA:100,9 +DA:101,9 FN:105,EcdsaOwnershipRegistryModule.isValidSignatureForAddress FNDA:0,EcdsaOwnershipRegistryModule.isValidSignatureForAddress -DA:111,0 -BRDA:110,6,0,- +DA:111,9 +BRDA:110,6,0,9 BRDA:110,6,1,- -DA:123,0 +DA:123,9 DA:125,0 FN:129,EcdsaOwnershipRegistryModule.isValidSignatureUnsafe FNDA:0,EcdsaOwnershipRegistryModule.isValidSignatureUnsafe @@ -537,25 +537,25 @@ DA:161,0 DA:162,0 DA:163,0 FN:177,EcdsaOwnershipRegistryModule._verifySignature -FNDA:54,EcdsaOwnershipRegistryModule._verifySignature -DA:182,54 -DA:183,54 +FNDA:118,EcdsaOwnershipRegistryModule._verifySignature +DA:182,118 +DA:183,118 BRDA:183,8,0,- -BRDA:183,8,1,54 +BRDA:183,8,1,118 DA:184,0 -DA:186,54 +DA:186,118 BRDA:186,9,0,- -BRDA:186,9,1,54 -DA:187,54 -DA:190,54 +BRDA:186,9,1,118 +DA:187,118 +DA:190,118 BRDA:190,10,0,- -BRDA:190,10,1,54 +BRDA:190,10,1,118 DA:191,0 -DA:193,54 -DA:194,54 -BRDA:194,11,0,54 +DA:193,118 +DA:194,118 +BRDA:194,11,0,118 BRDA:194,11,1,- -DA:195,54 +DA:195,118 DA:197,0 FN:204,EcdsaOwnershipRegistryModule._isSmartContract FNDA:0,EcdsaOwnershipRegistryModule._isSmartContract @@ -563,11 +563,11 @@ DA:205,0 DA:207,0 DA:209,0 FNF:12 -FNH:4 +FNH:5 LF:44 -LH:18 +LH:22 BRF:24 -BRH:8 +BRH:9 end_of_record TN: SF:contracts/smart-account/modules/MultichainECDSAValidator.sol @@ -600,9 +600,9 @@ end_of_record TN: SF:contracts/smart-account/modules/SecurityPolicies/ERC7484SecurityPolicy.sol FN:23,ERC7484SecurityPolicyPlugin.setConfiguration -FNDA:2,ERC7484SecurityPolicyPlugin.setConfiguration -DA:26,2 -DA:27,2 +FNDA:7,ERC7484SecurityPolicyPlugin.setConfiguration +DA:26,7 +DA:27,7 FN:31,ERC7484SecurityPolicyPlugin.validateSecurityPolicy FNDA:4,ERC7484SecurityPolicyPlugin.validateSecurityPolicy DA:35,4 @@ -669,45 +669,45 @@ BRDA:198,3,1,1 DA:199,1 DA:202,1 FN:208,SecurityPolicyManagerPlugin.enableSecurityPolicy -FNDA:6,SecurityPolicyManagerPlugin.enableSecurityPolicy -DA:212,6 -DA:213,5 +FNDA:11,SecurityPolicyManagerPlugin.enableSecurityPolicy +DA:212,11 +DA:213,10 BRDA:211,4,0,2 -BRDA:211,4,1,4 +BRDA:211,4,1,9 DA:215,2 -DA:218,4 -DA:223,4 +DA:218,9 +DA:223,9 BRDA:223,5,0,1 -BRDA:223,5,1,3 +BRDA:223,5,1,8 DA:224,1 -DA:227,3 -DA:228,3 -DA:231,3 -DA:233,3 +DA:227,8 +DA:228,8 +DA:231,8 +DA:233,8 FN:237,SecurityPolicyManagerPlugin.enableSecurityPolicies -FNDA:17,SecurityPolicyManagerPlugin.enableSecurityPolicies -DA:240,17 -DA:245,17 -DA:247,17 +FNDA:27,SecurityPolicyManagerPlugin.enableSecurityPolicies +DA:240,27 +DA:245,27 +DA:247,27 BRDA:247,6,0,1 -BRDA:247,6,1,16 +BRDA:247,6,1,26 DA:248,1 -DA:251,16 -DA:253,16 -DA:254,50 -DA:256,50 +DA:251,26 +DA:253,26 +DA:254,90 +DA:256,90 BRDA:256,7,0,2 -BRDA:256,7,1,48 +BRDA:256,7,1,88 DA:257,2 -DA:260,48 +DA:260,88 BRDA:260,8,0,1 -BRDA:260,8,1,47 +BRDA:260,8,1,87 DA:261,1 -DA:264,47 -DA:267,47 -DA:269,47 -DA:272,47 -DA:276,13 +DA:264,87 +DA:267,87 +DA:269,87 +DA:272,87 +DA:276,23 FN:280,SecurityPolicyManagerPlugin.disableSecurityPolicy FNDA:6,SecurityPolicyManagerPlugin.disableSecurityPolicy DA:285,6 @@ -797,6 +797,66 @@ BRF:41 BRH:37 end_of_record TN: +SF:contracts/smart-account/modules/SessionKeyManagers/SessionKeyManagerHybrid.sol +FN:26,SessionKeyManagerHybrid.validateUserOp +FNDA:12,SessionKeyManagerHybrid.validateUserOp +DA:32,12 +DA:37,12 +DA:39,12 +DA:42,12 +BRDA:42,0,0,- +BRDA:42,0,1,6 +DA:43,9 +DA:53,9 +DA:68,9 +DA:79,6 +DA:92,3 +DA:96,3 +DA:98,3 +DA:100,2 +DA:104,2 +FN:120,SessionKeyManagerHybrid.validateSessionKeySessionEnableTransaction +FNDA:0,SessionKeyManagerHybrid.validateSessionKeySessionEnableTransaction +DA:131,9 +DA:133,9 +BRDA:132,1,0,- +BRDA:132,1,1,9 +DA:138,0 +DA:148,9 +DA:149,9 +DA:150,9 +DA:155,9 +DA:157,9 +DA:162,9 +DA:170,9 +BRDA:170,2,0,1 +BRDA:170,2,1,8 +DA:171,1 +DA:174,8 +BRDA:174,3,0,1 +BRDA:174,3,1,7 +DA:175,1 +DA:178,7 +DA:185,7 +BRDA:185,4,0,1 +BRDA:185,4,1,6 +DA:186,1 +DA:190,6 +DA:196,6 +DA:197,6 +FN:201,SessionKeyManagerHybrid.validateSessionKeyPreEnabled +FNDA:0,SessionKeyManagerHybrid.validateSessionKeyPreEnabled +DA:205,3 +BRDA:205,5,0,1 +BRDA:205,5,1,2 +FNF:3 +FNH:1 +LF:33 +LH:32 +BRF:12 +BRH:10 +end_of_record +TN: SF:contracts/smart-account/modules/SessionKeyManagers/SessionKeyManagerStateful.sol FN:23,SessionKeyManagerStateful.validateUserOp FNDA:3,SessionKeyManagerStateful.validateUserOp @@ -825,40 +885,40 @@ end_of_record TN: SF:contracts/smart-account/modules/SessionKeyManagers/StatefulSessionKeyManagerBase.sol FN:32,StatefulSessionKeyManagerBase.disableSession -FNDA:1,StatefulSessionKeyManagerBase.disableSession -DA:33,1 -DA:34,1 +FNDA:2,StatefulSessionKeyManagerBase.disableSession +DA:33,2 +DA:34,2 FN:38,StatefulSessionKeyManagerBase.enabledSessionsData -FNDA:2,StatefulSessionKeyManagerBase.enabledSessionsData -DA:42,2 +FNDA:9,StatefulSessionKeyManagerBase.enabledSessionsData +DA:42,9 FN:46,StatefulSessionKeyManagerBase.sessionDataDigest -FNDA:5,StatefulSessionKeyManagerBase.sessionDataDigest -DA:49,9 -DA:50,9 +FNDA:32,StatefulSessionKeyManagerBase.sessionDataDigest +DA:49,36 +DA:50,36 FN:61,StatefulSessionKeyManagerBase.isValidSignature -FNDA:256,StatefulSessionKeyManagerBase.isValidSignature -DA:65,256 +FNDA:512,StatefulSessionKeyManagerBase.isValidSignature +DA:65,512 FN:69,StatefulSessionKeyManagerBase.isValidSignatureUnsafe -FNDA:256,StatefulSessionKeyManagerBase.isValidSignatureUnsafe -DA:73,256 +FNDA:512,StatefulSessionKeyManagerBase.isValidSignatureUnsafe +DA:73,512 FN:76,StatefulSessionKeyManagerBase._sessionDataDigestUnpacked -FNDA:0,StatefulSessionKeyManagerBase._sessionDataDigestUnpacked -DA:82,0 -DA:83,0 +FNDA:7,StatefulSessionKeyManagerBase._sessionDataDigestUnpacked +DA:82,7 +DA:83,7 FNF:6 -FNH:5 +FNH:6 LF:9 -LH:7 +LH:9 BRF:0 BRH:0 end_of_record TN: SF:contracts/smart-account/test/mocks/MockSessionValidationModule.sol FN:9,MockSessionValidationModule.validateSessionUserOp -FNDA:2,MockSessionValidationModule.validateSessionUserOp -DA:16,2 -DA:17,2 -DA:18,2 +FNDA:10,MockSessionValidationModule.validateSessionUserOp +DA:16,10 +DA:17,10 +DA:18,10 FN:22,MockSessionValidationModule.validateSessionParams FNDA:0,MockSessionValidationModule.validateSessionParams DA:29,0 @@ -901,117 +961,115 @@ BRH:0 end_of_record TN: SF:test/foundry/base/SATestBase.sol -FN:74,SATestBase.getNextPrivateKey +FN:75,SATestBase.getNextPrivateKey FNDA:0,SATestBase.getNextPrivateKey -DA:75,0 -FN:78,SATestBase.setUp +DA:76,0 +FN:79,SATestBase.setUp FNDA:0,SATestBase.setUp -DA:80,0 DA:81,0 DA:82,0 +DA:83,0 DA:86,0 -DA:90,0 -DA:91,0 +DA:88,0 +DA:92,0 DA:93,0 -DA:94,0 +DA:95,0 DA:96,0 -DA:97,0 -DA:102,0 -DA:103,0 +DA:98,0 +DA:99,0 +DA:104,0 DA:105,0 -DA:106,0 +DA:107,0 DA:108,0 -DA:109,0 +DA:110,0 DA:111,0 -DA:112,0 +DA:113,0 DA:114,0 -DA:115,0 +DA:116,0 DA:117,0 -DA:118,0 -DA:121,0 -DA:122,0 -DA:125,0 -DA:126,0 -DA:129,0 -DA:130,0 +DA:119,0 +DA:120,0 +DA:123,0 +DA:124,0 +DA:127,0 +DA:128,0 +DA:131,0 DA:132,0 -DA:133,0 +DA:134,0 DA:135,0 -DA:139,0 -DA:142,0 -DA:143,0 -FN:150,SATestBase.getSmartAccountWithModule +DA:137,0 +DA:141,0 +DA:144,0 +DA:145,0 +FN:152,SATestBase.getSmartAccountWithModule FNDA:0,SATestBase.getSmartAccountWithModule -DA:156,0 -DA:165,0 -FN:168,SATestBase.getSmartAccountExecuteCalldata +DA:158,0 +DA:167,0 +FN:170,SATestBase.getSmartAccountExecuteCalldata FNDA:0,SATestBase.getSmartAccountExecuteCalldata -DA:173,0 -FN:176,SATestBase.getUserOperationEventData +DA:175,0 +FN:178,SATestBase.getUserOperationEventData FNDA:0,SATestBase.getUserOperationEventData -DA:179,0 -DA:180,0 -BRDA:180,0,0,- -BRDA:180,0,1,- DA:181,0 +DA:182,0 +BRDA:182,0,0,- +BRDA:182,0,1,- DA:183,0 -DA:184,0 DA:185,0 DA:186,0 -DA:192,0 +DA:187,0 +DA:188,0 DA:194,0 -FN:197,SATestBase.getUserOperationRevertReasonEventData +DA:196,0 +FN:199,SATestBase.getUserOperationRevertReasonEventData FNDA:0,SATestBase.getUserOperationRevertReasonEventData -DA:200,0 -DA:201,0 -BRDA:201,1,0,- -BRDA:201,1,1,- DA:202,0 +DA:203,0 +BRDA:203,1,0,- +BRDA:203,1,1,- DA:204,0 -DA:205,0 DA:206,0 -DA:210,0 +DA:207,0 +DA:208,0 DA:212,0 -FN:215,SATestBase.arraifyOps +DA:214,0 +FN:217,SATestBase.arraifyOps FNDA:0,SATestBase.arraifyOps -DA:218,0 -DA:219,0 DA:220,0 -FN:223,SATestBase.arraifyOps +DA:221,0 +DA:222,0 +FN:225,SATestBase.arraifyOps FNDA:0,SATestBase.arraifyOps -DA:227,0 -DA:228,0 DA:229,0 DA:230,0 -FN:233,SATestBase.arraifyOps +DA:231,0 +DA:232,0 +FN:235,SATestBase.arraifyOps FNDA:0,SATestBase.arraifyOps -DA:238,0 -DA:239,0 DA:240,0 DA:241,0 DA:242,0 -FN:246,SATestBase.getEcdsaOwnershipRegistryModuleSetupData +DA:243,0 +DA:244,0 +FN:248,SATestBase.getEcdsaOwnershipRegistryModuleSetupData FNDA:0,SATestBase.getEcdsaOwnershipRegistryModuleSetupData -DA:249,0 -DA:250,0 -FN:257,SATestBase.makeEcdsaModuleUserOp +DA:251,0 +DA:252,0 +FN:259,SATestBase.makeEcdsaModuleUserOp FNDA:0,SATestBase.makeEcdsaModuleUserOp -DA:263,0 -DA:278,0 -DA:279,0 -DA:283,0 +DA:265,0 +DA:280,0 +DA:281,0 +DA:285,0 FNF:11 FNH:0 -LF:73 +LF:74 LH:0 BRF:4 BRH:0 end_of_record TN: SF:test/foundry/module/SecurityPolicy/SecurityPolicyManagerPlugin.ModuleInstallation.t.sol -FN:42,TestSetupContractBlacklistReturn.initForSmartAccount -FNDA:0,TestSetupContractBlacklistReturn.initForSmartAccount -DA:43,0 FN:26,TestSecurityPolicyPlugin.validateSecurityPolicy FNDA:18,TestSecurityPolicyPlugin.validateSecurityPolicy DA:30,18 @@ -1022,6 +1080,9 @@ DA:32,2 FN:36,TestSecurityPolicyPlugin.setShouldRevert FNDA:2,TestSecurityPolicyPlugin.setShouldRevert DA:37,2 +FN:42,TestSetupContractBlacklistReturn.initForSmartAccount +FNDA:0,TestSetupContractBlacklistReturn.initForSmartAccount +DA:43,0 FNF:3 FNH:2 LF:5 @@ -1044,10 +1105,10 @@ BRF:2 BRH:0 end_of_record TN: -SF:test/foundry/module/SessionKeyManager/SessionKeyManagerStateful.t.sol -FN:401,Stub.emitMessage -FNDA:1,Stub.emitMessage -DA:402,1 +SF:test/foundry/module/SessionKeyManager/SessionKeyManagerHybrid.t.sol +FN:861,Stub.emitMessage +FNDA:7,Stub.emitMessage +DA:862,7 FNF:1 FNH:1 LF:1 @@ -1055,3 +1116,15 @@ LH:1 BRF:0 BRH:0 end_of_record +TN: +SF:test/foundry/module/SessionKeyManager/SessionKeyManagerStateful.t.sol +FN:401,Stub.emitMessage +FNDA:0,Stub.emitMessage +DA:402,0 +FNF:1 +FNH:0 +LF:1 +LH:0 +BRF:0 +BRH:0 +end_of_record diff --git a/test/foundry/module/SessionKeyManager/SessionKeyManagerHybrid.t.sol b/test/foundry/module/SessionKeyManager/SessionKeyManagerHybrid.t.sol index c94d4599..6401442a 100644 --- a/test/foundry/module/SessionKeyManager/SessionKeyManagerHybrid.t.sol +++ b/test/foundry/module/SessionKeyManager/SessionKeyManagerHybrid.t.sol @@ -336,6 +336,65 @@ contract SessionKeyManagerHybridTest is SATestBase { } function testShouldNotValidateTransactionFromNonEnabledSession() public { + // Generate Session Data + uint64[] memory chainIds = new uint64[](5); + SessionKeyManagerHybrid.SessionData[] + memory sessionDatas = new SessionKeyManagerHybrid.SessionData[](5); + + for (uint256 i = 0; i < chainIds.length; ++i) { + sessionDatas[i] = IStatefulSessionKeyManagerBase.SessionData({ + validUntil: uint48(block.timestamp + i), + validAfter: uint48(block.timestamp), + sessionValidationModule: address(mockSessionValidationModule), + sessionKeyData: abi.encodePacked(bob.addr) + }); + + chainIds[i] = uint64(block.chainid); + } + + ( + bytes memory sessionEnableData, + bytes memory sessionEnableSignature + ) = makeSessionEnableData(chainIds, sessionDatas, sa); + + // Use session not in session enable data + sessionDatas[0].validUntil *= 2; + UserOperation memory op = makeEnableAndUseSessionUserOp( + getSmartAccountExecuteCalldata( + address(stub), + 0, + abi.encodeCall( + stub.emitMessage, + ("shouldProcessTransactionFromSessionKey") + ) + ), + sa, + 0, + sessionKeyManagerHybrid, + sessionDatas[0], + bob, + 0, + sessionEnableData, + sessionEnableSignature + ); + + try entryPoint.handleOps(arraifyOps(op), owner.addr) { + fail("should have reverted"); + } catch (bytes memory reason) { + assertEq( + reason, + abi.encodeWithSelector( + IEntryPoint.FailedOp.selector, + 0, + "AA23 reverted: SessionKeyDataHashMismatch" + ) + ); + } + } + + function testShouldNotValidateTransactionFromNonEnabledSessionWithPostCacheFlow() + public + { SessionKeyManagerHybrid.SessionData memory sessionData = IStatefulSessionKeyManagerBase.SessionData({ validUntil: 0, @@ -434,6 +493,117 @@ contract SessionKeyManagerHybridTest is SATestBase { } } + function testShouldNotValidateTransactionWithInvalidSessionIndex() public { + SessionKeyManagerHybrid.SessionData + memory sessionData = IStatefulSessionKeyManagerBase.SessionData({ + validUntil: 0, + validAfter: 0, + sessionValidationModule: address(mockSessionValidationModule), + sessionKeyData: abi.encodePacked(bob.addr) + }); + + // Generate Session Data + uint64[] memory chainIds = new uint64[](1); + chainIds[0] = uint64(block.chainid); + + SessionKeyManagerHybrid.SessionData[] + memory sessionDatas = new SessionKeyManagerHybrid.SessionData[](1); + sessionDatas[0] = sessionData; + + ( + bytes memory sessionEnableData, + bytes memory sessionEnableSignature + ) = makeSessionEnableData(chainIds, sessionDatas, sa); + + // Enable and Use session + UserOperation memory op = makeEnableAndUseSessionUserOp( + getSmartAccountExecuteCalldata( + address(stub), + 0, + abi.encodeCall( + stub.emitMessage, + ("shouldProcessTransactionFromSessionKey") + ) + ), + sa, + 0, + sessionKeyManagerHybrid, + sessionData, + bob, + chainIds.length, + sessionEnableData, + sessionEnableSignature + ); + try entryPoint.handleOps(arraifyOps(op), owner.addr) { + fail("should have reverted"); + } catch (bytes memory reason) { + assertEq( + reason, + abi.encodeWithSelector( + IEntryPoint.FailedOp.selector, + 0, + "AA23 reverted: SessionKeyIndexInvalid" + ) + ); + } + } + + function testShouldNotValidateTransactionWithInvalidChainId() public { + SessionKeyManagerHybrid.SessionData + memory sessionData = IStatefulSessionKeyManagerBase.SessionData({ + validUntil: 0, + validAfter: 0, + sessionValidationModule: address(mockSessionValidationModule), + sessionKeyData: abi.encodePacked(bob.addr) + }); + + // Generate Session Data + uint64[] memory chainIds = new uint64[](1); + chainIds[0] = uint64(block.chainid); + chainIds[0] += 1; + + SessionKeyManagerHybrid.SessionData[] + memory sessionDatas = new SessionKeyManagerHybrid.SessionData[](1); + sessionDatas[0] = sessionData; + + ( + bytes memory sessionEnableData, + bytes memory sessionEnableSignature + ) = makeSessionEnableData(chainIds, sessionDatas, sa); + + // Enable and Use session + UserOperation memory op = makeEnableAndUseSessionUserOp( + getSmartAccountExecuteCalldata( + address(stub), + 0, + abi.encodeCall( + stub.emitMessage, + ("shouldProcessTransactionFromSessionKey") + ) + ), + sa, + 0, + sessionKeyManagerHybrid, + sessionData, + bob, + 0, + sessionEnableData, + sessionEnableSignature + ); + try entryPoint.handleOps(arraifyOps(op), owner.addr) { + fail("should have reverted"); + } catch (bytes memory reason) { + assertEq( + reason, + abi.encodeWithSelector( + IEntryPoint.FailedOp.selector, + 0, + "AA23 reverted: SessionChainIdMismatch" + ) + ); + } + } + function testShouldNotValidateTransactionSignedFromInvalidSessionSignerPostCaching() public { @@ -619,13 +789,16 @@ contract SessionKeyManagerHybridTest is SATestBase { signature: bytes("") }); - // Sign the UserOp - bytes32 userOpHash = entryPoint.getUserOpHash(op); - (uint8 v, bytes32 r, bytes32 s) = vm.sign( - _sessionSigner.privateKey, - ECDSA.toEthSignedMessageHash(userOpHash) - ); - bytes memory sessionKeySignature = abi.encodePacked(r, s, v); + bytes memory sessionKeySignature; + { + // Sign the UserOp + bytes32 userOpHash = entryPoint.getUserOpHash(op); + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + _sessionSigner.privateKey, + ECDSA.toEthSignedMessageHash(userOpHash) + ); + sessionKeySignature = abi.encodePacked(r, s, v); + } // Generate Module Signature bytes memory moduleSignature = abi.encode(